This document describes various ways of controlling page breaks in a report, the output of page titles at the top of each report page and the generation of empty lines in an output report.
The following topics are covered:
For each page output via a DISPLAY or
                       WRITE statement,
                       Natural automatically generates a single default title line. This title line
                       contains the page number, the date and the time of day.
               
Example:
WRITE 'HELLO' END
The above program produces the following output with default page title:
Page      1                                                  04-12-14  13:19:33
                                                                               
HELLO                                                                          
                   
                 
                  
                  
               If you wish your report to be output without page titles, you add the
                       keyword NOTITLE to the
                       statement DISPLAY or
                       WRITE.
               
** Example 'DISPLX20': DISPLAY (with NOTITLE) ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 CITY 2 NAME 2 FIRST-NAME END-DEFINE * READ (5) EMPLOY-VIEW BY CITY FROM 'BOSTON' DISPLAY NOTITLE NAME FIRST-NAME CITY END-READ END
Output of Program DISPLX20:
               
NAME FIRST-NAME CITY -------------------- -------------------- -------------------- SHAW LESLIE BOSTON STANWOOD VERNON BOSTON CREMER WALT BOSTON PERREAULT BRENDA BOSTON COHEN JOHN BOSTON
WRITE NOTITLE 'HELLO' END
The above program produces the following output without page title:
HELLO
If you wish a page title of your own to be output instead of the Natural
                       default page title, you use the statement WRITE TITLE.
               
The following topics are covered below:
With the statement WRITE
                              TITLE, you specify the text for your title (in
                        apostrophes).
               
WRITE TITLE 'THIS IS MY PAGE TITLE' WRITE 'HELLO' END
The above program produces the following output:
THIS IS MY PAGE TITLE HELLO
With the SKIP option of
                        the WRITE TITLE
                        statement, you can specify the number of empty lines to be output immediately
                        below the title line. After the keyword SKIP, you specify the
                        number of empty lines to be inserted.
               
WRITE TITLE 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
The above program produces the following output:
                             THIS IS MY PAGE TITLE                             
                                                                               
                                                                               
HELLO                                                                          
                    SKIP is not only available as part of the
                        WRITE TITLE
                        statement, but also as a stand-alone
                           statement.
               
By default, the page title is centered on the page and not underlined.
The WRITE
                              TITLE statement provides the following options which can be
                        used independent of each other:
               
| Option | Effect | 
|---|---|
| LEFT JUSTIFIED | Causes the page trailer to be displayed left-justified. | 
| UNDERLINED | Causes the title to be displayed underlined. The
                                     underlining runs the width of the line size (see also Natural profile and
                                     session parameter LS). By default, titles
                                     are underlined with a hyphen (-). However, with theUCsession
                                     parameter you can specify another character to be used as underlining character
                                     (see Underlining Character
                                        for Titles and Headers). | 
The following example shows the effect of the
                        LEFT JUSTIFIED and
                           UNDERLINED options:
               
WRITE TITLE LEFT JUSTIFIED UNDERLINED 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
The above program produces the following output:
THIS IS MY PAGE TITLE                                                          
-------------------------------------------------------------------------------
                                                                               
                                                                               
HELLO                                                                          
                    The WRITE
                              TITLE statement is executed whenever a new page is initiated
                        for the report.
               
In the following examples, the system variable
                        *PAGE-NUMBER is used in conjunction with the
                        WRITE TITLE statement to output the page number in the title
                        line.
               
** Example 'WTITLX01': WRITE TITLE (with *PAGE-NUMBER)
************************************************************************
DEFINE DATA LOCAL
1 VEHIC-VIEW VIEW OF VEHICLES
  2 MAKE
  2 YEAR
  2 MAINT-COST (1)
END-DEFINE
*
LIMIT 5
*
READ VEHIC-VIEW
END-ALL
SORT BY YEAR USING MAKE MAINT-COST (1)
  DISPLAY NOTITLE YEAR MAKE MAINT-COST (1)
  AT BREAK OF YEAR
    MOVE 1 TO *PAGE-NUMBER
    NEWPAGE
  END-BREAK
  /*
  WRITE TITLE LEFT JUSTIFIED
        'YEAR:' YEAR 15X 'PAGE' *PAGE-NUMBER
END-SORT
END 
                    Output of Program WTITLX01:
               
YEAR: 1980 PAGE 1 YEAR MAKE MAINT-COST ----- -------------------- ---------- 1980 RENAULT 20000 1980 RENAULT 20000 1980 PEUGEOT 20000
A logical page is the output produced by a Natural program. A physical page is your terminal screen on which the output is displayed; or it may be the piece of paper on which the output is printed.
The size of the logical page is determined by the number of lines output by the Natural program.
If more lines are output than fit onto one screen, the logical page will exceed the physical screen, and the remaining lines will be displayed on the next screen.

Note:
 If information you wish to appear at the bottom of the screen (for
                          example, output created by a WRITE
                                TRAILER or AT END OF
                                PAGE statement) is output on the next screen instead, reduce
                          the logical page size accordingly (with the session parameter
                          PS, which is
                          discussed below).
                  
With the parameter PS (Page Size for
                       Natural Reports), you determine the maximum number of lines per (logical) page
                       for a report.
               
When the number of lines specified with the PS
                       parameter is reached, a page advance occurs (unless page advance is controlled
                       with a NEWPAGE or
                       EJECT statement; see
                       Page Advance
                          Controlled by EJ Parameter below).
               
The PS parameter can be set either at session
                       level with the system command
                       GLOBALS, or within
                       a program with the following statements:
               
 FORMAT PS=nn
 DISPLAY (PS=nn)
 WRITE (PS=nn)
 WRITE TITLE (PS=nn)
 WRITE TRAILER (PS=nn)
 INPUT (PS=nn)
A page advance can be triggered by one of the following methods:
These methods are discussed below.
With the session parameter EJ (Page Eject), you
                        determine whether page ejects are to be performed or not. By default,
                        EJ=ON applies, which means that page ejects will be
                        performed as specified.
               
If you specify EJ=OFF, page break information
                        will be ignored. This may be useful to save paper during test runs where page
                        ejects are not needed.
               
The EJ parameter can be set at session
                        level with the system command
                        GLOBALS; for
                        example:
               
GLOBALS EJ=OFF
The EJ parameter setting is
                        overridden by the EJECT
                        statement.
               
The following topics are covered below:
The EJECT
                         statement causes a page advance without a title or header line being
                         generated on the next page. A new physical page is started without any
                         top-of-page or end-of-page processing being performed (for example, no
                         WRITE TRAILER or
                         AT END OF PAGE,
                         WRITE TITLE,
                         AT TOP OF PAGE or
                         *PAGE-NUMBER
                         processing).
               
The EJECT
                         statement overrides the EJ parameter
                         setting.
               
The NEWPAGE
                         statement causes a page advance with associated end-of-page and
                         top-of-page processing. A trailer line will be displayed, if specified. A title
                         line, either default or user-specified, will be displayed on the new page,
                         unless the NOTITLE option
                         has been specified in a DISPLAY or
                         WRITE statement (as
                         described above).
               
If the NEWPAGE statement is not used,
                         page advance is automatically controlled by the setting of the
                         PS parameter;
                         see Page Size - PS
                            Parameter above).
               
Both the NEWPAGE statement and the
                        EJECT statement provide
                        a WHEN LESS THAN
                              n LINES LEFT option. With this
                        option, you specify a number of lines (n). The
                        NEWPAGE/EJECT statement will then be executed if - at
                        the time the statement is processed - less than n
                        lines are available on the current page.
               
FORMAT PS=55 ... NEWPAGE WHEN LESS THAN 7 LINES LEFT ...
In this example, the page size is set to 55 lines.
If only 6 or less lines are left on the current page at the time when
                        the NEWPAGE statement
                        is processed, the NEWPAGE statement is executed and a page advance
                        occurs. If 7 or more lines are left, the NEWPAGE statement is not
                        executed and no page advance occurs; the page advance then occurs depending on
                        the session parameter PS (Page Size for
                        Natural Reports), that is, after 55 lines.
               
** Example 'NEWPAX02': NEWPAGE (in combination with EJECT and
**                     parameter PS)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 CITY
  2 NAME
  2 JOB-TITLE
END-DEFINE
*
FORMAT PS=15
*
READ (9) EMPLOY-VIEW BY CITY STARTING FROM 'BOSTON'
  AT START OF DATA
    EJECT
    WRITE /// 20T '%' (29) /
              20T '%%'                          47T '%%' /
              20T '%%' 3X 'REPORT OF EMPLOYEES' 47T '%%' /
              20T '%%' 3X '  SORTED BY CITY   ' 47T '%%' /
              20T '%%'                          47T '%%' /
              20T '%' (29) /
    NEWPAGE
  END-START
  AT BREAK OF CITY
    NEWPAGE WHEN LESS 3 LINES LEFT
  END-BREAK
  DISPLAY CITY (IS=ON) NAME JOB-TITLE
END-READ
END 
                    
                   
                 
                  
                  
               The NEWPAGE
                       statement also provides a WITH TITLE option.
                       If this option is not used, a default title will appear at the top of the new
                       page or a WRITE TITLE
                       statement or NOTITLE clause
                       will be executed.
               
The WITH
                             TITLE option of the NEWPAGE statement allows you
                       to override these with a title of your own choice. The syntax of the WITH
                          TITLE option is the same as for the
                       WRITE
                             TITLE statement.
               
NEWPAGE WITH TITLE LEFT JUSTIFIED 'PEOPLE LIVING IN BOSTON:'
The following program illustrates the use of the session parameter
                       PS (Page Size
                       for Natural Reports) and the NEWPAGE statement. Moreover,
                       the system variable *PAGE-NUMBER
                       is used to display the current page number.
               
** Example 'NEWPAX01': NEWPAGE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 CITY
  2 DEPT
END-DEFINE
*
FORMAT PS=20
READ (5) VIEWEMP BY CITY STARTING FROM 'M'
  DISPLAY NAME 'DEPT' DEPT 'LOCATION' CITY
  AT BREAK OF CITY
    NEWPAGE WITH TITLE LEFT JUSTIFIED
           'EMPLOYEES BY CITY - PAGE:' *PAGE-NUMBER
  END-BREAK
END-READ
END 
                   Output of Program NEWPAX01:
               
Note the position of the page breaks and the title line:
Page      1                                                  04-11-11  14:15:54
                                                                               
        NAME          DEPT        LOCATION                              
-------------------- ------ --------------------                         
                                                                               
FICKEN               TECH10 MADISON                                      
KELLOGG              TECH10 MADISON                                      
ALEXANDER            SALE20 MADISON           
 
                   Page 2:
EMPLOYEES BY CITY - PAGE:      2                                               
        NAME          DEPT        LOCATION                               
-------------------- ------ --------------------                         
                                                                           
DE JUAN              SALE03 MADRID                                       
DE LA MADRID         PROD01 MADRID 
 
                   Page 3:
EMPLOYEES BY CITY - PAGE: 3
The following topics are covered below:
The WRITE
                              TRAILER statement is used to output text (in apostrophes) at
                        the bottom of a page.
               
WRITE TRAILER 'THIS IS THE END OF THE PAGE'
The statement is executed when an end-of-page condition is detected, or
                        as a result of a SKIP or
                        NEWPAGE
                        statement.
               
As the end-of-page condition is checked only after an entire
                        DISPLAY or
                        WRITE statement has
                        been processed, it may occur that the logical page size (that is, the number of
                        lines output by a DISPLAY or
                        WRITE statement) causes
                        the physical size of the output page to be exceeded before the
                        WRITE TRAILER
                        statement is executed.
               
To ensure that a page trailer actually appears at the bottom of a
                        physical page, you should set the logical page size (with the
                        PS session
                        parameter) to a value less than the physical page size.
               
By default, the page trailer is displayed centered on the page and not underlined.
The WRITE
                              TRAILER statement provides the following options which can be
                        used independent of each other:
               
| Option | Effect | 
|---|---|
| LEFT JUSTIFIED | Causes the page trailer to be displayed left justified. | 
| UNDERLINED | The underlining runs the width of the line size
                                     (see also Natural profile and session parameter LS). By default, titles
                                     are underlined with a hyphen (-). However, with theUCsession
                                     parameter you can specify another character to be used as underlining character
                                     (see Underlining Character for
                                        Titles and Headers). | 
The following examples show the use of the
                        LEFT
                              JUSTIFIED and UNDERLINED options of the
                        WRITE TRAILER
                        statement:
               
WRITE TRAILER LEFT JUSTIFIED UNDERLINED 'THIS IS THE END OF THE PAGE'
** Example 'WTITLX02': WRITE TITLE AND WRITE TRAILER
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 CITY
  2 NAME
  2 FIRST-NAME
  2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
       *TIME
   5X  'PEOPLE LIVING IN SALT LAKE CITY'
   21X 'PAGE:' *PAGE-NUMBER /
   15X 'AS OF' *DAT4E //
*
WRITE TRAILER UNDERLINED 'REGISTER OF' / 'SALT LAKE CITY'
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
  DISPLAY  NAME /
           FIRST-NAME
           'HOME/CITY' CITY
           'STREET/OR BOX NO.' ADDRESS-LINE (1)
  SKIP 1
END-READ
END 
                    
                   
                 
                  
                  
               The SKIP statement is used to generate one or more blank
                       lines in an output report.
               
** Example 'SKIPX01': SKIP (in conjunction with WRITE and DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 CITY
  2 NAME
  2 FIRST-NAME
  2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
     'PEOPLE LIVING IN SALT LAKE CITY AS OF' *DAT4E 7X
     'PAGE:' *PAGE-NUMBER
SKIP 3
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
  DISPLAY NAME / FIRST-NAME CITY ADDRESS-LINE (1)
  SKIP 1
END-READ
END 
                   ** Example 'SKIPX02': SKIP (in conjunction with DISPLAY VERT)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 CITY
  2 JOB-TITLE
END-DEFINE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
  DISPLAY NOTITLE VERT
          NAME FIRST-NAME / CITY
  SKIP 3
END-READ
*
NEWPAGE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
  DISPLAY NOTITLE
          NAME FIRST-NAME / CITY
  SKIP 3
END-READ
END 
                   
                 
                  
                  
               The AT TOP OF
                             PAGE statement is used to specify any processing that is to
                       be performed whenever a new page of the report is started.
               
If the AT TOP OF PAGE processing produces any output, this
                       will be output below the page title (with a skipped line in between).
               
By default, this output is displayed left-justified on the page.
** Example 'ATTOPX01': AT TOP OF PAGE
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 MAR-STAT
  2 BIRTH
  2 CITY
  2 JOB-TITLE
  2 DEPT
END-DEFINE
*
LIMIT 10
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'
  DISPLAY NOTITLE (AL=10)
          NAME DEPT JOB-TITLE CITY 5X
          MAR-STAT 'DATE OF/BIRTH' BIRTH (EM=YY-MM-DD)
  /*
  AT TOP OF PAGE
    WRITE /   '-BUSINESS INFORMATION-'
          26X '-PRIVATE INFORMATION-'
  END-TOPPAGE
END-READ
END 
                   Output of Program ATTOPX01:
               
-BUSINESS INFORMATION-                          -PRIVATE INFORMATION-
   NAME    DEPARTMENT  CURRENT      CITY         MARITAL   DATE OF
              CODE     POSITION                   STATUS    BIRTH
---------- ---------- ---------- ----------     ---------- --------
 
CREMER     TECH10     ANALYST    GREENVILLE     S          70-01-01
MARKUSH    SALE00     TRAINEE    LOS ANGELE     D          79-03-14
GEE        TECH05     MANAGER    CHAPEL HIL     M          41-02-04
KUNEY      TECH10     DBA        DETROIT        S          40-02-13
NEEDHAM    TECH10     PROGRAMMER CHATTANOOG     S          55-08-05
JACKSON    TECH10     PROGRAMMER ST LOUIS       D          70-01-01
PIETSCH    MGMT10     SECRETARY  VISTA          M          40-01-09
PAUL       MGMT10     SECRETARY  NORFOLK        S          43-07-07
HERZOG     TECH05     MANAGER    CHATTANOOG     S          52-09-16
DEKKER     TECH10     DBA        MOBILE         W          40-03-03
 
                   
                 
                  
                  
               The AT END OF
                             PAGE statement is used to specify any processing that is to
                       be performed whenever an end-of-page condition occurs.
               
If the AT END OF PAGE processing produces any output, this
                       will be output after any page
                          trailer (as specified with the WRITE TRAILER statement).
               
By default, this output is displayed left-justified on the page.
The same considerations described
                          above for page trailers regarding physical and logical page sizes
                       and the number of lines output by a DISPLAY or
                       WRITE statement also
                       apply to AT END OF
                             PAGE output.
               
** Example 'ATENPX01': AT END OF PAGE (with system function available
**                     via GIVE SYSTEM FUNCTIONS in DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 JOB-TITLE
  2 SALARY (1)
END-DEFINE
*
READ (10) EMPLOY-VIEW BY PERSONNEL-ID = '20017000'
  DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS
          NAME JOB-TITLE 'SALARY' SALARY(1)
  /*
  AT END OF PAGE
    WRITE / 24T 'AVERAGE SALARY: ...' AVER(SALARY(1))
  END-ENDPAGE
END-READ
END 
                   Output of Program ATENPX01:
               
        NAME                  CURRENT            SALARY
                             POSITION
-------------------- ------------------------- ----------
 
CREMER               ANALYST                        34000
MARKUSH              TRAINEE                        22000
GEE                  MANAGER                        39500
KUNEY                DBA                            40200
NEEDHAM              PROGRAMMER                     32500
JACKSON              PROGRAMMER                     33000
PIETSCH              SECRETARY                      22000
PAUL                 SECRETARY                      23000
HERZOG               MANAGER                        48500
DEKKER               DBA                            48000
 
                       
AVERAGE SALARY: ...      34270            
             
                   
                 
                  
                  
               See the following example program: