.. |_| unicode:: 0xA0 :trim: .. role:: small-caps :class: small-caps .. include:: <isonum.txt> .. index:: single:PROCEDURE DIVISION Syntax .. _PROCEDUREADIVISIONASyntax: 5 PROCEDURE DIVISION Syntax =========================== .. index:: single:PROCEDURE DIVISION Syntax PROCEDURE DIVISION Syntax ------------------------- :: PROCEDURE DIVISION [ { USING Subprogram-Argument... } ] ~~~~~~~~~ ~~~~~~~~ { ~~~~~ } { CHAINING Main-Program-Argument...} ~~~~~~~~ [ RETURNING identifier-1 ] . [ DECLARATIVES. ] ~~~~~~~~~ ~~~~~~~~~~~~ [ Event-Handler-Routine... . ] [ END DECLARATIVES. ] ~~~ ~~~~~~~~~~~~ General-Program-Logic [ Nested-Subprogram... ] [ END PROGRAM|FUNCTION name-1 ] ~~~ ~~~~~~~ ~~~~~~~~ .. index:: single:PROCEDURE DIVISION Subprogram-Argument Syntax PROCEDURE DIVISION Subprogram-Argument Syntax --------------------------------------------- :: [ BY { REFERENCE [ OPTIONAL ] } ] identifier-1 { ~~~~~~~~~ ~~~~~~~~ } { VALUE [ [ UNSIGNED ] SIZE IS { AUTO } ] } ~~~~~ ~~~~~~~~ ~~~~ { ~~~~ } { DEFAULT } { ~~~~~~~ } { integer-1 } .. index:: single:PROCEDURE DIVISION Main-Program-Argument Syntax PROCEDURE DIVISION Main-Program-Argument Syntax ----------------------------------------------- :: [ BY REFERENCE ] [ OPTIONAL ] identifier-1 ~~~~~~~~~ ~~~~~~~~ .. index:: single:PROCEDURE DIVISION RETURNING Syntax PROCEDURE DIVISION RETURNING Syntax ----------------------------------- :: RETURNING identifier-1 ~~~~~~~~~ .. index:: single:DECLARATIVES Syntax DECLARATIVES Syntax ------------------- :: section-name-1 SECTION. USE { [ GLOBAL ] AFTER STANDARD { EXCEPTION } PROCEDURE ON { INPUT } } ~~~ { ~~~~~~ { ~~~~~~~~~ } { ~~~~~ } } { { ERROR } { OUTPUT } } { ~~~~~ { ~~~~~~ } } { { I-O } } { FOR DEBUGGING ON { procedure-name-1 } { ~~~ } } { ~~~~~~~~~ { ALL PROCEDURES } { EXTEND } } { { ~~~ ~~~~~~~~~~ } { ~~~~~~ } } { { REFERENCES OF identifier-1 } { file-name-1 } } { } { [ GLOBAL ] BEFORE REPORTING identifier-2 } { ~~~~~~ ~~~~~~ ~~~~~~~~~ } { } { AFTER EC|{EXCEPTION CONDITION} } ~~ ~~~~~~~~~ ~~~~~~~~~ .. index:: single:AFTER EXCEPTION CONDITION The \ \ :code:`AFTER EXCEPTION CONDITION`\ and \ :code:`AFTER EC`\ clauses are syntactically recognized but are otherwise non-functional. .. index:: single:LENGTH OF Syntax LENGTH OF Syntax ---------------- :: LENGTH OF numeric-literal-1 | identifier-1 ~~~~~~ .. index:: single:Reference Modifier (Format 1) Syntax Reference Modifier (Format 1) Syntax ------------------------------------ :: identifier-1 [ OF|IN identifier-2 ] [ (subscript...) ] (start:[ length ]) ~~ ~~ .. index:: single:Reference Modifier (Format 2) Syntax Reference Modifier (Format 2) Syntax ------------------------------------ :: intrinsic-function-reference (start:[ length ]) .. index:: single:Arithmetic-Expression Syntax Arithmetic-Expression Syntax ---------------------------- :: Unary-Expression-1 { **|^ } Unary-Expression-2 { *|/ } { +|- } .. index:: single:Unary-Expression Syntax Unary-Expression Syntax ----------------------- :: { [ +|- ] { ( Arithmetic-Expression-1 ) } } { { [ LENGTH OF ] { identifier-1 } } } { { ~~~~~~ ~~ { literal-1 } } } { { { Function-Reference } } } { Arithmetic-Expression-2 } .. index:: single:Class-Condition Syntax Class-Condition Syntax ---------------------- :: identifier-1 IS [ NOT ] { NUMERIC } ~~~ { ~~~~~~~ } { ALPHABETIC } { ~~~~~~~~~~ } { ALPHABETIC-LOWER } { ~~~~~~~~~~~~~~~~ } { ALPHABETIC-UPPER } { ~~~~~~~~~~~~~~~~ } { OMITTED } { ~~~~~~~ } { class-name-1 } .. index:: single:Sign-Condition Syntax Sign-Condition Syntax --------------------- :: identifier-1 IS [ NOT ] { POSITIVE } ~~~ { ~~~~~~~~ } { NEGATIVE } { ~~~~~~~~ } { ZERO } ~~~~ .. index:: single:Relation-Condition Syntax Relation-Condition Syntax ------------------------- :: { identifier-1 } IS [ NOT ] RelOp { identifier-2 } { literal-1 } ~~~ { literal-2 } { arithmetic-expression-1 } { arithmetic-expression-2 } { index-name-1 } { index-name-2 } .. index:: single:RelOp Syntax RelOp Syntax ------------ :: { EQUAL TO } { ~~~~~ } { EQUALS } { ~~~~~~ } { GREATER THAN } { ~~~~~~~ } { GREATER THAN OR EQUAL TO } { ~~~~~~~ ~~ ~~~~~ } { LESS THAN } { ~~~~ } { LESS THAN OR EQUAL TO } { ~~~~ ~~ ~~~~~ } { = } { > } { >= } { < } { <= } .. index:: single:Combined Condition Syntax Combined Condition Syntax ------------------------- :: [ ( ] Condition-1 [ ) ] { AND } [ ( ] Condition-2 [ ) ] { ~~~ } { OR } { ~~ } .. index:: single:Negated Condition Syntax Negated Condition Syntax ------------------------ :: NOT Condition-1 ~~~ .. index:: single:ACCEPT FROM CONSOLE Syntax ACCEPT FROM CONSOLE Syntax -------------------------- :: ACCEPT { identifier-1 } [ FROM mnemonic-name-1 ] ~~~~~~ ~~~~ { OMITTED } ~~~~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT FROM COMMAND-LINE Syntax ACCEPT FROM COMMAND-LINE Syntax ------------------------------- :: ACCEPT identifier-1 ~~~~~~ FROM { COMMAND-LINE } ~~~~ { ~~~~~~~~~~~~ } { ARGUMENT-NUMBER } { ~~~~~~~~~~~~~~~ } { ARGUMENT-VALUE } { ~~~~~~~~~~~~~~ } [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT FROM ENVIRONMENT Syntax ACCEPT FROM ENVIRONMENT Syntax ------------------------------ :: ACCEPT identifier-1 ~~~~~~ FROM { ENVIRONMENT-VALUE } ~~~~ { ~~~~~~~~~~~~~~~~~ } { ENVIRONMENT { literal-1 } } { ~~~~~~~~~~~ { identifier-1 } } [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT Data-Item Syntax ACCEPT Data-Item Syntax ----------------------- :: ACCEPT { identifier-1 } ~~~~~~ { OMITTED } ~~~~~~~ [{ FROM EXCEPTION-STATUS }] ~~~~ ~~~~~~~~~~~~~~~~ [{ FROM CRT ] [ MODE IS BLOCK ]} ~~~~ ~~~ ~~~~ ~~~~~ [ AT { | LINE NUMBER { integer-1 } | } ] ~~ { | ~~~~ { identifier-2 } | } { | COLUMN|COL|POSITION|POS NUMBER { integer-2 } { | ~~~~~~ ~~~ ~~~~~~~~ ~~~ { identifier-3 } { } { { integer-3 } } { { identifier-4 } } [ WITH [ Attribute-Specification ]... ~~~~ [ LOWER|UPPER ] ~~~~~ ~~~~~ [ SCROLL { UP } [ { integer-4 } LINE|LINES ] ] ~~~~~~ { ~~ } { identifier-5 } { DOWN } ~~~~ [ TIMEOUT|TIME-OUT AFTER { integer-5 } ] ~~~~~~~ ~~~~~~~~ { identifier-6 } [ CONVERSION ] ~~~~~~~~~~ [ UPDATE ] ~~~~~~ [ SIZE { integer-6 } ] ~~~~ { identifier-7 } [ CONTROL { literal-8 } ] ~~~~~~~ { identifier-8 } [ { COLOUR } IS { integer-9 } ] { COLOR } { identifier-9 } ~~~~~~ [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:CONVERSION .. index:: single:MODE IS BLOCK .. index:: single:FROM CRT The \ \ :code:`FROM CRT`\ , \ \ :code:`MODE IS BLOCK`\ and \ \ :code:`CONVERSION`\ clauses are syntactically recognized but are otherwise non-functional. .. index:: single:ACCEPT FROM DATE/TIME Syntax ACCEPT FROM DATE/TIME Syntax ---------------------------- :: ACCEPT identifier-1 FROM { DATE [ YYYYMMDD ] } ~~~~~~ ~~~~ { ~~~~ ~~~~~~~~ } { DAY [ YYYYDDD ] } { ~~~ ~~~~~~~ } { DAY-OF-WEEK } { ~~~~~~~~~~~ } { TIME } { ~~~~ } { MICROSECOND-TIME } { ~~~~~~~~~~~~~~~~ } [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT FROM Screen-Info Syntax ACCEPT FROM Screen-Info Syntax ------------------------------ :: ACCEPT identifier-1 ~~~~~~ FROM { LINES|LINE-NUMBER } ~~~~ { ~~~~~ ~~~~~~~~~~~ } { COLS|COLUMNS } { ~~~~ ~~~~~~~ } { ESCAPE KEY } ~~~~~~ ~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT FROM Runtime-Info Syntax ACCEPT FROM Runtime-Info Syntax ------------------------------- :: ACCEPT identifier-1 ~~~~~~ FROM { EXCEPTION STATUS } ~~~~ { ~~~~~~~~~ ~~~~~~ } { USER NAME } ~~~~ ~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT OMITTED Syntax ACCEPT OMITTED Syntax --------------------- :: ACCEPT OMITTED ~~~~~~ 1. For console : See 6.17.1.1 (ACCEPT FROM CONSOLE Syntax) 2. For Screen : See 6.17.1.4 (ACCEPT screen-data-item Syntax) [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ACCEPT FROM EXCEPTION STATUS Syntax ACCEPT FROM EXCEPTION STATUS Syntax ----------------------------------- :: ACCEPT exception-status-pic-9-4 FROM EXCEPTION STATUS ~~~~~~ ~~~~ ~~~~~~~~~ ~~~~~~ [ END-ACCEPT ] ~~~~~~~~~~ .. index:: single:ADD TO Syntax ADD TO Syntax ------------- :: ADD { literal-1 }... ~~~ { identifier-1 } TO { identifier-2 ~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-ADD ] ~~~~~~~ .. index:: single:ADD GIVING Syntax ADD GIVING Syntax ----------------- :: ADD { literal-1 }... ~~~ { identifier-1 } [ TO identifier-2 ] ~~ GIVING { identifier-3 ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-ADD ] ~~~~~~~ .. index:: single:ADD CORRESPONDING Syntax ADD CORRESPONDING Syntax ------------------------ :: ADD CORRESPONDING identifier-1 ~~~ TO identifier-2 ~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-ADD ] ~~~~~~~ .. index:: single:ALLOCATE Syntax ALLOCATE Syntax --------------- :: FORMAT 1. ALLOCATE a "BASED" ITEM. ALLOCATE identifier-1 ~~~~~~~~ [{ INITIALIZED } ] [ RETURNING identifier-3 ] [{ ~~~~~~~~~~~ } ] ~~~~~~~~~ [{ INITIALISED } ] [{ ~~~~~~~~~~~ } ] FORMAT 2. ALLOCATE a memory block. ALLOCATE arithmetic-expression-1 CHARACTERS ~~~~~~~~ ~~~~~~~~~~ [{ INITIALIZED } [ TO { identifier-2}] ] RETURNING identifier-3 [{ ~~~~~~~~~~~ } [ ~~ { }] ] ~~~~~~~~~ [{ INITIALISED } [ { literal-1 }] ] [{ ~~~~~~~~~~~ } ] .. index:: single:ALTER Syntax ALTER Syntax ------------ :: ALTER procedure-name-1 TO PROCEED TO procedure-name-2 ~~~~~ ~~ .. index:: single:CALL Syntax CALL Syntax ----------- :: CALL [ { STDCALL } ] { literal-1 } ~~~~ { ~~~~~~~ } { identifier-1 } { STATIC } { ~~~~~~ } { mnemonic-name-1 } [ USING CALL-Argument... ] ~~~~~ [ RETURNING|GIVING identifier-2 ] ~~~~~~~~~ ~~~~~~ [ ON OVERFLOW|EXCEPTION imperative-statement-1 ] ~~~~~~~~ ~~~~~~~~~ [ NOT ON OVERFLOW|EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~ ~~~~~~~~~ [ END-CALL ] ~~~~~~~~ .. index:: single:CALL Argument Syntax CALL Argument Syntax -------------------- :: [ BY { REFERENCE } ] { ~~~~~~~~~ } { CONTENT } { ~~~~~~~ } { VALUE } ~~~~~ { OMITTED } { ~~~~~~~ } { [ UNSIGNED ] [ SIZE IS { AUTO } ] [ { literal-2 } } ~~~~~~~~ ~~~~ { ~~~~ } { identifier-2 } { DEFAULT } { ~~~~~~~ } { integer-1 } .. index:: single:CANCEL Syntax CANCEL Syntax ------------- :: CANCEL { literal-1 }... ~~~~~~ { identifier-1 } .. index:: single:CLOSE Syntax CLOSE Syntax ------------ :: CLOSE { file-name-1 [ { REEL|UNIT [ FOR REMOVAL ] } ] }... ~~~~~ { ~~~~ ~~~~ ~~~~~~~ } { WITH LOCK } { ~~~~ } { WITH NO REWIND } ~~ ~~~~~~ .. index:: single:NO REWIND .. index:: single:LOCK .. index:: single:REEL The \ \ :code:`REEL`\ , \ \ :code:`LOCK`\ and \ \ :code:`NO REWIND`\ clauses are syntactically recognized but are otherwise non-functional, except for the \ :code:`CLOSE...NO REWIND`\ statement, which will generate a file status of 07 rather than the usual 00 (but take no other action). .. index:: single:COMMIT Syntax COMMIT Syntax ------------- :: COMMIT ~~~~~~ .. index:: single:COMPUTE Syntax COMPUTE Syntax -------------- :: COMPUTE { identifier-1 ~~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ = | EQUAL arithmetic-expression-1 ~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-COMPUTE ] ~~~~~~~~~~~ .. index:: single:CONTINUE Syntax CONTINUE Syntax --------------- :: CONTINUE ~~~~~~~~ { identifier-1 } CONTINUE AFTER { literal-1 } SECONDS ~~~~~~~~ ~~~~~ { arithmetic-expression-1 } ~~~~~~~ .. index:: single:DELETE Syntax DELETE Syntax ------------- :: DELETE file-name-1 RECORD ~~~~~~ [ INVALID KEY imperative-statement-1 ] ~~~~~~~ [ NOT INVALID KEY imperative-statement-2 ] ~~~ ~~~~~~~ [ END-DELETE ] ~~~~~~~~~~ .. index:: single:DISPLAY UPON Device Syntax DISPLAY UPON Device Syntax -------------------------- :: DISPLAY { literal-1 }... ~~~~~~~ { identifier-1 } [ UPON mnemonic-name-1 ] ~~~~ [ WITH NO ADVANCING ] ~~ ~~~~~~~~~ [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-DISPLAY ] ~~~~~~~~~~~ .. index:: single:DISPLAY UPON COMMAND-LINE Syntax DISPLAY UPON COMMAND-LINE Syntax -------------------------------- :: DISPLAY { literal-1 }... ~~~~~~~ { identifier-1 } UPON { ARGUMENT-NUMBER|COMMAND-LINE } ~~~~ { ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ } [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-DISPLAY ] ~~~~~~~~~~~ .. index:: single:DISPLAY UPON ENVIRONMENT-NAME Syntax DISPLAY UPON ENVIRONMENT-NAME Syntax ------------------------------------ :: DISPLAY { literal-1 }... UPON { ENVIRONMENT-VALUE } ~~~~~~~ { identifier-1 } ~~~~ { ~~~~~~~~~~~~~~~~~ } { ENVIRONMENT-NAME } ~~~~~~~~~~~~~~~~ [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-DISPLAY ] ~~~~~~~~~~~ .. index:: single:DISPLAY Data-Item Syntax DISPLAY Data-Item Syntax ------------------------ :: DISPLAY identifier-1 [ UPON CRT|CRT-UNDER ] ~~~~~~~ ~~~~ ~~~ ~~~~~~~~~ OMITTED ~~~~~~~ [ AT { | LINE NUMBER { integer-1 } | } ] ~~ { | ~~~~ { identifier-2 } | } { | COLUMN|COL|POSITION|POS NUMBER { integer-2 } { | ~~~~~~ ~~~ ~~~~~~~~ ~~~ { identifier-3 } { } { { integer-3 } } { { identifier-4 } } [ WITH [ Attribute-Specification ]... ~~~~ [ SCROLL { UP } [ { integer-4 } LINE|LINES ] ] ~~~~~~ { ~~ } { identifier-5 } { DOWN } ~~~~ [ SIZE { integer-5 } ~~~~ { identifier-6 } ] [ CONTROL { literal-7 } ] ~~~~~~~ { identifier-7 } [ COLOR { IS } { integer-8 } ] COLOUR { IS } { identifier-8 } ] ~~~~~~ [ NO ADVANCING ] ~~~~~~~~~~~~ [ ON EXCEPTION imperative-statement-1 ] ~~~~~~~~~ [ NOT ON EXCEPTION imperative-statement-2 ] ~~~ ~~~~~~~~~ [ END-DISPLAY ] ~~~~~~~~~~~ .. index:: single:CONVERSION .. index:: single:UPON CRT-UNDER .. index:: single:UPON CRT The \ \ :code:`UPON CRT`\ , \ \ :code:`UPON CRT-UNDER`\ and \ \ :code:`CONVERSION`\ clauses are syntactically recognized but are otherwise non-functional. They are supported to provide compatibility with COBOL source written for other COBOL implementations. .. index:: single:DISPLAY data-item (Microsoft format) Syntax DISPLAY data-item (Microsoft format) Syntax ------------------------------------------- :: DISPLAY [position-spec] {identifier-2 | literal-1} ... ~~~~~~~ [ WITH [ Attribute-Specification ]... ~~~~ [ ERASE { SCREEN|LINE } ] [ SCROLL { UP } [ { integer-3 } LINE|LINES ] ] ~~~~~~ { ~~ } { identifier-3 } { DOWN } ~~~~ [ SIZE { integer-4 } ~~~~ { identifier-4 } ] [ END-DISPLAY ] ~~~~~~~~~~~ where position-spec is { (position-spec-num, position-spec-num) } { (,position-spec-num) } { (position-spec-num,) } where position-spec-num is { identifier-1 } [{ + } integer-1 ] { integer-2 } [{ - } ] .. index:: single:DIVIDE INTO Syntax DIVIDE INTO Syntax ------------------ :: DIVIDE { literal-1 } INTO { literal-2 } GIVING { identifier-3 ~~~~~~ { identifier-1 } ~~~~ { identifier-2 } ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ REMAINDER identifier-4 ] ~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-DIVIDE ] ~~~~~~~~~~ :: For further clarification, the following examples are provided to be used with the various flavours of the DIVIDE statement when using BY, INTO and GIVING. --------------------------------------+---+-----+--------------+-------------------+ DIVIDE Operation | A | B | C | D | --------------------------------------+---+-----+--------------+-------------------+ DIVIDE A INTO B | A | B/A | | | --------------------------------------+---+-----+--------------+-------------------+ DIVIDE A INTO B GIVING C | A | B | B/A | | --------------------------------------+---+-----+--------------+-------------------+ DIVIDE A BY B GIVING C | A | B | A/B | | --------------------------------------+---+-----+--------------+-------------------+ DIVIDE A INTO B GIVING C REMAINDER D | A | B | Integer(B/A) | Integer remainder | --------------------------------------+---+-----+--------------+-------------------+ .. index:: single:DIVIDE INTO GIVING Syntax DIVIDE INTO GIVING Syntax ------------------------- :: DIVIDE { literal-1 } INTO { literal-2 } GIVING { identifier-3 ~~~~~~ { identifier-1 } ~~~~ { identifier-2 } ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ REMAINDER identifier-4 ] ~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-DIVIDE ] ~~~~~~~~~~ .. index:: single:DIVIDE BY GIVING Syntax DIVIDE BY GIVING Syntax ----------------------- :: DIVIDE { literal-1 } BY { literal-2 } GIVING { identifier-3 ~~~~~~ { identifier-1 } ~~ { identifier-2 } ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ REMAINDER identifier-4 ] ~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-DIVIDE ] ~~~~~~~~~~ .. index:: single:ENTRY Syntax ENTRY Syntax ------------ :: ENTRY [ call-convention-phrase ] literal-1 ~~~~~ [ linkage-phrase ] [ USING ENTRY-Argument ... ] ~~~~~ Format 2 (Special purpose and for GO TO ) ENTRY FOR GO TO literal-3 ~~~~~ ~~~ ~~ ~~ .. index:: single:ENTRY-Argument Syntax ENTRY-Argument Syntax --------------------- :: [ BY { REFERENCE } ] { OMITTED } { ~~~~~~~~~ } { CONTENT } ] { [ size-phrase ] { identifier-1 } } { ~~~~~~~ } { literal-2 } } { VALUE } ] { [ size-phrase ] { identifier-1 } } ~~~~~ { literal-2 } } .. index:: single:EVALUATE Syntax EVALUATE Syntax --------------- :: EVALUATE Selection-Subject-1 [ ALSO Selection-Subject-2 ]... ~~~~~~~~ ~~~~ { { WHEN Selection-Object-1 [ ALSO Selection-Object-2 ] }... ~~~~ ~~~~ [ imperative-statement-1 ] }... [ WHEN OTHER ~~~~ ~~~~~ imperative-statement-other ] [ END-EVALUATE ] ~~~~~~~~~~~~ .. index:: single:EVALUATE Selection Subject Syntax EVALUATE Selection Subject Syntax --------------------------------- :: { TRUE } { ~~~~ } { FALSE } { ~~~~~ } { expression-1 } { identifier-1 } { literal-1 } .. index:: single:EVALUATE Selection Object Syntax EVALUATE Selection Object Syntax -------------------------------- :: { ANY } { ~~~ } { TRUE } { ~~~~ } { FALSE } { ~~~~~ } { partial-expression-1 } { } { { expression-2 } [ THRU|THROUGH { expression-3 } ] } { { identifier-2 } ~~~~ ~~~~~~~ { identifier-3 } } { { literal-2 } { literal-3 } } .. index:: single:EXAMINE Syntax EXAMINE Syntax -------------- :: EXAMINE { identifier } TALLYING ~~~~~~~ ~~~~~~~~ { ALL|LEADING|UNTIL FIRST } literal-1 REPLACING BY literal-2 ~~~ ~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~ EXAMINE { identifier } REPLACING { ALL|FIRST|LEADING|UNTIL FIRST } ~~~~~~~ ~~~~~~~~~ ~~~ ~~~~~ ~~~~~~~ ~~~~~~~~~~~ literal-3 BY literal-4 ~~ .. index:: single:EXHIBIT Syntax EXHIBIT Syntax -------------- :: EXHIBIT [CHANGED][NAMED] [position-spec] [ERASE] {identifier-1 | literal-1} ... ~~~~~~~ ~~~~~~~ ~~~~~ ~~~~~ [UPON mnemonic-name-1] ~~~~ where position-spec is {(position-spec-num, position-spec-num)} {(, position-spec-num) } {(position-spec-num, ) } where position-spec-num is {identifier-2} [{+} integer-2] {integer-1 } [{-} ] .. index:: single:EXIT Syntax EXIT Syntax ----------- :: EXIT [ { PROGRAM } [ { RETURNING } ] { identifier-1 } ] ~~~~ [ { GIVING } ] { literal-1 } ] { FUNCTION } ] { ~~~~~~~~ } ] { PERFORM [ CYCLE ] } ] { ~~~~~~~ ~~~~~ } ] { SECTION } ] { ~~~~~~~ } ] { PARAGRAPH } ] ~~~~~~~~~ .. index:: single:FREE Syntax FREE Syntax ----------- :: FREE { [ ADDRESS OF ] identifier-1 }... ~~~~ ~~~~~~~ .. index:: single:GENERATE Syntax GENERATE Syntax --------------- :: GENERATE { report-name-1 } ~~~~~~~~ { identifier-1 } .. index:: single:GOBACK Syntax GOBACK Syntax ------------- :: GOBACK [ { RETURNING|GIVING { literal-1 } ] ~~~~~~ { ~~~~~~~~~ ~~~~~~ { identifier-1 } .. index:: single:Simple GO TO Syntax Simple GO TO Syntax ------------------- :: GO TO procedure-name-1 ~~ GO TO ENTRY literal-3 ~~ ~~~~~ .. index:: single:GO TO DEPENDING ON Syntax GO TO DEPENDING ON Syntax ------------------------- :: GO TO {procedure-name-1} ... ~~ DEPENDING ON identifier-1 ~~~~~~~~~ GO TO ENTRY {literal-3} ... ~~ ~~~~~ DEPENDING ON identifier-1 ~~~~~~~~~ .. index:: single:IF Syntax IF Syntax --------- :: IF conditional-expression ~~ THEN { imperative-statement-1 } { NEXT SENTENCE } ~~~~ ~~~~~~~~ [ ELSE { imperative-statement-2 } ] ~~~~ { NEXT SENTENCE } ~~~~ ~~~~~~~~ [ END-IF ] ~~~~~~ .. index:: single:INITIALIZE Syntax INITIALIZE Syntax ----------------- :: INITIALIZE|INITIALISE identifier-1... ~~~~~~~~~~ ~~~~~~~~~~ [ WITH FILLER ] ~~~~~~ [ { category-name-1 } TO VALUE ] { ALL } ~~~~~ ~~~ [ THEN REPLACING { category-name-2 DATA BY ~~~~~~~~~ ~~ [ LENGTH OF ] { literal-1 } }... ] ~~~~~~ { identifier-1 } [ THEN TO DEFAULT ] ~~~~~~~ .. index:: single:INITIATE Syntax INITIATE Syntax --------------- :: INITIATE report-name-1 ~~~~~~~~ .. index:: single:INSPECT Syntax INSPECT Syntax -------------- :: INSPECT { literal-1 } ~~~~~~~ { identifier-1 } { function-reference-1 } [ TALLYING { identifier-2 FOR { ALL|LEADING|TRAILING { literal-2 } } ~~~~~~~~ ~~~ { ~~~ ~~~~~~~ ~~~~~~~~ { identifier-3 } } { CHARACTERS } ~~~~~~~~~~ [ | { AFTER|BEFORE } INITIAL { literal-3 } | ] }... ] | ~~~~~ ~~~~~~ { identifier-4 } | [ REPLACING { { { ALL|FIRST|LEADING|TRAILING { literal-4 } } ~~~~~~~~~ { { ~~~ ~~~~~ ~~~~~~~ ~~~~~~~~ { identifier-5 } } { CHARACTERS } { ~~~~~~~~~~ } BY { [ ALL ] literal-5 } ~~ { ~~~ } { identifier-6 } [ | { AFTER|BEFORE } INITIAL { literal-6 } | ] }... ] | ~~~~~ ~~~~~~ { identifier-7 } | [ CONVERTING { { literal-7 } TO { literal-8 } ~~~~~~~~~~ { identifier-8 } ~~ { identifier-9 } [ | { AFTER|BEFORE } INITIAL { literal-9 } | ] ] | ~~~~~ ~~~~~~ { identifier-10 } | .. index:: single:MERGE Syntax MERGE Syntax ------------ :: MERGE sort-file-1 ~~~~~ { ON { ASCENDING } KEY identifier-1... }... { ~~~~~~~~~ } { DESCENDING } ~~~~~~~~~~ [ WITH DUPLICATES IN ORDER ] ~~~~~~~~~~ [ COLLATING SEQUENCE IS alphabet-name-1 ] ~~~~~~~~~ USING file-name-1 file-name-2... ~~~~~ { OUTPUT PROCEDURE IS procedure-name-1 } { ~~~~~~ ~~~~~~~~~ } { [ THRU|THROUGH procedure-name-2 ] } { ~~~~ ~~~~~~~ } { GIVING file-name-3... } { ~~~~~~ } .. index:: single:DUPLICATES The \ \ :code:`DUPLICATES`\ clause is syntactically recognized but is otherwise non-functional. .. index:: single:Simple MOVE Syntax Simple MOVE Syntax ------------------ :: MOVE { literal-1 } TO identifier-2... ~~~~ { identifier-1 } ~~ .. index:: single:MOVE CORRESPONDING Syntax MOVE CORRESPONDING Syntax ------------------------- :: MOVE CORRESPONDING identifier-1 TO identifier-2... ~~~~ ~~~~ ~~ .. index:: single:MULTIPLY BY Syntax MULTIPLY BY Syntax ------------------ :: MULTIPLY { literal-1 } BY { identifier-2 ~~~~~~~~ { identifier-1 } ~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-MULTIPLY ] ~~~~~~~~~~~~ .. index:: single:MULTIPLY GIVING Syntax MULTIPLY GIVING Syntax ---------------------- :: MULTIPLY { literal-1 } BY { literal-2 } GIVING { identifier-3 ~~~~~~~~ { identifier-1 } ~~ { identifier-2 } ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-MULTIPLY ] ~~~~~~~~~~~~ .. index:: single:OPEN Syntax OPEN Syntax ----------- :: OPEN { { INPUT } [ SHARING WITH { ALL OTHER } ] file-name-1 ~~~~ { ~~~~~ } ~~~~~~~ { ~~~ } { OUTPUT } { NO OTHER } { ~~~~~~ } { ~~ } { I-O } { READ ONLY } { ~~~ } ~~~~ ~~~~ { EXTEND } ~~~~~~ [ { REVERSED } ] }... { ~~~~~~~~ } { WITH { NO REWIND } } { { ~~ ~~~~~~ } } { { LOCK } } ~~~~ .. index:: single:REVERSED .. index:: single:NO REWIND The \ \ :code:`NO REWIND`\ , and \ \ :code:`REVERSED`\ clauses are syntactically recognized but are otherwise non-functional. .. index:: single:Procedural PERFORM Syntax Procedural PERFORM Syntax ------------------------- :: PERFORM procedure-name-1 [ THRU|THROUGH procedure-name-2 ] ~~~~~~~ ~~~~ ~~~~~~~ [ { [ WITH TEST { BEFORE } ] { VARYING-Clause } } ] { ~~~~ { ~~~~~~ } { UNTIL conditional-expression-1 } } { { AFTER } ~~~~~ } { ~~~~~ } { UNTIL EXIT|FOREVER } { ~~~~~ ~~~~ ~~~~~~~ } { { literal-1 } TIMES } { { identifier-1 } ~~~~~ } .. index:: single:Inline PERFORM Syntax Inline PERFORM Syntax --------------------- :: PERFORM ~~~~~~~ [ { [ WITH TEST { BEFORE } ] { VARYING-Clause } } ] { ~~~~ { ~~~~~~ } { UNTIL conditional-expression-1 } } { { AFTER } ~~~~~ } { ~~~~~ } { UNTIL EXIT|FOREVER } { ~~~~~ ~~~~ ~~~~~~~ } { { literal-1 } TIMES } { { identifier-1 } ~~~~~ } imperative-statement-1 [ END-PERFORM ] ~~~~~~~~~~~ .. index:: single:VARYING Syntax VARYING Syntax -------------- :: VARYING identifier-2 FROM { literal-2 } [ BY { literal-3 } ] ~~~~~~~ ~~~~ { identifier-3 } ~~ { identifier-4 } [ UNTIL conditional-expression-1 ] ~~~~~ [ AFTER identifier-5 FROM { literal-4 } [ BY { literal-5 } ] ~~~~~ ~~~~ { identifier-6 } ~~ { identifier-7 } [ UNTIL conditional-expression-2 ] ]... ~~~~~ .. index:: single:Sequential READ Syntax Sequential READ Syntax ---------------------- :: READ file-name-1 [ { NEXT|PREVIOUS } ] RECORD [ INTO identifier-1 ] ~~~~ { ~~~~ ~~~~~~~~ } ~~~~ [ { IGNORING LOCK } ] { ~~~~~~~~ ~~~~ } { WITH [ NO ] LOCK } { ~~ ~~~~ } { WITH KEPT LOCK } { ~~~~ ~~~~ } { WITH IGNORE LOCK } { ~~~~~~ ~~~~ } { WITH WAIT } ~~~~ [ AT END imperative-statement-1 ] ~~~ [ NOT AT END imperative-statement-2 ] ~~~ ~~~ [ END-READ ] ~~~~~~~~ .. index:: single:Random READ Syntax Random READ Syntax ------------------ :: READ file-name-1 RECORD [ INTO identifier-1 ] ~~~~ ~~~~ [ { IGNORING LOCK } ] { ~~~~~~~~ ~~~~ } { WITH [ NO ] LOCK } { ~~ ~~~~ } { WITH KEPT LOCK } { ~~~~ ~~~~ } { WITH IGNORE LOCK } { ~~~~~~ ~~~~ } { WITH WAIT } ~~~~ [ KEY IS identifier-2 ] ~~~ [ INVALID KEY imperative-statement-1 ] ~~~~~~~ [ NOT INVALID KEY imperative-statement-2 ] ~~~ ~~~~~~~ [ END-READ ] ~~~~~~~~ .. index:: single:READY TRACE Syntax READY TRACE Syntax ------------------ :: READY TRACE ~~~~~ ~~~~~ .. index:: single:RELEASE Syntax RELEASE Syntax -------------- :: RELEASE record-name-1 [ FROM { literal-1 } ] ~~~~~~~ ~~~~ { identifier-1 } .. index:: single:RESET TRACE Syntax RESET TRACE Syntax ------------------ :: RESET TRACE ~~~~~ ~~~~~ .. index:: single:RETURN Syntax RETURN Syntax ------------- :: RETURN sort-file-name-1 RECORD ~~~~~~ [ INTO identifier-1 ] ~~~~ AT END imperative-statement-1 ~~~ [ NOT AT END imperative-statement-2 ] ~~~ ~~~ [ END-RETURN ] ~~~~~~~~~~ .. index:: single:REWRITE Syntax REWRITE Syntax -------------- :: REWRITE record-name-1 ~~~~~~~ [ FROM { literal-1 } ] ~~~~ { identifier-1 } [ WITH [ NO ] LOCK ] ~~ ~~~~ [ INVALID KEY imperative-statement-1 ] ~~~~~~~ [ NOT INVALID KEY imperative-statement-2 ] ~~~ ~~~~~~~ [ END-REWRITE ] ~~~~~~~~~~~ .. index:: single:ROLLBACK Syntax ROLLBACK Syntax --------------- :: ROLLBACK ~~~~~~~~ .. index:: single:SEARCH Syntax SEARCH Syntax ------------- :: SEARCH table-name-1 ~~~~~~ [ VARYING index-name-1 ] ~~~~~~~ [ AT END imperative-statement-1 ] ~~~ { WHEN conditional-expression-1 imperative-statement-2 }... ~~~~ [ END-SEARCH ] ~~~~~~~~~~ .. index:: single:SEARCH ALL Syntax SEARCH ALL Syntax ----------------- :: SEARCH ALL table-name-1 ~~~~~~ ~~~ [ AT END imperative-statement-1 ] ~~~ WHEN conditional-expression-1 imperative-statement-2 ~~~~ [ END-SEARCH ] ~~~~~~~~~~ .. index:: single:SET ENVIRONMENT Syntax SET ENVIRONMENT Syntax ---------------------- :: SET ENVIRONMENT { literal-1 } TO { literal-2 } ~~~ ~~~~~~~~~~~ { identifier-1 } ~~ { identifier-2 } .. index:: single:SET Program-Pointer Syntax SET Program-Pointer Syntax -------------------------- :: SET program-pointer-1 TO ENTRY { literal-1 } ~~~ ~~ ~~~~~ { identifier-1 } .. index:: single:SET ADDRESS Syntax SET ADDRESS Syntax ------------------ :: SET [ ADDRESS OF ] { pointer-name-1 }... ~~~ ~~~~~~~ ~~ { identifier-1 } TO [ ADDRESS OF ] { pointer-name-2 } ~~ ~~~~~~~ ~~ { identifier-2 } .. index:: single:SET Index Syntax SET Index Syntax ---------------- :: SET index-name-1 TO { literal-1 } ~~~ ~~ { identifier-2 } .. index:: single:SET UP/DOWN Syntax SET UP/DOWN Syntax ------------------ :: SET identifier-1 { UP } BY [ LENGTH OF ] { literal-1 } ~~~ { ~~ } ~~ ~~~~~~ ~~ { identifier-2 } { DOWN } ~~~~ .. index:: single:SET Condition Name Syntax SET Condition Name Syntax ------------------------- :: SET condition-name-1... TO { TRUE } ~~~ ~~ { ~~~~ } { FALSE } ~~~~~ .. index:: single:SET Switch Syntax SET Switch Syntax ----------------- :: SET mnemonic-name-1... TO { ON } ~~~ ~~ { ~~ } { OFF } ~~~ .. index:: single:SET ATTRIBUTE Syntax SET ATTRIBUTE Syntax -------------------- :: SET identifier-1 ATTRIBUTE { { BELL } { ON }... ~~~ ~~~~~~~~~ { ~~~~ } { ~~ } { BLINK } { OFF } { ~~~~~ } ~~~ { HIGHLIGHT } { ~~~~~~~~~ } { LEFTLINE } { ~~~~~~~~ } { LOWLIGHT } { ~~~~~~~~ } { OVERLINE } { ~~~~~~~~ } { REVERSE-VIDEO } { ~~~~~~~~~~~~~ } { UNDERLINE } ~~~~~~~~~ .. index:: single:SET LAST EXCEPTION Syntax SET LAST EXCEPTION Syntax ------------------------- :: SET LAST EXCEPTION TO { OFF } ~~~ ~~~~ ~~~~~~~~~ ~~ ~~~ .. index:: single:File-Based SORT Syntax File-Based SORT Syntax ---------------------- :: SORT sort-file-1 ~~~~ { ON { ASCENDING } KEY identifier-1... }... { ~~~~~~~~~ } { DESCENDING } ~~~~~~~~~~ [ WITH DUPLICATES IN ORDER ] ~~~~~~~~~~ [ COLLATING SEQUENCE IS alphabet-name-1 ] ~~~~~~~~~ { INPUT PROCEDURE IS procedure-name-1 } { ~~~~~~ ~~~~~~~~~ } { [ THRU|THROUGH procedure-name-2 ] } { ~~~~ ~~~~~~~ } { USING file-name-1... } ~~~~~ { OUTPUT PROCEDURE IS procedure-name-3 } { ~~~~~~ ~~~~~~~~~ } { [ THRU|THROUGH procedure-name-4 ] } { ~~~~ ~~~~~~~ } { GIVING file-name-2... } ~~~~~~ .. index:: single:DUPLICATES The \ \ :code:`DUPLICATES`\ clause is syntactically recognized but is otherwise non-functional. .. index:: single:Table SORT Syntax Table SORT Syntax ----------------- :: SORT table-name-1 ~~~~ { ON { ASCENDING } KEY identifier-1... }... { ~~~~~~~~~ } { DESCENDING } ~~~~~~~~~~ [ WITH DUPLICATES IN ORDER ] ~~~~~~~~~~ [ COLLATING SEQUENCE IS alphabet-name-1 ] ~~~~~~~~~ .. index:: single:DUPLICATES The \ \ :code:`DUPLICATES`\ clause is syntactically recognized but is otherwise non-functional. .. index:: single:START Syntax START Syntax ------------ :: START file-name-1 ~~~~~ [ { FIRST } ] { ~~~~~ } { LAST } { ~~~~ } { KEY { IS EQUAL TO | IS = | EQUALS } identifier-1 } ~~~ { ~~~~~ ~~~~~~ } { IS GREATER THAN | IS > } { ~~~~~~~ } { IS GREATER THAN OR EQUAL TO | IS >= } { ~~~~~~~ ~~ ~~~~~ } { IS NOT LESS THAN } { ~~~ ~~~~ } { IS LESS THAN | IS < } { ~~~~ } { IS LESS THAN OR EQUAL TO | IS <= } { ~~~~ ~~ ~~~~~ } { IS NOT GREATER THAN } ~~~ ~~~~~~~ [ WITH {SIZE} arithmetic-expression ] ~~~~ [ {LENGTH} arithmetic-expression ] ~~~~~~ [ INVALID KEY imperative-statement-1 ] ~~~~~~~ [ NOT INVALID KEY imperative-statement-2 ] ~~~ ~~~~~~~ [ END-START ] ~~~~~~~~~ .. index:: single:STOP Syntax STOP Syntax ----------- :: STOP { RUN [ { RETURNING|GIVING { literal-1 } } ] } ~~~~ { ~~~ { ~~~~~~~~~ ~~~~~~ { identifier-1 } } } { { } } { { WITH { ERROR } STATUS [ { literal-2 } ] } } { { { ~~~~~ } { identifier-2 } } } { { { NORMAL } } } { ~~~~~~ } { literal-3 } .. index:: single:STRING Syntax STRING Syntax ------------- :: STRING ~~~~~~ { { literal-1 } [ DELIMITED BY { SIZE } ] }... { identifier-1 } ~~~~~~~~~ { ~~~~ } { literal-2 } { identifier-2 } INTO identifier-3 ~~~~ [ WITH POINTER identifier-4 ] ~~~~~~~ [ ON OVERFLOW imperative-statement-1 ] ~~~~~~~~ [ NOT ON OVERFLOW imperative-statement-2 ] ~~~ ~~~~~~~~ [ END-STRING ] ~~~~~~~~~~ .. index:: single:SUBTRACT FROM Syntax SUBTRACT FROM Syntax -------------------- :: SUBTRACT { literal-1 }... FROM { identifier-2 ~~~~~~~~ { identifier-1 } ~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-SUBTRACT ] ~~~~~~~~~~~~ .. index:: single:SUBTRACT GIVING Syntax SUBTRACT GIVING Syntax ---------------------- :: SUBTRACT { literal-1 }... FROM identifier-2 ~~~~~~~~ { identifier-1 } ~~~~ GIVING { identifier-3 ~~~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] }... ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-SUBTRACT ] ~~~~~~~~~~~~ .. index:: single:SUBTRACT CORRESPONDING Syntax SUBTRACT CORRESPONDING Syntax ----------------------------- :: SUBTRACT CORRESPONDING identifier-1 FROM identifier-2 ~~~~~~~~ ~~~~ [ ROUNDED [ MODE IS { AWAY-FROM-ZERO } ] ] ~~~~~~~ ~~~~ { ~~~~~~~~~~~~~~ } { NEAREST-AWAY-FROM-ZERO } { ~~~~~~~~~~~~~~~~~~~~~~ } { NEAREST-EVEN } { ~~~~~~~~~~~~ } { NEAREST-TOWARD-ZERO } { ~~~~~~~~~~~~~~~~~~~ } { PROHIBITED } { ~~~~~~~~~~ } { TOWARD-GREATER } { ~~~~~~~~~~~~~~ } { TOWARD-LESSER } { ~~~~~~~~~~~~~ } { TRUNCATION } ~~~~~~~~~~ [ ON SIZE ERROR imperative-statement-1 ] ~~~~ ~~~~~ [ NOT ON SIZE ERROR imperative-statement-2 ] ~~~ ~~~~ ~~~~~ [ END-SUBTRACT ] ~~~~~~~~~~~~ .. index:: single:SUPPRESS Syntax SUPPRESS Syntax --------------- :: SUPPRESS PRINTING ~~~~~~~~ .. index:: single:TERMINATE Syntax TERMINATE Syntax ---------------- :: TERMINATE report-name-1... ~~~~~~~~~ .. index:: single:TRANSFORM Syntax TRANSFORM Syntax ---------------- :: TRANSFORM identifier-1 CHARACTERS FROM { literal-1 } TO { literal-2 } ~~~~~~~~~ ~~~~ { identifier-2 } ~~ { identifier-3 } .. index:: single:UNLOCK Syntax UNLOCK Syntax ------------- :: UNLOCK filename-1 RECORD|RECORDS ~~~~~~ .. index:: single:UNSTRING Syntax UNSTRING Syntax --------------- :: UNSTRING identifier-1 ~~~~~~~~ DELIMITED BY { [ ALL ] literal-1 } [ OR { [ ALL ] literal-2 } ]... ~~~~~~~~~ { ~~~ } ~~ { ~~~ } { identifier-2 } { identifier-3 } INTO { identifier-4 ~~~~ [ DELIMITER IN identifier-5 ] [ COUNT IN identifier-6 ] }... ~~~~~~~~~ ~~~~~ [ WITH POINTER identifier-7 ] ~~~~~~~ [ TALLYING IN identifier-8 ] ~~~~~~~~ [ ON OVERFLOW imperative-statement-1 ] ~~~~~~~~ [ NOT ON OVERFLOW imperative-statement-2 ] ~~~ ~~~~~~~~ [ END-UNSTRING ] ~~~~~~~~~~~~ .. index:: single:WRITE Syntax WRITE Syntax ------------ :: WRITE record-name-1 ~~~~~ [ FROM { literal-1 } ] ~~~~ { identifier-1 } [ WITH [ NO ] LOCK ] ~~ ~~~~ [ { BEFORE } ADVANCING { { literal-2 } LINE|LINES } ] { ~~~~~~ } { { identifier-2 } { AFTER } { PAGE } ~~~~~ { ~~~~ } { mnemonic-name-1 } [ AT END-OF-PAGE|EOP imperative-statement-1 ] ~~~~~~~~~~~ ~~~ [ NOT AT END-OF-PAGE|EOP imperative-statement-2 ] ~~~ ~~~~~~~~~~~ ~~~ [ INVALID KEY imperative-statement-3 ] ~~~~~~~ [ NOT INVALID KEY imperative-statement-4 ] ~~~ ~~~~~~~ [ END-WRITE ] ~~~~~~~~~