The RECORD-OVERFLOW concept represents comprehensive space management and sophisticated overflow handling capabilities within COBOL programming environments, providing advanced record space allocation mechanisms for file processing operations, enhanced capacity management features, and intelligent overflow detection workflows that enable precise space utilization control, complex storage management operations, and systematic overflow handling architectures. This concept embodies modern storage management principles by supporting comprehensive space allocation strategies, enabling sophisticated overflow detection protocols, and facilitating precise capacity management requirements while maintaining data integrity, ensuring efficient space usage, and enabling flexible storage architectures across enterprise applications requiring exact space control, overflow management capabilities, and reliable storage processing throughout sophisticated business storage scenarios and file management workflows.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131*> Variable-length record with overflow handling FD VARIABLE-DATA-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 100 TO 2000 CHARACTERS DEPENDING ON ACTUAL-RECORD-LENGTH DATA RECORD IS VARIABLE-DATA-RECORD. 01 VARIABLE-DATA-RECORD. 05 RECORD-HEADER. 10 RECORD-TYPE PIC X(8). 10 RECORD-LENGTH PIC 9(4). 10 OVERFLOW-FLAG PIC X. 10 CONTINUATION-COUNT PIC 9(2). 05 RECORD-DATA PIC X(1985). *> Overflow control structure 01 WS-OVERFLOW-CONTROL. 05 WS-MAX-RECORD-SIZE PIC 9(4) VALUE 2000. 05 WS-CURRENT-SIZE PIC 9(4). 05 WS-REMAINING-SPACE PIC 9(4). 05 WS-OVERFLOW-NEEDED PIC X VALUE 'N'. 05 WS-OVERFLOW-COUNT PIC 9(4) VALUE 0. *> Record overflow detection PROCEDURE DIVISION. CHECK-RECORD-OVERFLOW. COMPUTE WS-CURRENT-SIZE = LENGTH OF VARIABLE-DATA-RECORD IF WS-CURRENT-SIZE > WS-MAX-RECORD-SIZE MOVE 'Y' TO WS-OVERFLOW-NEEDED ADD 1 TO WS-OVERFLOW-COUNT PERFORM HANDLE-RECORD-OVERFLOW ELSE COMPUTE WS-REMAINING-SPACE = WS-MAX-RECORD-SIZE - WS-CURRENT-SIZE DISPLAY "Space available: " WS-REMAINING-SPACE " bytes" END-IF. HANDLE-RECORD-OVERFLOW. DISPLAY "Record overflow detected - size: " WS-CURRENT-SIZE EVALUATE TRUE WHEN WS-CURRENT-SIZE > WS-MAX-RECORD-SIZE * 2 PERFORM HANDLE-MASSIVE-OVERFLOW WHEN WS-CURRENT-SIZE > WS-MAX-RECORD-SIZE * 1.5 PERFORM HANDLE-LARGE-OVERFLOW WHEN OTHER PERFORM HANDLE-STANDARD-OVERFLOW END-EVALUATE. *> File space overflow management FD OVERFLOW-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 500 CHARACTERS DATA RECORD IS OVERFLOW-RECORD. 01 OVERFLOW-RECORD. 05 OVERFLOW-HEADER. 10 ORIGINAL-RECORD-ID PIC X(16). 10 OVERFLOW-SEQUENCE PIC 9(3). 10 TOTAL-OVERFLOWS PIC 9(3). 05 OVERFLOW-DATA PIC X(481). *> Database table overflow handling 01 WS-TABLE-OVERFLOW-MANAGEMENT. 05 WS-TABLE-CAPACITY PIC 9(8) VALUE 100000. 05 WS-CURRENT-RECORDS PIC 9(8). 05 WS-OVERFLOW-THRESHOLD PIC 9(2) VALUE 85. *> 85% threshold 05 WS-OVERFLOW-STATUS PIC X(12). CHECK-TABLE-OVERFLOW. COMPUTE WS-CURRENT-RECORDS = (WS-CURRENT-RECORDS * 100) / WS-TABLE-CAPACITY IF WS-CURRENT-RECORDS >= WS-OVERFLOW-THRESHOLD MOVE "OVERFLOW-RISK" TO WS-OVERFLOW-STATUS PERFORM INITIATE-OVERFLOW-PROCEDURES ELSE MOVE "NORMAL" TO WS-OVERFLOW-STATUS END-IF. *> Dynamic record expansion with overflow 01 WS-DYNAMIC-RECORD. 05 WS-BASE-RECORD PIC X(500). 05 WS-EXPANSION-AREA PIC X(1500). 05 WS-EXPANSION-USED PIC 9(4) VALUE 0. 05 WS-EXPANSION-AVAILABLE PIC 9(4) VALUE 1500. EXPAND-RECORD-DYNAMICALLY. USING EXPANSION-SIZE IF EXPANSION-SIZE > WS-EXPANSION-AVAILABLE PERFORM HANDLE-EXPANSION-OVERFLOW WITH EXPANSION-SIZE ELSE ADD EXPANSION-SIZE TO WS-EXPANSION-USED SUBTRACT EXPANSION-SIZE FROM WS-EXPANSION-AVAILABLE DISPLAY "Record expanded by " EXPANSION-SIZE " bytes" END-IF. HANDLE-EXPANSION-OVERFLOW. USING REQUIRED-SIZE DISPLAY "Expansion overflow - required: " REQUIRED-SIZE DISPLAY "Available: " WS-EXPANSION-AVAILABLE *> Split record across multiple storage areas PERFORM ALLOCATE-OVERFLOW-STORAGE PERFORM SPLIT-RECORD-DATA PERFORM UPDATE-OVERFLOW-LINKS. *> Report generation with overflow handling 01 WS-REPORT-OVERFLOW. 05 WS-PAGE-SIZE PIC 9(2) VALUE 55. 05 WS-CURRENT-LINE PIC 9(2) VALUE 0. 05 WS-LINES-REMAINING PIC 9(2). 05 WS-OVERFLOW-PAGES PIC 9(4) VALUE 0. CHECK-REPORT-OVERFLOW. USING LINES-NEEDED COMPUTE WS-LINES-REMAINING = WS-PAGE-SIZE - WS-CURRENT-LINE IF LINES-NEEDED > WS-LINES-REMAINING PERFORM HANDLE-PAGE-OVERFLOW ADD 1 TO WS-OVERFLOW-PAGES END-IF. HANDLE-PAGE-OVERFLOW. DISPLAY "Page overflow - starting new page" PERFORM START-NEW-PAGE MOVE 0 TO WS-CURRENT-LINE.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561IDENTIFICATION DIVISION. PROGRAM-ID. RECORD-OVERFLOW-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Overflow management control structures 01 WS-OVERFLOW-MANAGER. 05 WS-OVERFLOW-DETECTION. 10 WS-OVERFLOW-THRESHOLD PIC 9(4) VALUE 1800. 10 WS-CURRENT-USAGE PIC 9(4). 10 WS-PEAK-USAGE PIC 9(4) VALUE 0. 10 WS-OVERFLOW-COUNT PIC 9(6) VALUE 0. 05 WS-OVERFLOW-STRATEGIES. 10 WS-STRATEGY-TYPE PIC X(12). 10 WS-COMPRESSION-RATE PIC 9(2)V99. 10 WS-SPLIT-THRESHOLD PIC 9(4) VALUE 1000. 10 WS-ARCHIVE-ENABLED PIC X VALUE 'Y'. *> Record size management 01 WS-RECORD-SIZE-TRACKING. 05 WS-SIZE-CATEGORIES OCCURS 10 TIMES. 10 WS-SIZE-RANGE PIC X(20). 10 WS-SIZE-COUNT PIC 9(6) VALUE 0. 10 WS-SIZE-TOTAL PIC 9(10) VALUE 0. 10 WS-OVERFLOW-INCIDENTS PIC 9(4) VALUE 0. *> Dynamic storage areas 01 WS-STORAGE-AREAS. 05 WS-PRIMARY-STORAGE. 10 WS-PRIMARY-CAPACITY PIC 9(8) VALUE 1000000. 10 WS-PRIMARY-USED PIC 9(8) VALUE 0. 10 WS-PRIMARY-AVAILABLE PIC 9(8). 05 WS-OVERFLOW-STORAGE. 10 WS-OVERFLOW-CAPACITY PIC 9(8) VALUE 500000. 10 WS-OVERFLOW-USED PIC 9(8) VALUE 0. 10 WS-OVERFLOW-AVAILABLE PIC 9(8). 05 WS-ARCHIVE-STORAGE. 10 WS-ARCHIVE-CAPACITY PIC 9(10) VALUE 10000000. 10 WS-ARCHIVE-USED PIC 9(8) VALUE 0. 10 WS-ARCHIVE-AVAILABLE PIC 9(10). *> Business data structures with overflow handling 01 WS-CUSTOMER-DATA-OVERFLOW. 05 WS-CUSTOMER-RECORDS OCCURS 1000 TIMES. 10 WS-CUSTOMER-ID PIC X(8). 10 WS-RECORD-SIZE PIC 9(4). 10 WS-OVERFLOW-FLAG PIC X. 10 WS-OVERFLOW-LOCATION PIC X(16). 10 WS-DATA-COMPRESSED PIC X. 05 WS-CUSTOMER-COUNT PIC 9(4) VALUE 0. *> Transaction overflow management 01 WS-TRANSACTION-OVERFLOW. 05 WS-TRANSACTION-BUFFER. 10 WS-BUFFER-SIZE PIC 9(6) VALUE 50000. 10 WS-BUFFER-USED PIC 9(6) VALUE 0. 10 WS-BUFFER-REMAINING PIC 9(6). 05 WS-OVERFLOW-TRANSACTIONS. 10 WS-OVERFLOW-BUFFER-SIZE PIC 9(6) VALUE 25000. 10 WS-OVERFLOW-BUFFER-USED PIC 9(6) VALUE 0. 10 WS-TRANSACTIONS-DEFERRED PIC 9(4) VALUE 0. *> Performance and monitoring 01 WS-OVERFLOW-PERFORMANCE. 05 WS-PERFORMANCE-METRICS. 10 WS-TOTAL-OPERATIONS PIC 9(8) VALUE 0. 10 WS-OVERFLOW-OPERATIONS PIC 9(6) VALUE 0. 10 WS-COMPRESSION-SAVES PIC 9(8) VALUE 0. 10 WS-SPLIT-OPERATIONS PIC 9(4) VALUE 0. 05 WS-TIMING-DATA. 10 WS-TOTAL-TIME PIC 9(8) VALUE 0. 10 WS-OVERFLOW-TIME PIC 9(6) VALUE 0. 10 WS-AVERAGE-TIME PIC 9(4)V99. *> Error and exception tracking 01 WS-OVERFLOW-ERRORS. 05 WS-ERROR-TRACKING OCCURS 50 TIMES. 10 WS-ERROR-TYPE PIC X(16). 10 WS-ERROR-TIME PIC X(26). 10 WS-ERROR-SIZE PIC 9(6). 10 WS-ERROR-DETAILS PIC X(100). 05 WS-ERROR-COUNT PIC 9(3) VALUE 0. PROCEDURE DIVISION. MAIN-OVERFLOW-DEMO. DISPLAY "=== COBOL RECORD-OVERFLOW DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-OVERFLOW-SYSTEM PERFORM DEMONSTRATE-SIZE-OVERFLOW PERFORM DEMONSTRATE-STORAGE-OVERFLOW PERFORM DEMONSTRATE-DYNAMIC-EXPANSION PERFORM DEMONSTRATE-COMPRESSION-OVERFLOW PERFORM DEMONSTRATE-SPLIT-RECORD-OVERFLOW PERFORM DEMONSTRATE-TRANSACTION-OVERFLOW PERFORM DISPLAY-OVERFLOW-SUMMARY DISPLAY "=== RECORD-OVERFLOW DEMONSTRATION COMPLETE ===" STOP RUN. INITIALIZE-OVERFLOW-SYSTEM. DISPLAY "=== INITIALIZING OVERFLOW MANAGEMENT SYSTEM ===" DISPLAY SPACES DISPLAY "Setting up overflow detection and handling..." *> Initialize storage capacities COMPUTE WS-PRIMARY-AVAILABLE = WS-PRIMARY-CAPACITY - WS-PRIMARY-USED COMPUTE WS-OVERFLOW-AVAILABLE = WS-OVERFLOW-CAPACITY - WS-OVERFLOW-USED COMPUTE WS-ARCHIVE-AVAILABLE = WS-ARCHIVE-CAPACITY - WS-ARCHIVE-USED *> Setup size categories MOVE "0-200 bytes" TO WS-SIZE-RANGE(1) MOVE "201-500 bytes" TO WS-SIZE-RANGE(2) MOVE "501-1000 bytes" TO WS-SIZE-RANGE(3) MOVE "1001-1500 bytes" TO WS-SIZE-RANGE(4) MOVE "1501-2000 bytes" TO WS-SIZE-RANGE(5) MOVE ">2000 bytes" TO WS-SIZE-RANGE(6) *> Initialize overflow strategies MOVE "COMPRESSION" TO WS-STRATEGY-TYPE MOVE 65.5 TO WS-COMPRESSION-RATE DISPLAY " ✓ Storage areas initialized" DISPLAY " Primary: " WS-PRIMARY-AVAILABLE " bytes available" DISPLAY " Overflow: " WS-OVERFLOW-AVAILABLE " bytes available" DISPLAY " Archive: " WS-ARCHIVE-AVAILABLE " bytes available" DISPLAY " ✓ Size categories configured" DISPLAY " ✓ Overflow strategies enabled" DISPLAY SPACES. DEMONSTRATE-SIZE-OVERFLOW. DISPLAY "=== RECORD SIZE OVERFLOW DEMONSTRATION ===" DISPLAY SPACES DISPLAY "Testing various record size overflow scenarios..." *> Test small record (no overflow) MOVE 150 TO WS-CURRENT-USAGE PERFORM CHECK-SIZE-OVERFLOW WITH "Small customer record" *> Test medium record (no overflow) MOVE 800 TO WS-CURRENT-USAGE PERFORM CHECK-SIZE-OVERFLOW WITH "Medium transaction record" *> Test large record (approaching overflow) MOVE 1750 TO WS-CURRENT-USAGE PERFORM CHECK-SIZE-OVERFLOW WITH "Large product record" *> Test overflow record MOVE 2500 TO WS-CURRENT-USAGE PERFORM CHECK-SIZE-OVERFLOW WITH "Overflow customer history" *> Test massive overflow record MOVE 5000 TO WS-CURRENT-USAGE PERFORM CHECK-SIZE-OVERFLOW WITH "Massive audit trail record" DISPLAY SPACES. CHECK-SIZE-OVERFLOW. USING RECORD-DESCRIPTION DISPLAY " Checking " RECORD-DESCRIPTION ":" DISPLAY " Size: " WS-CURRENT-USAGE " bytes" *> Update peak usage tracking IF WS-CURRENT-USAGE > WS-PEAK-USAGE MOVE WS-CURRENT-USAGE TO WS-PEAK-USAGE END-IF *> Categorize by size PERFORM CATEGORIZE-RECORD-SIZE *> Check for overflow condition IF WS-CURRENT-USAGE > WS-OVERFLOW-THRESHOLD ADD 1 TO WS-OVERFLOW-COUNT DISPLAY " ⚠️ OVERFLOW DETECTED - Threshold: " WS-OVERFLOW-THRESHOLD PERFORM HANDLE-SIZE-OVERFLOW ELSE COMPUTE WS-BUFFER-REMAINING = WS-OVERFLOW-THRESHOLD - WS-CURRENT-USAGE DISPLAY " ✅ Normal size - " WS-BUFFER-REMAINING " bytes to threshold" END-IF DISPLAY " ". CATEGORIZE-RECORD-SIZE. EVALUATE WS-CURRENT-USAGE WHEN 0 THRU 200 ADD 1 TO WS-SIZE-COUNT(1) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(1) WHEN 201 THRU 500 ADD 1 TO WS-SIZE-COUNT(2) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(2) WHEN 501 THRU 1000 ADD 1 TO WS-SIZE-COUNT(3) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(3) WHEN 1001 THRU 1500 ADD 1 TO WS-SIZE-COUNT(4) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(4) WHEN 1501 THRU 2000 ADD 1 TO WS-SIZE-COUNT(5) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(5) WHEN OTHER ADD 1 TO WS-SIZE-COUNT(6) ADD WS-CURRENT-USAGE TO WS-SIZE-TOTAL(6) ADD 1 TO WS-OVERFLOW-INCIDENTS(6) END-EVALUATE. HANDLE-SIZE-OVERFLOW. DISPLAY " 🔧 Applying overflow handling strategy..." EVALUATE WS-STRATEGY-TYPE WHEN "COMPRESSION" PERFORM APPLY-COMPRESSION-STRATEGY WHEN "SPLIT" PERFORM APPLY-SPLIT-STRATEGY WHEN "ARCHIVE" PERFORM APPLY-ARCHIVE-STRATEGY WHEN OTHER PERFORM APPLY-DEFAULT-STRATEGY END-EVALUATE. DEMONSTRATE-STORAGE-OVERFLOW. DISPLAY "=== STORAGE AREA OVERFLOW DEMONSTRATION ===" DISPLAY SPACES DISPLAY "Testing storage capacity overflow scenarios..." *> Simulate primary storage usage MOVE 850000 TO WS-PRIMARY-USED COMPUTE WS-PRIMARY-AVAILABLE = WS-PRIMARY-CAPACITY - WS-PRIMARY-USED DISPLAY " Primary storage status:" DISPLAY " Used: " WS-PRIMARY-USED " bytes" DISPLAY " Available: " WS-PRIMARY-AVAILABLE " bytes" *> Test allocation that would overflow primary PERFORM TEST-STORAGE-ALLOCATION WITH 200000 *> Test allocation that fits in primary PERFORM TEST-STORAGE-ALLOCATION WITH 100000 *> Test massive allocation requiring archive PERFORM TEST-STORAGE-ALLOCATION WITH 600000 DISPLAY SPACES. TEST-STORAGE-ALLOCATION. USING ALLOCATION-SIZE DISPLAY " Testing allocation of " ALLOCATION-SIZE " bytes:" IF ALLOCATION-SIZE <= WS-PRIMARY-AVAILABLE DISPLAY " ✅ Allocation fits in primary storage" ADD ALLOCATION-SIZE TO WS-PRIMARY-USED SUBTRACT ALLOCATION-SIZE FROM WS-PRIMARY-AVAILABLE ELSE DISPLAY " ⚠️ Primary storage overflow detected" PERFORM HANDLE-STORAGE-OVERFLOW WITH ALLOCATION-SIZE END-IF. HANDLE-STORAGE-OVERFLOW. USING REQUIRED-SIZE DISPLAY " 🔧 Handling storage overflow for " REQUIRED-SIZE " bytes" *> Try overflow storage first IF REQUIRED-SIZE <= WS-OVERFLOW-AVAILABLE DISPLAY " 📦 Allocating to overflow storage" ADD REQUIRED-SIZE TO WS-OVERFLOW-USED SUBTRACT REQUIRED-SIZE FROM WS-OVERFLOW-AVAILABLE ELSE DISPLAY " 📚 Moving to archive storage" PERFORM ARCHIVE-ALLOCATION WITH REQUIRED-SIZE END-IF ADD 1 TO WS-OVERFLOW-OPERATIONS. DEMONSTRATE-DYNAMIC-EXPANSION. DISPLAY "=== DYNAMIC RECORD EXPANSION DEMONSTRATION ===" DISPLAY SPACES DISPLAY "Testing dynamic record expansion with overflow..." *> Initialize a customer record for expansion MOVE "CUST0001" TO WS-CUSTOMER-ID(1) MOVE 500 TO WS-RECORD-SIZE(1) MOVE 'N' TO WS-OVERFLOW-FLAG(1) MOVE SPACES TO WS-OVERFLOW-LOCATION(1) MOVE 'N' TO WS-DATA-COMPRESSED(1) MOVE 1 TO WS-CUSTOMER-COUNT DISPLAY " Initial customer record:" DISPLAY " ID: " WS-CUSTOMER-ID(1) DISPLAY " Size: " WS-RECORD-SIZE(1) " bytes" *> Test various expansion scenarios PERFORM EXPAND-CUSTOMER-RECORD WITH 1 300 *> Small expansion PERFORM EXPAND-CUSTOMER-RECORD WITH 1 800 *> Medium expansion PERFORM EXPAND-CUSTOMER-RECORD WITH 1 1200 *> Large expansion (overflow) DISPLAY SPACES. EXPAND-CUSTOMER-RECORD. USING CUSTOMER-INDEX EXPANSION-SIZE COMPUTE WS-CURRENT-USAGE = WS-RECORD-SIZE(CUSTOMER-INDEX) + EXPANSION-SIZE DISPLAY " Expanding customer " WS-CUSTOMER-ID(CUSTOMER-INDEX) ":" DISPLAY " Current size: " WS-RECORD-SIZE(CUSTOMER-INDEX) DISPLAY " Expansion: " EXPANSION-SIZE DISPLAY " New size: " WS-CURRENT-USAGE IF WS-CURRENT-USAGE > WS-OVERFLOW-THRESHOLD DISPLAY " ⚠️ Expansion causes overflow" MOVE 'Y' TO WS-OVERFLOW-FLAG(CUSTOMER-INDEX) PERFORM HANDLE-CUSTOMER-OVERFLOW WITH CUSTOMER-INDEX ELSE MOVE WS-CURRENT-USAGE TO WS-RECORD-SIZE(CUSTOMER-INDEX) DISPLAY " ✅ Expansion successful" END-IF. HANDLE-CUSTOMER-OVERFLOW. USING CUSTOMER-INDEX DISPLAY " 🔧 Handling customer record overflow..." *> Apply compression first IF WS-DATA-COMPRESSED(CUSTOMER-INDEX) = 'N' PERFORM COMPRESS-CUSTOMER-DATA WITH CUSTOMER-INDEX END-IF *> If still overflow, split record IF WS-RECORD-SIZE(CUSTOMER-INDEX) > WS-OVERFLOW-THRESHOLD PERFORM SPLIT-CUSTOMER-RECORD WITH CUSTOMER-INDEX END-IF. COMPRESS-CUSTOMER-DATA. USING CUSTOMER-INDEX COMPUTE WS-CURRENT-USAGE = WS-RECORD-SIZE(CUSTOMER-INDEX) * (100 - WS-COMPRESSION-RATE) / 100 MOVE WS-CURRENT-USAGE TO WS-RECORD-SIZE(CUSTOMER-INDEX) MOVE 'Y' TO WS-DATA-COMPRESSED(CUSTOMER-INDEX) ADD 1 TO WS-COMPRESSION-SAVES DISPLAY " 📦 Data compressed to " WS-CURRENT-USAGE " bytes" DISPLAY " Compression rate: " WS-COMPRESSION-RATE "%". SPLIT-CUSTOMER-RECORD. USING CUSTOMER-INDEX MOVE "OVERFLOW_AREA_001" TO WS-OVERFLOW-LOCATION(CUSTOMER-INDEX) MOVE WS-SPLIT-THRESHOLD TO WS-RECORD-SIZE(CUSTOMER-INDEX) ADD 1 TO WS-SPLIT-OPERATIONS DISPLAY " ✂️ Record split - main: " WS-SPLIT-THRESHOLD " bytes" DISPLAY " Overflow location: " WS-OVERFLOW-LOCATION(CUSTOMER-INDEX). DEMONSTRATE-COMPRESSION-OVERFLOW. DISPLAY "=== COMPRESSION-BASED OVERFLOW HANDLING ===" DISPLAY SPACES DISPLAY "Testing compression strategies for overflow management..." *> Test various compression scenarios PERFORM TEST-COMPRESSION-EFFECTIVENESS WITH 1500 "Transaction log" PERFORM TEST-COMPRESSION-EFFECTIVENESS WITH 2200 "Customer history" PERFORM TEST-COMPRESSION-EFFECTIVENESS WITH 3500 "Audit trail" DISPLAY SPACES. TEST-COMPRESSION-EFFECTIVENESS. USING ORIGINAL-SIZE RECORD-TYPE DISPLAY " Testing compression for " RECORD-TYPE ":" DISPLAY " Original size: " ORIGINAL-SIZE " bytes" *> Calculate compressed size COMPUTE WS-CURRENT-USAGE = ORIGINAL-SIZE * (100 - WS-COMPRESSION-RATE) / 100 DISPLAY " Compressed size: " WS-CURRENT-USAGE " bytes" DISPLAY " Space saved: " ORIGINAL-SIZE - WS-CURRENT-USAGE " bytes" IF WS-CURRENT-USAGE <= WS-OVERFLOW-THRESHOLD DISPLAY " ✅ Compression eliminates overflow" ELSE DISPLAY " ⚠️ Additional overflow handling needed" PERFORM ADDITIONAL-OVERFLOW-STRATEGY END-IF DISPLAY " ". ADDITIONAL-OVERFLOW-STRATEGY. DISPLAY " 🔧 Applying additional overflow strategies" DISPLAY " 📚 Moving to archive storage" DISPLAY " 🔗 Creating reference links". DEMONSTRATE-SPLIT-RECORD-OVERFLOW. DISPLAY "=== SPLIT RECORD OVERFLOW HANDLING ===" DISPLAY SPACES DISPLAY "Testing record splitting for overflow management..." *> Test splitting various sized records PERFORM TEST-RECORD-SPLITTING WITH 2800 "Large customer profile" PERFORM TEST-RECORD_SPLITTING WITH 4200 "Complete order history" PERFORM TEST-RECORD-SPLITTING WITH 6500 "Full audit record" DISPLAY SPACES. TEST-RECORD-SPLITTING. USING TOTAL-SIZE RECORD-TYPE DISPLAY " Testing split for " RECORD-TYPE ":" DISPLAY " Total size: " TOTAL-SIZE " bytes" COMPUTE WS-BUFFER-USED = TOTAL-SIZE / WS-SPLIT-THRESHOLD COMPUTE WS-BUFFER-REMAINING = TOTAL-SIZE - (WS-BUFFER-USED * WS-SPLIT-THRESHOLD) DISPLAY " Primary segments: " WS-BUFFER-USED DISPLAY " Remainder: " WS-BUFFER-REMAINING " bytes" IF WS-BUFFER-USED > 1 DISPLAY " ✂️ Record requires splitting" DISPLAY " 📁 Creating " WS-BUFFER-USED " linked segments" ADD WS-BUFFER-USED TO WS-SPLIT-OPERATIONS ELSE DISPLAY " ✅ No splitting required" END-IF DISPLAY " ". DEMONSTRATE-TRANSACTION-OVERFLOW. DISPLAY "=== TRANSACTION BUFFER OVERFLOW ===" DISPLAY SPACES DISPLAY "Testing transaction processing overflow scenarios..." *> Simulate transaction buffer filling MOVE 35000 TO WS-BUFFER-USED COMPUTE WS-BUFFER-REMAINING = WS-BUFFER-SIZE - WS-BUFFER-USED DISPLAY " Transaction buffer status:" DISPLAY " Used: " WS-BUFFER-USED " bytes" DISPLAY " Remaining: " WS-BUFFER-REMAINING " bytes" *> Test transaction that would overflow PERFORM PROCESS-LARGE-TRANSACTION WITH 20000 DISPLAY SPACES. PROCESS-LARGE-TRANSACTION. USING TRANSACTION-SIZE DISPLAY " Processing transaction of " TRANSACTION-SIZE " bytes:" IF TRANSACTION-SIZE <= WS-BUFFER-REMAINING DISPLAY " ✅ Transaction fits in buffer" ADD TRANSACTION-SIZE TO WS-BUFFER-USED SUBTRACT TRANSACTION-SIZE FROM WS-BUFFER-REMAINING ELSE DISPLAY " ⚠️ Transaction buffer overflow" PERFORM HANDLE-TRANSACTION-OVERFLOW WITH TRANSACTION-SIZE END-IF. HANDLE-TRANSACTION-OVERFLOW. USING TRANSACTION-SIZE DISPLAY " 🔧 Handling transaction overflow..." IF TRANSACTION-SIZE <= WS-OVERFLOW-BUFFER-SIZE DISPLAY " 📦 Moving to overflow buffer" ADD TRANSACTION-SIZE TO WS-OVERFLOW-BUFFER-USED ADD 1 TO WS-TRANSACTIONS-DEFERRED ELSE DISPLAY " 💾 Writing to permanent storage" PERFORM WRITE-TRANSACTION-TO-STORAGE END-IF. DISPLAY-OVERFLOW-SUMMARY. DISPLAY "=== RECORD-OVERFLOW SUMMARY ===" DISPLAY SPACES DISPLAY "Overflow Statistics:" DISPLAY " 📊 Total overflow incidents: " WS-OVERFLOW-COUNT DISPLAY " 📈 Peak record size: " WS-PEAK-USAGE " bytes" DISPLAY " 🗜️ Compression saves: " WS-COMPRESSION-SAVES DISPLAY " ✂️ Split operations: " WS-SPLIT-OPERATIONS DISPLAY " 📦 Overflow operations: " WS-OVERFLOW-OPERATIONS DISPLAY " ⏸️ Deferred transactions: " WS-TRANSACTIONS-DEFERRED DISPLAY " " DISPLAY "Size Distribution:" PERFORM VARYING WS-ERROR-COUNT FROM 1 BY 1 UNTIL WS-ERROR-COUNT > 6 IF WS-SIZE-COUNT(WS-ERROR-COUNT) > 0 DISPLAY " " WS-SIZE-RANGE(WS-ERROR-COUNT) ": " WS-SIZE-COUNT(WS-ERROR-COUNT) " records" IF WS-OVERFLOW-INCIDENTS(WS-ERROR-COUNT) > 0 DISPLAY " (Overflows: " WS-OVERFLOW-INCIDENTS(WS-ERROR-COUNT) ")" END-IF END-IF END-PERFORM DISPLAY " " DISPLAY "Storage Status:" DISPLAY " 🏠 Primary: " WS-PRIMARY-USED "/" WS-PRIMARY-CAPACITY " bytes" DISPLAY " 📦 Overflow: " WS-OVERFLOW-USED "/" WS-OVERFLOW-CAPACITY " bytes" DISPLAY " 📚 Archive: " WS-ARCHIVE-USED "/" WS-ARCHIVE-CAPACITY " bytes" DISPLAY " " DISPLAY "RECORD-OVERFLOW Features Demonstrated:" DISPLAY " ✓ Size-based overflow detection" DISPLAY " ✓ Storage capacity management" DISPLAY " ✓ Dynamic record expansion" DISPLAY " ✓ Compression-based overflow handling" DISPLAY " ✓ Record splitting strategies" DISPLAY " ✓ Transaction buffer overflow" DISPLAY " ✓ Multi-tier storage management" DISPLAY " ✓ Performance monitoring" DISPLAY SPACES. *> Supporting procedures APPLY-COMPRESSION-STRATEGY. DISPLAY " 📦 Applying compression strategy" ADD 1 TO WS-COMPRESSION-SAVES. APPLY-SPLIT-STRATEGY. DISPLAY " ✂️ Applying record split strategy" ADD 1 TO WS-SPLIT-OPERATIONS. APPLY-ARCHIVE-STRATEGY. DISPLAY " 📚 Applying archive strategy". APPLY-DEFAULT-STRATEGY. DISPLAY " 🔧 Applying default overflow strategy". ARCHIVE-ALLOCATION. USING ARCHIVE-SIZE DISPLAY " 📚 Allocated " ARCHIVE-SIZE " bytes to archive storage" ADD ARCHIVE-SIZE TO WS-ARCHIVE-USED. WRITE-TRANSACTION-TO-STORAGE. DISPLAY " 💾 Transaction written to permanent storage".