MainframeMaster

COBOL Tutorial

COBOL PAGE

PAGE handling in COBOL represents sophisticated report formatting and comprehensive pagination control capabilities within enterprise printing environments, providing advanced page break management mechanisms for document generation, enhanced header and footer processing features, and intelligent line counting patterns that enable professional report layouts, optimal page utilization workflows, and systematic document formatting requirements while maintaining print quality, ensuring proper page boundaries, and enabling flexible report architectures across business applications requiring precise page control, standardized document layouts, and reliable pagination throughout sophisticated reporting scenarios.

Basic PAGE Control

Fundamental Page Operations
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
*> File definition with LINAGE for page control FD REPORT-FILE LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 5 LINES AT BOTTOM 3. 01 REPORT-RECORD PIC X(132). *> Working storage for page control WORKING-STORAGE SECTION. 01 WS-PAGE-CONTROL. 05 WS-PAGE-NUMBER PIC 9(4) VALUE 1. 05 WS-LINE-COUNT PIC 99 VALUE 0. 05 WS-LINES-PER-PAGE PIC 99 VALUE 60. 05 WS-MAX-LINES PIC 99 VALUE 55. 01 WS-REPORT-HEADERS. 05 WS-PAGE-HEADER. 10 FILLER PIC X(40) VALUE SPACES. 10 FILLER PIC X(20) VALUE "COMPANY SALES REPORT". 10 FILLER PIC X(20) VALUE SPACES. 10 FILLER PIC X(5) VALUE "PAGE ". 10 WS-PAGE-NUM-DISP PIC Z(3)9. 10 FILLER PIC X(43) VALUE SPACES. 05 WS-COLUMN-HEADERS. 10 FILLER PIC X(20) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(15) VALUE "DEPARTMENT". 10 FILLER PIC X(12) VALUE "SALES AMOUNT". 10 FILLER PIC X(15) VALUE "COMMISSION". 10 FILLER PIC X(70) VALUE SPACES. PROCEDURE DIVISION. REPORT-PROCESSING. OPEN OUTPUT REPORT-FILE PERFORM WRITE-PAGE-HEADER PERFORM PROCESS-REPORT-DATA CLOSE REPORT-FILE. WRITE-PAGE-HEADER. *> Manual page break WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING PAGE *> Write header information MOVE WS-PAGE-NUMBER TO WS-PAGE-NUM-DISP WRITE REPORT-RECORD FROM WS-PAGE-HEADER AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM WS-COLUMN-HEADERS AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINE MOVE 5 TO WS-LINE-COUNT. CHECK-PAGE-OVERFLOW. IF WS-LINE-COUNT >= WS-MAX-LINES ADD 1 TO WS-PAGE-NUMBER PERFORM WRITE-PAGE-HEADER END-IF. WRITE-DETAIL-LINE. ADD 1 TO WS-LINE-COUNT PERFORM CHECK-PAGE-OVERFLOW WRITE REPORT-RECORD FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE
Page Control
Report Formatting
Pagination

Advanced Page Management

Comprehensive Page Control System
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
*> Enhanced file definition with full LINAGE control FD DETAILED-REPORT LINAGE IS 66 LINES WITH FOOTING AT 60 LINES AT TOP 6 LINES AT BOTTOM 4. 01 DETAIL-RECORD PIC X(132). *> Advanced page management 01 WS-ADVANCED-PAGE-CONTROL. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 05 WS-CURRENT-LINE PIC 99 VALUE 0. 05 WS-DETAIL-LINES PIC 99 VALUE 0. 05 WS-HEADER-LINES PIC 9 VALUE 6. 05 WS-FOOTER-LINES PIC 9 VALUE 4. 05 WS-BODY-LINES PIC 99 VALUE 56. 01 WS-PAGE-FORMATTING. 05 WS-HEADER-SECTION. 10 WS-REPORT-TITLE. 15 FILLER PIC X(50) VALUE SPACES. 15 FILLER PIC X(32) VALUE "COMPREHENSIVE BUSINESS REPORT". 15 FILLER PIC X(50) VALUE SPACES. 10 WS-DATE-TIME-LINE. 15 FILLER PIC X(10) VALUE "DATE: ". 15 WS-REPORT-DATE PIC X(10). 15 FILLER PIC X(20) VALUE SPACES. 15 FILLER PIC X(10) VALUE "TIME: ". 15 WS-REPORT-TIME PIC X(8). 15 FILLER PIC X(20) VALUE SPACES. 15 FILLER PIC X(8) VALUE "PAGE: ". 15 WS-PAGE-DISPLAY PIC ZZ9. 15 FILLER PIC X(4) VALUE " OF ". 15 WS-TOTAL-DISPLAY PIC ZZ9. 15 FILLER PIC X(40) VALUE SPACES. 05 WS-FOOTER-SECTION. 10 WS-FOOTER-LINE1. 15 FILLER PIC X(30) VALUE SPACES. 15 FILLER PIC X(72) VALUE ALL "-". 15 FILLER PIC X(30) VALUE SPACES. 10 WS-FOOTER-LINE2. 15 FILLER PIC X(40) VALUE SPACES. 15 FILLER PIC X(20) VALUE "CONFIDENTIAL REPORT". 15 FILLER PIC X(72) VALUE SPACES. ADVANCED-PAGE-CONTROL. *> Calculate total pages before processing PERFORM CALCULATE-TOTAL-PAGES *> Process with enhanced page management PERFORM WRITE-ENHANCED-HEADER PERFORM PROCESS-DETAILED-REPORT PERFORM WRITE-FINAL-FOOTER. CALCULATE-TOTAL-PAGES. *> Count total records to calculate pages needed MOVE 0 TO WS-RECORD-COUNT PERFORM COUNT-INPUT-RECORDS COMPUTE WS-TOTAL-PAGES = (WS-RECORD-COUNT + WS-BODY-LINES - 1) / WS-BODY-LINES IF WS-TOTAL-PAGES = 0 MOVE 1 TO WS-TOTAL-PAGES END-IF. WRITE-ENHANCED-HEADER. *> Start new page WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING PAGE *> Current date and time MOVE FUNCTION CURRENT-DATE(1:8) TO WS-REPORT-DATE MOVE FUNCTION CURRENT-DATE(9:6) TO WS-REPORT-TIME MOVE WS-CURRENT-PAGE TO WS-PAGE-DISPLAY MOVE WS-TOTAL-PAGES TO WS-TOTAL-DISPLAY *> Write header section WRITE DETAIL-RECORD FROM WS-REPORT-TITLE AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM WS-DATE-TIME-LINE AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING 2 LINES MOVE WS-HEADER-LINES TO WS-CURRENT-LINE. CHECK-END-OF-PAGE. IF WS-CURRENT-LINE >= WS-BODY-LINES PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-ENHANCED-HEADER END-IF. WRITE-PAGE-FOOTER. *> Position to footer area COMPUTE WS-LINES-TO-FOOTER = WS-BODY-LINES - WS-CURRENT-LINE + 1 IF WS-LINES-TO-FOOTER > 0 WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING WS-LINES-TO-FOOTER LINES END-IF *> Write footer content WRITE DETAIL-RECORD FROM WS-FOOTER-LINE1 AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM WS-FOOTER-LINE2 AFTER ADVANCING 1 LINE

Complete PAGE System Implementation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
IDENTIFICATION DIVISION. PROGRAM-ID. PAGE-CONTROL-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "REPORT.RPT" ORGANIZATION IS SEQUENTIAL LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 5 LINES AT BOTTOM 3. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC X(8). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(20). 05 EMP-SALARY PIC 9(8)V99. 05 EMP-COMMISSION PIC 9(6)V99. FD REPORT-FILE. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. *> Comprehensive page control system 01 WS-PAGE-MANAGEMENT. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 05 WS-LINES-USED PIC 99 VALUE 0. 05 WS-LINES-AVAILABLE PIC 99 VALUE 50. 05 WS-RECORDS-PROCESSED PIC 9(6) VALUE 0. 05 WS-PAGES-WRITTEN PIC 9(4) VALUE 0. *> Multi-section report headers 01 WS-REPORT-HEADERS. 05 WS-MAIN-TITLE. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(42) VALUE "EMPLOYEE COMPENSATION ANALYSIS REPORT". 10 FILLER PIC X(45) VALUE SPACES. 05 WS-SUBTITLE. 10 FILLER PIC X(35) VALUE SPACES. 10 FILLER PIC X(32) VALUE "QUARTERLY PERFORMANCE SUMMARY". 10 FILLER PIC X(65) VALUE SPACES. 05 WS-PAGE-INFO. 10 WS-DATE-LABEL PIC X(12) VALUE "Report Date:". 10 WS-DATE-VALUE PIC X(10). 10 FILLER PIC X(15) VALUE SPACES. 10 WS-TIME-LABEL PIC X(12) VALUE "Report Time:". 10 WS-TIME-VALUE PIC X(8). 10 FILLER PIC X(15) VALUE SPACES. 10 WS-PAGE-LABEL PIC X(5) VALUE "Page:". 10 WS-PAGE-VALUE PIC Z(3)9. 10 WS-OF-LABEL PIC X(4) VALUE " of ". 10 WS-TOTAL-VALUE PIC Z(3)9. 10 FILLER PIC X(44) VALUE SPACES. *> Detailed column headers 01 WS-COLUMN-HEADERS. 05 WS-HEADER-LINE1. 10 FILLER PIC X(8) VALUE "EMP ID". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(20) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(15) VALUE "DEPARTMENT". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(12) VALUE "BASE SALARY". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(11) VALUE "COMMISSION". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(13) VALUE "TOTAL COMP". 10 FILLER PIC X(43) VALUE SPACES. 05 WS-HEADER-LINE2. 10 FILLER PIC X(132) VALUE ALL "-". *> Detail line formatting 01 WS-DETAIL-FORMATTING. 05 WS-DETAIL-LINE. 10 WS-DET-EMP-ID PIC X(8). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-NAME PIC X(20). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-DEPT PIC X(15). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-SALARY PIC $ZZ,ZZ9.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-COMM PIC $Z,ZZ9.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-TOTAL PIC $ZZ,ZZ9.99. 10 FILLER PIC X(43) VALUE SPACES. *> Summary and footer information 01 WS-SUMMARY-LINES. 05 WS-SUMMARY-HEADER. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(42) VALUE "DEPARTMENTAL SUMMARY TOTALS". 10 FILLER PIC X(45) VALUE SPACES. 05 WS-GRAND-TOTAL-LINE. 10 FILLER PIC X(40) VALUE "GRAND TOTAL COMPENSATION: ". 10 WS-GRAND-TOTAL PIC $ZZZ,ZZZ,ZZ9.99. 10 FILLER PIC X(70) VALUE SPACES. PROCEDURE DIVISION. MAIN-PAGE-CONTROL-DEMO. DISPLAY "=== PAGE CONTROL DEMONSTRATION ===" PERFORM INITIALIZE-PAGE-SYSTEM PERFORM GENERATE-COMPREHENSIVE-REPORT PERFORM DISPLAY-PAGE-STATISTICS DISPLAY "=== PAGE CONTROL DEMO COMPLETE ===" STOP RUN. INITIALIZE-PAGE-SYSTEM. DISPLAY "Initializing page control system..." OPEN INPUT EMPLOYEE-FILE OPEN OUTPUT REPORT-FILE *> Calculate total pages needed PERFORM COUNT-INPUT-RECORDS COMPUTE WS-TOTAL-PAGES = (WS-RECORDS-PROCESSED + WS-LINES-AVAILABLE - 1) / WS-LINES-AVAILABLE IF WS-TOTAL-PAGES = 0 MOVE 1 TO WS-TOTAL-PAGES END-IF MOVE 0 TO WS-RECORDS-PROCESSED CLOSE EMPLOYEE-FILE OPEN INPUT EMPLOYEE-FILE DISPLAY "✅ Page system initialized" DISPLAY " Total records: " WS-RECORDS-PROCESSED DISPLAY " Estimated pages: " WS-TOTAL-PAGES. COUNT-INPUT-RECORDS. MOVE 0 TO WS-RECORDS-PROCESSED READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ PERFORM UNTIL EOF-FLAG ADD 1 TO WS-RECORDS-PROCESSED READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ END-PERFORM. GENERATE-COMPREHENSIVE-REPORT. DISPLAY "Generating comprehensive paginated report..." PERFORM WRITE-REPORT-HEADER PERFORM PROCESS-EMPLOYEE-RECORDS PERFORM WRITE-REPORT-SUMMARY CLOSE EMPLOYEE-FILE CLOSE REPORT-FILE DISPLAY "✅ Report generation complete". WRITE-REPORT-HEADER. *> Start new page with comprehensive header WRITE REPORT-LINE FROM SPACES AFTER ADVANCING PAGE *> Format date and time MOVE FUNCTION CURRENT-DATE(1:8) TO WS-DATE-VALUE MOVE FUNCTION CURRENT-DATE(9:6) TO WS-TIME-VALUE MOVE WS-CURRENT-PAGE TO WS-PAGE-VALUE MOVE WS-TOTAL-PAGES TO WS-TOTAL-VALUE *> Write header sequence WRITE REPORT-LINE FROM WS-MAIN-TITLE AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-SUBTITLE AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-PAGE-INFO AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 2 LINES *> Column headers WRITE REPORT-LINE FROM WS-HEADER-LINE1 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-HEADER-LINE2 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE MOVE 10 TO WS-LINES-USED. PROCESS-EMPLOYEE-RECORDS. READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ PERFORM UNTIL EOF-FLAG *> Check for page overflow before writing PERFORM CHECK-PAGE-BREAK *> Format detail line MOVE EMP-ID TO WS-DET-EMP-ID MOVE EMP-NAME TO WS-DET-NAME MOVE EMP-DEPARTMENT TO WS-DET-DEPT MOVE EMP-SALARY TO WS-DET-SALARY MOVE EMP-COMMISSION TO WS-DET-COMM COMPUTE WS-DET-TOTAL = EMP-SALARY + EMP-COMMISSION *> Write detail line WRITE REPORT-LINE FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE ADD 1 TO WS-LINES-USED ADD 1 TO WS-RECORDS-PROCESSED *> Read next record READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ END-PERFORM. CHECK-PAGE-BREAK. *> Check if we need a new page IF WS-LINES-USED >= WS-LINES-AVAILABLE PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE ADD 1 TO WS-PAGES-WRITTEN PERFORM WRITE-REPORT-HEADER END-IF. WRITE-PAGE-FOOTER. *> Calculate lines to footer position COMPUTE WS-LINES-TO-SKIP = 55 - WS-LINES-USED IF WS-LINES-TO-SKIP > 0 WRITE REPORT-LINE FROM SPACES AFTER ADVANCING WS-LINES-TO-SKIP LINES END-IF *> Write footer information WRITE REPORT-LINE FROM ALL "-" AFTER ADVANCING 1 LINE STRING "Page " DELIMITED BY SIZE WS-CURRENT-PAGE DELIMITED BY SIZE " - Confidential Report" DELIMITED BY SIZE INTO WS-FOOTER-TEXT END-STRING WRITE REPORT-LINE FROM WS-FOOTER-TEXT AFTER ADVANCING 1 LINE. WRITE-REPORT-SUMMARY. *> Ensure we have space for summary IF WS-LINES-USED > (WS-LINES-AVAILABLE - 5) PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-REPORT-HEADER END-IF *> Write summary section WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 2 LINES WRITE REPORT-LINE FROM WS-SUMMARY-HEADER AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE COMPUTE WS-GRAND-TOTAL = WS-TOTAL-COMPENSATION WRITE REPORT-LINE FROM WS-GRAND-TOTAL-LINE AFTER ADVANCING 1 LINE. DISPLAY-PAGE-STATISTICS. DISPLAY " " DISPLAY "📊 PAGE CONTROL STATISTICS" DISPLAY "==========================" DISPLAY "Records processed: " WS-RECORDS-PROCESSED DISPLAY "Pages written: " WS-PAGES-WRITTEN DISPLAY "Lines per page: " WS-LINES-AVAILABLE DISPLAY "Header lines: 10" DISPLAY "Footer lines: 3" DISPLAY "Average records per page: " WS-RECORDS-PROCESSED / WS-PAGES-WRITTEN DISPLAY " " DISPLAY "🎯 Key Page Features Demonstrated:" DISPLAY " • Automatic page breaks" DISPLAY " • Comprehensive headers and footers" DISPLAY " • Page numbering with totals" DISPLAY " • Consistent formatting across pages" DISPLAY " • Overflow detection and handling" DISPLAY " • Summary placement optimization"

PAGE Features and Capabilities

Page Structure
  • • LINAGE clause for page definition
  • • Header and footer areas
  • • Line counting and limits
  • • Automatic overflow detection
Page Numbering
  • • PAGE-COUNTER functionality
  • • Custom page numbering
  • • Total page calculation
  • • Page-of-total formatting
Page Breaks
  • • ADVANCING PAGE for manual breaks
  • • Automatic overflow handling
  • • Conditional page breaks
  • • Section-based pagination
Report Applications
  • • Financial reports and statements
  • • Employee and payroll reports
  • • Inventory and sales reports
  • • Regulatory compliance documents

Best Practices