|
HP COBOL Reference Manual
Format 2---Report Writer Files
- A file is available if it is physically present and recognized by
the I-O system.
Table 6-16 shows the results of opening
available and unavailable Report Writer files.
- Successful OPEN statement execution makes the file's record area
available to the Report Writer Control System. If the file connector is
an external file connector, the file has only one record area for the
executable image.
- When a file is not in an open mode, no statement that references
the file can execute either implicitly or explicitly, except for the
OPEN statement.
- An OPEN statement for a file-name must execute
successfully before an INITIATE statement executes for the file.
Table 6-17 shows allowable Report Writer statements by file
organization and open mode for Report Writer files.
Technical Notes
- OPEN statement execution can result in these FILE STATUS data item
values:
File Status |
Meaning |
00
|
Open is successful.
|
05
|
Optional file not present.
|
07
|
No rewind on non-reel device.
|
35
|
File not found.
|
37
|
An open in I-O mode is attempted for a nonmass storage file, or an open
is attempted for nonmass storage file that was declared as a relative
or indexed file.
|
38
|
An open is attempted on a file closed with lock.
|
39
|
A mismatch exists between the current program's description of an index
key and the existent file's description of the key, or (for OpenVMS
systems) there is a conflict of maximum record size or record type.
|
41
|
File is already open
|
91
|
Open is unsuccessful; file locked by another access stream.
|
95
|
No file space on device.
|
30
|
All other permanent errors.
|
You must use the I-O-CONTROL statement APPLY PREALLOCATION with a value
greater than 0 (the default is 0) to enable the detection of "device
full" (file status 95) with the OPEN statement.
- Attempts to specify both X/Open standard and Hewlett-Packard
standard file-sharing syntax for the same file connector are invalid.
When the compiler cannot detect such attempts because they occur in
different compilation units, the run-time system detects and reports
the violations (file status 30). This holds for explicit and implicit
usage.
Additional References
6.8.25 PERFORM
Function
The PERFORM statement executes one or more intra-program procedures. It
returns control to the end of the PERFORM statement when all procedures
have completed execution.
first-proc
is a procedure-name that identifies a paragraph or section in the
Procedure Division. The set of statements in first-proc is the
first (or only) set of statements in the PERFORM range.
end-proc
is a procedure-name that identifies a paragraph or section in the
Procedure Division. The set of statements in end-proc is the
last set of statements in the PERFORM range.
stment
is an imperative statement.
repeat-count
is a numeric integer literal or the identifier of a numeric integer
elementary item. It controls how many times the statement set (or sets)
executes.
cond
can be any conditional expression.
var
is an index-name or the identifier of a numeric integer elementary data
item. Its value is changed by increm each time all statements
in the PERFORM range execute.
init
is a numeric literal, index-name, or the identifier of a numeric
elementary data item. It specifies the value of var before any
statement in the PERFORM range executes.
increm
is a nonzero numeric literal or the identifier of a numeric elementary
data item. It systematically changes the value of var each
time the program executes all statements in the PERFORM range.
Syntax Rules
All Formats
- If there is no first-proc, the PERFORM statement must
contain stment and the END-PERFORM phrase. If there is a
first-proc, the statement cannot have the END-PERFORM phrase.
- If either first-proc or end-proc is placed in the
Declaratives part of the Procedure Division, both must also be placed
in the same DECLARATIVES section.
- The words THRU and THROUGH are equivalent and interchangeable.
Formats 3 and 4
- If there is no TEST BEFORE or TEST AFTER phrase, TEST BEFORE is the
default.
Format 4
- If there is no first-proc, there can be no AFTER phrase.
- If var is an index-name:
- init must be an integer data item or a positive integer
literal
- increm must be an integer data item or a nonzero integer
literal
- If init is an index-name:
- var must be an integer data item
- increm must be an integer data item or a positive integer
literal
General Rules
All Formats
- When first-proc appears, the statement is an out-of-line
PERFORM statement. Otherwise, it is an in-line PERFORM statement.
- The statements in the range of first-proc to
end-proc for an out-of-line PERFORM are the statement set. For
an in-line PERFORM, the statement set is contained within the scope of
the PERFORM...END-PERFORM syntax.
- Unless restricted to in-line or out-of-line statements, all General
Rules apply to both types of PERFORM statements. An in-line PERFORM
statement operates according to the general rules for an out-of-line
PERFORM, except for periods, which are not allowed within the body of
the PERFORM. The statements in the in-line PERFORM execute in place of
the statements in the range of first-proc to end-proc.
- When the PERFORM statement executes, control transfers to the first
statement of first-proc. However, for Format 2, 3, or 4
PERFORM statements, transfer of control depends on evaluation of the
specified condition.
Transfer of control occurs only once for each
PERFORM statement executed. When transfer of control does occur, after
the statement set executes, control implicitly transfers back to the to
the end of the perform statement as follows:
- If first-proc is a paragraph-name and there is no
end-proc, the return is after the last statement of
first-proc.
- If first-proc is a section-name and there is no
end-proc, the return is after the last statement of the last
paragraph of first-proc.
- If end-proc is a paragraph-name, the return is after the
last statement of end-proc.
- If end-proc is a section-name, the return is after the
last statement of the last paragraph of end-proc.
- If the statement is an in-line PERFORM, execution ends after the
last statement of the statement set.
- first-proc and end-proc need not be related
except that first-proc is the beginning and end-proc
is the last in a consecutive series of operations.
GO TO and
PERFORM statements can occur between first-proc and
end-proc. If there are two or more logical paths to the return
point, end-proc can be a paragraph, consisting of the EXIT
statement, to which all these paths must lead.
- If a statement other than a PERFORM statement, transfers control
to the statement set, at the end of the statement set, control
transfers through the last statement of the set to the next executable
statement following the set as if no PERFORM statement referenced the
set.
- The range of a PERFORM statement consists of all statements
executed as a result of executing the PERFORM. It continues through
execution of the implicit control transfer to the end of the PERFORM
statement.
- The range of the PERFORM statement additionally includes all
statements executed as a result of a CALL, EXIT, GO TO, or PERFORM
statement. The range the PERFORM statement also includes all statements
in the Declaratives Section that can be executed if control is
transferred from statements in the range of the PERFORM statement.
- Statements executed as the result of a control transfer caused by
an EXIT PROGRAM statement are not part of the range when:
- The EXIT PROGRAM statement is specified in the same program as the
PERFORM statement, and
- The EXIT PROGRAM statement is within the range of the PERFORM
statement.
- A PERFORM statement in a fixed 6 segment can
have only one of the following in its range:
- Sections and paragraphs completely contained in one or more
nonindependent segments
- Sections and paragraphs completely contained in one independent
segment
However, the PERFORM statement range also includes any Declarative
procedures activated during its execution.
- A PERFORM statement in an independent 1 segment
can have only one of the following in its range:
- Sections and paragraphs completely contained in one or more
nonindependent segments
- Sections and paragraphs completely contained in the same
independent segment as the PERFORM statement itself
However, the PERFORM statement range also includes any Declarative
procedures activated during its execution.
- first-proc and end-proc cannot name sections or
paragraphs in any other program in the executable image. Statements in
other programs are in a PERFORM statement's range only if the range
includes a CALL statement.
- A PERFORM statement range can contain another PERFORM statement. In
that case, the included PERFORM statement's sequence of procedures must
be either totally included in, or excluded from, the logical sequence
of the first PERFORM statement.
For example:
- An active PERFORM statement whose execution point is in the range
of another active PERFORM statement must not allow control to pass to
the exit of the other active PERFORM.
- Two or more active PERFORM statements cannot have a common exit.
Use the
check
compiler option with the
perform
keyword to verify at run time that there is no recursive activation of
a PERFORM. Figure 6-2 shows valid and invalid nested PERFORM
statements.
- Undocumented results might occur when end-proc precedes
first-proc or when first-proc and end-proc
are not in the same program segment.
Figure 6-2 Valid and Invalid Nested PERFORM Statements
Note
6 Segmentation is described in
Section 6.7. HP COBOL supports segmentation for compatibility
with existing applications only. Hewlett-Packard recommends that you do
not use segmentation in new applications.
|
|