The AFTER clause represents one of COBOL's most sophisticated and essential timing control mechanisms, serving as the fundamental framework for sequence management, conditional processing, and advanced program flow control in business applications. Far more than a simple timing directive, the AFTER clause embodies COBOL's comprehensive approach to temporal logic by providing precise control over execution timing, event sequencing, conditional operations, and complex workflow coordination that enable applications to handle time-sensitive business processes while maintaining the accuracy and reliability characteristics that make COBOL ideal for enterprise computing environments requiring precise timing control.
In enterprise computing environments, the AFTER clause serves as a critical component for advanced workflow management, enabling developers to create sophisticated business applications that handle complex timing requirements, sequential processing patterns, conditional execution flows, and time-dependent business logic. Its capabilities extend far beyond simple sequence control to encompass sophisticated timing patterns, event-driven processing, conditional workflow management, and integration with modern business process automation systems that are essential for applications requiring precise timing control and sophisticated workflow coordination capabilities.
The AFTER clause implements a comprehensive timing control and sequence management architecture that abstracts the complex relationship between logical program flow and temporal execution requirements. This architecture encompasses multiple timing modes, sequence control strategies, conditional processing algorithms, and workflow coordination mechanisms that work together to provide flexible, efficient, and reliable timing control capabilities suitable for production business applications that must handle diverse temporal requirements and timing constraints.
At its core, the AFTER clause manages the intricate interaction between program execution sequences and business timing requirements by providing standardized mechanisms for controlling execution order, managing conditional flows, and coordinating complex timing patterns. This includes sophisticated timing algorithms that handle different execution contexts and requirements, automatic sequence optimization, and timing validation mechanisms that ensure accurate execution flow while maintaining optimal performance characteristics.
The architectural design of the AFTER clause reflects COBOL's emphasis on precision and maintainability while providing the flexibility necessary for advanced timing control. Unlike simple sequence control mechanisms in other languages, the AFTER clause provides comprehensive timing management, conditional processing support, and workflow optimization features that enable developers to create sophisticated time-sensitive applications while maintaining the reliability and predictability characteristics that are essential for business-critical systems.
In enterprise environments, the AFTER clause enables sophisticated timing management patterns that handle the complex requirements of business applications including time-sensitive processing, sequential workflow coordination, conditional execution flows, and integration with modern business process management systems. These patterns must balance timing precision with processing efficiency while supporting the scalability and reliability requirements of modern business systems.
Modern enterprise applications implement layered timing management architectures where AFTER clauses work in conjunction with workflow engines, scheduling systems, and distributed processing frameworks. This layered approach enables applications to optimize timing control across different system components while maintaining consistent execution characteristics and providing comprehensive timing management capabilities that adapt to varying business requirements and processing patterns.
The integration of AFTER clauses with contemporary business systems enables sophisticated timing patterns including event-driven processing, workflow orchestration mechanisms, and real-time coordination strategies. These patterns support the operational and efficiency requirements of modern business systems while leveraging COBOL's proven timing control capabilities and reliability features.
The AFTER clause's performance characteristics are crucial for applications that must handle time-sensitive operations, support high-frequency processing, and maintain optimal timing accuracy across diverse computing environments. Performance optimization involves careful design of timing patterns, efficient sequence management strategies, and coordination with system-level timing optimization features including scheduling management and execution prioritization.
Advanced reliability management includes comprehensive timing validation that ensures execution sequences remain accurate under varying system conditions, automatic timing adjustment that maintains processing integrity during system fluctuations, and sequence verification mechanisms that ensure correct execution flow throughout complex timing operations. These reliability features enable COBOL applications to maintain high accuracy even when performing complex timing-sensitive operations and workflow coordination tasks.
Timing optimization planning for AFTER clause usage requires understanding both current and projected timing requirements, execution pattern analysis, and system performance constraints. Modern implementations support intelligent timing that adapts to system load characteristics, automatic optimization that adjusts timing strategies based on execution patterns, and comprehensive monitoring that provides visibility into timing performance and execution efficiency metrics.
The AFTER clause provides multiple syntax forms designed to handle different timing control scenarios and sequence management requirements. Understanding these variations and their appropriate applications is crucial for creating efficient, reliable timing control systems that can handle the diverse temporal requirements of enterprise applications.
1234567891011*> Basic AFTER clause with ADVANCING WRITE REPORT-LINE AFTER ADVANCING 1 LINE. *> Multiple line advancement WRITE REPORT-LINE AFTER ADVANCING 2 LINES. *> Page advancement WRITE REPORT-LINE AFTER ADVANCING PAGE. *> Variable advancement WRITE REPORT-LINE AFTER ADVANCING LINE-COUNT LINES.
Basic timing control provides standard sequence management with line positioning and page control capabilities.
12345678910111213141516*> Conditional AFTER processing IF RECORD-COUNT > 50 WRITE REPORT-LINE AFTER ADVANCING PAGE ELSE WRITE REPORT-LINE AFTER ADVANCING 1 LINE END-IF. *> Complex conditional timing EVALUATE REPORT-TYPE WHEN 'HEADER' WRITE REPORT-LINE AFTER ADVANCING PAGE WHEN 'DETAIL' WRITE REPORT-LINE AFTER ADVANCING 1 LINE WHEN 'SUMMARY' WRITE REPORT-LINE AFTER ADVANCING 3 LINES END-EVALUATE.
Conditional timing enables dynamic sequence control based on data conditions and business logic requirements.
1234567891011121314151617*> Sequential processing with timing PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 10 WRITE DETAIL-LINE AFTER ADVANCING 1 LINE IF COUNTER = 5 WRITE SECTION-BREAK AFTER ADVANCING 2 LINES END-IF END-PERFORM. *> Event-driven timing control PERFORM PROCESS-RECORDS AFTER INITIAL-SETUP UNTIL END-OF-FILE. *> Complex workflow timing PERFORM HEADER-PROCESSING PERFORM DETAIL-PROCESSING AFTER HEADER-COMPLETE PERFORM FOOTER-PROCESSING AFTER DETAIL-COMPLETE.
Advanced sequence management provides sophisticated workflow control with event coordination and complex timing patterns.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796IDENTIFICATION DIVISION. PROGRAM-ID. COMPREHENSIVE-AFTER-DEMO. *> Comprehensive demonstration of AFTER clause applications *> Covering timing control, sequence management, and workflow coordination ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO "TIMING-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL. SELECT TRANSACTION-FILE ASSIGN TO "TRANSACTIONS.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE. 01 REPORT-RECORD PIC X(132). FD TRANSACTION-FILE. 01 TRANSACTION-RECORD. 05 TRANS-ID PIC X(10). 05 TRANS-TYPE PIC X(5). 05 TRANS-AMOUNT PIC S9(8)V99. 05 TRANS-DATE PIC X(8). 05 TRANS-STATUS PIC X(10). WORKING-STORAGE SECTION. *> Timing control variables 01 TIMING-CONTROLS. 05 CURRENT-PHASE PIC X(20) VALUE "INITIALIZATION". 88 INIT-PHASE VALUE "INITIALIZATION". 88 PROCESSING-PHASE VALUE "PROCESSING". 88 SUMMARY-PHASE VALUE "SUMMARY". 88 CLEANUP-PHASE VALUE "CLEANUP". 05 SEQUENCE-COUNTER PIC 9(6) VALUE 0. 05 PHASE-START-TIME PIC X(8). 05 PHASE-END-TIME PIC X(8). 05 TOTAL-PROCESSING-TIME PIC 9(8) VALUE 0. *> Report formatting variables 01 REPORT-FORMATTING. 05 CURRENT-PAGE PIC 9(4) VALUE 1. 05 LINES-ON-PAGE PIC 9(3) VALUE 0. 05 MAX-LINES-PER-PAGE PIC 9(3) VALUE 60. 05 LINES-REMAINING PIC 9(3) VALUE 60. 05 LAST-SECTION-TYPE PIC X(10) VALUE SPACES. 05 SECTION-CHANGE-FLAG PIC X(1) VALUE 'N'. 88 SECTION-CHANGED VALUE 'Y'. 88 SECTION-UNCHANGED VALUE 'N'. *> Workflow coordination variables 01 WORKFLOW-COORDINATION. 05 HEADER-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 HEADER-COMPLETE VALUE 'Y'. 88 HEADER-PENDING VALUE 'N'. 05 DETAIL-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 DETAIL-COMPLETE VALUE 'Y'. 88 DETAIL-PENDING VALUE 'N'. 05 SUMMARY-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 SUMMARY-COMPLETE VALUE 'Y'. 88 SUMMARY-PENDING VALUE 'N'. 05 PROCESSING-STAGE PIC 9(2) VALUE 1. *> Report line definitions 01 PHASE-HEADER. 05 FILLER PIC X(20) VALUE "=== PHASE: ". 05 PHASE-NAME PIC X(20). 05 FILLER PIC X(10) VALUE " ===". 05 FILLER PIC X(82) VALUE SPACES. 01 TIMING-REPORT-LINE. 05 FILLER PIC X(5) VALUE "TIME: ". 05 TIMING-TIMESTAMP PIC X(8). 05 FILLER PIC X(10) VALUE " - STEP: ". 05 TIMING-STEP PIC X(30). 05 FILLER PIC X(10) VALUE " - SEQ: ". 05 TIMING-SEQUENCE PIC Z,ZZ9. 05 FILLER PIC X(65) VALUE SPACES. 01 SECTION-BREAK-LINE. 05 FILLER PIC X(132) VALUE ALL "-". 01 WORKFLOW-STATUS-LINE. 05 FILLER PIC X(15) VALUE "WORKFLOW STATUS: ". 05 WORKFLOW-DESCRIPTION PIC X(50). 05 FILLER PIC X(10) VALUE " STAGE: ". 05 WORKFLOW-STAGE PIC Z9. 05 FILLER PIC X(55) VALUE SPACES. 01 TRANSACTION-DETAIL-LINE. 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-ID PIC X(10). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-TYPE PIC X(5). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-AMOUNT PIC $$$,$$$,$$9.99-. 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-DATE PIC X(8). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-STATUS PIC X(10). 05 FILLER PIC X(69) VALUE SPACES. *> Statistics and counters 01 PROCESSING-STATISTICS. 05 TOTAL-TRANSACTIONS PIC 9(8) VALUE 0. 05 PROCESSED-TRANSACTIONS PIC 9(8) VALUE 0. 05 ERROR-TRANSACTIONS PIC 9(6) VALUE 0. 05 PHASES-COMPLETED PIC 9(2) VALUE 0. 05 WORKFLOW-STEPS PIC 9(4) VALUE 0. 05 TIMING-EVENTS PIC 9(6) VALUE 0. *> Advanced timing variables 01 ADVANCED-TIMING. 05 CONDITIONAL-SPACING PIC 9(1) VALUE 1. 05 SECTION-SPACING PIC 9(1) VALUE 2. 05 PHASE-SPACING PIC 9(1) VALUE 3. 05 WORKFLOW-SPACING PIC 9(1) VALUE 2. 05 LAST-TRANSACTION-TYPE PIC X(5) VALUE SPACES. 05 TYPE-CHANGE-FLAG PIC X(1) VALUE 'N'. 88 TYPE-CHANGED VALUE 'Y'. 88 TYPE-UNCHANGED VALUE 'N'. *> Working variables 01 WORK-VARIABLES. 05 WS-CURRENT-TIME PIC X(8). 05 WS-COUNTER PIC 9(6). 05 WS-TEMP-AMOUNT PIC S9(10)V99. 05 WS-LINE-COUNT PIC 9(3). 05 WS-PHASE-DURATION PIC 9(6). PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== Comprehensive AFTER Clause Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-TIMING-SYSTEM PERFORM DEMONSTRATE-BASIC-AFTER-TIMING PERFORM DEMONSTRATE-CONDITIONAL-TIMING PERFORM DEMONSTRATE-WORKFLOW-COORDINATION PERFORM DEMONSTRATE-ADVANCED-SEQUENCING PERFORM DEMONSTRATE-COMPLEX-TIMING-PATTERNS PERFORM FINALIZE-TIMING-SYSTEM DISPLAY " ". DISPLAY "AFTER clause demonstration completed successfully". STOP RUN. INITIALIZE-TIMING-SYSTEM. DISPLAY "1. Initializing Timing System:". DISPLAY " ============================". *> Set initial phase SET INIT-PHASE TO TRUE. MOVE "INITIALIZATION" TO PHASE-NAME. ACCEPT PHASE-START-TIME FROM TIME. MOVE 0 TO SEQUENCE-COUNTER. *> Initialize workflow flags SET HEADER-PENDING TO TRUE. SET DETAIL-PENDING TO TRUE. SET SUMMARY-PENDING TO TRUE. MOVE 1 TO PROCESSING-STAGE. *> Initialize statistics MOVE 0 TO TOTAL-TRANSACTIONS PROCESSED-TRANSACTIONS ERROR-TRANSACTIONS PHASES-COMPLETED WORKFLOW-STEPS TIMING-EVENTS. *> Open report file OPEN OUTPUT REPORT-FILE. *> Write initialization phase header WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING PAGE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. *> Record timing event PERFORM RECORD-TIMING-EVENT USING "System Initialization Started". DISPLAY " Timing system initialized". DISPLAY " Initial phase: " CURRENT-PHASE. DISPLAY " Processing stage: " PROCESSING-STAGE. DISPLAY " ". RECORD-TIMING-EVENT USING EVENT-DESCRIPTION. 01 EVENT-DESCRIPTION PIC X(30). ADD 1 TO SEQUENCE-COUNTER TIMING-EVENTS. ACCEPT WS-CURRENT-TIME FROM TIME. MOVE WS-CURRENT-TIME TO TIMING-TIMESTAMP. MOVE EVENT-DESCRIPTION TO TIMING-STEP. MOVE SEQUENCE-COUNTER TO TIMING-SEQUENCE. WRITE REPORT-RECORD FROM TIMING-REPORT-LINE AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. DEMONSTRATE-BASIC-AFTER-TIMING. DISPLAY "2. Basic AFTER Timing Operations:". DISPLAY " ===============================". *> Transition to processing phase PERFORM TRANSITION-TO-PROCESSING-PHASE. *> Demonstrate basic timing with AFTER PERFORM DEMONSTRATE-BASIC-LINE-TIMING. *> Demonstrate page timing PERFORM DEMONSTRATE-PAGE-TIMING. *> Demonstrate variable timing PERFORM DEMONSTRATE-VARIABLE-TIMING. DISPLAY " Basic AFTER timing operations completed". DISPLAY " ". TRANSITION-TO-PROCESSING-PHASE. ACCEPT PHASE-END-TIME FROM TIME. COMPUTE WS-PHASE-DURATION = PHASE-END-TIME - PHASE-START-TIME. ADD WS-PHASE-DURATION TO TOTAL-PROCESSING-TIME. SET PROCESSING-PHASE TO TRUE. MOVE "PROCESSING" TO PHASE-NAME. ACCEPT PHASE-START-TIME FROM TIME. ADD 1 TO PHASES-COMPLETED. *> Write phase transition with spacing WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Transitioned to Processing Phase". DEMONSTRATE-BASIC-LINE-TIMING. DISPLAY " Basic Line Timing with AFTER:". *> Single line timing MOVE "Single line timing demonstration" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Single Line Timing". *> Multiple line timing MOVE "Multiple line timing (2 lines)" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Multiple Line Timing". *> Zero line timing (overprint) MOVE "Zero line timing (overprint)" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 0 LINES. PERFORM RECORD-TIMING-EVENT USING "Zero Line Timing". DISPLAY " Basic line timing: COMPLETED". DEMONSTRATE-PAGE-TIMING. DISPLAY " Page Timing with AFTER:". *> Force page break with timing MOVE "Page break timing demonstration" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING PAGE. ADD 1 TO CURRENT-PAGE. MOVE 1 TO LINES-ON-PAGE. COMPUTE LINES-REMAINING = MAX-LINES-PER-PAGE - LINES-ON-PAGE. PERFORM RECORD-TIMING-EVENT USING "Page Break Timing". *> Write new page header MOVE "NEW PAGE AFTER TIMING CONTROL" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. DISPLAY " Page timing: COMPLETED". DISPLAY " New page number: " CURRENT-PAGE. DEMONSTRATE-VARIABLE-TIMING. DISPLAY " Variable Timing with AFTER:". *> Variable line spacing based on conditions PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 5 COMPUTE WS-LINE-COUNT = WS-COUNTER STRING "Variable timing line " WS-COUNTER " with " WS-LINE-COUNT " line spacing" DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WS-LINE-COUNT LINES ADD WS-LINE-COUNT TO LINES-ON-PAGE SUBTRACT WS-LINE-COUNT FROM LINES-REMAINING STRING "Variable Timing " WS-COUNTER DELIMITED BY SIZE INTO TIMING-STEP PERFORM RECORD-TIMING-EVENT USING TIMING-STEP END-PERFORM. DISPLAY " Variable timing: COMPLETED". DEMONSTRATE-CONDITIONAL-TIMING. DISPLAY "3. Conditional AFTER Timing:". DISPLAY " ==========================". PERFORM DEMONSTRATE-DATA-DRIVEN-TIMING PERFORM DEMONSTRATE-CONTEXT-SENSITIVE-TIMING PERFORM DEMONSTRATE-COMPLEX-CONDITIONAL-TIMING. DEMONSTRATE-DATA-DRIVEN-TIMING. DISPLAY " Data-Driven Timing Control:". *> Simulate different data conditions PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 8 *> Determine transaction type COMPUTE WS-TEMP-AMOUNT = WS-COUNTER * 1000 IF WS-COUNTER < 3 MOVE "DEBIT" TO DTL-TRANS-TYPE ELSE IF WS-COUNTER < 6 MOVE "CREDIT" TO DTL-TRANS-TYPE ELSE MOVE "TRANSFER" TO DTL-TRANS-TYPE END-IF *> Check for type change IF DTL-TRANS-TYPE NOT = LAST-TRANSACTION-TYPE SET TYPE-CHANGED TO TRUE MOVE DTL-TRANS-TYPE TO LAST-TRANSACTION-TYPE ELSE SET TYPE-UNCHANGED TO TRUE END-IF *> Apply conditional timing based on data IF TYPE-CHANGED WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING SECTION-SPACING LINES ADD SECTION-SPACING TO LINES-ON-PAGE SUBTRACT SECTION-SPACING FROM LINES-REMAINING STRING "Type change to " DTL-TRANS-TYPE DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Data-Driven Type Change" ELSE STRING "Continuing " DTL-TRANS-TYPE " processing" DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES ADD CONDITIONAL-SPACING TO LINES-ON-PAGE SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Data-Driven Normal Flow" END-IF END-PERFORM. DISPLAY " Data-driven timing: COMPLETED". DEMONSTRATE-CONTEXT-SENSITIVE-TIMING. DISPLAY " Context-Sensitive Timing:". *> Different timing based on processing context EVALUATE PROCESSING-STAGE WHEN 1 MOVE "Stage 1: Initial Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING WHEN 2 MOVE "Stage 2: Intermediate Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING WHEN OTHER MOVE "Advanced Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-EVALUATE. ADD 1 TO PROCESSING-STAGE. PERFORM RECORD-TIMING-EVENT USING "Context-Sensitive Timing". DISPLAY " Context-sensitive timing: COMPLETED". DEMONSTRATE-COMPLEX-CONDITIONAL-TIMING. DISPLAY " Complex Conditional Timing:". *> Multi-level conditional timing IF LINES-REMAINING < 10 MOVE "Page space critical - forcing new page" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING PAGE ADD 1 TO CURRENT-PAGE MOVE 1 TO LINES-ON-PAGE COMPUTE LINES-REMAINING = MAX-LINES-PER-PAGE - LINES-ON-PAGE PERFORM RECORD-TIMING-EVENT USING "Critical Space Page Break" ELSE IF PROCESSED-TRANSACTIONS > 50 MOVE "High volume processing - extra spacing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "High Volume Spacing" ELSE MOVE "Normal processing - standard spacing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Standard Spacing" END-IF END-IF. DISPLAY " Complex conditional timing: COMPLETED". DEMONSTRATE-WORKFLOW-COORDINATION. DISPLAY "4. Workflow Coordination with AFTER:". DISPLAY " ==================================". PERFORM DEMONSTRATE-SEQUENTIAL-WORKFLOW PERFORM DEMONSTRATE-CONDITIONAL-WORKFLOW PERFORM DEMONSTRATE-PARALLEL-COORDINATION. DEMONSTRATE-SEQUENTIAL-WORKFLOW. DISPLAY " Sequential Workflow Timing:". *> Header processing phase PERFORM PROCESS-HEADER-PHASE. *> Detail processing after header complete IF HEADER-COMPLETE PERFORM PROCESS-DETAIL-PHASE END-IF. *> Summary processing after detail complete IF DETAIL-COMPLETE PERFORM PROCESS-SUMMARY-PHASE END-IF. DISPLAY " Sequential workflow: COMPLETED". PROCESS-HEADER-PHASE. MOVE "HEADER PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 1 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate header processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 3 STRING "Header step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS END-PERFORM. SET HEADER-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Header Phase Complete". PROCESS-DETAIL-PHASE. MOVE "DETAIL PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 2 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate detail processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 5 STRING "Detail step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS ADD 1 TO PROCESSED-TRANSACTIONS END-PERFORM. SET DETAIL-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Detail Phase Complete". PROCESS-SUMMARY-PHASE. MOVE "SUMMARY PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 3 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate summary processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 2 STRING "Summary step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS END-PERFORM. SET SUMMARY-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Summary Phase Complete". DEMONSTRATE-CONDITIONAL-WORKFLOW. DISPLAY " Conditional Workflow Timing:". *> Conditional workflow based on processing results IF PROCESSED-TRANSACTIONS > 0 MOVE "Conditional workflow - transactions processed" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WORKFLOW-SPACING LINES ADD WORKFLOW-SPACING TO LINES-ON-PAGE SUBTRACT WORKFLOW-SPACING FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Conditional Workflow Triggered" *> Additional processing based on volume IF PROCESSED-TRANSACTIONS > 3 MOVE "High volume detected - extended processing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Extended Processing" END-IF ELSE MOVE "No transactions to process - skipping workflow" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Workflow Skipped" END-IF. DISPLAY " Conditional workflow: COMPLETED". DEMONSTRATE-PARALLEL-COORDINATION. DISPLAY " Parallel Coordination Timing:". *> Simulate parallel processing coordination MOVE "PARALLEL COORDINATION PHASE" TO WORKFLOW-DESCRIPTION. MOVE 4 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Coordinate multiple parallel streams PERFORM COORDINATE-STREAM-A. PERFORM COORDINATE-STREAM-B. PERFORM SYNCHRONIZE-STREAMS. DISPLAY " Parallel coordination: COMPLETED". COORDINATE-STREAM-A. MOVE "Stream A: Processing initiated" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Stream A Started". COORDINATE-STREAM-B. MOVE "Stream B: Processing initiated" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Stream B Started". SYNCHRONIZE-STREAMS. MOVE "Streams synchronized - coordination complete" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Streams Synchronized". DEMONSTRATE-ADVANCED-SEQUENCING. DISPLAY "5. Advanced Sequencing Patterns:". DISPLAY " ==============================". PERFORM DEMONSTRATE-NESTED-TIMING PERFORM DEMONSTRATE-RECURSIVE-TIMING PERFORM DEMONSTRATE-DYNAMIC-SEQUENCING. DEMONSTRATE-NESTED-TIMING. DISPLAY " Nested Timing Control:". *> Outer timing loop PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 3 STRING "Outer sequence " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING *> Inner timing loop with different spacing PERFORM VARYING WS-LINE-COUNT FROM 1 BY 1 UNTIL WS-LINE-COUNT > 2 STRING " Inner sequence " WS-COUNTER "-" WS-LINE-COUNT DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING END-PERFORM PERFORM RECORD-TIMING-EVENT USING "Nested Timing Sequence" END-PERFORM. DISPLAY " Nested timing: COMPLETED". DEMONSTRATE-RECURSIVE-TIMING. DISPLAY " Recursive Timing Patterns:". MOVE 3 TO WS-COUNTER. PERFORM RECURSIVE-TIMING-PROCESS. DISPLAY " Recursive timing: COMPLETED". RECURSIVE-TIMING-PROCESS. IF WS-COUNTER > 0 STRING "Recursive level " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WS-COUNTER LINES ADD WS-COUNTER TO LINES-ON-PAGE SUBTRACT WS-COUNTER FROM LINES-REMAINING SUBTRACT 1 FROM WS-COUNTER PERFORM RECURSIVE-TIMING-PROCESS PERFORM RECORD-TIMING-EVENT USING "Recursive Timing Level" END-IF. DEMONSTRATE-DYNAMIC-SEQUENCING. DISPLAY " Dynamic Sequencing Control:". *> Dynamic timing based on system state COMPUTE CONDITIONAL-SPACING = PROCESSED-TRANSACTIONS / 10 + 1. IF CONDITIONAL-SPACING > 5 MOVE 5 TO CONDITIONAL-SPACING END-IF. STRING "Dynamic spacing: " CONDITIONAL-SPACING " lines" DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES. ADD CONDITIONAL-SPACING TO LINES-ON-PAGE. SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Dynamic Sequencing". DISPLAY " Dynamic sequencing: COMPLETED". DEMONSTRATE-COMPLEX-TIMING-PATTERNS. DISPLAY "6. Complex Timing Patterns:". DISPLAY " =========================". PERFORM DEMONSTRATE-EVENT-DRIVEN-TIMING PERFORM DEMONSTRATE-ADAPTIVE-TIMING PERFORM DEMONSTRATE-OPTIMIZATION-PATTERNS. DEMONSTRATE-EVENT-DRIVEN-TIMING. DISPLAY " Event-Driven Timing:". *> Simulate event-driven processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 6 *> Determine event type COMPUTE WS-LINE-COUNT = FUNCTION MOD(WS-COUNTER, 3) + 1 EVALUATE WS-LINE-COUNT WHEN 1 MOVE "Event Type A detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING WHEN 2 MOVE "Event Type B detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING WHEN 3 MOVE "Event Type C detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-EVALUATE PERFORM RECORD-TIMING-EVENT USING "Event-Driven Processing" END-PERFORM. DISPLAY " Event-driven timing: COMPLETED". DEMONSTRATE-ADAPTIVE-TIMING. DISPLAY " Adaptive Timing Control:". *> Adaptive timing based on system performance IF TIMING-EVENTS > 20 MOVE 1 TO CONDITIONAL-SPACING *> Compact spacing for high activity ELSE MOVE 2 TO CONDITIONAL-SPACING *> Normal spacing for low activity END-IF. STRING "Adaptive timing - activity level: " TIMING-EVENTS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES. ADD CONDITIONAL-SPACING TO LINES-ON-PAGE. SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Adaptive Timing". DISPLAY " Adaptive timing: COMPLETED". DEMONSTRATE-OPTIMIZATION-PATTERNS. DISPLAY " Timing Optimization Patterns:". *> Optimized timing for performance IF LINES-REMAINING < 15 *> Optimize for page utilization MOVE "Optimized for page utilization" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ELSE *> Optimize for readability MOVE "Optimized for readability" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-IF. PERFORM RECORD-TIMING-EVENT USING "Timing Optimization". DISPLAY " Timing optimization: COMPLETED". FINALIZE-TIMING-SYSTEM. DISPLAY "7. Finalizing Timing System:". DISPLAY " ==========================". *> Transition to cleanup phase ACCEPT PHASE-END-TIME FROM TIME. COMPUTE WS-PHASE-DURATION = PHASE-END-TIME - PHASE-START-TIME. ADD WS-PHASE-DURATION TO TOTAL-PROCESSING-TIME. SET CLEANUP-PHASE TO TRUE. MOVE "CLEANUP" TO PHASE-NAME. ADD 1 TO PHASES-COMPLETED. *> Write final phase header WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING 3 LINES. ADD 3 TO LINES-ON-PAGE. SUBTRACT 3 FROM LINES-REMAINING. WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. *> Write final statistics PERFORM WRITE-FINAL-STATISTICS. *> Close report file CLOSE REPORT-FILE. DISPLAY " Final Timing Statistics:". DISPLAY " Total phases completed: " PHASES-COMPLETED. DISPLAY " Total workflow steps: " WORKFLOW-STEPS. DISPLAY " Total timing events: " TIMING-EVENTS. DISPLAY " Total processing time: " TOTAL-PROCESSING-TIME. DISPLAY " Processed transactions: " PROCESSED-TRANSACTIONS. DISPLAY " Timing system finalized successfully". DISPLAY " ". WRITE-FINAL-STATISTICS. MOVE "FINAL PROCESSING STATISTICS" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. STRING "Phases Completed: " PHASES-COMPLETED DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Workflow Steps: " WORKFLOW-STEPS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Timing Events: " TIMING-EVENTS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Processing Time: " TOTAL-PROCESSING-TIME DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Final Statistics Written".