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 the UC session
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 the UC session 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: