HP 3000 Manuals

Procedure Division (cont.) [ COBOL/HP-UX Language Reference for the Series 700 and 800 ] MPE/iX 5.0 Documentation


COBOL/HP-UX Language Reference for the Series 700 and 800

Procedure Division (cont.) 

The MOVE Statement 

Function 

The MOVE statement transfers data, in accordance with the rules of
editing, to one or more data areas.

General Formats 

Format 1 

[]
Format 2
[]
Syntax Rules 1. Identifier-1 and literal represent the sending area; identifier-2 represents the receiving area. ________________________________________________________________________ |(OSVS) (VSC2) (MF) | | | | | | | |2. When Format 1 is specified, all identifiers can be either group | | or elementary items. The data in the sending area is moved into | | the data item referenced by each identifier-2 in the order in | | which it is specified. | | | ________________________________________________________________________ 3. CORR is an abbreviation for CORRESPONDING. 4. When the CORRESPONDING phrase is used, all identifiers must be group items. 5. An index data item or pointer data item or procedure pointer item, (VSC2) (MF) cannot appear as an operand of a MOVE statement. (See the section "The USAGE Clause" earlier in this chapter.) ________________________________________________________________________ |(VSC2) (MF) | | | | | | | |6. A pointer data item can be part of a group that is referred to in| | a MOVE CORRESPONDING statement; however, no movement of the | | pointer data item will take place. | | | |7. If either the sending or receiving item is a DBCS (USAGE | | DISPLAY-1) item, then both must be DBCS items. The figurative | | constant SPACE can be the DBCS sending item. | | | ________________________________________________________________________ General Rules 1. If the CORRESPONDING phrase is used, selected items within identifier-1 are moved to selected items within identifier-2, according to the rules given in the section "The CORRESPONDING Phrase" earlier in this chapter. The results are the same as if the user had referred to each pair of corresponding identifiers in separate MOVE statements. ________________________________________________________________________ |The process is repeated for each destination group. (VSC2) | |(OSVS) | ________________________________________________________________________ ________________________________________________________________________ |(MF) | | | | | | | |2. If identifier-1 is a numeric function-identifier, then | | identifier-2 must be either a numeric or numeric-edited | | item. | | | ________________________________________________________________________ 3. The data designated by the literal or identifier-1 is moved to the data item referenced by each identifier-2, in the order in which it is specified. The rules referring to identifier-2 also apply to the other receiving areas. Any subscripting or indexing associated with identifier-2, is evaluated immediately before the data is moved to the respective data item. ________________________________________________________________________ |(ANS85) | |If identifier-1 is reference modified, subscripted, or is a function- | |identifier, the reference modifier, subscript, or function-identifier | |is evaluated only once, immediately before data is moved to the first | |of the receiving operands. | | | |The result of the statement: | | | | MOVE a (b) TO b, c (b) | | | |is equivalent to: | | | | MOVE a (b) TO temp | | MOVE temp TO b | | MOVE temp TO c (b) | | | |where temp is an intermediate result item provided by your COBOL | |system. | ________________________________________________________________________ 4. Any MOVE in which the sending and receiving items are both elementary items is an elementary move. Every elementary item belongs to one of the following categories: numeric, alphabetic, alphanumeric, numeric edited, alphanumeric edited or floating-point. (OSVS) (VSC2) (MF) These categories are described in the PICTURE clause. Numeric literals belong to the category numeric, and nonnumeric literals belong to the category alphanumeric. The figurative constant ZERO belongs to the category numeric when moved to a numeric or numeric-edited item. The figurative constant ZERO belongs to the category alphanumeric in all other cases. The figurative constant SPACE belongs to the category alphabetic. All other figurative constants belong to the category alphanumeric. The following rules apply to an elementary move between these categories: a. 1) The figurative constant SPACE, or an alphanumeric edited, or alphabetic data item must not be moved to a numeric or numeric edited data item. [REV BEG] 2) A numeric edited data item must not be moved to a numeric or numeric edited data item.[REV END] ________________________________________________________________________ |This restriction is removed. (ANS85) | ________________________________________________________________________ b. A numeric literal, the figurative constant ZERO, a numeric data item or a numeric edited data item must not be moved to an alphabetic data item. c. A non-integer numeric literal or a non-integer numeric data item must not be moved to an alphanumeric or alphanumeric-edited data item. d. All other elementary moves are legal and are performed according to the rules given in General Rule 5. 5. Any necessary conversion of data from one form of internal representation to another takes place during legal elementary moves, along with any editing specified for ,or de-editing implied by, (ANS85) the receiving data item: a. When an alphanumeric edited or alphanumeric item is a receiving item, alignment and any necessary space filling takes place as defined in the section "Standard Alignment Rules" in the chapter COBOL Concepts. If the size of the sending item is greater than the size of the receiving item, the excess characters are truncated on the right after the receiving item is filled. If the sending item is described as being signed numeric, the operational sign will not be moved; if the operational sign occupies a separate character position (see the section "The SIGN Clause" earlier in this chapter), that character will not be moved and the size of the sending item will be considered to be one less than its actual size (in terms of standard data format characters). b. When a numeric or numeric edited item is the receiving item, alignment by decimal point and any necessary zero-filling takes place as defined in the section "Standard Alignment Rules" in the chapter COBOL Concepts, except where zeros are replaced because of editing requirements. ________________________________________________________________________ |(ANS85) | |[REV BEG] | | | |When the sending operand is numeric edited, de-editing is implied to | |establish the operand's unedited numeric value, which can be signed; | |then the unedited numeric value is moved to the receiving field. | |The effect of de-editing depends on the setting of the DE-EDIT | |directive (see your COBOL System Reference for details).[REV | |END] | ________________________________________________________________________ When a signed numeric item is the receiving item, the sign of the sending item is placed in the receiving item. (See the section "The SIGN Clause" earlier in this chapter.) Conversion of the representation of the sign takes place as necessary. If the sending item is unsigned, a positive sign is generated for the receiving item. When an unsigned numeric item is the receiving item, the absolute value of the sending item is moved and no operational sign is generated for the receiving item. When a data item described as alphanumeric is the sending item, data is moved as if the sending item were described as an unsigned numeric integer. When the receiving item is numeric and the sending item is defined as alphanumeric, if the content of the sending item is not an integer, then results of the move are undefined. (See the section "Incompatible Data" earlier in this chapter.) ________________________________________________________________________ |(ANS85) | |When the numeric data item is the sending item the action of the move | |will be such that a reverse of the move would cause the same value to | |appear in the numeric edited field (except for truncation). If he | |data item contains data which does not conform to the edited picture, | |zero is moved to the target. | ________________________________________________________________________ c. When a receiving field is described as alphabetic, justification and any necessary space-filling takes place as defined in the section "Standard Alignment Rules" in the chapter COBOL Concepts. If the size of the sending item is greater than the size of the receiving item, the excess characters are truncated on the right after the receiving item is filled. ________________________________________________________________________ |(OSVS) (VSC2) (MF) | | | | | | | |d. When the receiving field is floating-point, the sending item is | | converted first to internal floating-point and then moved. When | | data is moved to or from an external floating-point item, the | | data is converted first to or from its equivalent internal | | floating-point value. | | | ________________________________________________________________________ ________________________________________________________________________ |(VSC2) (MF) | | | | | | | |e. When the receiving field is DBCS the sending item must | | also be DBCS; no conversion takes place. If the sending | | and receiving items are not the same size the data item | | will be either truncated or padded with DBCS spaces on the | | right. | | | ________________________________________________________________________ 6. Any move that is not an elementary move is treated exactly as if it were an alphanumeric to alphanumeric elementary move, except that there is no conversion of data from one form of internal representation to another. In such a move, the receiving area will be filled without consideration for the individual elementary or group items contained within either the sending or receiving area, except as noted in the General Rules of the OCCURS clause. 7. Table 3-10 summarizes the legality of the various types of MOVE statements. The general rule reference indicates the rule that prohibits the move or the behavior of a legal move. Table 3-10. MOVE Statement Data Categories
[]
The MULTIPLY Statement Function The MULTIPLY statement causes numeric data items to be multiplied and sets the values of data items equal to the results. General Formats Format 1
[]
Format 2
[]
Syntax Rules 1. Each identifier must refer to a numeric elementary item, except that in Format 2 each identifier following the word GIVING must refer to either an elementary numeric item or an elementary numeric edited item. 2. Each literal must be a numeric literal. 3. The composite of operands, which is that hypothetical data item resulting from the superimposition of all receiving data items aligned on their decimal points, must not contain more than 18 digits. ________________________________________________________________________ |(OSVS) (VSC2) (MF) | | | | | | | |4. Floating-point data items and literals can be used anywhere a | | numeric data item or literal can be specified. | | | ________________________________________________________________________ General Rules 1. See the sections "The ROUNDED Phrase" , " The ON SIZE ERROR Phraseand NOT ON SIZE ERROR Phrase (ANS85)" , "Arithmetic Statements" , "Overlapping Operands" and "Multiple Results in Arithmetic Statements" in this chapter. 2. When Format 1 is used, the value of identifier-1 or literal-1 is multiplied by the value of identifier-2. The value of the multiplier (identifier-2) is replaced by this product; similarly for each successive occurrence of identifier-2 in the left-to-right order in which identifier-2 is specified. 3. When Format 2 is used, the value of identifier-1 or literal-1 is multiplied by identifier-2 or literal-2 and the result is stored in the data item referenced by each identifier-3. ________________________________________________________________________ |he NEXT SENTENCE Statement | | | |(MF) | | | |Function | | | |The NEXT SENTENCE statement transfers control to the next COBOL | |sentence, that is, following the next period. It does not transfer | |control to the logically next COBOL verb as occurs with the CONTINUE | |verb. | | | |General Format | | | | NEXT SENTENCE | | | |Syntax Rule | | | |The NEXT SENTENCE statement can be used anywhere a conditional | |statement or an imperative-statement can be used. | | | |General Rule | | | |The NEXT SENTENCE statement redirects the flow of the program to the | |logically next COBOL verb following the next period. | ________________________________________________________________________ ________________________________________________________________________ |The NOTE Statement | | | |(OSVS) | | | |Function | | | |The NOTE statement introduces a sentence or paragraph that will be | |treated as comments. | | | |General Format | | | | NOTE character-string | | | |Syntax Rule | | | |The character-string can be any combination of characters from the | |computer character set. | | | |General Rules | | | | | | 1. If a NOTE statement is the first sentence of a paragraph, the | | entire paragraph is treated as comment. | | | | 2. If a NOTE statement appears as other than the first sentence of| | a paragraph, text up to the next separator period is treated as| | comment. | ________________________________________________________________________ ________________________________________________________________________ |The ON Statement | | | |(OSVS) | | | |Function | | | |The ON statement allows selective execution of procedural statements | |on a periodic basis. | ________________________________________________________________________ General Format
[]
(OSVS) ________________________________________________________________________ |(OSVS) | | | |Syntax Rules | | | | | | 1. Identifier-1, identifier-2 and identifier-3 must describe | | unsigned integer numeric elementary items. | | | | 2. Literal-1, literal-2 and literal-3 must be unsigned numeric | | literals. | | | |General Rules | | | | | | 1. Prior to the first execution of each ON statement in | | the program, a counter, implicitly defined for that ON | | statement (the implicit-ON- counter), is initialized to be | | zero. | | | | 2. Identifier-1, identifier-2 and identifier-3 should, if | | specified, contain positive integer values at the time of | | execution of the ON statement. Varying these values between | | executions of the ON statement will affect subsequent | | executions of the ON statements. | | | | 3. The implicit ON counter cannot be affected in any way other | | than by transfer of program execution flow to that ON | | statement. (The ON counter of a called program can only be | | reset by the cancelling of that program; execution of the EXIT | | PROGRAM statement and subsequent CALL of the program without | | intervening CANCEL has no effect upon the implicit ON counter | | value.) | | | | 4. The following value-list is then evaluated: | | | | | | a. the current value of identifier-1 or literal-1, | | | | b. a sequence of values being the results of repeatedly | | adding the current value of identifier-2 or literal-2 to| | the current value of identifier-1 or literal-1 | | until the value of identifier-3 or literal-3 is | | reached. | | | | The implicit-ON-counter is then compared with each of this list| | of values. If an equality is found, then imperative- | | statement-1 is executed. If no equality is found, then | | imperative-statement-2 is executed. | ________________________________________________________________________ The PERFORM Statement Function The PERFORM statement is used to transfer control explicitly to one or more procedures and to return control implicitly whenever execution of the specified procedure is complete. ________________________________________________________________________ |(ANS85) | |The PERFORM statement is also used to control execution of one or more| |imperative statements which are within the scope of that PERFORM | |statement. | ________________________________________________________________________ General Formats Format 1
[]
Format 2
[]
Format 3
[]
Format 4
[]
________________________________________________________________________ |(ANS85) | | | | | | 1. If procedure-name-1 is omitted, imperative-statement-1 and the | | END-PERFORM phrase must be specified; if procedure-name-1 is | | specified, imperative-statement-1 and the END-PERFORM phrase | | must not be specified. | | | | When an imperative-statement-1 is specified, then the | | END-PERFORM phrase is optional. (MF) | | | | 2. In Format 4, if procedure-name-1 is omitted, the AFTER phrase | | must not be specified. | | | | 3. If neither the TEST BEFORE nor the TEST AFTER phrase is | | specified, the TEST BEFORE phrase is assumed. | ________________________________________________________________________ 4. Each identifier represents a numeric elementary item described in the Data Division. In Format 2, identifier-1 must be described as a numeric integer. 5. Each literal represents a numeric literal. 6. The words THROUGH and THRU are equivalent. 7. If an index-name is specified in the VARYING or AFTER phrase, then: a. The identifier in the associated FROM and BY phrases must reference an integer data item. b. The literal in the associated FROM phrase must be a positive integer. c. The literal in the associated BY phrase must be a nonzero integer. 8. If an index-name is specified in the FROM phrase, then: a. The identifier in the associated VARYING or AFTER phrase must reference an integer data item. b. The identifier in the associated BY phrase must reference an integer data item. c. The literal in the associated BY phrase must be an integer. 9. Literal in the BY phrase must not be zero. 10. Condition-1, condition-2, ... , can be any conditional expression. (See the section "Conditional Expressions" earlier in this chapter.) 11. Where procedure-name-1 and procedure-name-2 are both specified and either is the name of a procedure in the declaratives portion of the Procedure Division, both must be procedure-names in the same declarative section. 12. Two AFTER phrases are permitted in Format 4 of the PERFORM statement. ________________________________________________________________________ |(ANS85) | |Six AFTER phrases are permitted in Format 4 of the PERFORM statement. | ________________________________________________________________________ ________________________________________________________________________ |This limit is raised to fifteen. (MF) | ________________________________________________________________________ ________________________________________________________________________ |(OSVS) (VSC2) (MF) | | | | | | | |13. Floating-point data items and literals can be used anywhere a | | numeric data item or literal can be specified. They can not be | | used where an integer is required. | | | ________________________________________________________________________ General Rules 1. The data items referenced by identifier-4 and identifier-7 must not have a zero value. 2. If an index-name is specified in the VARYING or AFTER phrase, and an identifier is specified in the associated FROM phrase, the data item referenced by the identifier must have a positive value. 3. When procedure-name-1 is specified, the PERFORM statement is referred to as an out-of-line PERFORM statement; ________________________________________________________________________ |(ANS85) | |when procedure-name-1 is omitted, the PERFORM statement is referred to| |as an in-line PERFORM statement. | ________________________________________________________________________ 4. The statements contained within the range of procedure-name-1 (through procedure-name-2 if specified) for an out-of-line PERFORM statement ________________________________________________________________________ |(ANS85) | |or contained within the PERFORM statement itself for an in-line | |PERFORM statement | ________________________________________________________________________ are referred to as the specified set of statements. ________________________________________________________________________ |(ANS85) | | | | | | | |5. The END-PERFORM phrase delimits the scope of the in-line PERFORM | | statement. (See the section "Explicit and Implicit Scope | | Terminators" in the chapter COBOL Concepts.) | | | |6. An in-line PERFORM statement functions according to the following| | general rules for an otherwise identical out-of-line PERFORM | | statement, with the exception that the statements contained | | within the in-line PERFORM statement are executed in place of the| | statements contained within the range of procedure-name-1 | | (through procedure-name-2 if specified). Unless specially | | qualified by the word in-line or out-of-line, all the general | | rules which apply to the out-of-line PERFORM statement also apply| | to the in-line PERFORM statement. | | | ________________________________________________________________________ 7. When the PERFORM statement is executed, control is transferred to the first statement of the specified set of statements (except as indicated in General Rules 10b, 10c and 10e). This transfer of control occurs only once for each execution of a PERFORM statement. For those cases where a transfer of control to the specified set of statements does take place, an implicit transfer of control to the end of the PERFORM statement is established as follows: a. If procedure-name-1 is a paragraph-name and procedure-name-2 is not specified, the return is after the last statement of procedure-name-1. b. If procedure-name-1 is a section-name and procedure-name-2 is not specified, the return is after the last statement of the last paragraph in procedure-name-1. c. If procedure-name-2 is specified and it is a paragraph- name, the return is after the last statement of the paragraph. d. If procedure-name-2 is specified and it is a section-name, the return is after the last statement of the last paragraph in the section. ________________________________________________________________________ |(ANS85) | | | | | | | |e. If an in-line PERFORM statement is specified, an execution of the| | PERFORM statement is completed after the last statement contained| | within it has been executed. | | | ________________________________________________________________________ ________________________________________________________________________ |(MF) | | | | | | | |f. An EXIT PERFORM statement can be used to exit an in-line | | perform before executing all statements within the in-line | | perform. | | | ________________________________________________________________________ 8. There is no necessary relationship between procedure-name-1 and procedure-name-2 except that a consecutive sequence of operations is to be executed beginning at the procedure named procedure-name-1 and ending with the execution of the procedure named procedure-name-2. In particular, GO and PERFORM statements can occur between procedure-name-1 and the end of procedure-name-2. If there are two or more logical paths to the return point, then procedure-name-2 can be the name of a paragraph consisting of the EXIT statement, to which all of these paths must lead. 9. If control passes to the specified set of statements by means other than a PERFORM statement, control will pass through the last statement of the set to the next executable statement as if no PERFORM statement referenced the set. 10. The PERFORM statements operate as follows: a. Format 1 is the basic PERFORM statement. The specified set of statements referenced by this type of PERFORM statement is executed once and then control passes to the end of the PERFORM statement. b. Format 2 is the PERFORM ... TIMES. The specified set of statements is performed the number of times specified by integer-1 or by the initial value of the data item referenced by identifier-1 for that execution. If at the time of the execution of a PERFORM statement, the value of the data item referenced by identifier-1 is equal to zero or is negative, control passes to the end of the PERFORM statement. Following the execution of the specified set of statements the specified number of times, control is transferred to the end of the PERFORM statement. During execution of the PERFORM statement, reference to identifier-1 cannot alter the number of times the specified set of statements is to be executed from that which was indicated by the initial value of the data item referenced by identifier-1. c. Format 3 is the PERFORM ... UNTIL. The specified set of statements is performed until the condition specified by the UNTIL phrase is true. When the condition is true, control is transferred to the end of the PERFORM statement. If the condition is true when the PERFORM statement is entered, and the TEST BEFORE phrase is specified or implied, (ANS85) no transfer to procedure-name-1 takes place, and control is passed to the end of the PERFORM statement. ________________________________________________________________________ |(ANS85) | |If the TEST AFTER phrase is specified, the PERFORM statement functions| |as if the TEST BEFORE phrase were specified except that the condition | |is tested after the specified set of statements has been executed. | |Any subscripting or reference modification associated with the | |operands specified in condition-1 is evaluated each time the condition| |is tested. | ________________________________________________________________________ [REV BEG] When UNTIL EXIT is specified, the specified set of statements is performed repeatedly until some statement within the set causes this repetition to end. In the case of an out-of-line PERFORM, the only statements that will cause this termination are statements such as EXIT PROGRAM and STOP RUN. In the case of an in-line PERFORM, the repetition can also be terminated by the EXIT PERFORM statement and the GO TO statement.[REV END] d. Format 4 is the PERFORM ... VARYING. This variation of the PERFORM statement is used to augment the values referenced by one or more identifiers or index-names in an orderly fashion during the execution of a PERFORM statement. In the following discussion, every reference to identifier as the object of the VARYING, AFTER, and FROM (current value) phrases also refers to index-names. If index-name-1 is specified, the value of identifier-3, index-name-2, or literal-1 at the beginning of the execution of the PERFORM statement must correspond to an occurrence number of an element in the table associated with index-name-1. If index-name-3 is specified, the value of identifier-6, index-name-4, or literal-3 at the beginning of the execution of the PERFORM statement must correspond to an occurrence number of an element in the table associated with index-name-3. Subsequent augmentation, as described below, of index-name-1 or index-name-3 must not result in the associated index being set to a value outside the range of the table associated with index-name-1 or index-name-3; except that, at the completion of the PERFORM statement, the index associated with index-name-1 can contain a value that is outside the range of the associated table by one increment or decrement value. If identifier-2 or identifier-5 is subscripted, the subscripts are evaluated each time the content of the data item referenced by the identifier is set or augmented. If identifier-3, identifier-4, identifier-6, or identifier-7 is subscripted, the subscripts are evaluated each time the content of the data item referenced by the identifier is used in a setting or augmenting operation. Any subscripting or reference modification associated with the operands specified in condition-1 or condition-2 is evaluated each time the condition is tested. Representations of the actions of several types of Format 5 PERFORM statements are given on the following pages. 1. If the TEST BEFORE phrase is specified or implied: When the data item referenced by one identifier is varied, the content of the data item referenced by identifier-2 is set to literal-1 or the current value of the data item referenced by identifier-3 at the point of initial execution of the PERFORM statement; then, if the condition of the UNTIL phrase is false, the specified set of statements is executed once. The value of the data item referenced by identifier-2 is augmented by the specified increment or decrement value (literal-2 or the value of the data item referenced by identifier-4) and condition-1 is evaluated again. The cycle continues until this condition is true, at which point control is transferred to the end of the PERFORM statement. If condition-1 is true at the beginning of execution of the PERFORM statement, control is transferred to the end of the PERFORM statement.
[]
Figure 3-1. The VARYING Option of a PERFORM Statement with the TEST BEFORE Phrase Having One Condition When the data items referenced by two identifiers are varied, the content of the data item referenced by identifier-2 is set to literal-1 or the current value of the data item referenced by identifier-3 and then the content of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6. After the contents of the data items referenced by the identifiers have been set, condition-1 is evaluated; if true, control is transferred to the end of the PERFORM statement; if false, condition-2 is evaluated. If condition-2 is false, the specified set of statements is executed once, then the content of the data item referenced by identifier-5 is augmented by literal-4 or the content of the data item referenced by identifier-7 and condition-2 is evaluated again. This cycle of evaluation and augmentation continues until this condition is true. When condition-2 is true, the content of the data item referenced by identifier-2 is augmented by literal-2 or the content of the data item referenced by identifier-4, the content of the data item referenced by identifier-5 is set to literal-3 or the current value of the data item referenced by identifier-6, and condition-1 is reevaluated. The PERFORM statement is completed if condition-1 is true; if not, the cycle continues until condition-1 is true.
[]
Figure 3-2. The VARYING Option of a PERFORM Statement with the TEST BEFORE Phrase Having Two Conditions At the termination of the PERFORM statement, the data item referenced by identifier-5 contains literal-3 or the current value of the data item referenced by identifier-6. The data item referenced by identifier-2 contains a value that exceeds the last used setting by one increment or decrement value, unless condition-1 was true when the PERFORM statement was entered, in which case the data item referenced by identifier-2 contains literal-1 or the current value of the data item referenced by identifier-3. ________________________________________________________________________ |(ANS85) | | | | | | | |2. If the TEST AFTER phrase is specified: | | | | When the data item referenced by one identifier is varied, the | | content of the data item referenced by identifier-2 is | | set to literal-1 or the current value of the data item | | referenced by identifier-3 at the point of execution of the | | PERFORM statement; then the specified set of statements | | is executed once and condition-1 of the UNTIL phrase is | | tested. If the condition is false, the value of the data item | | referenced by identifier-2 is augmented by the specified | | increment or decrement value (literal-2 or the value of the | | data item referenced by identifier-4) and the specified | | set of statements is executed again. The cycle continues | | until condition-1 is tested and found to be true, at which | | point control is transferred to the end of the PERFORM | | statement. | | | ________________________________________________________________________
[]
Figure 3-3. The VARYING Option of a PERFORM Statement with the TEST AFTER Phrase Having One Condition ________________________________________________________________________ |(ANS85) | | | | | | | | When the data items referenced by two identifiers are varied, the| | content of the data item referenced by identifier-2 is set to | | literal-1 or the current value of the data item referenced by | | identifier-3; then the current value of the data item referenced | | by identifier-5 is set to literal-3 or the current value of the | | data item referenced by identifier-6; and the specified | | set of statements is then executed. Condition-2 is then | | evaluated; if false, the content of the data item referenced by | | identifier-5 is augmented by literal-4 or the content of the data| | item referenced by identifier-7 and the specified set of | | statements is again executed. The cycle continues until | | condition-2 is again evaluated and found to be true, at | | which time condition-1 is evaluated. If false, the content | | of the data item referenced by identifier-2 is augmented | | by literal-2 or the content of data item referenced by | | identifier-4, the content of the data item referenced by | | identifier-5 is set to literal-3 or the current value of the data| | item referenced by identifier-6 and the specified set of | | statements is again executed. This cycle continues until | | condition-1 is again evaluated and found to be true, at | | which time control is transferred to the end of the PERFORM | | statement. | | | | After completion of the PERFORM statement, each data item varied | | by an AFTER or VARYING phrase contains the same value it | | contained at the end of the most recent execution of the | | specified set of statements. See Figure 3-4 . | | | ________________________________________________________________________
[]
Figure 3-4. ________________________________________________________________________ |(ANS85) | | | | | | | | During the execution of the specified set of statements | | associated with the PERFORM statement, any change to the VARYING | | variable (the data item referenced by identifier-2 and | | index-name-1), the BY variable (the data item referenced by | | identifier-4), the AFTER variable (the data item referenced by | | identifier-5 and index-name-3), or the FROM variable (the data | | item referenced by identifier-3 and index-name-2) will be taken | | into consideration and will affect the operation of the PERFORM | | statement. | | | | When the data items referenced by two identifiers are varied, | | the data item referenced by identifier-5 goes through a | | complete cycle (FROM, BY, UNTIL) each time the content of | | the data item referenced by identifier-2 is varied. When | | the contents of three or more data items referenced by | | identifiers are varied, the mechanism is the same as for two | | identifiers except that the data item being varied by each | | AFTER phrase goes through a complete cycle each time the | | data item being varied by the preceding AFTER phrase is | | augmented. | | | ________________________________________________________________________ 11. The range of a PERFORM statement consists logically of all those statements that are executed as a result of executing the PERFORM statement through execution of the explicit transfer of control to the end of the PERFORM statement. The range includes all statements that are executed as the result of a transfer of control by CALL, EXIT, GO TO and PERFORM statements in the range of the PERFORM statement, as well as all statements in declarative procedures that are executed as a result of the execution of statements in the range of the PERFORM statement. The statements in the range of a PERFORM statement need not appear consecutively in the source program. 12. Statements executed as the result of a transfer of control caused by executing an EXIT PROGRAM statement within the range of a PERFORM statement are not considered to be part of that range. 13. If the range of a PERFORM statement includes another PERFORM statement, the sequence of procedures associated with the included PERFORM should itself either be totally included in, or totally excluded from, the logical sequence referred to by the first PERFORM. Thus, an active PERFORM statement, whose execution point begins within the range of another active PERFORM statement should not allow control to pass to the exit of the other active PERFORM statement; furthermore, two or more such active PERFORM statements should not have a common exit. ________________________________________________________________________ |(MF) | |These restrictions are not enforced. PERFORM statements can be freely| |nested, and recursion (a PERFORM statement performing a procedure | |containing it) is allowed. Only the exit point of the innermost | |PERFORM statement currently being executed is recognized. These rules| |can be changed by use of the PERFORM-TYPE directive (see your COBOL | |System Reference). | ________________________________________________________________________ See the following illustrations for examples of legal PERFORM constructs.
[]
14. A PERFORM statement that appears in a section that is not in an independent segment can have within its range, in addition to any declarative sections whose execution is caused within that range, one of the following: a. Sections and/or paragraphs wholly contained in one or more non-independent segments. b. Sections and/or paragraphs wholly contained in a single independent segment. ________________________________________________________________________ |These restrictions do not apply. (OSVS) (VSC2) | ________________________________________________________________________ 15. A PERFORM statement that appears in an independent segment can have within its range, in addition to any declarative sections whose execution is caused within that range, only one of the following: a. Sections and/or paragraphs wholly contained in one or more non-independent segments. b. Sections and/or paragraphs wholly contained in the same independent segment as that PERFORM statement. ________________________________________________________________________ |These restrictions do not apply. (OSVS) (VSC2) | ________________________________________________________________________


MPE/iX 5.0 Documentation