MainframeMaster

COBOL Tutorial

COBOL LINAGE

The LINAGE clause represents sophisticated page control and line management capabilities within COBOL file processing environments, providing automated pagination mechanisms, intelligent line counting systems, and comprehensive page overflow handling that enable precise report formatting, efficient print control, and reliable document organization. This clause embodies advanced output formatting principles by supporting automatic page boundary detection, enabling sophisticated line positioning control, and facilitating comprehensive print management requirements while maintaining document structure integrity, ensuring consistent page formatting, and supporting complex pagination scenarios across enterprise applications requiring detailed print control, automated page management, and reliable document formatting with optimized performance characteristics and consistent output standards.

LINAGE Clause Syntax

File Description with LINAGE
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
*> Basic LINAGE syntax FD file-name LINAGE IS integer LINES WITH FOOTING AT integer LINES AT TOP integer LINES AT BOTTOM integer. *> Complete example FD REPORT-FILE LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 3 LINES AT BOTTOM 3. *> Using data items for dynamic sizing 01 WS-PAGE-SIZE PIC 9(2) VALUE 60. 01 WS-FOOTING-LINE PIC 9(2) VALUE 55. 01 WS-TOP-MARGIN PIC 9(2) VALUE 3. 01 WS-BOTTOM-MARGIN PIC 9(2) VALUE 3. FD DYNAMIC-REPORT-FILE LINAGE IS WS-PAGE-SIZE LINES WITH FOOTING AT WS-FOOTING-LINE LINES AT TOP WS-TOP-MARGIN LINES AT BOTTOM WS-BOTTOM-MARGIN. *> Simple LINAGE without margins FD SIMPLE-REPORT-FILE LINAGE IS 50 LINES. *> LINAGE with variable page size FD VARIABLE-REPORT-FILE LINAGE IS WS-VARIABLE-SIZE LINES WITH FOOTING AT WS-FOOTING-POSITION.
Page Control
File Description
Output Management

Comprehensive LINAGE Examples

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
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
IDENTIFICATION DIVISION. PROGRAM-ID. LINAGE-DEMONSTRATION. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-EMP-STATUS. SELECT REPORT-FILE ASSIGN TO "REPORT.TXT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-RPT-STATUS. SELECT INVOICE-FILE ASSIGN TO "INVOICE.TXT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-INV-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(8)V99. *> Standard report with LINAGE FD REPORT-FILE LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 3 LINES AT BOTTOM 3. 01 REPORT-LINE PIC X(132). *> Invoice with different page settings FD INVOICE-FILE LINAGE IS 45 LINES WITH FOOTING AT 40 LINES AT TOP 5 LINES AT BOTTOM 2. 01 INVOICE-LINE PIC X(80). WORKING-STORAGE SECTION. *> File status variables 01 WS-FILE-STATUS. 05 WS-EMP-STATUS PIC X(2). 05 WS-RPT-STATUS PIC X(2). 05 WS-INV-STATUS PIC X(2). *> Page control variables 01 WS-PAGE-CONTROL. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-LINES-WRITTEN PIC 9(3) VALUE 0. 05 WS-TOTAL-PAGES PIC 9(4) VALUE 0. *> Report formatting variables 01 WS-REPORT-HEADERS. 05 WS-HEADER-1 PIC X(132) VALUE " EMPLOYEE REPORT". 05 WS-HEADER-2 PIC X(132) VALUE "EMP ID NAME DEPT SALARY". 05 WS-HEADER-3 PIC X(132) VALUE "------ ---- ---- ------". 01 WS-DETAIL-LINE. 05 WS-DET-EMP-ID PIC 9(6). 05 FILLER PIC X(4) VALUE SPACES. 05 WS-DET-NAME PIC X(30). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-DET-DEPT PIC X(15). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-DET-SALARY PIC $,$$$,$$9.99. 05 FILLER PIC X(59) VALUE SPACES. 01 WS-PAGE-FOOTER. 05 FILLER PIC X(60) VALUE SPACES. 05 FILLER PIC X(6) VALUE "PAGE: ". 05 WS-FOOTER-PAGE-NUM PIC Z,ZZ9. 05 FILLER PIC X(58) VALUE SPACES. *> Invoice formatting 01 WS-INVOICE-HEADERS. 05 WS-INV-HEADER-1 PIC X(80) VALUE " INVOICE DOCUMENT". 05 WS-INV-HEADER-2 PIC X(80) VALUE "ITEM DESCRIPTION QTY PRICE TOTAL". 01 WS-INVOICE-DETAIL. 05 WS-INV-ITEM PIC X(8). 05 WS-INV-DESC PIC X(25). 05 WS-INV-QTY PIC ZZ9. 05 WS-INV-PRICE PIC $,$$9.99. 05 WS-INV-TOTAL PIC $,$$$,$$9.99. 05 FILLER PIC X(23) VALUE SPACES. *> Sample data for demonstration 01 WS-SAMPLE-EMPLOYEES. 05 WS-EMP-1. 10 WS-EMP-ID-1 PIC 9(6) VALUE 123456. 10 WS-EMP-NAME-1 PIC X(30) VALUE "JOHN SMITH". 10 WS-EMP-DEPT-1 PIC X(15) VALUE "ENGINEERING". 10 WS-EMP-SAL-1 PIC 9(8)V99 VALUE 75000.00. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== COBOL LINAGE DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-FILES PERFORM DEMONSTRATE-BASIC-LINAGE PERFORM DEMONSTRATE-PAGE-OVERFLOW PERFORM DEMONSTRATE-INVOICE-FORMATTING PERFORM FINALIZE-FILES DISPLAY "=== LINAGE PROCESSING COMPLETE ===" STOP RUN. INITIALIZE-FILES. DISPLAY "Initializing files with LINAGE control..." OPEN OUTPUT REPORT-FILE IF WS-RPT-STATUS NOT = "00" DISPLAY "Error opening report file: " WS-RPT-STATUS STOP RUN END-IF OPEN OUTPUT INVOICE-FILE IF WS-INV-STATUS NOT = "00" DISPLAY "Error opening invoice file: " WS-INV-STATUS STOP RUN END-IF DISPLAY "Files opened successfully with LINAGE control" DISPLAY "Report file: 60 lines per page, footing at line 55" DISPLAY "Invoice file: 45 lines per page, footing at line 40" DISPLAY SPACES. DEMONSTRATE-BASIC-LINAGE. DISPLAY "=== BASIC LINAGE OPERATIONS ===" DISPLAY SPACES PERFORM WRITE-REPORT-HEADERS PERFORM GENERATE-SAMPLE-DATA PERFORM WRITE-REPORT-FOOTERS DISPLAY "Basic LINAGE demonstration completed" DISPLAY "LINAGE-COUNTER automatically managed page overflow" DISPLAY SPACES. WRITE-REPORT-HEADERS. DISPLAY "Writing report headers..." DISPLAY "LINAGE-COUNTER at start: " LINAGE-COUNTER OF REPORT-FILE WRITE REPORT-LINE FROM WS-HEADER-1 WRITE REPORT-LINE FROM SPACES WRITE REPORT-LINE FROM WS-HEADER-2 WRITE REPORT-LINE FROM WS-HEADER-3 WRITE REPORT-LINE FROM SPACES DISPLAY "Headers written, LINAGE-COUNTER now: " LINAGE-COUNTER OF REPORT-FILE DISPLAY SPACES. GENERATE-SAMPLE-DATA. 01 WS-RECORD-COUNT PIC 9(3) VALUE 0. 01 WS-EMPLOYEE-INDEX PIC 9(3). DISPLAY "Generating sample employee records..." *> Generate multiple records to demonstrate page overflow PERFORM VARYING WS-EMPLOYEE-INDEX FROM 1 BY 1 UNTIL WS-EMPLOYEE-INDEX > 75 ADD 1 TO WS-RECORD-COUNT *> Create sample data COMPUTE WS-DET-EMP-ID = 100000 + WS-EMPLOYEE-INDEX MOVE "EMPLOYEE NAME" TO WS-DET-NAME MOVE "DEPARTMENT" TO WS-DET-DEPT COMPUTE WS-DET-SALARY = 50000 + (WS-EMPLOYEE-INDEX * 500) *> Write detail line with automatic page control WRITE REPORT-LINE FROM WS-DETAIL-LINE AT END-OF-PAGE PERFORM HANDLE-PAGE-OVERFLOW *> Display progress periodically IF FUNCTION MOD(WS-RECORD-COUNT, 10) = 0 DISPLAY "Records written: " WS-RECORD-COUNT " Current line: " LINAGE-COUNTER OF REPORT-FILE END-IF END-PERFORM DISPLAY "Sample data generation completed" DISPLAY "Total records written: " WS-RECORD-COUNT DISPLAY "Final LINAGE-COUNTER: " LINAGE-COUNTER OF REPORT-FILE DISPLAY SPACES. HANDLE-PAGE-OVERFLOW. ADD 1 TO WS-CURRENT-PAGE DISPLAY "Page overflow detected! Starting page " WS-CURRENT-PAGE DISPLAY "LINAGE-COUNTER reset to: " LINAGE-COUNTER OF REPORT-FILE *> Write page footer for completed page MOVE WS-CURRENT-PAGE TO WS-FOOTER-PAGE-NUM WRITE REPORT-LINE FROM WS-PAGE-FOOTER *> Write headers for new page PERFORM WRITE-REPORT-HEADERS. WRITE-REPORT-FOOTERS. DISPLAY "Writing report footers..." *> Position at footing area PERFORM UNTIL LINAGE-COUNTER OF REPORT-FILE >= 55 WRITE REPORT-LINE FROM SPACES END-PERFORM MOVE WS-CURRENT-PAGE TO WS-FOOTER-PAGE-NUM WRITE REPORT-LINE FROM WS-PAGE-FOOTER DISPLAY "Report footers written" DISPLAY SPACES. DEMONSTRATE-PAGE-OVERFLOW. DISPLAY "=== PAGE OVERFLOW HANDLING ===" DISPLAY SPACES PERFORM DEMONSTRATE-CONTROLLED-OVERFLOW PERFORM DEMONSTRATE-AUTOMATIC-OVERFLOW. DEMONSTRATE-CONTROLLED-OVERFLOW. 01 WS-LINE-COUNT PIC 9(3) VALUE 0. 01 WS-TEST-LINE PIC X(132) VALUE "TEST LINE FOR OVERFLOW". DISPLAY "Demonstrating controlled page overflow..." *> Fill page to near capacity PERFORM UNTIL LINAGE-COUNTER OF REPORT-FILE >= 50 ADD 1 TO WS-LINE-COUNT MOVE WS-LINE-COUNT TO WS-TEST-LINE(1:3) WRITE REPORT-LINE FROM WS-TEST-LINE DISPLAY "Line " WS-LINE-COUNT " written, LINAGE-COUNTER: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Approached page capacity" DISPLAY "Current LINAGE-COUNTER: " LINAGE-COUNTER OF REPORT-FILE DISPLAY SPACES. DEMONSTRATE-AUTOMATIC-OVERFLOW. 01 WS-OVERFLOW-COUNT PIC 9(2) VALUE 0. 01 WS-OVERFLOW-LINE PIC X(132) VALUE "OVERFLOW TEST LINE". DISPLAY "Demonstrating automatic page overflow..." *> Write lines that will trigger overflow PERFORM VARYING WS-OVERFLOW-COUNT FROM 1 BY 1 UNTIL WS-OVERFLOW-COUNT > 20 WRITE REPORT-LINE FROM WS-OVERFLOW-LINE AT END-OF-PAGE DISPLAY "Automatic overflow occurred at line " WS-OVERFLOW-COUNT DISPLAY "New page started, LINAGE-COUNTER: " LINAGE-COUNTER OF REPORT-FILE PERFORM WRITE-NEW-PAGE-HEADER DISPLAY "Overflow test line " WS-OVERFLOW-COUNT " - LINAGE-COUNTER: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Automatic overflow demonstration completed" DISPLAY SPACES. WRITE-NEW-PAGE-HEADER. WRITE REPORT-LINE FROM SPACES WRITE REPORT-LINE FROM " NEW PAGE AFTER OVERFLOW" WRITE REPORT-LINE FROM SPACES. DEMONSTRATE-INVOICE-FORMATTING. DISPLAY "=== INVOICE FORMATTING WITH LINAGE ===" DISPLAY SPACES PERFORM WRITE-INVOICE-HEADERS PERFORM GENERATE-INVOICE-ITEMS PERFORM WRITE-INVOICE-FOOTER. WRITE-INVOICE-HEADERS. DISPLAY "Writing invoice headers..." DISPLAY "Invoice LINAGE-COUNTER at start: " LINAGE-COUNTER OF INVOICE-FILE WRITE INVOICE-LINE FROM SPACES WRITE INVOICE-LINE FROM WS-INV-HEADER-1 WRITE INVOICE-LINE FROM SPACES WRITE INVOICE-LINE FROM WS-INV-HEADER-2 WRITE INVOICE-LINE FROM SPACES DISPLAY "Invoice headers written, LINAGE-COUNTER: " LINAGE-COUNTER OF INVOICE-FILE DISPLAY SPACES. GENERATE-INVOICE-ITEMS. 01 WS-ITEM-COUNT PIC 9(2) VALUE 0. 01 WS-ITEM-TOTAL PIC 9(6)V99 VALUE 0. 01 WS-INVOICE-TOTAL PIC 9(8)V99 VALUE 0. DISPLAY "Generating invoice items..." PERFORM VARYING WS-ITEM-COUNT FROM 1 BY 1 UNTIL WS-ITEM-COUNT > 25 *> Create sample invoice item MOVE "ITEM" TO WS-INV-ITEM MOVE WS-ITEM-COUNT TO WS-INV-ITEM(5:2) MOVE "PRODUCT DESCRIPTION" TO WS-INV-DESC MOVE WS-ITEM-COUNT TO WS-INV-QTY COMPUTE WS-INV-PRICE = 25.00 + (WS-ITEM-COUNT * 2.50) COMPUTE WS-ITEM-TOTAL = WS-INV-QTY * WS-INV-PRICE MOVE WS-ITEM-TOTAL TO WS-INV-TOTAL ADD WS-ITEM-TOTAL TO WS-INVOICE-TOTAL *> Write invoice line WRITE INVOICE-LINE FROM WS-INVOICE-DETAIL AT END-OF-PAGE DISPLAY "Invoice page overflow at item " WS-ITEM-COUNT PERFORM HANDLE-INVOICE-OVERFLOW IF FUNCTION MOD(WS-ITEM-COUNT, 5) = 0 DISPLAY "Items processed: " WS-ITEM-COUNT " Invoice line: " LINAGE-COUNTER OF INVOICE-FILE END-IF END-PERFORM DISPLAY "Invoice items generated" DISPLAY "Total amount: $" WS-INVOICE-TOTAL DISPLAY SPACES. HANDLE-INVOICE-OVERFLOW. DISPLAY "Handling invoice page overflow..." *> Write continuation message WRITE INVOICE-LINE FROM SPACES WRITE INVOICE-LINE FROM " (CONTINUED ON NEXT PAGE)" *> Headers will be written automatically on new page PERFORM WRITE-INVOICE-HEADERS. WRITE-INVOICE-FOOTER. 01 WS-INVOICE-FOOTER PIC X(80) VALUE " THANK YOU FOR YOUR BUSINESS". DISPLAY "Writing invoice footer..." *> Position at footing area PERFORM UNTIL LINAGE-COUNTER OF INVOICE-FILE >= 38 WRITE INVOICE-LINE FROM SPACES END-PERFORM WRITE INVOICE-LINE FROM WS-INVOICE-FOOTER DISPLAY "Invoice footer written at line: " LINAGE-COUNTER OF INVOICE-FILE DISPLAY SPACES. FINALIZE-FILES. DISPLAY "=== FINALIZING FILES ===" DISPLAY SPACES CLOSE REPORT-FILE CLOSE INVOICE-FILE DISPLAY "File processing summary:" DISPLAY " Report file: Multiple pages with automatic overflow" DISPLAY " Invoice file: Formatted with LINAGE control" DISPLAY " LINAGE-COUNTER managed all page boundaries" DISPLAY SPACES DISPLAY "All files closed successfully" DISPLAY "LINAGE demonstration completed". *> Advanced LINAGE techniques ADVANCED-LINAGE-TECHNIQUES. DISPLAY "=== ADVANCED LINAGE TECHNIQUES ===" DISPLAY SPACES PERFORM DYNAMIC-PAGE-SIZING PERFORM CONDITIONAL-PAGE-BREAKS PERFORM MULTI-SECTION-REPORTS. DYNAMIC-PAGE-SIZING. 01 WS-PAGE-SIZES. 05 WS-STANDARD-PAGE PIC 9(2) VALUE 60. 05 WS-COMPACT-PAGE PIC 9(2) VALUE 40. 05 WS-EXTENDED-PAGE PIC 9(2) VALUE 80. 01 WS-SELECTED-SIZE PIC 9(2). 01 WS-PAGE-TYPE PIC X(10). DISPLAY "Dynamic page sizing demonstration:" *> Simulate different page requirements MOVE WS-STANDARD-PAGE TO WS-SELECTED-SIZE MOVE "STANDARD" TO WS-PAGE-TYPE PERFORM DISPLAY-PAGE-INFO MOVE WS-COMPACT-PAGE TO WS-SELECTED-SIZE MOVE "COMPACT" TO WS-PAGE-TYPE PERFORM DISPLAY-PAGE-INFO MOVE WS-EXTENDED-PAGE TO WS-SELECTED-SIZE MOVE "EXTENDED" TO WS-PAGE-TYPE PERFORM DISPLAY-PAGE-INFO DISPLAY SPACES. DISPLAY-PAGE-INFO. DISPLAY " " WS-PAGE-TYPE " page: " WS-SELECTED-SIZE " lines" DISPLAY " Suitable for: " EVALUATE WS-SELECTED-SIZE WHEN 40 THRU 45 DISPLAY " Compact reports, summary documents" WHEN 55 THRU 65 DISPLAY " Standard business reports" WHEN 75 THRU 85 DISPLAY " Detailed listings, comprehensive reports" END-EVALUATE. CONDITIONAL-PAGE-BREAKS. 01 WS-CONDITION-FLAGS. 05 WS-FORCE-PAGE-BREAK PIC X VALUE 'N'. 05 WS-SECTION-COMPLETE PIC X VALUE 'N'. 05 WS-SPECIAL-FORMAT PIC X VALUE 'N'. DISPLAY "Conditional page break strategies:" DISPLAY " Strategy 1: Force break at section end" MOVE 'Y' TO WS-SECTION-COMPLETE IF WS-SECTION-COMPLETE = 'Y' DISPLAY " Would force new page for section boundary" END-IF DISPLAY " Strategy 2: Break before special formatting" MOVE 'Y' TO WS-SPECIAL-FORMAT IF WS-SPECIAL-FORMAT = 'Y' DISPLAY " Would start new page for special content" END-IF DISPLAY " Strategy 3: Prevent orphan lines" IF LINAGE-COUNTER OF REPORT-FILE > 50 DISPLAY " Would force new page to prevent orphans" END-IF DISPLAY SPACES. MULTI-SECTION-REPORTS. 01 WS-SECTION-HEADERS. 05 WS-SECTION-1 PIC X(50) VALUE "EMPLOYEE DEMOGRAPHICS". 05 WS-SECTION-2 PIC X(50) VALUE "SALARY ANALYSIS". 05 WS-SECTION-3 PIC X(50) VALUE "DEPARTMENT SUMMARY". 01 WS-SECTION-INDEX PIC 9(2). 01 WS-CURRENT-SECTION PIC X(50). DISPLAY "Multi-section report with LINAGE:" PERFORM VARYING WS-SECTION-INDEX FROM 1 BY 1 UNTIL WS-SECTION-INDEX > 3 EVALUATE WS-SECTION-INDEX WHEN 1 MOVE WS-SECTION-1 TO WS-CURRENT-SECTION WHEN 2 MOVE WS-SECTION-2 TO WS-CURRENT-SECTION WHEN 3 MOVE WS-SECTION-3 TO WS-CURRENT-SECTION END-EVALUATE DISPLAY " Section " WS-SECTION-INDEX ": " WS-CURRENT-SECTION DISPLAY " Start new page: " IF WS-SECTION-INDEX > 1 DISPLAY "YES (section boundary)" ELSE DISPLAY "NO (first section)" END-IF DISPLAY " Estimated lines: " EVALUATE WS-SECTION-INDEX WHEN 1 DISPLAY "15-20 lines" WHEN 2 DISPLAY "25-30 lines" WHEN 3 DISPLAY "10-15 lines" END-EVALUATE DISPLAY SPACES END-PERFORM.

LINAGE Applications

Report Generation
  • • Automatic page control
  • • Line counting management
  • • Page overflow handling
  • • Margin control
  • • Print formatting
Document Formatting
  • • Invoice generation
  • • Statement production
  • • List processing
  • • Form generation
  • • Multi-page documents

Interactive Tutorial

Hands-On Exercise: Employee Report with LINAGE
Practice using LINAGE for page control and automatic pagination

Exercise 1: Basic LINAGE Setup

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
FD EMPLOYEE-REPORT LINAGE IS 55 LINES WITH FOOTING AT 50 LINES AT TOP 2 LINES AT BOTTOM 2. 01 REPORT-LINE PIC X(120). PROCEDURE DIVISION. WRITE-EMPLOYEE-REPORT. OPEN OUTPUT EMPLOYEE-REPORT *> Write header MOVE "EMPLOYEE LISTING REPORT" TO REPORT-LINE WRITE REPORT-LINE *> Write detail lines with automatic page control PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 100 MOVE "EMPLOYEE DETAIL LINE" TO REPORT-LINE WRITE REPORT-LINE AT END-OF-PAGE PERFORM NEW-PAGE-PROCESSING END-PERFORM CLOSE EMPLOYEE-REPORT. NEW-PAGE-PROCESSING. DISPLAY "Page overflow - LINAGE-COUNTER: " LINAGE-COUNTER OF EMPLOYEE-REPORT.

Exercise 2: Dynamic Page Sizing

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
01 WS-PAGE-SIZE PIC 9(2). 01 WS-FOOTING-LINE PIC 9(2). 01 WS-REPORT-TYPE PIC X(10). FD FLEXIBLE-REPORT LINAGE IS WS-PAGE-SIZE LINES WITH FOOTING AT WS-FOOTING-LINE. 01 FLEX-REPORT-LINE PIC X(100). PROCEDURE DIVISION. SETUP-DYNAMIC-REPORT. MOVE "STANDARD" TO WS-REPORT-TYPE EVALUATE WS-REPORT-TYPE WHEN "COMPACT" MOVE 40 TO WS-PAGE-SIZE MOVE 35 TO WS-FOOTING-LINE WHEN "STANDARD" MOVE 60 TO WS-PAGE-SIZE MOVE 55 TO WS-FOOTING-LINE WHEN "EXTENDED" MOVE 80 TO WS-PAGE-SIZE MOVE 75 TO WS-FOOTING-LINE END-EVALUATE OPEN OUTPUT FLEXIBLE-REPORT DISPLAY "Report configured for " WS-REPORT-TYPE " format" DISPLAY "Page size: " WS-PAGE-SIZE " lines".

Best Practices

Knowledge Check

Test Your Understanding

Question 1: LINAGE Components

What are the main components of a LINAGE clause?

Answer: The main components are: LINAGE IS (lines per page), WITH FOOTING AT (footing line number), LINES AT TOP (top margin), and LINES AT BOTTOM (bottom margin). Only LINAGE IS is required.

Question 2: LINAGE-COUNTER

How does LINAGE-COUNTER work with page overflow?

Answer: LINAGE-COUNTER automatically tracks the current line number within the page. When it reaches the footing line or page limit, page overflow occurs and LINAGE-COUNTER resets to 1 for the new page.

Question 3: Practical Applications

What are common uses for LINAGE in business applications?

Answer: Common uses include generating multi-page reports, invoices with automatic pagination, employee listings, financial statements, and any document requiring consistent page formatting with headers and footers.