Working-Storage variables exist for the life of the program. Use it for program state, counters, and buffers. Prefer clear names and reasonable sizes. This section covers data lifetime, initialization, and best practices for Working-Storage.
1234567891011121314WORKING-STORAGE SECTION. 01 TOTAL-COUNT PIC 9(6) VALUE 0. 01 RUN-MODE PIC X VALUE 'N'. 88 TEST-MODE VALUE 'T'. 88 PROD-MODE VALUE 'P'. 01 BUFFER-AREA PIC X(200) VALUE SPACES. 01 LIMITS. 05 MAX-ROWS PIC 9(4) VALUE 500. 05 MAX-AMOUNT PIC 9(9)V99 VALUE 0. 05 MIN-AMOUNT PIC 9(9)V99 VALUE 100. 01 COUNTERS. 05 RECORD-COUNT PIC 9(6) VALUE 0. 05 ERROR-COUNT PIC 9(4) VALUE 0. 05 SUCCESS-COUNT PIC 9(6) VALUE 0.
VALUE sets defaults at load time. Use 88-levels for readability instead of magic values. Group related variables together for better organization and maintenance.
1234INITIALIZE LIMITS REPLACING NUMERIC DATA BY 0 ALPHABETIC DATA BY SPACES. INITIALIZE COUNTERS REPLACING NUMERIC DATA BY 0. MOVE SPACES TO BUFFER-AREA.
INITIALIZE resets groups efficiently. Use REPLACING to specify different values for numeric vs alphabetic data. For individual fields, use MOVE with appropriate values.
12345678SET TEST-MODE TO TRUE IF TEST-MODE DISPLAY 'Running in test mode' MOVE 10 TO MAX-ROWS ELSE IF PROD-MODE DISPLAY 'Running in production mode' MOVE 1000 TO MAX-ROWS END-IF.
88-levels create readable boolean conditions. Use SET to assign values and IF to test conditions. Much clearer than testing for 'T' or 'P' directly.
123456789101112*> Good: reasonable buffer size 01 INPUT-BUFFER PIC X(1000). *> Avoid: excessive memory allocation 01 HUGE-BUFFER PIC X(100000). *> Better: dynamic sizing with DEPENDING ON 01 DYNAMIC-TABLE. 05 TABLE-ENTRY OCCURS 1 TO 1000 TIMES DEPENDING ON TABLE-SIZE INDEXED BY TABLE-IX. 10 ENTRY-DATA PIC X(50). 01 TABLE-SIZE PIC 9(4) VALUE 0.
Allocate only what you need. Large buffers waste memory and can cause performance issues. Use DEPENDING ON for variable-size tables to save memory.