The LINE and LINES keywords represent sophisticated line control and positioning mechanisms within COBOL programming environments, providing precise line positioning capabilities, comprehensive spacing control, and advanced pagination support that enable accurate document formatting, efficient page management, and reliable output positioning. These keywords embody advanced formatting principles by supporting absolute and relative line positioning, enabling sophisticated margin control, and facilitating comprehensive page layout requirements while maintaining consistent line spacing, ensuring precise output positioning, and enabling complex document generation scenarios across enterprise applications requiring detailed print control, automated line management, and reliable document formatting with optimized performance characteristics and consistent positioning standards.
123456789101112131415161718192021222324252627282930*> LINAGE clause with LINES FD file-name LINAGE IS integer LINES WITH FOOTING AT integer LINES AT TOP integer LINES AT BOTTOM integer. *> Report Writer LINE positioning 01 report-group-name TYPE IS {PAGE-HEADING | CONTROL-HEADING | DETAIL | etc.} LINE IS {integer | PLUS integer | NEXT PAGE}. *> WRITE with line advancement WRITE record-name {BEFORE | AFTER} ADVANCING {integer LINES | PAGE}. *> Examples: FD PAYROLL-REPORT LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 3 LINES AT BOTTOM 3. 01 REPORT-HEADER TYPE IS PAGE-HEADING LINE IS 5. 01 DETAIL-LINE TYPE IS DETAIL LINE IS PLUS 1. WRITE EMPLOYEE-RECORD AFTER ADVANCING 2 LINES.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458IDENTIFICATION DIVISION. PROGRAM-ID. LINE-CONTROL-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. 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. *> File with LINAGE using LINES keyword 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). *> Invoice file with different line settings FD INVOICE-FILE LINAGE IS 45 LINES WITH FOOTING AT 40 LINES AT TOP 3 LINES AT BOTTOM 2. 01 INVOICE-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 WS-FILE-STATUS. 05 WS-RPT-STATUS PIC X(2). 05 WS-INV-STATUS PIC X(2). *> Line control variables 01 WS-LINE-CONTROL. 05 WS-CURRENT-LINE PIC 9(3) VALUE 1. 05 WS-TARGET-LINE PIC 9(3) VALUE 0. 05 WS-LINES-TO-ADVANCE PIC 9(2) VALUE 0. 05 WS-PAGE-SIZE PIC 9(2) VALUE 60. *> Line formatting examples 01 WS-REPORT-LINES. 05 WS-HEADER-LINE PIC X(132) VALUE " EMPLOYEE REPORT". 05 WS-SUBHEADER-LINE PIC X(132) VALUE " QUARTERLY SUMMARY". 05 WS-COLUMN-LINE PIC X(132) VALUE "EMP-ID NAME DEPT SALARY". 05 WS-SEPARATOR-LINE PIC X(132) VALUE ALL "-". 01 WS-DETAIL-LINE. 05 WS-EMP-ID PIC Z(6). 05 FILLER PIC X(4) VALUE SPACES. 05 WS-EMP-NAME PIC X(25). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-EMP-DEPT PIC X(10). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-EMP-SALARY PIC $,$$$,$$9.99. 05 FILLER PIC X(71) VALUE SPACES. *> Sample data 01 WS-SAMPLE-EMPLOYEES. 05 WS-EMP-TABLE OCCURS 10 TIMES. 10 WS-SAMPLE-ID PIC 9(6). 10 WS-SAMPLE-NAME PIC X(25). 10 WS-SAMPLE-DEPT PIC X(10). 10 WS-SAMPLE-SAL PIC 9(7)V99. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== LINE AND LINES DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-FILES PERFORM DEMONSTRATE-BASIC-LINE-CONTROL PERFORM DEMONSTRATE-ADVANCED-POSITIONING PERFORM DEMONSTRATE-LINE-SPACING PERFORM FINALIZE-FILES DISPLAY "=== LINE CONTROL DEMO COMPLETE ===" STOP RUN. INITIALIZE-FILES. DISPLAY "Initializing files with LINE 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 PERFORM INITIALIZE-SAMPLE-DATA DISPLAY "Files opened with LINAGE settings:" DISPLAY " Report: 60 LINES, 5 AT TOP, 3 AT BOTTOM" DISPLAY " Invoice: 45 LINES, 3 AT TOP, 2 AT BOTTOM" DISPLAY SPACES. INITIALIZE-SAMPLE-DATA. MOVE 123456 TO WS-SAMPLE-ID(1) MOVE "JOHN SMITH" TO WS-SAMPLE-NAME(1) MOVE "SALES" TO WS-SAMPLE-DEPT(1) MOVE 55000.00 TO WS-SAMPLE-SAL(1) MOVE 234567 TO WS-SAMPLE-ID(2) MOVE "MARY JOHNSON" TO WS-SAMPLE-NAME(2) MOVE "MARKETING" TO WS-SAMPLE-DEPT(2) MOVE 62000.00 TO WS-SAMPLE-SAL(2) MOVE 345678 TO WS-SAMPLE-ID(3) MOVE "DAVID BROWN" TO WS-SAMPLE-NAME(3) MOVE "IT" TO WS-SAMPLE-DEPT(3) MOVE 72000.00 TO WS-SAMPLE-SAL(3). DEMONSTRATE-BASIC-LINE-CONTROL. DISPLAY "=== BASIC LINE CONTROL ===" DISPLAY SPACES PERFORM WRITE-HEADERS-WITH-SPACING PERFORM WRITE-DETAILS-WITH-LINES PERFORM DEMONSTRATE-LINE-ADVANCEMENT. WRITE-HEADERS-WITH-SPACING. DISPLAY "Writing headers with controlled line spacing..." *> Write main header WRITE REPORT-RECORD FROM WS-HEADER-LINE DISPLAY "Header written at line: " LINAGE-COUNTER OF REPORT-FILE *> Advance 2 lines for spacing WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES DISPLAY "Spacing added, now at line: " LINAGE-COUNTER OF REPORT-FILE *> Write subheader WRITE REPORT-RECORD FROM WS-SUBHEADER-LINE DISPLAY "Subheader written at line: " LINAGE-COUNTER OF REPORT-FILE *> Single line advance WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINES *> Write column headers WRITE REPORT-RECORD FROM WS-COLUMN-LINE WRITE REPORT-RECORD FROM WS-SEPARATOR-LINE WRITE REPORT-RECORD FROM SPACES DISPLAY "Headers complete at line: " LINAGE-COUNTER OF REPORT-FILE DISPLAY SPACES. WRITE-DETAILS-WITH-LINES. 01 WS-EMP-INDEX PIC 9(2) VALUE 0. DISPLAY "Writing detail lines with line control..." PERFORM VARYING WS-EMP-INDEX FROM 1 BY 1 UNTIL WS-EMP-INDEX > 3 *> Format detail line MOVE WS-SAMPLE-ID(WS-EMP-INDEX) TO WS-EMP-ID MOVE WS-SAMPLE-NAME(WS-EMP-INDEX) TO WS-EMP-NAME MOVE WS-SAMPLE-DEPT(WS-EMP-INDEX) TO WS-EMP-DEPT MOVE WS-SAMPLE-SAL(WS-EMP-INDEX) TO WS-EMP-SALARY *> Write with single line advancement WRITE REPORT-RECORD FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINES DISPLAY "Employee " WS-EMP-INDEX " written at line: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Detail lines complete" DISPLAY SPACES. DEMONSTRATE-LINE-ADVANCEMENT. 01 WS-ADVANCE-TEST PIC X(132) VALUE "LINE ADVANCEMENT TEST". 01 WS-TEST-COUNT PIC 9(2) VALUE 0. DISPLAY "Demonstrating various line advancement options..." *> Test different advancement amounts PERFORM VARYING WS-TEST-COUNT FROM 1 BY 1 UNTIL WS-TEST-COUNT > 5 EVALUATE WS-TEST-COUNT WHEN 1 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 1 LINES DISPLAY "Single line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 2 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 2 LINES DISPLAY "Double line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 3 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST AFTER ADVANCING 3 LINES DISPLAY "Triple line advance to: " LINAGE-COUNTER OF REPORT-FILE WHEN 4 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST BEFORE ADVANCING 1 LINES DISPLAY "Before advancing to: " LINAGE-COUNTER OF REPORT-FILE WHEN 5 WRITE REPORT-RECORD FROM WS-ADVANCE-TEST DISPLAY "No advancement specified, line: " LINAGE-COUNTER OF REPORT-FILE END-EVALUATE END-PERFORM DISPLAY "Line advancement tests complete" DISPLAY SPACES. DEMONSTRATE-ADVANCED-POSITIONING. DISPLAY "=== ADVANCED LINE POSITIONING ===" DISPLAY SPACES PERFORM CALCULATE-LINE-POSITIONS PERFORM DEMONSTRATE-CONDITIONAL-SPACING PERFORM SHOW-LINE-CALCULATION-METHODS. CALCULATE-LINE-POSITIONS. 01 WS-CALC-VARS. 05 WS-HEADER-LINE-POS PIC 9(2) VALUE 10. 05 WS-DETAIL-START-LINE PIC 9(2) VALUE 15. 05 WS-FOOTER-LINE-POS PIC 9(2) VALUE 55. 05 WS-AVAILABLE-LINES PIC 9(2). 05 WS-LINES-USED PIC 9(2). 01 WS-POSITION-MESSAGE PIC X(80). DISPLAY "Calculating optimal line positions..." COMPUTE WS-AVAILABLE-LINES = WS-FOOTER-LINE-POS - WS-DETAIL-START-LINE MOVE LINAGE-COUNTER OF REPORT-FILE TO WS-LINES-USED DISPLAY " Current position: " WS-LINES-USED DISPLAY " Header line target: " WS-HEADER-LINE-POS DISPLAY " Detail area start: " WS-DETAIL-START-LINE DISPLAY " Footer line target: " WS-FOOTER-LINE-POS DISPLAY " Available detail lines: " WS-AVAILABLE-LINES IF WS-LINES-USED < WS-HEADER-LINE-POS MOVE "POSITION BEFORE HEADER AREA" TO WS-POSITION-MESSAGE ELSE IF WS-LINES-USED < WS-DETAIL-START-LINE MOVE "POSITION IN HEADER AREA" TO WS-POSITION-MESSAGE ELSE IF WS-LINES-USED < WS-FOOTER-LINE-POS MOVE "POSITION IN DETAIL AREA" TO WS-POSITION-MESSAGE ELSE MOVE "POSITION IN FOOTER AREA" TO WS-POSITION-MESSAGE END-IF END-IF END-IF DISPLAY " Current area: " WS-POSITION-MESSAGE DISPLAY SPACES. DEMONSTRATE-CONDITIONAL-SPACING. 01 WS-SPACING-VARS. 05 WS-SECTION-TYPE PIC X(10). 05 WS-LINES-BEFORE PIC 9(2). 05 WS-LINES-AFTER PIC 9(2). 05 WS-SPACING-MESSAGE PIC X(60). 01 WS-SECTION-CONTENT PIC X(132). 01 WS-SECTION-COUNT PIC 9(2) VALUE 0. DISPLAY "Demonstrating conditional line spacing..." PERFORM VARYING WS-SECTION-COUNT FROM 1 BY 1 UNTIL WS-SECTION-COUNT > 3 EVALUATE WS-SECTION-COUNT WHEN 1 MOVE "SUMMARY" TO WS-SECTION-TYPE MOVE 2 TO WS-LINES-BEFORE MOVE 1 TO WS-LINES-AFTER WHEN 2 MOVE "DETAIL" TO WS-SECTION-TYPE MOVE 1 TO WS-LINES-BEFORE MOVE 1 TO WS-LINES-AFTER WHEN 3 MOVE "TOTAL" TO WS-SECTION-TYPE MOVE 3 TO WS-LINES-BEFORE MOVE 2 TO WS-LINES-AFTER END-EVALUATE *> Apply spacing before section PERFORM VARYING WS-LINES-TO-ADVANCE FROM 1 BY 1 UNTIL WS-LINES-TO-ADVANCE > WS-LINES-BEFORE WRITE REPORT-RECORD FROM SPACES END-PERFORM *> Write section content MOVE WS-SECTION-TYPE TO WS-SECTION-CONTENT WRITE REPORT-RECORD FROM WS-SECTION-CONTENT *> Apply spacing after section PERFORM VARYING WS-LINES-TO-ADVANCE FROM 1 BY 1 UNTIL WS-LINES-TO-ADVANCE > WS-LINES-AFTER WRITE REPORT-RECORD FROM SPACES END-PERFORM DISPLAY "Section " WS-SECTION-TYPE " positioned with " WS-LINES-BEFORE " lines before, " WS-LINES-AFTER " lines after" DISPLAY " Now at line: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Conditional spacing complete" DISPLAY SPACES. SHOW-LINE-CALCULATION-METHODS. 01 WS-CALC-METHODS. 05 WS-ABSOLUTE-LINE PIC 9(2) VALUE 45. 05 WS-RELATIVE-OFFSET PIC 9(2) VALUE 5. 05 WS-CALCULATED-POS PIC 9(2). 05 WS-PERCENTAGE-POS PIC 9(2). 01 WS-METHOD-LINE PIC X(132). DISPLAY "Line calculation methods:" *> Absolute positioning MOVE WS-ABSOLUTE-LINE TO WS-CALCULATED-POS MOVE "ABSOLUTE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Absolute line " WS-ABSOLUTE-LINE " target" *> Relative positioning COMPUTE WS-CALCULATED-POS = LINAGE-COUNTER OF REPORT-FILE + WS-RELATIVE-OFFSET MOVE "RELATIVE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Relative: current " LINAGE-COUNTER OF REPORT-FILE " + " WS-RELATIVE-OFFSET " = " WS-CALCULATED-POS *> Percentage-based positioning COMPUTE WS-PERCENTAGE-POS = (WS-PAGE-SIZE * 75) / 100 MOVE "PERCENTAGE POSITIONING EXAMPLE" TO WS-METHOD-LINE DISPLAY " Percentage: 75% of " WS-PAGE-SIZE " = " WS-PERCENTAGE-POS DISPLAY "Line calculation methods demonstrated" DISPLAY SPACES. DEMONSTRATE-LINE-SPACING. DISPLAY "=== LINE SPACING PATTERNS ===" DISPLAY SPACES PERFORM SINGLE-LINE-SPACING PERFORM DOUBLE-LINE-SPACING PERFORM CUSTOM-LINE-SPACING. SINGLE-LINE-SPACING. 01 WS-SINGLE-COUNT PIC 9(2) VALUE 0. 01 WS-SINGLE-LINE PIC X(132) VALUE "SINGLE SPACED LINE". DISPLAY "Single line spacing example..." PERFORM VARYING WS-SINGLE-COUNT FROM 1 BY 1 UNTIL WS-SINGLE-COUNT > 3 WRITE REPORT-RECORD FROM WS-SINGLE-LINE AFTER ADVANCING 1 LINES DISPLAY " Single line " WS-SINGLE-COUNT " at position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY SPACES. DOUBLE-LINE-SPACING. 01 WS-DOUBLE-COUNT PIC 9(2) VALUE 0. 01 WS-DOUBLE-LINE PIC X(132) VALUE "DOUBLE SPACED LINE". DISPLAY "Double line spacing example..." PERFORM VARYING WS-DOUBLE-COUNT FROM 1 BY 1 UNTIL WS-DOUBLE-COUNT > 3 WRITE REPORT-RECORD FROM WS-DOUBLE-LINE AFTER ADVANCING 2 LINES DISPLAY " Double line " WS-DOUBLE-COUNT " at position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY SPACES. CUSTOM-LINE-SPACING. 01 WS-CUSTOM-VARS. 05 WS-CUSTOM-COUNT PIC 9(2) VALUE 0. 05 WS-SPACING-PATTERN PIC 9(2). 01 WS-CUSTOM-LINE PIC X(132) VALUE "CUSTOM SPACED LINE". DISPLAY "Custom line spacing patterns..." PERFORM VARYING WS-CUSTOM-COUNT FROM 1 BY 1 UNTIL WS-CUSTOM-COUNT > 4 *> Vary spacing pattern: 1, 2, 3, 1 COMPUTE WS-SPACING-PATTERN = FUNCTION MOD(WS-CUSTOM-COUNT - 1, 3) + 1 WRITE REPORT-RECORD FROM WS-CUSTOM-LINE AFTER ADVANCING WS-SPACING-PATTERN LINES DISPLAY " Custom line " WS-CUSTOM-COUNT " with " WS-SPACING-PATTERN " line spacing" DISPLAY " Position: " LINAGE-COUNTER OF REPORT-FILE END-PERFORM DISPLAY "Custom spacing complete" DISPLAY SPACES. FINALIZE-FILES. DISPLAY "=== FINALIZING LINE CONTROL DEMO ===" DISPLAY SPACES PERFORM WRITE-FINAL-SUMMARY PERFORM CLOSE-ALL-FILES. WRITE-FINAL-SUMMARY. 01 WS-FINAL-SUMMARY. 05 WS-SUMMARY-HEADER PIC X(132) VALUE " FINAL LINE POSITION SUMMARY". 05 WS-SUMMARY-LINE PIC X(132). 01 WS-FINAL-POSITION PIC 9(3). MOVE LINAGE-COUNTER OF REPORT-FILE TO WS-FINAL-POSITION WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 3 LINES WRITE REPORT-RECORD FROM WS-SUMMARY-HEADER WRITE REPORT-RECORD FROM SPACES MOVE "TOTAL LINES WRITTEN: " TO WS-SUMMARY-LINE(1:19) MOVE WS-FINAL-POSITION TO WS-SUMMARY-LINE(20:3) WRITE REPORT-RECORD FROM WS-SUMMARY-LINE DISPLAY "Final summary written" DISPLAY " Report final position: " WS-FINAL-POSITION DISPLAY " Invoice final position: " LINAGE-COUNTER OF INVOICE-FILE DISPLAY SPACES. CLOSE-ALL-FILES. CLOSE REPORT-FILE CLOSE INVOICE-FILE DISPLAY "All files closed successfully" DISPLAY "LINE and LINES demonstration completed".
123456789101112131415161718192021222324252627282930313233FD FORMATTED-REPORT LINAGE IS 50 LINES WITH FOOTING AT 45 LINES AT TOP 2 LINES AT BOTTOM 3. 01 FORMATTED-LINE PIC X(100). 01 WS-LINE-SPACING. 05 WS-HEADER-SPACING PIC 9(2) VALUE 2. 05 WS-DETAIL-SPACING PIC 9(2) VALUE 1. 05 WS-SECTION-SPACING PIC 9(2) VALUE 3. PROCEDURE DIVISION. FORMAT-WITH-LINES. OPEN OUTPUT FORMATTED-REPORT *> Write header with controlled spacing MOVE "REPORT TITLE" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-HEADER-SPACING LINES *> Write details with single spacing PERFORM 10 TIMES MOVE "DETAIL LINE" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-DETAIL-SPACING LINES END-PERFORM *> Write section break MOVE "SECTION BREAK" TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-SECTION-SPACING LINES.
123456789101112131415161718192021222324252627282930313201 WS-SPACING-CONTROL. 05 WS-CURRENT-SECTION PIC X(10). 05 WS-LINES-NEEDED PIC 9(2). 05 WS-SPACING-AMOUNT PIC 9(2). 01 WS-SECTION-DATA. 05 WS-SECTION-NAMES OCCURS 3 TIMES PIC X(10). 05 WS-SECTION-SPACING OCCURS 3 TIMES PIC 9(2). PROCEDURE DIVISION. VARIABLE-SPACING-EXAMPLE. *> Initialize section spacing rules MOVE "HEADER" TO WS-SECTION-NAMES(1) MOVE 3 TO WS-SECTION-SPACING(1) MOVE "BODY" TO WS-SECTION-NAMES(2) MOVE 1 TO WS-SECTION-SPACING(2) MOVE "FOOTER" TO WS-SECTION-NAMES(3) MOVE 2 TO WS-SECTION-SPACING(3) *> Apply variable spacing PERFORM VARYING WS-CURRENT-SECTION FROM 1 BY 1 UNTIL WS-CURRENT-SECTION > 3 MOVE WS-SECTION-SPACING(WS-CURRENT-SECTION) TO WS-SPACING-AMOUNT MOVE WS-SECTION-NAMES(WS-CURRENT-SECTION) TO FORMATTED-LINE WRITE FORMATTED-LINE AFTER ADVANCING WS-SPACING-AMOUNT LINES DISPLAY "Section " WS-SECTION-NAMES(WS-CURRENT-SECTION) " with " WS-SPACING-AMOUNT " line spacing" END-PERFORM.
How are LINE and LINES used in LINAGE clauses?
Answer: LINES specifies quantities (LINAGE IS 60 LINES, LINES AT TOP 3), while LINE would be used for absolute positioning. LINAGE controls page size and margins using LINES keyword for quantities.
What's the difference between BEFORE and AFTER ADVANCING with LINES?
Answer: BEFORE ADVANCING moves the paper before writing the record, while AFTER ADVANCING moves the paper after writing. AFTER ADVANCING is more common and moves to the next line(s) after printing.
What are practical applications of LINE and LINES control?
Answer: Applications include: report formatting with consistent spacing, invoice generation with proper margins, form printing with precise positioning, and multi-section documents with controlled line breaks.