Compaq COBOL
Reference Manual
6.7 Segmentation
Compaq COBOL programs execute in a virtual memory environment.
Therefore, programs need not manage physical memory by overlaying
Procedure Division code. Compaq COBOL provides support for
segmentation only for compatibility with existing applications
developed on older hardware such as the PDP-11. You should not use
segmentation in newly written COBOL programs since segmentation results
in the generation of extra code which might impact performance.
Segmentation controls the assignment of Procedure Division sections to
fixed or independent segments. The optional segment-number in
the section header determines the type of segment.
section-name
names a Procedure Division section.
segment-number
must be an integer in the range 0 to 99. If there is no
segment-number in a section header, the implied
segment-number is 0.
segment-number classifies a segment into fixed
segments or independent segments. Sections
with segment-numbers from 0 to 49 are in fixed segments. Those
with segment-numbers from 50 to 99 are in independent segments.
Sections in the Declaratives part of the Procedure Division must have
segment-numbers less than 50.
A segment consists of all sections that have the same
segment-number.
Both fixed and independent segments are in their initial state the
first time entered. A fixed segment appears to reside in memory at all
times and is, therefore, in its last used state each time it is entered.
The state of an independent segment depends on how and when it receives
control. On subsequent control transfers, Compaq COBOL resets the
segment's ALTERed GO TO statements to their initial states whenever an
independent segment is entered in one of the following ways:
- Explicitly, by means of a GO TO statement with a target within the
section.
- Explicitly, by means of an out-of-line PERFORM statement in
another segment whose range is within the section.
- Implicitly, when a SORT or MERGE statement in another segment
specifies an input or output procedure within the section.
- Implicitly, by transfer of control between consecutive statements
from a segment with a different segment-number.
6.8 General Formats and Rules for Statements
Function
The Procedure Division contains the routines that process the files and
data described in the Environment and Data Divisions.
Syntax Rules
- The Procedure Division follows the Data Division.
- The Procedure Division must begin with the Procedure Division
header.
- The end of the Procedure Division is indicated by one of the
following:
- The Identification Division header of another source program
- The END PROGRAM header
- The physical position in the Procedure Division after which no
further processing occurs
- A procedure consists of either:
- One or more successive sections
- One or more successive paragraphs
- If one paragraph is in a section, all paragraphs must be in
sections.
- A procedure-name refers to a paragraph or section in the source
program. It is either paragraph-name (which can be qualified)
or section-name.
- A section consists of a section header followed by zero or more
successive paragraphs. A section ends immediately before the next
section or at the end of the Procedure Division. In the declaratives
part of the Procedure Division, a section can also end at the key words
END DECLARATIVES. See Section 2.3 for more information on
declaratives.
- A paragraph consists of a paragraph-name followed by a
separator period, and by zero or more successive sentences. A paragraph
ends immediately before the next paragraph-name or
section-name or at the end of the Procedure Division. In the
declaratives part of the Procedure Division, a paragraph can also end
at the key words END DECLARATIVE. See Section 2.3 for more
information on declaratives.
- sentence contains one or more statements terminated by a
separator period.
- A statement is a syntactically valid combination of words and
symbols that begins with a COBOL verb.
- identifier is the word or words necessary to refer
uniquely to a data item.
Procedure Division Header
- The Procedure Division header identifies and begins the Procedure
Division. It consists of the reserved words PROCEDURE DIVISION and
optional USING and GIVING phrases followed by a separator period.
- The USING phrase is required only if the program is invoked by a
CALL statement with a USING phrase.
- The Procedure Division header USING phrase identifies the names
used in the program to refer to arguments from the calling program. In
the calling program, the USING phrase of the CALL statement identifies
the arguments. The data items in the two USING phrase lists correspond
positionally.
- Each data-name in the USING phrase must be defined in the
Linkage Section with a level-01 or level-77 entry.
- Each data-name cannot appear more than once in the USING
phrase.
- In the USING phrase, data-name cannot have the external
attribute.
- In the USING phrase, the data description for data-name
cannot contain a REDEFINES clause. However, the data description can be
the object of a REDEFINES clause.
- The Procedure Division header GIVING phrase specifies a function
result of the program. The identifier must refer to an
elementary integer numeric data item with COMP, COMP-1, or COMP-2 usage
and no scaling positions. The identifier cannot be
subscripted, but it can be qualified.
Procedure Division Body
- The Procedure Division body consists of all Procedure Division text
following the Procedure Division header.
General Rules
- References to USING phrase data-names operate according to
data descriptions in the called program's Linkage Section, regardless
of the descriptions in the calling program.
- The called program can refer, in its Procedure Division, to a
Linkage Section data item only if the data item satisfies one of these
conditions:
- It is in the Procedure Division header USING phrase.
- It is subordinate to data-name that is in the Procedure
Division header USING phrase.
- Its definition includes a REDEFINES or RENAMES clause, the object
of which is in the Procedure Division header USING phrase.
- It is subordinate to an item that satisfies the previous conditions.
- It is a condition-name or index-name associated with a data item
that satisfies any of the previous conditions.
- On Alpha systems, when a called program returns control to the
calling program, the return value is made available to the calling
program in the data item specified in its CALL statement GIVING phrase.
The value is moved to that data item according to the rules for the
MOVE statement. If the calling program does not specify a GIVING
phrase, then the return value is made available in the calling
program's RETURN-CODE special register. Note that the value in the
called program's RETURN-CODE is not returned to the caller.
- On Alpha systems, if no GIVING phrase is specified in the called
program, the value in the RETURN-CODE special register is made
available to the calling program in the data item specified in the
calling program's CALL statement GIVING phrase. The value is moved
according to the rules for the MOVE statement. If the calling program
does not specify a CALL GIVING phrase, the value in the called
program's RETURN-CODE special register is made available to the calling
program in the calling program's RETURN-CODE special register.
Table 6-7 shows the relationship between the GIVING phrase and
RETURN-CODE.
Table 6-7 Relation of GIVING Phrase to RETURN-CODE Special Register (Alpha)
Calling program has CALL GIVING X |
Called program has PROCEDURE DIVISION GIVING Y |
Called program puts result in |
Calling program gets result in |
YES
|
YES
|
Y (also RETURN-CODE)
|
X (moved from Y)
|
YES
|
NO
|
RETURN-CODE
|
X (moved from called program's RETURN-CODE)
|
NO
|
YES
|
Y (also RETURN-CODE)
|
RETURN-CODE (moved from Y)
|
NO
|
NO
|
RETURN-CODE
|
RETURN-CODE (moved from called program's RETURN-CODE)
|
Technical Notes
- On Alpha systems, because the reserved word RETURN-CODE is one of
the X/Open reserved words, you cannot use the compilation flag
-rsv noxopen
(for Tru64 UNIX systems) or the corresponding qualifier
/RESERVED_WORDS = NOXOPEN (for OpenVMS systems) if your program uses
the RETURN-CODE special register.
-
On Alpha systems, Compaq COBOL supports passing status to the operating
system for RETURN-CODE and PROCEDURE DIVISION GIVING when EXIT PROGRAM
or STOP RUN is executed. <>
Four of the data types supported
by PROCEDURE DIVISION GIVING can be used to communicate status to the
operating system. Following is a summary of what is supported for both
RETURN CODE and PROCEDURE DIVISION GIVING:
RETURN-CODE (Alpha-only*)
EXIT PROGRAM /STA=V3 yes
EXIT PROGRAM /STA=85 yes
STOP RUN yes
PROCEDURE DIVISION GIVING
EXIT PROGRAM /STA=V3 yes
EXIT PROGRAM /STA=85 yes
STOP RUN yes*
Data Types
COMP-1,COMP-2 no
PIC 9(04) COMP no
PIC S9(04) COMP no
PIC 9(09) COMP yes
PIC S9(09) COMP yes
PIC 9(18) COMP yes
PIC S9(18) COMP yes
PIC 9(31) COMP no
PIC S9(31) COMP no
*Refer to the appendix on compatibility in the Compaq COBOL User
Manual for differences on VAX.
|
This support is subject to the limitations on status handling
imposed by the operating system. If PIC S9(18) COMP or PIC 9(18) COMP
is used, the high-order 32 bits are truncated before the status is
passed on to the operating system.
To display the operating system
status information, do the following:
[UNIX] echo $status
[OpenVMS] show symbol $status
|
Additional References
Example
The following is an example of a Procedure Division header:
WORKING-STORAGE SECTION.
01 RETURN-RESULT PIC 9(8) COMP.
LINKAGE SECTION.
01 ARG1.
03 ARG2 PIC X(6).
03 ARG3 PIC S9(6) COMP.
01 ARG4 PIC X(4).
PROCEDURE DIVISION USING ARG1 ARG4 GIVING RETURN-RESULT.
.
.
.
MOVE 17 TO RETURN-RESULT.
EXIT PROGRAM.
|
6.8.1 ACCEPT
Function
The ACCEPT statement makes low-volume data available to the program.
The Compaq extensions to the ACCEPT statement (Formats 3, 4, and 5) are
COBOL language additions that facilitate video forms design and
data handling. The WITH CONVERSION phrase and some other options in
Format 1 are also Compaq extensions.
Format 6 retrieves the number of arguments on the program run command
line, Format 7 reads those command line arguments into designated
program variables, and Format 8 reads environment variables and
logicals into designated program variables.
dest-item
is the identifier of a data item into which data is accepted.
input-source
is a mnemonic-name defined in the SPECIAL-NAMES paragraph of the
Environment Division.
stment
is an imperative statement executed when the relevant condition (at end
or on exception) occurs.
stment2
is an imperative statement executed when the relevant condition (not at
end or not on exception) occurs.
stment3
is an imperative statement executed when an attempt is made to read
beyond the last argument on the command line, or if the command line
argument does not exist.
stment4
is an imperative statement executed if the name of a referenced
environment variable or logical has not been set, or if the referenced
environment variable or logical does not exist.
stment5
is an imperative statement executed if the exception condition does not
exist.
line-num
is a numeric literal that specifies a line position on the terminal
screen. line-num must be a positive integer; it cannot be zero.
line-id
is the identifier of a data item that provides a line position on the
terminal screen. It must be a positive integer; it cannot be zero.
plus-num
is a numeric literal that increments the current value for line or
column position, or that increments the value of line-id or
column-id. plus-num can be zero or a positive integer.
column-num
is a numeric literal that specifies a column position on the terminal
screen. column-num must be a positive integer; it cannot be
zero.
column-id
is the identifier of a data item that provides a column position on the
terminal screen. It must be a positive integer; it cannot be zero.
prot-size-lit
is a numeric literal that specifies the maximum length of the video
screen field into which data can be typed. prot-size-lit must
be a positive integer; it cannot be zero.
prot-size-item
is the identifier of a numeric integer data item that specifies the
maximum length of the video screen field into which data can be typed.
prot-size-item must be a positive integer; it cannot be zero.
prot-fill-lit
is a single character alphanumeric literal that is used to initialize
each character position of a protected video screen field into which
data can be typed.
def-src-lit
is a nonnumeric literal or a figurative constant. However, it cannot be
the figurative constant ALL literal.
def-src-item
is the identifier of an alphanumeric data item.
key-dest-item
is the identifier of a data item that defines a control key.
key-dest-item must specify an alphanumeric data item at least
four characters in length.
screen-name
is the name of a screen item defined in the SCREEN SECTION of the
program.
arg-count
is a mnemonic name associated with ARGUMENT-NUMBER in the SPECIAL-NAMES
paragraph in the Environment Division. It represents the number of
arguments present on the run command line.
arg-value
is a mnemonic name associated with ARGUMENT-VALUE in the SPECIAL-NAMES
paragraph in the Environment Division. It contains the value of the
argument on the run command line specivied by the current argument
position indicator.
envlog-value
is a mnemonic name associated with ENVIRONMENT-VALUE in the
SPECIAL-NAMES paragraph in the Environment Division. It contains the
value of a selected environment variable or system logical.
Syntax Rules
Format 3
- You cannot specify a phrase more than once for any
dest-item.
- When you use the DEFAULT phrase and the PROTECTED phrase without
the SIZE option, the size of def-src-item or
def-src-lit must be less than or equal to the size of
dest-item.
- When you use the DEFAULT phrase and the PROTECTED phrase with the
SIZE option, the size of def-src-item and def-src-lit
must be less than or equal to prot-size-lit. If
prot-size-item is specified and the specified size at run time
is less than the length of def-src-item or
def-src-lit, reprompting occurs.
- The FILLER phrase cannot be used with the EDITING phrase. If both
are present, the FILLER phrase is ignored.
Format 4
- You cannot specify a phrase more than once for any
key-dest-item.
Format 6 (Alpha)
- dest-item must reference a data item described as an
unsigned integer.
Formats 7 and 8 (Alpha)
- dest-item must reference an alphanumeric data item.
<>
General Rules
Format 1
- The ACCEPT statement transfers data from input-source. The
transferred data replaces the contents of dest-item.
- The ACCEPT statement transfers a stream of characters with no
editing or conversion, unless the WITH CONVERSION phrase is specified.
Data transfer begins with the leftmost character position of
dest-item and continues to the right.
- If the data does not completely fill dest-item, remaining
character positions are filled with spaces. If the data is too long for
dest-item, it is truncated on the right.
- The ACCEPT statement treats dest-item as alphanumeric,
regardless of its class, unless the WITH CONVERSION phrase is specified.
- If there is no FROM phrase, the ACCEPT statement transfers data
from the default system input device.
Format 2
- The ACCEPT statement transfers data to dest-item according
to the MOVE statement rules.
- DATE, DAY, DAY-OF-WEEK, and TIME are not actual data items.
Therefore, the source program must not describe them.
- DATE has three elements. From left to right, they are as follows:
- Year of century
(four digits if you specify YYYYMMDD, two digits if you do not)
- Month of year (two digits)
- Day of month (two digits)
The ACCEPT statement operates as if DATE were described in the
program as an eight-digit or six-digit, unsigned, elementary, numeric
integer data item (PIC 9(8) or PIC 9(6)).
For example, June 3, 1997
is expressed as 19970603 or 970603.5
- DAY has two elements. From left to right, they are as follows:
- Year of century (four digits if you specify YYYYDDD, two digits if
you do not)
- Day of year (three digits)
The ACCEPT statement operates as if DAY were described in the
program as a seven-digit or five-digit, unsigned, elementary, numeric
integer data item (PIC 9(7) or (PIC 9(5)).
For example, the
fifteenth day of 1998 is expressed as 1998015 or 98015.+
The
YYYYMMDD and YYYYDDD options are Compaq extensions.
- DAY-OF-WEEK is a one-digit item that represents the day of the
week.
The ACCEPT statement operates as if DAY-OF-WEEK were
described in the program as a one-digit, unsigned, elementary numeric
integer data item.
The values of DAY-OF-WEEK range from 1 (for
Monday) to 7 (for Sunday).
- TIME represents elapsed time after midnight, as shown on a 24-hour
clock. It has four, two-digit elements. From left to right, they are as
follows:
- Hours
- Minutes
- Seconds
- On Tru64 UNIX and OpenVMS, Hundredths of a second <>
The ACCEPT statement operates as if TIME were described in the
program as an eight-digit, unsigned elementary numeric integer data
item (PIC 9(8)).
The time 6:13 PM is expressed as 18130000. The
minimum and maximum values of TIME are 00000000 and 23595999.
Formats 3 and 4
- The ACCEPT statement transfers data from a video terminal. The data
replaces the contents of dest-item (Format 3), or
key-dest-item (Format 4). Format 3 can also update
key-dest-item.
- The presence of either the LINE NUMBER phrase or the COLUMN NUMBER
phrase implies NO ADVANCING. The cursor remains on the character
position immediately following the position of the last input character
or in the position immediately following the rightmost position in the
protected area. (For example, ACCEPT... PROTECTED SIZE 10 LINE 1 COLUMN
1, leaves the cursor at line 1, column 11, no matter what is typed in.)
This is the default starting position of the next data item the program
will input from or display upon the terminal.
- If you do not use either the LINE NUMBER phrase or the COLUMN
NUMBER phrase, data is accepted according to positioning rules for the
Format 1 ACCEPT statement.
Formats 3, 4, and 5
- The execution of certain extended ACCEPTs when the input source is
assigned to a file (for example, in batch mode on OpenVMS systems), is
a restriction. Syntax and actions that result in outputs from the
ACCEPT operation (positioning, erasing, setting character attributes,
reprompting, and protecting) to a nonvideo terminal are not supported
and are ignored.
LINE NUMBER Phrase (Formats 3 and 4)
- The LINE NUMBER phrase positions the cursor on a specific line of
the video screen for data input.
- If the LINE NUMBER phrase does not appear, but the COLUMN NUMBER
phrase does, then data is accepted from the current line
position and specified column position.
- If line-num or the value of line-id is greater
than the bottommost line position of the current screen, program
results are undefined. (See Technical Notes.) Scrolling results if
relative positioning is attempted past the bottom of the screen.
- If you use line-id without its PLUS option, the line
position is the value of line-id.
- If you use line-id with its PLUS option, the line position
is the sum of plus-num and the value of line-id.
- If you use the PLUS option without line-id, the line
position is the sum of plus-num and the value of the current
line position.
- If you use the PLUS option, but you do not specify
plus-num, then PLUS 1 is implied.
- Data input results are undefined if your program generates a value
for line-id that is one of the following:
- Zero
- Negative
- Greater than the bottommost line position of the current screen
COLUMN NUMBER Phrase (Formats 3 and 4)
- The COLUMN NUMBER phrase positions the cursor on a specific column
of the video screen.
- If the COLUMN NUMBER phrase does not appear, but the LINE NUMBER
phrase does, then data is accepted from column 1 of the specified line
position.
- If you use column-id without its PLUS option, the column
position is the value of column-id.
- If you use column-id with its PLUS option, the column
position is the sum of plus-num and the value of
column-id.
- If you use the PLUS option without column-id, the column
position is the sum of plus-num and the value of the current
column position.
- If you use the PLUS option, but do not specify plus-num,
PLUS 1 is implied.
- Data input results are undefined if the program generates a value
for column position that is one of the following:
- Zero
- Negative
- Greater than the last column position on the screen
LINE NUMBER and COLUMN NUMBER Phrases (Format 5) (Alpha)
- The LINE NUMBER and COLUMN NUMBER phrases together give the
starting screen coordinates.
- The position of each screen item within the referenced
screen-name is offset from the LINE and COLUMN positions.
- If either LINE or COLUMN is not specified, the default value is 1.
<>
ERASE Phrase (Formats 3 and 4)
- The ERASE phrase erases all, or part, of a line (or screen) before
accepting data. You must specify SCREEN or LINE with the ERASE phrase.
- If you use the TO END option, the ERASE phrase erases the line (or
screen) from the implied, or stated, cursor position to the end of the
line (or screen).
- If you do not use the TO END option, the ERASE phrase erases the
entire line (or screen).
BELL Phrase (Formats 3 and 4)
- The BELL phrase rings the terminal bell before accepting data.
CONTROL KEY Phrase (Formats 3 and 4)
- If you use the CONTROL KEY phrase, the characters representing PF
keys and arrow keys, as well as TAB and RETURN, are legal terminator
keys and can be accepted from the terminal. (See Technical Notes.)
- key-dest-item stores the terminator key code; unused
character positions, if any, are filled with spaces. (See Technical
Notes.)
ON EXCEPTION Phrase (Formats 3 and 4)
- The ON EXCEPTION phrase allows execution of an imperative statement
when an exception (or error) condition occurs. ON EXCEPTION takes
effect when illegal numeric data has been entered or there is an
overflow on the left or right of the decimal point when CONVERSION is
specified.
- ON EXCEPTION can be used to detect numeric data entry errors only
when accepting numeric data while CONVERSION is being used.
- ON EXCEPTION can be used to detect end-of-file in any Format 3 or
Format 4 ACCEPT statement.
- ON EXCEPTION and AT END are mutually exclusive. If ON EXCEPTION is
specified, the end-of-file indication is also a control key.
- A DISPLAY statement within an ACCEPT ON EXCEPTION must be
terminated (with, for example, END-DISPLAY) on Alpha systems. (If you
are concerned with the different VAX behavior, refer to the appendix on
compatibility in the Compaq COBOL User Manual.)
NOT ON EXCEPTION Phrase (Formats 3 and 4)
- The NOT ON EXCEPTION phrase allows execution of an imperative
statement when an exception (or error) condition does not occur.
ON EXCEPTION Phrase (Format 5, Alpha)
- The ON EXCEPTION phrase allows execution of an imperative statement
when the ACCEPT statement terminates unsuccessfully. When there is an
applicable CRT STATUS clause, unsuccessful termination is indicated by
a value of '1' or '9' in the first character of the CRT STATUS data
item (see the SPECIAL-NAMES section of Chapter 4).
Note
5 Compaq COBOL also supports
four-digit years using the CURRENT-DATE intrinsic function (see
Chapter 7.) Compaq recommends the use of four-digit years.
|