The ACCEPT statement causes data keyed at the console or supplied by
the operating system to be made available to the program in a specified data
item.
- The END-ACCEPT phrase delimits the scope of the ACCEPT statement.
(See the section
Explicit and Implicit
Scope Terminators in the chapter Concepts of the
COBOL Language.) END-ACCEPT is treated as a reserved word only if the
MF(4) Compiler directive is set.
- The ACCEPT statement causes the transfer of data
from the logical or physical device. This data replaces the content of the data
item referenced by identifier. If the data item referenced by identifier has an
explicit or implicit usage of DISPLAY then replacement is direct and without
conversion, otherwise conversion into the correct format takes place.
The size of a data transfer is determined by the device and the
run-time environment (see the topic
The Special-Names
Paragraph for a list of function-names that can be
used and your COBOL system documentation for details of devices and the limits
of data transfer sizes).
If the device is capable of transferring data of the same size
as the receiving data item, the transferred data is stored in the receiving
data item. If otherwise, then:
- If the size of the receiving data item (or the portion not
yet currently occupied by transferred data) exceeds the size of the transferred
data, the transferred data is stored aligned to the left in the receiving data
item (or the portion not yet occupied) and additional data is requested.
- If the size of the transferred data exceeds the size of the
receiving data item (or portion not yet occupied by transferred data), only the
leftmost characters of the transferred data are stored in the receiving data
item (or in the portion remaining). The remaining characters of the transferred
data which do not fit into the receiving data item are ignored.
If the FROM option is not given, it is equivalent to specifying
FROM CONSOLE.

If the function-name COMMAND-LINE, or a mnemonic-name
associated with the function-name COMMAND-LINE, is specified, the contents of a
system-dependent command-line buffer are transferred to the receiving data
item.

If the mnemonic-name
associated with the function-name ARGUMENT-NUMBER is used, identifier receives
the number of arguments contained in the command line. (This includes all
arguments, those before the program-name, the program-name itself, and any
arguments following the program-name. Hence no portability from types of
program invocation is expected.)

When mnemonic-name is
associated with ARGUMENT-VALUE, the current command-line argument is placed
into identifier. The determination of which command-line argument is current is
as follows:
- Initially, the first command-line argument is current.
- A DISPLAY upon a mnemonic-name associated with
ARGUMENT-NUMBER sets the current command-line argument number to the value of
the identifier or literal specified in the DISPLAY statement.
- When an ACCEPT statement from a mnemonic-name associated with
ARGUMENT-NUMBER has been executed since the last execution of a DISPLAY
statement upon a mnemonic-name associated with ARGUMENT-NUMBER, the current
command-line argument number is incremented prior to its use in this ACCEPT
statement.
If the current command-line argument number is 0, it is intended
that the program-name of the main program of the run unit will be returned.
However, the effects of variations on program invocation can impact these
results so that a utility or calling program can be returned instead.
If the current command-line argument number
is not in
the range 0 to 99 inclusive or
exceeds the number of arguments on the command line when this
ACCEPT statement is executed, imperative-statement-1, if specified, is
executed.

If the mnemonic-name
associated with the function-name ENVIRONMENT-VALUE is used then,
- If a previous DISPLAY with a mnemonic-name associated with an
ENVIRONMENT-NAME has been performed, the value of the designated environment
variable is placed into identifier.
- If no previous DISPLAY with a mnemonic-name associated with
an ENVIRONMENT-NAME has been performed, or if the specified environment
variable does not exist, the imperative statement associated with an ON
EXCEPTION phrase is executed. The value in identifier is undefined in this
case.

The effect of retrieving
command-line arguments and the number of arguments in a program that is called
by another program is defined as the same as if they were retrieved by the
first program in the run unit.
- The ACCEPT statement causes the information requested to be
transferred to the data item specified by identifier according to the rules of
the MOVE statement. DATE, DAY,
DAY-OF-WEEK,
and TIME are conceptual data items and, therefore, are not
described in the COBOL program.
- DATE, without the phrase YYYYMMDD, is composed of the data
elements year of the current century, month of the year, and day of the month.
DATE, without the phrase YYYYMMDD, when accessed by a COBOL program, behaves as
if it had been described as an unsigned elementary integer data item of usage
display six digits in length, the character positions of which, numbered from
left to right, are:
| Char |
Contents |
| 1-2 |
The two right-most numeric characters of the year in the
Gregorian calendar. |
| 3-4 |
Two numeric characters of the month of the year in the
range 01 through 12. |
| 5-6 |
Two numeric characters of the day of the month in the range
01 through 31. |
- DATE, with the phrase YYYYMMDD, is composed of the data elements
year in the Gregorian calendar, month of the year, and day of the month. DATE,
with the phrase YYYYMMDD, when accessed by a COBOL program, behaves as if it
had been described as an unsigned elementary integer data item of usage display
eight digits in length, the character positions of which, numbered from left to
right, are:
| Char |
Contents |
| 1-4 |
Four numeric characters of the year in the Gregorian
calendar. |
| 5-6 |
Two numeric characters of the month of the year in the
range 01 through 12. |
| 7-8 |
Two numeric characters of the day of the month in the range
01 through 31. |
- DAY, without the phrase YYYYDDD, is composed of the data elements
year of the current century and day of the year. DAY, without the phrase
YYYYDDD, when accessed by a COBOL program, behaves as if it had been described
as an unsigned elementary integer data item of usage display five digits in
length, the character positions of which, numbered from left to right, are:
| Char |
Contents |
| 1-2 |
The two right-most numeric characters of the year in the
Gregorian calendar. |
| 3-5 |
Three numeric characters of the day of the year in the
range 01 through 366. |
- DAY, with the phrase YYYYDDD, is composed of the data elements
year in the Gregorian calendar and day of the year. DAY, with the phrase
YYYYDDD, when accessed by a COBOL program, behaves as if it had been described
as an unsigned elementary integer data item of usage display seven digits in
length, the character positions of which, numbered from left to right, are:
| Char |
Contents |
| 1-4 |
Four numeric characters of the year in the Gregorian
calendar. |
| 5-7 |
Three numeric characters of the day of the year in the
range 01 through 366. |
DAY-OF-WEEK is composed of a
single data element whose content represents the day of the week. DAY-OF-WEEK,
when accessed by a COBOL program, behaves as if it had been described in a
COBOL program as an unsigned elementary numeric integer data item one digit in
length. In DAY-OF-WEEK, the value 1 represents Monday, 2 represents Tuesday,
... , 7 represents Sunday.
- TIME is composed of the data elements: hours, minutes, seconds
and hundredths of a second. TIME is based on elapsed time after midnight on a
24-hour clock basis - thus, 2:41 P.M. would be expressed as 14410000. TIME,
when accessed by a COBOL program behaves as if it had been described in a COBOL
program as an unsigned elementary numeric integer data item eight digits in
length. The minimum value of TIME is 00000000; the maximum value of TIME is
23595999. If the hardware does not have the facility to provide fractional
parts of TIME, the value is converted to the closest decimal approximation.
The value returned from the ACCEPT FROM LINE NUMBER
phrase is always numeric. The value is implementation-dependent.
The FROM USER NAME option returns
spaces.
The FROM ESCAPE KEY option returns the two-digit
code generated by a termination key.
The EXCEPTION STATUS item contains a three-digit
numeric value that identifies the type of exception condition that has occurred
during the execution of a CALL statement.
If EXCEPTION STATUS is to be examined this should be done
immediately following the CALL statement. There must be nothing between the
CALL and ACCEPT FROM EXCEPTION STATUS. File I/O operations will alter the
exception status value making it unpredictable.
This format of the ACCEPT statement accepts screen
items,which are defined in the Screen Section of the program, and allows full
access to the enhanced screen handling facilities.
The order of execution of an ACCEPT statement is
always:
- The AT phrase
- The BLANK phrase
- If either of the Compiler directives ACCEPTREFRESH or XOPEN
are specified, the current contents of screen items with the USING phrase are
displayed
- The BELL phrase
- The ACCEPT operation.
The AT phrase gives the absolute address on the
screen where the ACCEPT operation is to start.
If integer-3 or identifier-4 is 4 digits long, the
first two digits specify the line, the second two the column. If 6 digits long,
the first three digits specify the line, while the second three specify the
column.
Certain combinations of line and column numbers have
special meanings, as follows:
- Until the column comes within range, out of range column
values are reduced by the line length and the line value is incremented.
- Out of range line values cause the screen to scroll up one
line. The effect is the same as if the line number of the bottom line had been
specified.
- If the line and column numbers given are both zero, the
ACCEPT starts at the position following that where the preceding Format 4 or
Format 5 ACCEPT operation finished. Column 1 of each line is considered to
follow the last column of the previous line.
- If the line number is zero, but a non-zero column number is
specified, the ACCEPT starts at the specified column, on the line following
that where the preceding Format 4 or Format 5 ACCEPT operation finished.
- If the column number is zero, but a non-zero line number is
specified, the ACCEPT starts on the specified line, at the column following
that where the preceding Format 4 or Format 5 ACCEPT operation finished.
Prior to the execution of this
ACCEPT statement, a DISPLAY statement which specifies the same screen-name or
identifier-1 as is specified in this ACCEPT statement must have been executed.
There must not have been any ACCEPT or DISPLAY statement executed since then.
If the ON EXCEPTION phrase is specified,
imperative-statement-1 is executed if the ACCEPT operation finishes with
anything other than a normal termination. If the NOT ON EXCEPTION phrase is
specified, imperative-statement-2 is executed if the ACCEPT operation
terminates normally. (See the rules for the CRT STATUS clause in the topic
The Special-Names
Paragraph for possible types of termination.)
The ACCEPT operation starts at line 1, column 1 if
no AT phrase is specified.
If identifier is a group item and no MODE IS BLOCK
phrase exists, then those elementary subordinate items which have names other
than FILLER are accepted. They are positioned on the screen in the order their
descriptions appear in the Data Division and are separated by the lengths of
the FILLER items in the group. For this purpose, the first position on a line
is regarded as immediately following the last position on the previous line.
The items are accepted in the same order.
Unless otherwise specified in the CURSOR IS clause (see the
rules for the CURSOR IS clause clause in the topic
The Special-Names
Paragraph), the cursor is initially positioned at the
start of the first item. As the ACCEPT operation into each item is terminated,
the cursor moves to the start of the next item.
If identifier-1 is a group item that has a
variable-occurrence data item subordinate to it, the ACCEPT statement acts as
if the MODE IS BLOCK clause were specified.
If identifier-1 is a group item that
has a variable-occurrence data item subordinate to it, the ACCEPT statement
acts as if the MODE IS BLOCK clause were specified.
The MODE IS BLOCK phrase indicates that the
identifier is to be treated as an elementary item. Thus, even if it is a group
item it is displayed as one item.
The effect of specifying the PROMPT option is as described
in the topic
The PROMPT
Clause.
If the PROMPT option is not specified, no character
is output to the screen to mark empty character-positions; those
character-positions into which the operator does not enter data produce spaces
in the data item.
The WITH phrase allows you to specify certain options
available during the operation. (See the topic
Screen Section Entry
Skeleton for descriptions of these options.)
In addition to the options available as screen description
clauses, the following options can be used in the WITH phrase; SPACE-FILL,
ZERO-FILL, LEFT-JUSTIFY, RIGHT-JUSTIFY TRAILING-SIGN and UPDATE. ZERO-FILL
appears in this list and as a screen description clause because it has two
different uses. Its second use is documented later in this chapter.
A configuration option is available which allows the entry of
data into numeric and numeric edited screen fields in free format mode. In
COBOL, nonedited numeric data items are intended for holding data in an
internal form; however, this format enables such data items to appear on the
screen. See your COBOL system documentation on user interfaces for more
details. If free format mode is in effect, the data appears automatically
reformatted as follows:
- With the virtual decimal point represented by a period
- With the sign represented by a sign character ("-" for minus;
space for plus) which appears immediately before the leftmost digit
- With zero suppression in all integer character positions,
except the least significant
- With left justification.
The SPACE-FILL, ZERO-FILL, LEFT-JUSTIFY, RIGHT-JUSTIFY and
TRAILING-SIGN options amend this format.
The SPACE-FILL option causes data in free format nonedited
numeric data items to appear on the screen with zero-suppression in all integer
character positions. This option affects only free format, nonedited numeric
data items. This takes effect when initial data in the data item is displayed
and again when the ACCEPT operation into the data item is terminated. Any
leading sign is displayed in the rightmost space.
The ZERO-FILL option causes data in free format nonedited
numeric data items to appear on the screen with no zero-suppression. This takes
effect when initial data in the data item is displayed and again when the
ACCEPT operation into the data item is terminated. (See the topic
The ZERO-FILL
Clause for this option's effect when used with
alphabetic or alphanumeric data items.)
The LEFT-JUSTIFY option is documentary only.
The RIGHT-JUSTIFY option causes operator-keyed characters
to be moved on the screen to the rightmost character positions of the field.
This option affects only free format nonedited numeric data items. This takes
effect upon display of the initial data (the current contents displayed) in the
data item and also upon termination of the ACCEPT operation.
The TRAILING-SIGN option causes the operational sign to
appear in the rightmost character position of the field. This takes effect upon
display of initial data in the data item and also upon termination of the
ACCEPT operation. This option affects only signed, nonedited numeric data items
which are in free format mode.
The UPDATE option causes the current contents (initial
data) of the data item to be displayed before the operator is prompted to key
in new input. If the operator does not key in any new data, the initial data is
then treated as though it were operator-keyed. If the UPDATE option is not
specified, the display of initial data is a configuration option. (See your
COBOL system documentation on user interfaces for details of configuration
options.)
The UPPER option forces input into upper case.
The LOWER option forces input into lower case.
If REDEFINES is used with identifier-1, the first
description of the redefined data area is used and subsequent descriptions are
ignored. If OCCURS or nested OCCURS are used the repeated data item is expanded
into the full number of times it occurs, so that one definition is repeated for
many fields.
If identifier-8 or integer-7 has a negative value,
this represents a request that no time-out "exception" should occur no matter
how long there is between/before key-strokes.
If identifier-8 or integer-7 is zero, no timeout
occurs if characters are waiting (when the ACCEPT is processed). However, if no
characters are waiting, then a timeout occurs immediately.
The ON EXCEPTION clause, if present, will be
executed when a timeout occurs and a TIMEOUT clause is specified. The NOT ON
EXCEPTION clause, if present, will be executed when a TIMEOUT clause is
specified but no timeout (or other exception) occurs.
If a timeout exception occurs, then the contents of
any ACCEPT resultant-field are defined as follows:
- Any field which has been partially modified contains any
information which has already been received.
- Fields which have "FULL" or "REQUIRED" attributes or any
other attribute which would normally impact partial field input, are not
required to meet those attributes when a partial field entry has occurred when
a timeout exception occurs.
- The rules listed above apply whether or not the timeout clock
is reset upon each keystroke.
If at run time a positive timeout interval greater
than 2,147,483,647 hundredths of a second is detected the timeout value is
reset to 2,147,483,647 hundredths of a second (which is approximately eight
months).
The TIMEOUT value specifies the number of seconds
(or tenths of a second) after the ACCEPT statement begins processing until a
timeout exception occurs. An ADISCF configuration option controls whether or
not the timeout clock is reset each time a new keyboard action is detected. An
application which wants some ACCEPT statements to be handled with a RESET and
some without, can make specific calls to the ADIS run-time interface before or
after the ACCEPT statements that need changes from the default. For example
when ADIS was configured not to do resets, if a program had:
ACCEPT INPUT-FIELD TIME-OUT AFTER +10
a timeout would occur after 10 seconds had elapsed from the
beginning of the ACCEPT, even if some characters were entered after 5 seconds
into the ACCEPT processing.
If, on the other hand, ADIS were configured to do resets, if a
program had the same code given above, then each time a new character were
entered, the TIMEOUT clock would be reset to zero.
If a timeout exception occurs and no ON EXCEPTION
phrase is specified, the CRT Status keys (if specified) are updated, the
application continues to the next logical phrase, and the contents of the
ACCEPT receiving field are as defined above. (The above is true whether or not
a NOT ON EXCEPTION phrase is specified.)
All references to (NOT) ON EXCEPTION phrases also
apply to (NOT) ON ESCAPE phrases.
For alphanumeric data items, the
size of the field that is accepted from the screen during an ACCEPT statement
is exactly the same size as the target field. Therefore, if you want data to
appear at the right hand side of a field, you must enter it there.