.. |_| 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 ]
     ~~~~~~~~~