ANSI X3J3/90.4



                             1.  INTRODUCTION

          1.1  Purpose

          This standard specifies the form  and  establishes  the
          interpretation  of  programs  expressed  in the FORTRAN
          language.  The purpose of this standard is  to  promote
          portability of FORTRAN programs for use on a variety of
          data processing systems.

          1.2  Processor

          The combination of a data  processing  system  and  the
          mechanism  by which programs are transformed for use on
          that data processing system is called  a  processor  in
          this standard.

          1.3  Scope

          1.3.1  Inclusions.  This standard specifies:

             (1) The form of a program  written  in  the  FORTRAN
                 language

             (2) Rules for interpreting the  meaning  of  such  a
                 program and its data

             (3) The form of writing input data to  be  processed
                 by  such  a program operating on data processing
                 systems

             (4) The form of the output data resulting  from  the
                 use of such a program on data processing systems

          1.3.2  Exclusions.  This standard does not specify:

             (1) The mechanism by which programs are  transformed
                 for use on a data processing system

             (2) The method of transcription of programs or their
                 input   or   output  data  to  or  from  a  data
                 processing medium

             (3) The operations required for setup and control of
                 the use of programs on data processing systems

             (4) The results when the rules of this standard fail
                 to establish an interpretation

             (5) The size or complexity of a program and its data
                 that  will  exceed  the capacity of any specific



          FORTRAN 77 Full Language                       Page 1-1







          INTRODUCTION                             ANSI X3J3/90.4



                 data processing system or the  capability  of  a
                 particular processor

             (6) The range or precision of numeric quantities and
                 the method of rounding of numeric results

             (7) The physical properties of input/output records,
                 files, and units

             (8) The physical properties  and  implementation  of
                 storage

          1.4  Conformance

          The  requirements, prohibitions, and options  specified
          in  this  standard generally refer to permissible forms
          and  relationships  for  standard-conforming   programs
          rather than for processors.  The obvious exceptions are
          the optional output  forms  produced  by  a  processor,
          which  are  not  under  the  control of a program.  The
          requirements,   prohibitions,   and   options   for   a
          standard-conforming  processor usually must be inferred
          from those given for programs.

          An executable program (2.4.2) conforms to this standard
          if it uses only those forms and relationships described
          herein  and  if   the   executable   program   has   an
          interpretation  according  to this standard.  A program
          unit (2.4) conforms to  this  standard  if  it  can  be
          included  in  an  executable  program  in a manner that
          allows  the   executable   program   to   be   standard
          conforming.

          A processor conforms to this standard  if  it  executes
          standard-conforming  programs in a manner that fulfills
          the interpretations  prescribed  herein.   A  standard-
          conforming  processor  may  allow  additional forms and
          relationships  provided  that  such  additions  do  not
          conflict  with  the  standard  forms and relationships.
          However,  a  standard-conforming  processor  may  allow
          additional intrinsic functions (15.10) even though this
          could cause a conflict with the  name  of  an  external
          function  in  a standard-conforming program.  If such a
          conflict occurs, the processor is permitted to use  the
          intrinsic  function  unless  the  name  appears  in  an
          EXTERNAL  statement  within  the   program   unit.    A
          standard-conforming  program  must  not  use  intrinsic
          functions that have been added by the processor.   Note
          that  a  standard-conforming  program  must not use any
          forms or relationships  that  are  prohibited  by  this
          standard, but a standard-conforming processor may allow



          FORTRAN 77 Full Language                       Page 1-2







          INTRODUCTION                             ANSI X3J3/90.4



          such forms and relationships if they do not change  the
          proper interpretation of a standard-conforming program.

          Because a standard-conforming program may place demands
          on  the processor that are not within the scope of this
          standard or may include standard  items  that  are  not
          portable,  such as external procedures defined by means
          other than FORTRAN, conformance to this  standard  does
          not  ensure  that  a  standard-conforming  program will
          execute consistently on all or any  standard-conforming
          processors.

          1.4.1  Subset_Conformance.  This standard describes two
          levels  of the FORTRAN language, referred to as FORTRAN
          and subset FORTRAN.   FORTRAN  is  the  full  language.
          Subset FORTRAN is a subset of the full language.

          An executable program conforms to the subset  level  of
          this   standard   if  it  uses  only  those  forms  and
          relationships described herein for that  level  and  if
          the  executable program has an interpretation according
          to this standard at that level and would have the  same
          interpretation  in  the  full language.  A program unit
          conforms to the subset level of this standard if it can
          be  included  in an executable program in a manner that
          allows the executable program to be standard conforming
          at that level.

          A subset level processor conforms to the  subset  level
          of  this standard if it executes subset level standard-
          conforming programs  in  a  manner  that  fulfills  the
          interpretations  prescribed  herein for subset FORTRAN.
          A subset level processor may include an extension  that
          has a form and would have an interpretation at the full
          level only if  the  extension  has  the  interpretation
          provided  by  the full level.  A subset level processor
          may also include extensions that do not have forms  and
          interpretations in the full language.

          1.5  Notation_Used_in_This_Standard

          In this standard, "must" is. to  be  interpreted  as  a
          requirement;   conversely,   "must   not"   is   to  be
          interpreted as a prohibition.

          In  describing  the  form  of  FORTRAN  statements   or
          constructs,  the following metalanguage conventions and
          symbols are used:

             (1) Special characters from  the  FORTRAN  character
                 set,  uppercase letters, and uppercase words are



          FORTRAN 77 Full Language                       Page 1-3







          INTRODUCTION                             ANSI X3J3/90.4



                 to be written as shown, except  where  otherwise
                 noted.

             (2) Lowercase letters and lowercase  words  indicate
                 general  entities  for  which  specific entities
                 must be substituted in actual statements.   Once
                 a  given  lowercase  letter or word is used in a
                 syntactic specification to represent an  entity,
                 all  subsequent  occurrences  of  that letter or
                 word represent the same entity until that letter
                 or  word  is  used  in  a  subsequent  syntactic
                 specification to represent a different entity.

             (3) Brackets, [ ], are  used  to  indicate  optional
                 items.

             (4) An ellipsis, ...  , indicates that the preceding
                 optional  items  may appear one or more times in
                 succession.

             (5) Blanks are  used  to  improve  readability,  but
                 unless otherwise noted have no significance.

             (6) Words or  groups  of  words  that  have  special
                 significance  are underlined where their meaning
                 is  described.   Titles  and  the   metalanguage
                 symbols described in 1.5(2) are also underlined.

          An  example  illustrates  the  metalanguage.   Given  a
          description of the form of a statement as:

                               CALL sub___ [( [a_ [,a_]...] )]

          the following forms are allowed:

                     CALL sub___
                     CALL sub___ ()
                     CALL sub___ (a_)
                     CALL sub___ (a_, a_)
                     CALL sub___ (a_, a_, a_)
                     etc

          When an actual statement is written, specific  entities
          are substituted for sub and each a_; for example:

                               CALL ABCD (X,1.0)








          FORTRAN 77 Full Language                       Page 1-4







          INTRODUCTION                             ANSI X3J3/90.4



          1.6  Subset_Text

          The  section  titles  in  the  subset  description  are
          identical  to  the  section titles in the full language
          description.

          There are some instances in which a  general  situation
          occurs  in the full language but only a restricted case
          applies to  the  subset.   For  example,  in  3.6,  the
          "nonexecutable  statements"  that  may  appear  between
          executable statements may only be FORMAT statements  in
          the  subset.   In  most  of  these  instances, the more
          general text of the full language description has  been
          retained  in  the subset description, even though it is
          to be interpreted as covering only the restricted case.

          To help find differences between the  full  and  subset
          languages, vertical bars have been added in the margins
          where the text of the full and subset languages differ.
          For  example,  this  sentence  does  not  appear in the
          subset language text.

































          FORTRAN 77 Full Language                       Page 1-5











                                 CONTENTS


          1.  INTRODUCTION..................................  1-1
              1.1  Purpose..................................  1-1
              1.2  Processor................................  1-1
              1.3  Scope....................................  1-1
                   1.3.1  Inclusions........................  1-1
                   1.3.2  Exclusions........................  1-1
              1.4  Conformance..............................  1-2
                   1.4.1  Subset Conformance................  1-3
              1.5  Notation Used in This Standard...........  1-3
              1.6  Subset Text..............................  1-5









































                                   - i -







                                                   ANSI X3J3/90.4



                      2.  FORTRAN_TERMS_AND_CONCEPTS

          This section introduces basic terminology and concepts,
          some  of which are clarified further in later sections.
          Many terms and concepts of more specialized meaning are
          also  introduced  in  later  sections.   The underlined
          words are  described  here  and  used  throughout  this
          standard.

          2.1  Sequence

          A  sequence  is  a  set   ordered   by   a   one-to-one
          correspondence  with  the  numbers 1, 2, through n_. The
          number of elements in the sequence is n_. A sequence may
          be empty, in which case it contains no elements.

          The elements of a nonempty sequence are referred to  as
          the  first  element,  second  element,  etc.   The  n_th
          element, where n_ is  the  number  of  elements  in  the
          sequence,   is  called  the  last  element.   An  empty
          sequence has no first or last element.

          2.2  Syntactic_Items

          Letters, digits, and special characters of the  FORTRAN
          character  set  (3.1)  are  used  to form the syntactic
          items of the FORTRAN  language.   The  basic  syntactic
          items  of  the FORTRAN language are constants, symbolic
          names,  statement  labels,  keywords,  operators,   and
          special characters.

          The form of a constant is described in Section 4.

          A symbolic name takes the form of a sequence of one  to
          six  letters  or  digits,  the first of which must be a
          letter.    Classification   of   symbolic   names   and
          restrictions on their use are described in Section 18.

          A statement label takes the form of a sequence  of  one
          to  five  digits,  one of which must be nonzero, and is
          used to identify a statement (3.4).

          A keyword takes the form of  a  specified  sequence  of
          letters.   The  keywords  that  are  significant in the
          FORTRAN language are described in  Sections  7  through
          16.   In  many  instances,  a keyword or a portion of a
          keyword also meets  the  requirements  for  a  symbolic
          name.   Whether  a  particular  sequence  of characters
          identifies a keyword or a symbolic name is  implied  by
          context.   There  is  no sequence of characters that is
          reserved in all contexts in FORTRAN.



          FORTRAN 77 Full Language                       Page 2-1







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          The set of special characters is described in 3.1.4.  A
          special  character  may  be  an  operator  or part of a
          constant or  have  some  other  special  meaning.   The
          interpretation is implied by context.

          2.3  Statements,_Comments,_and_Lines

          A FORTRAN statement is a sequence of  syntactic  items,
          as  described  in  Sections  7  through 16.  Except for
          assignment  and  statement  function  statements,  each
          statement begins with a keyword.  In this standard, the
          keyword or keywords that begin the statement  are  used
          to  identify  that    statement.   For  example, a DATA
          statement begins with the keyword DATA.

          A statement is written in one or more lines, the  first
          of  which is called an initial line (3.2.2); succeeding
          lines, if any, are called continuation lines (3.2.3).

          There is also a line called  a  comment  line  (3.2.1),
          which  is  not part of any statement and is intended to
          provide documentation.

          2.3.1  Classes_of_Statements.    Each   statement    is
          classified  as executable or nonexecutable (Section 7).
          Executable statements specify  actions.   Nonexecutable
          statements  describe  the characteristics, arrangement,
          and   initial   values   of   data;   contain   editing
          information;   specify  statement  functions;  classify
          program  units;  and  specify   entry   points   within
          subprograms.

          2.4  Program_Units_and_Procedures

          A program unit consists of a sequence of statements and
          optional  comment  lines.   A  program unit is either a
          main program or a subprogram.

          A main program is a program unit that does not  have  a
          FUNCTION,  SUBROUTINE,  or  BLOCK DATA statement as its
          first statement; it may have a PROGRAM statement as its
          first statement.

          A subprogram is a program unit  that  has  a  FUNCTION,
          SUBROUTINE,  or  BLOCK  DATA  statement  as  its  first
          statement.  A subprogram whose  first  statement  is  a
          FUNCTION  statement is called a function subprogram.  A
          subprogram  whose  first  statement  is  a   SUBROUTINE
          statement  is called a subroutine subprogram.  Function
          subprograms  and  subroutine  subprograms  are   called
          procedure   subprograms.   A  subprogram  whose   first



          FORTRAN 77 Full Language                       Page 2-2







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          statement is a BLOCK DATA statement is called  a  block
          data subprogram.

          2.4.1  Procedures.    Subroutines   (15.6),    external
          functions  (15.5),  statement functions (15.4), and the
          intrinsic  functions  (15.3)  are  called   procedures.
          Subroutines  and external functions are called external
          procedures.   Function   subprograms   and   subroutine
          subprograms  may specify one or more external functions
          and   subroutines,   respectively   (15.7).    External
          procedures  may  also  be specified by means other than
          FORTRAN subprograms.

          2.4.2  Executable_Program.  An executable program is  a
          collection  of  program  units that consists of exactly
          one main program and any  number,  including  none,  of
          subprograms and external procedures.

          2.5  Variable

          A variable is an entity that has  both  a  name  and  a
          type.   A  variable name is a symbolic name of a datum.
          Such a datum may be  identified,  defined  (2.11),  and
          referenced   (2.12).   Note  that  the  usage  in  this
          standard of the word "variable" is more restricted than
          its  normal  usage,  in  that it does not include array
          elements.

          The type of a variable is optionally specified  by  the
          appearance  of  the  variable  name in a type-statement
          (8.4).  If it is  not  so  specified,  the  type  of  a
          variable is implied by the first letter of the variable
          name to be integer or real (4.1.2), unless the  initial
          letter  type  implication  is  changed by the use of an
          IMPLICIT statement (8.5).

          At any given time during the execution of an executable
          program,  a  variable  is  either  defined or undefined
          (2.11).

          2.6  Array

          An array is a nonempty sequence of data that has a name
          and a type.  The name of an array is a symbolic name.

          2.6.1  Array_Elements.  Each  of  the  elements  of  an
          array  is  called  an  array  element.   An  array name
          qualified by a subscript is an array element  name  and
          identifies  a  particular  element  of the array (5.3).
          Such a datum may be  identified,  defined  (2.11),  and
          referenced  (2.12).  The number of array elements in an



          FORTRAN 77 Full Language                       Page 2-3







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          array  is specified by an array declarator (5.1).

          An array element has a type.  The  type  of  all  array
          elements within an array is the same, and is optionally
          specified by the appearance of  the  array  name  in  a
          type-statement  (8.4).   If it is not so specified, the
          type of an array element is implied by the first letter
          of the array name to be integer or real (4.1.2), unless
          the initial letter type implication is changed  by  the
          use of an IMPLICIT statement (8.5).

          At any given time during the execution of an executable
          program,   an   array  element  is  either  defined  or
          undefined (2.11).

          2.7  Substring

          A character datum is a nonempty sequence of characters.
          A  substring  is  a  contiguous  portion of a character
          datum.  The form of a substring name used to  identify,
          define  (2.11),  or  reference  (2.12)  a  substring is
          described in 5.7.1.

          At any given time during the execution of an executable
          program,  a  substring  is  either defined or undefined
          (2.11).

          2.8  Dummy_Argument

          A dummy argument in a procedure is  either  a  symbolic
          name  or  an  asterisk.  A symbolic name dummy argument
          identifies a variable, array, or procedure that becomes
          associated  (2.14)  with  an  actual  argument  of each
          reference  (2.12)  to  the  procedure  (15.2,   15.4.2,
          15.5.2,   and  15.6.2).   An  asterisk  dummy  argument
          indicates that the corresponding actual argument is  an
          alternate   return  specifier  (15.6.2.3,  15.8.3,  and
          15.9.3.5).

          Each dummy  argument  name  that  is  classified  as  a
          variable, array, or dummy procedure may appear wherever
          an actual name of the same class (Section 18) and  type
          may appear, except where explicitly prohibited.

          2.9  Scope_of_Symbolic_Names_and_Statement_Labels

          The scope of a symbolic name (18.1)  is  an  executable
          program,   a   program   unit,   a  statement  function
          statement, or an implied-DO list in a DATA statement.





          FORTRAN 77 Full Language                       Page 2-4







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          The name of the main program and  the  names  of  block
          data  subprograms, external functions, subroutines, and
          common blocks have a scope of an executable program.

          The names of variables,  arrays,  constants,  statement
          functions,  intrinsic  functions,  and dummy procedures
          have a scope of a program unit.

          The names of variables that appear as  dummy  arguments
          in  a statement function statement have a scope of that
          statement.

          The names of variables that appear as  the  DO-variable
          of  an  implied-DO  in a DATA statement have a scope of
          the implied-DO list.

          Statement labels have a scope of a program unit.

          2.10  List

          A list  is  a  nonempty  sequence  (2.1)  of  syntactic
          entities separated by commas.  The entities in the list
          are called list items.

          2.11  Definition_Status

          At  any  gi  ven  time  during  the  execution  of   an
          executable  program,  the  definition  status  of  each
          variable, array element, or substring is either defined
          or undefined (Section 17).

          A defined entity has a value.  The value of  a  defined
          !entity  does  not  change  until  the  entity  becomes
          undefined or is redefined with a different value.

          If  a  variable,  array  element,   or   substring   is
          undefined, it does not have a predictable value.

          A previously defined  variable  or  array  element  may
          become  undefined.   Subsequent definition of a defined
          variable or array element is permitted, except where it
          is explicitly prohibited.

          A  character  variable,  character  array  element,  or
          character  substring  is  defined if every substring of
          length one of the entity is defined.  Note  that  if  a
          string  is  defined,  every  substring of the string is
          defined,  and  if  any  substring  of  the  string   is
          undefined,  the  string  is  undefined.   Defining  any
          substring does not cause any other string or  substring
          to become undefined.



          FORTRAN 77 Full Language                       Page 2-5







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          An entity is initially defined  if  it  is  assigned  a
          value  in  a  DATA  statement  (Section  9).  Initially
          defined entities  are  in  the  defined  state  at  the
          beginning  of  execution of an executable program.  All
          variables and array elements not initially defined,  or
          associated (2.14) with an initially defined entity, are
          undefined  at  the  beginning  of   execution   of   an
          executable program.

          An entity must be defined at the time a reference to it
          is executed.

          2.12  Reference

          A variable, array element, or  substring  reference  is
          the   appearance  of  a  variable,  array  element,  or
          substring name,  respectively,  in  a  statement  in  a
          context  requiring  the value of that entity to be used
          during the execution of the executable program.  When a
          reference  to  an entity is executed, its current value
          is available.  In this standard, the act of defining an
          entity is not considered a reference to that entity.

          A procedure reference is the appearance of a  procedure
          name  in  a  statement  in  a context that requires the
          actions specified  by  the  procedure  to  be  executed
          during the execution of the executable program.  When a
          procedure reference is executed, the procedure must  be
          available.

          2.13  Storage

          A storage sequence is a sequence of storage  units.   A
          storage  unit  is  either  a  numeric storage unit or a
          character storage unit.

          An integer, real, or  logical  datum  has  one  numeric
          storage  unit in a storage sequence. A double precision
          or complex datum has two numeric  storage  units  in  a
          storage  sequence.  A character datum has one character
          storage unit in a storage sequence for  each  character
          in  the  datum.   This  standard  does  not  specify  a
          relationship between  a  numeric  storage  unit  and  a
          character storage unit.

          If a datum requires more than one  storage  unit  in  a
          storage sequence, those storage units are consecutive.

          The concept of a storage sequence is used  to  describe
          relationships   that   exist   among  variables,  array
          elements, arrays, substrings, and common blocks.   This



          FORTRAN 77 Full Language                       Page 2-6







          FORTRAN TERMS AND CONCEPTS               ANSI X3J3/90.4



          standard  does  not  specify a relationship between the
          storage sequence concept and the physical properties or
          implementation of storage.

          2.14  Association

          Association of entities exists if the same datum may be
          identified  by  different  symbolic  names  in the same
          program unit, or by the same name or a  different  name
          in  different  program  units  of  the  same executable
          program (17.1).

          Entities may become associated by the following:

             (1) Common association (8.3.4)

             (2) Equivalence association (8.2.2)

             (3) Argument association (15.9.3)

             (4) Entry association (15.7.3)

































          FORTRAN 77 Full Language                       Page 2-7











                                 CONTENTS


          2.  FORTRAN TERMS AND CONCEPTS....................  2-1
              2.1   Sequence................................  2-1
              2.2   Syntactic Items.........................  2-1
              2.3   Statements, Comments, and Lines.........  2-2
                    2.3.1  Classes of Statements............  2-2
              2.4   Program Units and Procedures............  2-2
                    2.4.1  Procedures.......................  2-3
                    2.4.2  Executable Program...............  2-3
              2.5   Variable................................  2-3
              2.6   Array...................................  2-3
                    2.6.1  Array Elements...................  2-3
              2.7   Substring...............................  2-4
              2.8   Dummy Argument..........................  2-4
              2.9   Scope of Symbolic Names and Statement
                    Labels..................................  2-4
              2.10  List....................................  2-5
              2.11  Definition Status.......................  2-5
              2.12  Reference...............................  2-6
              2.13  Storage.................................  2-6
              2.14  Association.............................  2-7































                                   - i -







                                                   ANSI X3J3/90.4



               3.  CHARACTERS,_LINES,_AND_EXECUTION_SEQUENCE

          3.1  FORTRAN_Character_Set

          The  FORTRAN  character  set  consists  of   twenty-six
          letters, ten digits, and thirteen special characters.

          3.1.1  Letters.  A letter  is  one  of  the  twenty-six
          characters:

            A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

          3.1.2  Digits.  A digit is one of the ten characters:

                            0 1 2 3 4 5 6 7 8 9

          A string of digits is interpreted in the  decimal  base
          number   system   when   a  numeric  interpretation  is
          appropriate.

          3.1.3  Alphanumeric_Characters.     An     alphanumeric
          character is a letter or a digit.

          3.1.4  Special_Characters.  A special character is  one
          of the thirteen characters:

8                    __________________________________

                     Character   Name of Character
8                    __________________________________

                                    Blank
8                     _________________9      Equals
                         +          Plus
                         -          Minus
                         *          Asterisk
                         /          Slash
                         (          Left Parenthesis
                         )          Right Parenthesis
                         ,          Comma
                         $          Currency Symbol
                         '          Apostrophe
                         :          Colon
8                    __________________________________
7                   |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|














                              |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|














                                                     |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|
















          3.1.5  Collating_Sequence_and_Graphics.  The  order  in
          which  the  letters  are  listed in 3.1.1 specifies the
          collating sequence for the letters; A is less  than  Z.
          The  order  in  which  the  digits  are listed in 3.1.2
          specifies the collating sequence for the digits;  0  is
          less  than  9.   The  digits  and  letters  must not be
          intermixed in the collating sequence; all of the digits
          must  precede A or all of the digits must follow Z. The

9
          FORTRAN 77 Full Language                       Page 3-1







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4



          character blank is less than the letter A and less than
          the digit 0.  The order in which the special characters
          are  listed  in  3.1.4  does  not  imply  a   collating
          sequence.

          Except for the currency symbol, the graphics  used  for
          the  forty-nine  characters  must be as given in 3.1.1,
          3.1.2, and 3.1.4.  However, the style of any graphic is
          not specified.

          3.1.6  Blank_Character.  With the exception of the uses
          specified  (3.2.2,  3.2.3, 3.3, 4.8, 4.8.1, 13.5.1, and
          13.5.2), a blank character within a program unit has no
          meaning  and  may  be used to improve the appearance of
          the program unit, subject to  the  restriction  on  the
          number of consecutive continuation lines (3.3).

          3.2  Lines

          A  line  in  a  program  unit  is  a  sequence  of   72
          characters.   All  characters  must be from the FORTRAN
          character set,  except  as  described  in  3.2.1,  4.8,
          12.2.2, and 13.2.1.

          The character positions in a line  are  called  columns
          and  are  numbered consecutively 1, 2, through 72.  The
          number indicates the sequential position of a character
          in  the  line,  beginning at the left and proceeding to
          the right.  Lines are ordered by the sequence in  which
          they  are  presented to the processor.  Thus, a program
          unit consists of a totally ordered set of characters.

          3.2.1  Comment_Line.  A comment line is any  line  that
          contains  a  C  or an asterisk in column 1, or contains
          only blank characters  in  columns  1  through  72.   A
          comment line that contains a C or an asterisk in column
          1 may contain any character capable  of  representation
          in the processor in columns 2 through 72.

          A comment line does not affect the  executable  program
          in any way and may be used to provide documentation.

          Comment lines may appear anywhere in the program  unit.
          Comment lines may precede the initial line of the first
          statement of  any  program  unit.   Comment  lines  may
          appear   between   an   initial   line  and  its  first
          continuation line or between two continuation lines.

          3.2.2  Initial_Line.  An initial line is any line  that
          is  not a comment line and contains the character blank
          or the digit 0 in column 6.  Columns 1  through  5  may



          FORTRAN 77 Full Language                       Page 3-2







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4



          contain a statement label (3.4), or each of the columns
          1 through 5 must contain the character blank.

          3.2.3  Continuation_Line.  A continuation line  is  any
          line   that  contains  any  character  of  the  FORTRAN
          character set other than the  character  blank  or  the
          digit  0 in column 6 and contains only blank characters
          in columns 1 through 5.  A statement must not have more
          than nineteen continuation lines.

          3.3  Statements

          The statements of the FORTRAN language are described in
          Sections  7  through  16  and  are used to form program
          units.  Each statement is written in columns 7  through
          72   of  an  initial  line  and  as  many  as  nineteen
          continuation lines.  An END statement is  written  only
          in  columns  7 through 72 of an initial line.  No other
          statement in a program unit may have  an  initial  line
          that  appears  to  be  an  END  statement.  Note that a
          statement must contain no more  than  1320  characters.
          Except  as  part  of  a logical IF statement (11.5), no
          statement may begin on a line that contains any part of
          the previous statement.

          Blank characters  preceding,  within,  or  following  a
          statement  do  not  change  the  interpretation  of the
          statement, except when they  appear  within  the  datum
          strings  of  character constants or the H or apostrophe
          edit descriptors in FORMAT statements.  However,  blank
          characters do count as characters in the limit of total
          characters allowed in any one statement.

          3.4  Statement_Labels

          Statement  labels  provide  a  means  of  referring  to
          individual  statements.   Any statement may be labeled,
          but  only  labeled  executable  statements  and  FORMAT
          statements  may  be referred to by the use of statement
          labels.  The form of a statement label is a sequence of
          one  to five digits, one of which must be nonzero.  The
          statement label may be placed  anywhere  in  columns  1
          through  5  of  the initial line of the statement.  The
          same statement label must not be given to more than one
          statement  in a program unit.  Blanks and leading zeros
          are not significant in distinguishing between statement
          labels.







          FORTRAN 77 Full Language                       Page 3-3







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4



          3.5  Order_of_Statements_and_Lines

          A PROGRAM  statement  may  appear  only  as  the  first
          statement  of a main program.  The first statement of a
          subprogram must be either a  FUNCTION,  SUBROUTINE,  or
          BLOCK DATA statement.

          Within a program unit that permits the statements:

             (1) FORMAT statements may appear anywhere;

             (2) all specification statements  must  precede  all
                 DATA  statements, statement function statements,
                 and executable statements;

             (3) all statement function statements  must  precede
                 all executable statements;

             (4) DATA statements may appear  anywhere  after  the
                 specification statements; and

             (5) ENTRY  statements  may  appear  anywhere  except
                 between   a   block   IF   statement   and   its
                 corresponding END IF statement, or between a  DO
                 statement  and the terminal statement of its DO-
                 loop.

          Within the specification statements of a program  unit,
          IMPLICIT    statements    must    precede   all   other
          specification statements except  PARAMETER  statements.
          Any  specification statement that specifies the type of
          a  symbolic  name  of  a  constant  must  precede   the
          PARAMETER   statement   that  defines  that  particular
          symbolic name of a constant;  the  PARAMETER  statement
          must   precede  all  other  statements  containing  the
          symbolic names of constants that  are  defined  in  the
          PARAMETER statement.

          The last  line  of  a  program  unit  must  be  an  END
          statement.














          FORTRAN 77 Full Language                       Page 3-4







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4



                                 Figure 1

              Required Order of Statements and Comment Lines

8          _______________________________________________________

                          PROGRAM, FUNCTION, SUBROUTINE, or
                                BLOCK DATA Statement
8                    _____________________________________________

                                                    IMPLICIT
                                                   Statements
                                    PARAMETER8   _________________
9           Comment      FORMAT      Statements        Other
            Lines        and                      Specification
                        ENTRY                      Statements
                      Statements8  _______________________________
9                                                    Statement
                                                    Function
                                       DATA        Statements
                                    Statements8  _________________
9                                                   Executable
                   |8|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|999999999999999999999999999999999             |7|7|7|7|7|7|7|7|7|7|7|7|7|99999999999999999999999999             |7|7|7|7|7|7|7|7|7|7|7|7|7|99999999999999999999999999   Statements
8          _______________________________________________________

                              END Statement
8          _______________________________________________________
7         |8|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|


















9                                                                |8|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|




















9          Figure  1  is  a  diagram  of  the  required  order  of
          statements  and  comment  lines  for  a  program  unit.
          Vertical lines delineate varieties of  statements  that
          may  be  interspersed.   For example, FORMAT statements
          may be interspersed with statement function  statements
          and  executable statements.  Horizontal lines delineate
          varieties of statements that must not be  interspersed.
          For  example, statement function statements must not be
          interspersed with executable statements.  Note that  an
          END  statement is also an executable statement and must
          appear only as the last statement of a program unit.

          3.6  Normal_Execution_Sequence_and_Transfer_of_Control

          Normal  execution  sequence   is   the   execution   of
          executable statements in the order in which they appear
          in a program unit.  Execution of an executable  program
          begins  with  the  execution  of  the  first executable
          statement  of  the  main  program.   When  an  external
          procedure  specified  in  a  subprogram  is referenced,
          execution begins with the  first  executable  statement
          that   follows   the  FUNCTION,  SUBROUTINE,  or  ENTRY
          statement that specifies the  referenced  procedure  as
          the name of a procedure.




          FORTRAN 77 Full Language                       Page 3-5







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4



          A transfer of control is an alteration  of  the  normal
          execution   sequence.   Statements  that  may  cause  a
          transfer of control are:

             (1) GO TO

             (2) Arithmetic IF

             (3) RETURN

             (4) STOP

             (5) An input/output statement  containing  an  error
                 specifier or end-of-file specifier

             (6) CALL with an alternate return specifier

             (7) A logical IF statement  containing  any  of  the
                 above forms

             (8) Block IF and ELSE IF

             (9) The last statement, if any, of  an  IF-block  or
                 ELSE IF-block

            (10) DO

            (11) The terminal statement of a DO-loop

            (12) END

          The  effect  of  these  statements  on  the   execution
          sequence is described in Sections 11, 12, and 15.

          The normal execution sequence is not  affected  by  the
          appearance of nonexecutable statements or comment lines
          between executable statements.  Execution of a function
          reference  or  a  CALL  statement  is  not considered a
          transfer of control in the program unit  that  contains
          the  reference,  except  when  control is returned to a
          statement identified by an alternate  return  specifier
          in  a  CALL  statement.   Execution  of a RETURN or END
          statement in a referenced procedure, or execution of  a
          transfer  of  control within a referenced procedure, is
          not considered a transfer of  control  in  the  program
          unit that contains the reference.

          In the execution of an executable program, a  procedure
          subprogram must not be referenced a second time without
          the prior execution of a RETURN  or  END  statement  in
          that procedure.



          FORTRAN 77 Full Language                       Page 3-6







          CHARACTERS, LINES, AND EXECUTION SEQUENCEANSI X3J3/90.4

























































          FORTRAN 77 Full Language                       Page 3-7











                                 CONTENTS


          3.  CHARACTERS, LINES, AND EXECUTION SEQUENCE.....  3-
              1
              3.1  FORTRAN Character Set....................  3-1
                   3.1.1  Letters...........................  3-1
                   3.1.2  Digits............................  3-1
                   3.1.3  Alphanumeric Characters...........  3-1
                   3.1.4  Special Characters................  3-1
                   3.1.5  Collating Sequence and
                          Graphics..........................  3-1
                   3.1.6  Blank Character...................  3-2
              3.2  Lines....................................  3-2
                   3.2.1  Comment Line......................  3-2
                   3.2.2  Initial Line......................  3-2
                   3.2.3  Continuation Line.................  3-3
              3.3  Statements...............................  3-3
              3.4  Statement Labels.........................  3-3
              3.5  Order of Statements and Lines............  3-4
              3.6  Normal Execution Sequence and Transfer
                   of Control...............................  3-5
































                                   - i -







                                                   ANSI X3J3/90.4



                       4.  DATA_TYPES_AND_CONSTANTS

          4.1  Data_Types

          The six types of data are:

             (1) Integer

             (2) Real

             (3) Double precision

             (4) Complex

             (5) Logical

             (6) Character

          Each  type  is  different  and  may  have  a  different
          internal  representation.   The  type  may  affect  the
          interpretation of the operations involving the datum.

          4.1.1  Data_Type_of_a_Name.   The  name   employed   to
          identify a datum or a function also identifies its data
          type.   A  symbolic  name  representing   a   constant,
          variable,   array,   or   function  (except  a  generic
          function) must have only  one  type  for  each  program
          unit.   Once  a  particular  name  is identified with a
          particular type in a program unit, that type is implied
          for  any  usage  of  the  name in the program unit that
          requires a type.

          4.1.2  Type_Rules_for_Data_and_Procedure_Identifiers.
          A  symbolic  name that identifies a constant, variable,
          array, external function,  or  statement  function  may
          have  its  type  specified in a type-statement (8.4) as
          integer, real, double precision, complex,  logical,  or
          character.   In  the absence of an explicit declaration
          in a type-statement, the type is implied by  the  first
          letter  of  the name.  A first letter of I, J, K, L, M,
          or N implies type integer and any other letter  implies
          type  real,  unless an IMPLICIT statement (8.5) is used
          to change the default implied type.

          The data type of an array element name is the  same  as
          the type of its array name.

          The data type of a function name specifies the type  of
          the  datum  supplied  by  the  function reference in an
          expression.




          FORTRAN 77 Full Language                       Page 4-1







          DATA TYPES AND CONSTANTS                 ANSI X3J3/90.4



          A symbolic name that identifies  a  specific  intrinsic
          function  in  a program unit has a type as specified in
          15.10.  An explicit  type-statement  is  not  required;
          however, it is permitted.  A generic function name does
          not have a predetermined type; the result of a  generic
          function  reference  assumes a type that depends on the
          type of the argument, as  specified  in  15.10.   If  a
          generic function name appears in a type-statement, such
          an appearance is not sufficient by itself to remove the
          generic properties from that function.

          In a program unit that contains  an  external  function
          reference,  the  type  of the function is determined in
          the same manner as for variables and arrays.

          The  type  of  an  external   function   is   specified
          implicitly  by  its  name,  explicitly  in  a  FUNCTION
          statement, or explicitly  in  a  type-statement.   Note
          that an IMPLICIT statement within a function subprogram
          may affect the type of the external function  specified
          in the subprogram.

          A  symbolic  name  that  identifies  a  main   program,
          subroutine,  common block, or block data subprogram has
          no data type.

          4.1.3  Data_Type_Properties.   The   mathematical   and
          representation  properties  for  each of the data types
          are specified in the  following  sections.   For  real,
          double  precision,  and integer data, the value zero is
          considered neither positive nor negative.  The value of
          a  signed  zero is the same as the value of an unsigned
          zero.

          4.2  Constants

          A constant is an arithmetic constant, logical constant,
          or  character  constant.   The value of a constant does
          not  change.   Within  an   executable   program,   all
          constants that have the same form have the same value.

          4.2.1  Data_Type_of_a_Constant.  The form of the string
          representing  a  constant  specifies both its value and
          data  type.   A  PARAMETER  statement  (8.6)  allows  a
          constant  to  be  given  a symbolic name.  The symbolic
          name of a constant must not be used  to  form  part  of
          another constant.

          4.2.2  Blanks_in_Constants.  Blank characters occurring
          in  a constant, except in a character constant, have no
          effect on the value of the constant.



          FORTRAN 77 Full Language                       Page 4-2







          DATA TYPES AND CONSTANTS                 ANSI X3J3/90.4



          4.2.3  Arithmetic_Constants.   Integer,  real,   double
          precision,   and   complex   constants  are  arithmetic
          constants.

          4.2.3.1  Signs_of_Constants.  An unsigned constant is a
          constant  without a leading sign.  A signed constant is
          a constant with a  leading  plus  or  minus  sign.   An
          optionally  signed  constant  is a constant that may be
          either signed or unsigned.  Integer, real,  and  double
          precision constants may be optionally signed constants,
          except where specified otherwise.

          4.3  Integer_Type

          An integer datum is always an exact  representation  of
          an  integer value.  It may assume a positive, negative,
          or zero value.  It may assume only an  integral  value.
          An  integer  datum  has  one  numeric storage unit in a
          storage sequence.

          4.3.1  Integer_Constant.   The  form  of   an   integer
          constant  is  an  optional  sign followed by a nonempty
          string of digits.  The digit string is interpreted as a
          decimal number.

          4.4  Real_Type

          A real datum is a processor approximation to the  value
          of  a real number.  It may assume a positive, negative,
          or zero value.  A real datum has  one  numeric  storage
          unit in a storage sequence.

          4.4.1  Basic_Real_Constant.  The form of a  basic  real
          constant  is  an  optional  sign,  an  integer  part, a
          decimal point, and a fractional part,  in  that  order.
          Both  the  integer  part  and  the  fractional part are
          strings of digits; either of these parts may be omitted
          but  not  both.   A  basic real constant may be written
          with  more  digits  than  a  processor  will   use   to
          approximate  the  value  of the constant.  A basic real
          constant is interpreted as a decimal number.

          4.4.2  Real_Exponent.  The form of a real  exponent  is
          the  letter  E followed by an optionally signed integer
          constant.  A real exponent denotes a power of ten.

          4.4.3  Real_Constant.  The forms  of  a  real  constant
          are:

             (1) Basic real constant




          FORTRAN 77 Full Language                       Page 4-3







          DATA TYPES AND CONSTANTS                 ANSI X3J3/90.4



             (2) Basic real constant followed by a real exponent

             (3) Integer constant followed by a real exponent

          The value of a  real  constant  that  contains  a  real
          exponent  is  the product of the constant that precedes
          the E and the power of ten  indicated  by  the  integer
          following the E.  The integer constant part of form (3)
          may be written with more digits than a  processor  will
          use to approximate the value of the constant.

          4.5  Double_Precision_Type

          A double precision datum is a  processor  approximation
          to the value of a real number.  The precision, although
          not specified, must be greater than that of type  real.
          A   double  precision  datum  may  assume  a  positive,
          negative, or zero value.  A double precision datum  has
          two  consecutive  numeric  storage  units  in a storage
          sequence.

          4.5.1  Double_Precision_Exponent.  The form of a double
          precision  exponent  is  the  letter  D  followed by an
          optionally signed integer constant.  A double precision
          exponent  denotes  a  power of ten.  Note that the form
          and interpretation of a double precision  exponent  are
          identical  to those of a real exponent, except that the
          letter D is used instead of the letter E.

          4.5.2  Double_Precision_Constant.   The  forms   of   a
          double precision constant are:

             (1) Basic  real  constant  followed  by   a   double
                 precision exponent

             (2) Integer constant followed by a double  precision
                 exponent

          The value of a double precision constant is the product
          of  the  constant  that precedes the D and the power of
          ten indicated by the  integer  following  the  D.   The
          integer  constant  part of form (2) may be written with
          more digits than a processor will  use  to  approximate
          the value of the constant.

          4.6  Complex_Type

          A complex datum is a  processor  approximation  to  the
          value  of  a  complex  number.  The representation of a
          complex datum is in the form of an ordered pair of real
          data.   The  first of the pair represents the real part



          FORTRAN 77 Full Language                       Page 4-4







          DATA TYPES AND CONSTANTS                 ANSI X3J3/90.4



          of the complex datum  and  the  second  represents  the
          imaginary  part.   Each  part  has  the  same degree of
          approximation as for a real datum.  A complex datum has
          two  consecutive  numeric  storage  units  in a storage
          sequence; the first storage unit is the real  part  and
          the second storage unit is the imaginary part.

          4.6.1  Complex_Constant.   The  form   of   a   complex
          constant  is  a left parenthesis followed by an ordered
          pair of real or integer constants separated by a comma,
          and   followed  by  a  right  parenthesis.   The  first
          constant of the pair is the real part  of  the  complex
          constant and the second is the imaginary part.

          4.7  Logical_Type

          A logical datum may assume  only  the  values  true  or
          false.  A logical datum has one numeric storage unit in
          a storage sequence.

          4.7.1  Logical_Constant.  The forms  and  values  of  a
          logical constant are:

8                             _________________

                               Form     Value
8                             _________________

                              .TRUE.    true

                              .FALSE.   false

8                             _________________
7                            |7|7|7|7|7|7|7|






                                     |7|7|7|7|7|7|7|






                                             |7|7|7|7|7|7|7|








          4.8  Character_Type

          A character datum  is  a  string  of  characters.   The
          string   may  consist  of  any  characters  capable  of
          representation in the processor.  The  blank  character
          is  valid  and  significant  in a character datum.  The
          length of a character datum is the number of characters
          in  the  string.   A  character datum has one character
          storage unit in a storage sequence for  each  character
          in the string.

          Each character in the string has a  character  position
          that  is  numbered  consecutively  1,  2,  3, etc.  The
          number indicates the sequential position of a character
          in  the string, beginning at the left and proceeding to
          the right.


9


          FORTRAN 77 Full Language                       Page 4-5







          DATA TYPES AND CONSTANTS                 ANSI X3J3/90.4



          4.8.1  Character_Constant.  The  form  of  a  character
          constant is an apostrophe followed by a nonempty string
          of characters followed by an  apostrophe.   The  string
          may consist of any characters capable of representation
          in the processor.  Note that the delimiting apostrophes
          are  not part of the datum represented by the constant.
          An apostrophe within the datum string is represented by
          two consecutive apostrophes with no intervening blanks.
          In a character constant, blanks  embedded  between  the
          delimiting apostrophes are significant.

          The length of a character constant  is  the  number  of
          characters  between  the delimiting apostrophes, except
          that each pair of consecutive apostrophes counts  as  a
          single  character.   The delimiting apostrophes are not
          counted.  The length of a character  constant  must  be
          greater than zero.





































          FORTRAN 77 Full Language                       Page 4-6











                                 CONTENTS


          4.  DATA TYPES AND CONSTANTS......................  4-1
              4.1  Data Types...............................  4-1
                   4.1.1  Data Type of a Name...............  4-1
                   4.1.2  Type Rules for Data and Procedure
                          Identifiers.......................  4-1
                   4.1.3  Data Type Properties..............  4-2
              4.2  Constants................................  4-2
                   4.2.1  Data Type of a Constant...........  4-2
                   4.2.2  Blanks in Constants...............  4-2
                   4.2.3  Arithmetic Constants..............  4-3
              4.3  Integer Type.............................  4-3
                   4.3.1  Integer Constant..................  4-3
              4.4  Real Type................................  4-3
                   4.4.1  Basic Real Constant...............  4-3
                   4.4.2  Real Exponent.....................  4-3
                   4.4.3  Real Constant.....................  4-3
              4.5  Double Precision Type....................  4-4
                   4.5.1  Double Precision Exponent.........  4-4
                   4.5.2  Double Precision Constant.........  4-4
              4.6  Complex Type.............................  4-4
                   4.6.1  Complex Constant..................  4-5
              4.7  Logical Type.............................  4-5
                   4.7.1  Logical Constant..................  4-5
              4.8  Character Type...........................  4-5
                   4.8.1  Character Constant................  4-6


























                                   - i -







                                                   ANSI X3J3/90.4



                         5.  ARRAYS_AND_SUBSTRINGS

          An array is a nonempty  sequence  of  data.   An  array
          element  is  one  member  of  the sequence of data.  An
          array name is the symbolic name of an array.  An  array
          element name is an array name qualified by  a subscript
          (5.3).

          An array name not qualified by a  subscript  identifies
          the entire sequence of elements of the array in certain
          forms where such use is permitted (5.6); however, in an
          EQUIVALENCE statement, an array name not qualified by a
          subscript identifies the first  element  of  the  array
          (8.2.4).

          An array element name identifies  one  element  of  the
          sequence.   The subscript value (Table 1) specifies the
          element of the array  being  identified.   A  different
          array   element  may  be  identified  by  changing  the
          subscript value of the array element name.

          An array name is local to a program unit (18.1.2).

          A substring is a  contiguous  portion  of  a  character
          datum.

          5.1  Array_Declarator

          An array declarator  specifies  a  symbolic  name  that
          identifies an array within a program unit and specifies
          certain  properties  of  the  array.   Only  one  array
          declarator  for an array name is permitted in a program
          unit.

          5.1.1  Form_of_an_Array_Declarator.   The  form  of  an
          array declarator is:

                               a_ (d_ [,d_]...)

          where: a_   is the symbolic name of the array

                 d_   is a dimension declarator

          The number of dimensions of the array is the number  of
          dimension  declarators  in  the  array declarator.  The
          minimum number of dimensions is one and the maximum  is
          seven.

          5.1.1.1  Form_of_a_Dimension_Declarator.  The form of a
          dimension declarator is:




          FORTRAN 77 Full Language                       Page 5-1







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



                               [d_918:] d_92
9          where: d_918  is the lower dimension bound

                 d_928  is the upper dimension bound

          The lower and upper  dimension  bounds  are  arithmetic
          expressions,  called  dimension  bound  expressions, in
          which all constants, symbolic names of  constants,  and
          variables  are  of  type  integer.  The upper dimension
          bound of the last  dimension  may  be  an  asterisk  in
          assumed-size  array  declarators  (5.1.2).  A dimension
          bound expression must not contain a function  or  array
          element  reference.   Integer  variables  may appear in
          dimension bound expressions only  in  adjustable  array
          declarators (5.1.2).

          If the symbolic name of a  constant  or  variable  that
          appears  in  a  dimension  bound  expression  is not of
          default  implied  integer  type  (4.1.2),  it  must  be
          specified  as  integer  by  an  IMPLICIT statement or a
          type-statement prior to its appearance in  a  dimension
          bound expression.

          5.1.1.2  Value_of_Dimension_Bounds.    The   value   of
          either  dimension  bound  may be positive, negative, or
          zero; however, the value of the upper  dimension  bound
          must be greater than or equal to the value of the lower
          dimension bound.  If only the upper dimension bound  is
          specified,  the  value  of the lower dimension bound is
          one.  An upper dimension bound of an asterisk is always
          greater than or equal to the lower dimension bound.

          5.1.2  Kinds_and_Occurrences_of_Array_Declarators.
          Each  array  declarator  is  either  a  constant  array
          declarator,  an  adjustable  array  declarator,  or  an
          assumed-size   array   declarator.   A  constant  array
          declarator is an array declarator in which each of  the
          dimension  bound  expressions  is  an  integer constant
          expression (6.1.3.1).  An adjustable  array  declarator
          is  an  array  declarator  that  contains  one  or more
          variables.   An  assumed-size  array  declarator  is  a
          constant   array  declarator  or  an  adjustable  array
          declarator, except that the upper  dimension  bound  of
          the last dimension is an asterisk.

          Each  array  declarator  is  either  an  actual   array
          declarator or a dummy array declarator.






          FORTRAN 77 Full Language                       Page 5-2







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          5.1.2.1  Actual_Array_Declarator.   An   actual   array
          declarator  is  an  array declarator in which the array
          name is  not  a  dummy  argument.   Each  actual  array
          declarator  must  be  a  constant array declarator.  An
          actual array declarator is  permitted  in  a  DIMENSION
          statement, type-statement, or COMMON statement (Section
          8).

          5.1.2.2  Dummy_Array_Declarator.    A    dummy    array
          declarator  is  an  array declarator in which the array
          name is a dummy argument.  A dummy array declarator may
          be  either  a  constant array declarator, an adjustable
          array declarator, or an assumed-size array  declarator.
          A  dummy  array  declarator is permitted in a DIMENSION
          statement or a  type-statement  but  not  in  a  COMMON
          statement.  A dummy array declarator may appear only in
          a function or subroutine subprogram.

          5.2  Properties_of_an_Array

          The following properties of an array are  specified  by
          the  array  declarator: the number of dimensions of the
          array, the size  and  bounds  of  each  dimension,  and
          therefore the number of array elements.

          The properties of  an  array  in  a  program  unit  are
          specified by the array declarator for the array in that
          program unit.

          5.2.1  Data_Type_of_an_Array_and_an_Array_Element.   An
          array  name  has a data type (4.1.1).  An array element
          name has the same data type as the array name.

          5.2.2  Dimensions_of_an_Array.     The    number     of
          dimensions  of  an  array  is  equal  to  the number of
          dimension declarators in the array declarator.

          The size of a dimension is the value:

                               d_928 - d_918 + 1

          where: d_918  is the value of the lower dimension bound

                 d_928  is the value of the upper dimension bound

          Note that if the value of the lower dimension bound  is
          one, the size of the dimension is d_928.

          The size  of  a  dimension  whose  upper  bound  is  an
          asterisk is not specified.




          FORTRAN 77 Full Language                       Page 5-3







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          The  number  and  size  of  dimensions  in  one   array
          declarator may be different from the number and size of
          dimensions  in  another  array   declarator   that   is
          associated   by   common,   equivalence,   or  argument
          association.

          5.2.3  Size_of_an_Array.  The size of an array is equal
          to the number of elements in the array.  The size of an
          array is equal to the  product  of  the  sizes  of  the
          dimensions  specified  by the array declarator for that
          array name.  The size of an  assumed-size  dummy  array
          (5.5) is determined as follows:

             (1) If the  actual  argument  corresponding  to  the
                 dummy  array  is  a noncharacter array name, the
                 size of the dummy  array  is  the  size  of  the
                 actual argument array.

             (2) If the  actual  argument  corresponding  to  the
                 dummy array name is a noncharacter array element
                 name with a subscript value of r_ in an array  of
                 size x_, the size of the dummy array is x_ + 1 - r_
                 .

             (3) If the actual  argument  is  a  character  array
                 name, character array element name, or character
                 array  element  substring  name  and  begins  at
                 character  storage  unit  t_  of an array with c_
                 character storage units, then the  size  of  the
                 dummy  array  is INT((c_ + 1 - t_) / ln__), where ln__
                 is the length of an element of the dummy array.

          If an assumed-size dummy array has n_  dimensions,  the
          product of the sizes of the first n_ - 1 dimensions must
          be less than or equal to the  size  of  the  array,  as
          determined by one of the immediately preceding rules.

          5.2.4  Array_Element_Ordering.   The  elements  of   an
          array  are  ordered  in  a  sequence  (2.1).   An array
          element  name  contains  a  subscript   (5.4.1)   whose
          subscript value (5.4.3) determines which element of the
          array is identified by the  array  element  name.   The
          first  element  of  the  array has a subscript value of
          one; the second element has a subscript value  of  two;
          the  last  element  has  a subscript value equal to the
          size of the array.

          Whenever an array name unqualified by  a  subscript  is
          used to designate the whole array (5.6), the appearance
          of the array name implies that the number of values  to
          be  processed is equal to the number of elements in the



          FORTRAN 77 Full Language                       Page 5-4







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          array and that the elements of  the  array  are  to  be
          taken in sequential order.

          5.2.5  Array_Storage_Sequence.  An array has a  storage
          sequence  consisting  of  the  storage sequences of the
          array elements in the order  determined  by  the  array
          element  ordering.   The  number of storage units in an
          array is x_*z_, where x_ is the number of the elements  in
          the array and z_ is the number of storage units for each
          array element.

          5.3  Array_Element_Name

          The form of an array element name is:

                               a_ (s_ [,s_]...)

          where: a_   is the array name

                 (s_ [,s_]...) is a subscript (5.4.1)

                 s_   is a subscript expression (5.4.2)

          The number of subscript expressions must  be  equal  to
          the  number  of  dimensions in the array declarator for
          the array name.

          5.4  Subscript

          5.4.1  Form_of_a_Subscript.  The form  of  a  subscript
          is:

                               (s_ [,s_]...)

          where s_ is a subscript expression.

          Note that the term "subscript" includes the parentheses
          that delimit the list of subscript expressions.

          5.4.2  Subscript_Expression.  A subscript expression is
          an  integer  expression.   A  subscript  expression may
          contain   array   element   references   and   function
          references.   Note that a restriction in the evaluation
          of expressions (6.6) prohibits  certain  side  effects.
          In  particular, evaluation of a function must not alter
          the value of any other subscript expression within  the
          same subscript.

          Within a program unit,  the  value  of  each  subscript
          expression  must  be  greater  than  or  equal  to  the
          corresponding  lower  dimension  bound  in  the   array



          FORTRAN 77 Full Language                       Page 5-5







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          declarator  for the array.  The value of each subscript
          expression must  not  exceed  the  corresponding  upper
          dimension  bound  declared for the array in the program
          unit.  If the upper dimension bound is an asterisk, the
          value of the corresponding subscript expression must be
          such that the subscript value does not exceed the  size
          of the dummy array.

          5.4.3  Subscript_Value.   The  subscript  value  of   a
          subscript is specified in Table 1.  The subscript value
          determines which array element  is  identified  by  the
          array   element  name.   Within  a  program  unit,  the
          subscript value depends on the values of the  subscript
          expressions  in  the subscript and on the dimensions of
          the array specified in the  array  declarator  for  the
          array in the program unit.  If the subscript value is r_
          , the r_th element of the array is identified.





































          FORTRAN 77 Full Language                       Page 5-6







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



                                  Table 1_______

                              Subscript Value

8          _________________________________________________________

           n        Dimension         Subscript       Subscript
                   Declarator                           Value

8          _________________________________________________________

           1   (j918:k918)               (s918)          1+(s918-j918)

8          _________________________________________________________

           2   (j918:k918,j928:k928)         (s918,s928)       1+(s918-j918)
                                                    +(s928-j928)*d91
8
8          _________________________________________________________

           3   (j918:k918,j928:k928,j938:k938)   (s918,s928,s938)    1+(s918-j918)
                                                    +(s928-j928)*d91
8                                                    +(s938-j938)*d928*d91
8
8          _________________________________________________________


8          _________________________________________________________

           n   (j918:k918,...,j9n8:k9n8)     (s918,...,s9n8)   1+(s918-j918)
                                                    +(s928-j928)*d91
8                                                    +(s938-j938)*d928*d91
8                                                    +...
                                                    +(s9n8-j9n8)*d9n-1
8                                                     *d9n-28*...*d91
8
8          _________________________________________________________
7         |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|



























            |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|



























                                  |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|



























                                                |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|



























                                                                  |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|





























          Notes for Table 1:

             (1) n is the number of dimensions,  1 < n < 7.

             (2) j9i8 is the value of the lower bound  of  the  ith
                 dimension.

             (3) k9i8 is the value of the upper bound  of  the  ith
                 dimension.

             (4) If only the upper bound is specified, then j9i8% =
                  1.

             (5) s9i8 is the integer value  of  the  ith  subscript
                 expression.

9


          FORTRAN 77 Full Language                       Page 5-7







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



             (6) d9i8 = k9i8-j9i8+1 is the size of the  ith  dimension.
                 If  the value of the lower bound is 1, then d9i8 =
                  k9i8.

          Note that a subscript of  the  form  (j918,...j9n8)  has  a
          subscript value of one and identifies the first element
          of the array.  A  subscript  of  the  form  (k918,...,k9n8)
          identifies the last element of the array; its subscript
          value is equal to the number of elements in the array.

          The subscript value and the subscript expression  value
          are   not   necessarily  the  same,  even  for  a  one-
          dimensional array.  In the example:

                     DIMENSION A(-1:8),B(10,10)
                     A(2) = B(1,2)

          A(2) identifies the fourth element of A, the  subscript
          is  (2)  with  a  subscript  value  of  four,  and  the
          subscript expression is 2 with a value of two.   B(1,2)
          identifies  the eleventh element of B, the subscript is
          (1,2) with  a  subscript  value  of  eleven,   and  the
          subscript  expressions  are  1 and 2 with values of one
          and two.

          5.5  Dummy_and_Actual_Arrays

          A  dummy  array  is  an  array  for  which  the   array
          declarator  is  a  dummy array declarator.  An assumed-
          size dummy array is a dummy array for which  the  array
          declarator  is  an  assumed-size  array  declarator.  A
          dummy  array  is  permitted  only  in  a  function   or
          subroutine subprogram (Section 15).

          An actual  array  is  an  array  for  which  the  array
          declarator  is  an actual array declarator.  Each array
          in the main program is an actual array and must have  a
          constant  array  declarator.  A dummy array may be used
          as an actual argument.

          5.5.1  Adjustable_Arrays_and_Adjustable_Dimensions.  An
          adjustable  array  is  an  array  for  which  the array
          declarator is an adjustable array  declarator.   In  an
          adjustable    array    declarator,    those   dimension
          declarators that contain a  variable  name  are  called
          adjustable dimensions.

          An adjustable array declarator must be  a  dummy  array
          declarator.   At  least  one dummy argument list of the
          subprogram must contain  the  name  of  the  adjustable
          array.   A  variable  name  that appears in a dimension



          FORTRAN 77 Full Language                       Page 5-8







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          bound expression of an array must also appear as a name
          either  in  every dummy argument list that contains the
          array name or in a common block in that subprogram.

          At the time of execution of a reference to  a  function
          or  subroutine  containing  an  adjustable array in its
          dummy  argument  list,  each   actual   argument   that
          corresponds   to   a  dummy  argument  appearing  in  a
          dimension bound  expression  for  the  array  and  each
          variable  in   common  appearing  in  a dimension bound
          expression for  the  array  must  be  defined  with  an
          integer  value.  The values of those dummy arguments or
          variables in common, together with  any  constants  and
          symbolic  names of constants appearing in the dimension
          bound   expression,   determine   the   size   of   the
          corresponding adjustable dimension for the execution of
          the subprogram.  The sizes of the adjustable dimensions
          and   of   any  constant  dimensions  appearing  in  an
          adjustable array declarator  determine  the  number  of
          elements   in the array and the array element ordering.
          The execution of different references to  a  subprogram
          or different executions of the same reference determine
          possibly  different  properties  (size  of  dimensions,
          dimension bounds, number of elements, and array element
          ordering) for each adjustable array in the  subprogram.
          These  properties  depend  on  the values of any actual
          arguments and variables in common that  are  referenced
          in   the   adjustable   dimension  expressions  in  the
          subprogram.

          During the execution of  an  external  procedure  in  a
          subprogram  containing  an  adjustable array, the array
          properties of dimension size, lower and upper dimension
          bounds,  and  array  size  (number  of  elements in the
          array) do not change.  However, the variables  involved
          in  an  adjustable dimension may be redefined or become
          undefined during execution of  the  external  procedure
          with no effect on the above-mentioned properties.

          5.6  Use_of_Array_Names

          In a program unit, each appearance  of  an  array  name
          must  be  in  an  array  element  name  except  in  the
          following cases:

             (1) In a list of dummy arguments

             (2) In a COMMON statement

             (3) In a type-statement




          FORTRAN 77 Full Language                       Page 5-9







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



             (4) In an array declarator.  Note that although  the
                 form  of an array declarator may be identical to
                 that  of  an  array  element  name,   an   array
                 declarator is not an array element name.

             (5) In an EQUIVALENCE statement

             (6) In a DATA statement

             (7) In the list of actual arguments in  a  reference
                 to an external procedure

             (8) In the list of an input/output statement if  the
                 array is not an assumed-size dummy array

             (9) As a unit identifier for an internal file in  an
                 input/output  statement  if  the array is not an
                 assumed-size dummy array

            (10) As the  format  identifier  in  an  input/output
                 statement  if  the  array is not an assumed-size
                 dummy array

            (11) In a SAVE statement

          5.7  Character_Substring

          A character substring is  a  contiguous  portion  of  a
          character  datum  and is of type character. A character
          substring is identified by a substring name and may  be
          assigned values and referenced.

          5.7.1  Substring_Name.  The forms of a  substring  name
          are:

                               v_ ( [e_918] : [e_928] )

                               a_ (s_ [,s_]...)( [e_918] : [e_928] )

          where: v_   is a character variable name

                 a_ (s_ [,s_]...) is a character array element name

                 e_918 and e_928 are each an integer expression and are
                     called substring expressions

          The value e_918 specifies the leftmost character  position
          of  the  substring,  and  the  value  e_928 specifies the
          rightmost  character  position.   For  example,  A(2:4)
          specifies  characters  in positions two through four of
          the character variable  A,  and  B(4,3)(1:6)  specifies



          FORTRAN 77 Full Language                      Page 5-10







          ARRAYS AND SUBSTRINGS                    ANSI X3J3/90.4



          characters   in   positions  one  through  six  of  the
          character array element B(4,3).

          The values of e_918 and e_928 must be such that:

                               1 < e_918 < e_928 < len___

          where len is the length of the  character  variable  or
          array  element  (8.4.2).   If e_918 is omitted, a value of
          one is implied for e_918.  If e_928 is omitted,  a  value  of
          len  is implied for e_928.  Both e_918 and e_928 may be omitted;
          for example, the form v_(:) is equivalent to v_, and  the
          form  a_ (s_ [,s_]...)(:) is equivalent to a_(s_  [,s_]...).
          The length of a character substring is e_928 - e_918 + 1.

          5.7.2  Substring_Expression.   A  substring  expression
          may  be any integer expression.  A substring expression
          may  contain  array  element  references  and  function
          references.   Note that a restriction in the evaluation
          of expressions (6.6) prohibits  certain  side  effects.
          In  particular, evaluation of a function must not alter
          the value of  any  other  expression  within  the  same
          substring name.































          FORTRAN 77 Full Language                      Page 5-11











                                 CONTENTS


          5.  ARRAYS AND SUBSTRINGS........................   5-1
              5.1  Array Declarator........................   5-1
                   5.1.1  Form of an Array
                          Declarator.......................   5-1
                   5.1.2  Kinds and Occurrences of Array
                          Declarators......................   5-2
              5.2  Properties of an Array..................   5-3
                   5.2.1  Data Type of an Array and an
                          Array Element....................   5-3
                   5.2.2  Dimensions of an Array...........   5-3
                   5.2.3  Size of an Array.................   5-4
                   5.2.4  Array Element Ordering...........   5-4
                   5.2.5  Array Storage Sequence...........   5-5
              5.3  Array Element Name......................   5-5
              5.4  Subscript...............................   5-5
                   5.4.1  Form of a Subscript..............   5-5
                   5.4.2  Subscript Expression.............   5-5
                   5.4.3  Subscript Value..................   5-6
              5.5  Dummy and Actual Arrays.................   5-8
                   5.5.1  Adjustable Arrays and Adjustable
                          Dimensions.......................   5-8
              5.6  Use of Array Names......................   5-9
              5.7  Character Substring.....................  5-10
                   5.7.1  Substring Name...................  5-10
                   5.7.2  Substring Expression.............  5-11


























                                   - i -







                                                   ANSI X3J3/90.4



                              6.  EXPRESSIONS

          This section describes the  formation,  interpretation,
          and   evaluation   rules   for  arithmetic,  character,
          relational, and logical expressions.  An expression  is
          formed from operands, operators, and parentheses.

          6.1  Arithmetic_Expressions

          An arithmetic expression is used to express  a  numeric
          computation.  Evaluation  of  an  arithmetic expression
          produces a numeric !value.

          The simplest form of an  arithmetic  expression  is  an
          unsigned  arithmetic  constant,  symbolic  name  of  an
          arithmetic  constant,  arithmetic  variable  reference,
          arithmetic  array  element  reference,   or  arithmetic
          function  reference.    More   complicated   arithmetic
          expressions   may  be  formed  by  using  one  or  more
          arithmetic operands together with arithmetic  operators
          and  parentheses.   Arithmetic  operands  must identify
          values of type  integer,  real,  double  precision,  or
          complex.

          6.1.1  Arithmetic_Operators.    The   five   arithmetic
          operators are:

8                   ____________________________________

                    Operator   Representing
8                   ____________________________________

                       **      Exponentiation
                       /       Division
                       *       Multiplication
                       -       Subtraction or Negation
                       +       Addition or Identity
8                   ____________________________________
7                  |7|7|7|7|7|7|7|7|







                            |7|7|7|7|7|7|7|7|







                                                      |7|7|7|7|7|7|7|7|









          Each of the operators **, /, and * operates on  a  pair
          of  operands  and  is written between the two operands.
          Each of the operators + and - either:

             (1) operates on a pair of operands  and  is  written
                 between the two operands, or

             (2) operates on a single  operand  and  is   written
                 preceding that operand.




9


          FORTRAN 77 Full Language                       Page 6-1







          EXPRESSIONS                              ANSI X3J3/90.4



          6.1.2  Form   and    Interpretation    of    Arithmetic
          Expressions.   The  interpretation  of  the  expression
          formed with each of the arithmetic  operators  in  each
          form of use is as follows:

8            ___________________________________________________

             Use of Operator   Interpretation
8            ___________________________________________________

                x918 ** x928       Exponentiate x918 to the power x92
8
                 x918 / x928       Divide x918 by x92
8
                 x918 * x928       Multiply x918 and x92
8
                 x918 - x928       Subtract x928 from x91
8
                    - x928       Negate x92
8
                 x918 + x928       Add x918 and x92
8
                    + x928       Same as x92
7            ___________________________________________________
7           |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|















                            |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|















                                                              |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|

















          where: x918  denotes the  operand  to  the  left  of  the
                     operator

                 x928  denotes the operand  to  the  right  of  the
                     operator

          The interpretation of a division may depend on the data
          types of the operands (6.1.5).

          A set of formation  rules  is  used  to  establish  the
          interpretation   of   an   arithmetic  expression  that
          contains two or more operators.  There is a  precedence
          among  the  arithmetic  operators, which determines the
          order in which the operands are to be  combined  unless
          the  order  is  changed by the use of parentheses.  The
          precedence of the arithmetic operators is as follows:

8                         _________________________

                          Operator   Precedence
8                         _________________________

                             **      Highest
                          * and /    Intermediate
                          + and -    Lowest
8                         _________________________
7                        |7|7|7|7|7|7|





                                  |7|7|7|7|7|7|





                                                 |7|7|7|7|7|7|







          For example, in the expression




          FORTRAN 77 Full Language                       Page 6-2







          EXPRESSIONS                              ANSI X3J3/90.4



                               - A ** 2

          the exponentiation operator (**)  has  precedence  over
          the  negation  operator (-); therefore, the operands of
          the exponentiation operator are  combined  to  form  an
          expression  that is used as the operand of the negation
          operator.  The interpretation of the  above  expression
          is the same as the interpretation of the expression

                               - (A ** 2)

          The arithmetic operands are:

             (1) Primary

             (2) Factor

             (3) Term

             (4) Arithmetic expression

          The formation rules to be applied in  establishing  the
          interpretation of arithmetic expressions are in 6.1.2.1
          through 6.1.2.4.

          6.1.2.1  Primaries.  The primaries are:

             (1) Unsigned arithmetic constant (4.2.3)

             (2) Symbolic name of an arithmetic constant (8.6)

             (3) Arithmetic variable reference (2.5)

             (4) Arithmetic array element reference (5.3)

             (5) Arithmetic function reference (15.2)

             (6) Arithmetic expression  enclosed  in  parentheses
                 (6.1.2.4)

          6.1.2.2  Factor.  The forms of a factor are:

             (1) Primary

             (2) Primary ** factor

          Thus, a factor is formed from a sequence of one or more
          primaries  separated  by  the  exponentiation operator.
          Form  (2)  indicates  that  in  interpreting  a  factor
          containing  two  or  more exponentiation operators, the
          primaries  are  combined  from  right  to  left.    For



          FORTRAN 77 Full Language                       Page 6-3







          EXPRESSIONS                              ANSI X3J3/90.4



          example, the factor

                               2**3**2

          has the same interpretation as the factor

                               2**(3**2)

          6.1.2.3  Term.  The forms of a term are:

             (1) Factor

             (2) Term / factor

             (3) Term * factor

          Thus, a term is formed from a sequence of one  or  more
          factors separated by either the multiplication operator
          or the division operator.  Forms (2) and  (3)  indicate
          that  in  interpreting  a  term  containing two or more
          multiplication or division operators, the  factors  are
          combined from left to right.

          6.1.2.4  Arithmetic_Expression.   The   forms   of   an
          arithmetic expression are:

             (1) Term

             (2) + term

             (3) - term

             (4) Arithmetic expression + term

             (5) Arithmetic expression - term

          Thus,  an  arithmetic  expression  is  formed  from   a
          sequence  of  one or more terms separated by either the
          addition operator or  the  subtraction  operator.   The
          first  term in an arithmetic expression may be preceded
          by the identity or the negation  operator.   Forms  (4)
          and  (5)  indicate  that  in interpreting an arithmetic
          expression  containing  two   or   more   addition   or
          subtraction operators, the terms are combined from left
          to right.

          Note  that  these  formation  rules   do   not   permit
          expressions   containing   two  consecutive  arithmetic
          operators, such as A**-B or A+-B.  However, expressions
          such as A**(-B) and A+(-B) are permitted.




          FORTRAN 77 Full Language                       Page 6-4







          EXPRESSIONS                              ANSI X3J3/90.4



          6.1.3  Arithmetic_Constant_Expression.   An  arithmetic
          constant  expression  is  an  arithmetic  expression in
          which each  primary  is  an  arithmetic  constant,  the
          symbolic   name   of  an  arithmetic  constant,  or  an
          arithmetic constant expression enclosed in parentheses.
          The exponentiation operator is not permitted unless the
          exponent is of type integer.  Note that variable, array
          element, and function references are not allowed.

          6.1.3.1  Integer_Constant_Expression.     An    integer
          constant   expression   is   an   arithmetic   constant
          expression in which each constant or symbolic name of a
          constant is of type integer.  Note that variable, array
          element, and function references are not allowed.

          The  following  are  examples   of   integer   constant
          expressions:

                     3
                     -3
                     -3+4

          6.1.4  Type   and    Interpretation    of    Arithmetic
          Expressions.  The data type of a constant is determined
          by the form of the constant (4.2.1).  The data type  of
          an  arithmetic  variable reference, symbolic name of an
          arithmetic   constant,   arithmetic    array    element
          reference,   or   arithmetic   function   reference  is
          determined  by  the  name  of  the  datum  or  function
          (4.1.2).   The  data  type  of an arithmetic expression
          containing  one  or  more   arithmetic   operators   is
          determined from the data types of the operands.

          Integer expressions, real expressions, double precision
          expressions,  and  complex  expressions  are arithmetic
          expressions whose values are  of  type  integer,  real,
          double precision, and complex, respectively.

          When the operator + or - operates on a single  operand,
          the  data  type of the resulting expression is the same
          as the data type of the operand.

          When an arithmetic  operator  operates  on  a  pair  of
          operands,  the data type of the resulting expression is
          given in Tables 2 and 3.  In these tables, each  letter
          I,  R,  D, or C represents an operand or result of type
          integer,   real,   double   precision,   or    complex,
          respectively.

          The type of the result is indicated by the I, R, D,  or
          C  that  precedes the equals, and the interpretation is



          FORTRAN 77 Full Language                       Page 6-5







          EXPRESSIONS                              ANSI X3J3/90.4



          indicated by the expression to the right of the equals.
          REAL, DBLE, and CMPLX are the type-conversion functions
          described in 15.10.

                                  Table 2_______

               Type and Interpretation of Result for x918 + x92
7          ________________________________________________________

             x928             I928                       R92
8           x91
7          ________________________________________________________

           I918           I = I918 + I928         R = REAL(I918) + R92
8
           R918        R = R918 + REAL(I928)      R = R918 + R92
8
           D918        D = D918 + DBLE(I928)      D = D918 + DBLE(R928)

           C918     C=C918+CMPLX(REAL(I928),0.)   C = C918 + CMPLX(R928,0.)
8          ________________________________________________________
7         |7|7|7|7|7|7|7|7|7|7|7|










               |7|7|7|7|7|7|7|7|7|7|7|










                                         |7|7|7|7|7|7|7|7|7|7|7|










                                                                 |7|7|7|7|7|7|7|7|7|7|7|












8          _______________________________________________________

             x928           D928                       C92
8           x91
7          _______________________________________________________

           I918      D = DBLE(I928) + D928     C=CMPLX(REAL(I928),0.)+C92
8
           R918      D = DBLE(R918) + D928     C = CMPLX(R918,0.) + C92
8
           D918      D = D918 + D928                 Prohibited

           C918         Prohibited         C = C918 + C92
7          _______________________________________________________
7         |7|7|7|7|7|7|7|7|7|7|7|










                |7|7|7|7|7|7|7|7|7|7|7|










                                      |7|7|7|7|7|7|7|7|7|7|7|










                                                                |7|7|7|7|7|7|7|7|7|7|7|












          Tables  giving   the   type   and   interpretation   of
          expressions  involving  -,  *, and / may be obtained by
          replacing all occurrences of + in Table 2 by -,  *,  or
          /, respectively.
















          FORTRAN 77 Full Language                       Page 6-6







          EXPRESSIONS                              ANSI X3J3/90.4



                                  Table 3_______

               Type and Interpretation of Result for x918**x92
7          _______________________________________________________

               x928           I928                     R92
8             x91
7          _______________________________________________________

             I918         I = I918**I928        R = REAL(I918)**R92
8
             R918         R = R918**I928        R = R918**R92
8
             D918         D = D918**I928        D = D918**DBLE(R928)

             C918         C = C918**I928        C = C918**CMPLX(R928,0.)
8          _______________________________________________________
7         |7|7|7|7|7|7|7|7|7|7|7|










                    |7|7|7|7|7|7|7|7|7|7|7|










                                     |7|7|7|7|7|7|7|7|7|7|7|










                                                                |7|7|7|7|7|7|7|7|7|7|7|












8          _______________________________________________________

             x928           D928                       C92
8           x91
7          _______________________________________________________

           I928      D = DBLE(I928)**D928     C=CMPLX(REAL(I928),0.)**C92
8
           R918      D = DBLE(R918)**D928     C = CMPLX(R918,0.)**C92
8
           D918      D = D918**D928                  Prohibited

           C918         Prohibited        C = C918**C92
7          _______________________________________________________
7         |7|7|7|7|7|7|7|7|7|7|7|










                |7|7|7|7|7|7|7|7|7|7|7|










                                     |7|7|7|7|7|7|7|7|7|7|7|










                                                                |7|7|7|7|7|7|7|7|7|7|7|












          Four entries in Table 3 specify an interpretation to be
          a  complex  value  raised to a complex power.  In these
          cases, the value of the expression  is  the  "principal
          value"  determined  by  x918**x928 = EXP(x928*LOG(x918)), where
          EXP and LOG are functions described in 15.10.

          Except for a value raised to an integer power, Tables 2
          and  3  specify  that  if two operands are of different
          type, the operand that differs in type from the  result
          of the operation is converted to the type of the result
          and then the operator operates on a pair of operands of
          the  same  type.   When  a primary of type real, double
          precision, or complex is raised to  an  integer  power,
          the  integer  operand  need  not  be converted.  If the
          value of I928 is negative, the interpretation  of  I918**I92
8          is  the  same as the interpretation of 1/(I918**ABS(I928)),
          which is subject to  the  rules  for  integer  division
          (6.1.5).    For  example,  2**(-3)  has  the  value  of
          1/(2**3), which is zero.





          FORTRAN 77 Full Language                       Page 6-7







          EXPRESSIONS                              ANSI X3J3/90.4



          The type  and  interpretation  of  an  expression  that
          consists  of  an  operator operating on either a single
          operand or a pair of operands are  independent  of  the
          context   in   which   the   expression   appears.   In
          particular, the type  and  interpretation  of  such  an
          expression  are  independent  of  the type of any other
          operand of any larger expression in which  it  appears.
          For  example,  if  X  is  of  type  real,  J is of type
          integer, and  INT  is  the  real-to-integer  conversion
          function,   the   expression  INT(X+J)  is  an  integer
          expression and X+J is a real expression.

          6.1.5  Integer_Division.  One operand of  type  integer
          may  be  divided  by  another  operand of type integer.
          Although the mathematical quotient of two  integers  is
          not  necessarily  an integer, Table 2 specifies that an
          expression involving the  division  operator  with  two
          operands   of   type   integer  is  interpreted  as  an
          expression of type  integer.   The  result  of  such  a
          division  is called an integer quotient and is obtained
          as follows:   If  the  magnitude  of  the  mathematical
          quotient  is  less  than  one,  the integer quotient is
          zero.  Otherwise, the integer quotient is  the  integer
          whose  magnitude  is  the largest integer that does not
          exceed the magnitude of the mathematical  quotient  and
          whose  sign is the same as the sign of the mathematical
          quotient.  For example, the value of the expression  (-
          8)/3 is (-2).

          6.2  Character_Expressions

          A character expression is used to express  a  character
          string.   Evaluation of a character expression produces
          a result of type character.

          The simplest  form  of  a  character  expression  is  a
          character   constant,  symbolic  name  of  a  character
          constant, character variable reference, character array
          element  reference,  character  substring reference, or
          character   function   reference.   More    complicated
          character  expressions  may  be  formed by using one or
          more  character  operands   together   with   character
          operators and parentheses.

          6.2.1  Character_Operator.  The character operator is:









          FORTRAN 77 Full Language                       Page 6-8







          EXPRESSIONS                              ANSI X3J3/90.4



8                        __________________________

                         Operator   Representing
8                        __________________________

                            //      Concatenation
8                        __________________________
7                       |7|7|7|7|



                                 |7|7|7|7|



                                                 |7|7|7|7|





          The interpretation of the expression  formed  with  the
          character operator is:

8                __________________________________________

                 Use of Operator   Interpretation
8                __________________________________________

                    x918 // x928       Concatenate x918 with x92
7                __________________________________________
7               |7|7|7|7|



                                |7|7|7|7|



                                                         |7|7|7|7|





          where: x918  denotes the  operand  to  the  left  of  the
                     operator

                 x928  denotes the operand  to  the  right  of  the
                     operator

          The result of a concatenation operation is a  character
          string  whose  value is the value of x918 concatenated on
          the right with the value of x928 and whose length is  the
          sum  of  the  lengths  of  x918 and x928.  For example, the
          value of 'AB' // 'CDE' is the string ABCDE.

          6.2.2  Form    and    Interpretation    of    Character
          Expressions.   A  character expression and the operands
          of a character expression must identify values of  type
          character.   Except in a character assignment statement
          (10.4),  a  character  expression  must   not   involve
          concatenation  of an operand whose length specification
          is  an  asterisk  in  parentheses  (8.4.2)  unless  the
          operand is the symbolic name of a constant.

          6.2.2.1  Character_Primaries.  The character  primaries
          are:

             (1) Character constant (4.8.1)

             (2) Symbolic name of a character constant (8.6)

             (3) Character variable reference (2.5)

             (4) Character array element reference (5.3)

             (5) Character substring reference (5.7)





          FORTRAN 77 Full Language                       Page 6-9







          EXPRESSIONS                              ANSI X3J3/90.4



             (6) Character function reference (15.2)

             (7) Character  expression  enclosed  in  parentheses
                 (6.2.2.2)

          6.2.2.2  Character_Expression.    The   forms   of    a
          character expression are:

             (1) Character primary

             (2) Character expression // character primary

          Thus, a character expression is a sequence  of  one  or
          more character primaries separated by the concatenation
          operator.  Form  (2)  indicates  that  in  a  character
          expression   containing   two   or  more  concatenation
          operators, the primaries  are  combined  from  left  to
          right   to   establish   the   interpretation   of  the
          expression.  For example, the formation  rules  specify
          that the interpretation of the character expression

                               'AB' // 'CD' // 'EF'

          is the same as  the  interpretation  of  the  character
          expression

                               ('AB' // 'CD') // 'EF'

          The value of the character expression in  this  example
          is  the  same  as  that of the constant 'ABCDEF'.  Note
          that parentheses have no  effect  on  the  value  of  a
          character expression.

          6.2.3  Character_Constant_Expression.    A    character
          constant  expression is a character expression in which
          each primary is a character constant, the symbolic name
          of  a  character  constant,  or  a  character  constant
          expression  enclosed   in   parentheses.    Note   that
          variable,   array   element,  substring,  and  function
          references are not allowed.

          6.3  Relational_Expressions

          A relational expression is used to compare  the  values
          of   two   arithmetic   expressions  or  two  character
          expressions.  A relational expression may not  be  used
          to  compare  the value of an arithmetic expression with
          the value of a character expression.

          Relational expressions may appear only  within  logical
          expressions.   Evaluation  of  a  relational expression



          FORTRAN 77 Full Language                      Page 6-10







          EXPRESSIONS                              ANSI X3J3/90.4



          produces a result of type logical, with a value of true
          or false.

          6.3.1  Relational_Operators.  The relational  operators
          are:

8                   _____________________________________

                    Operator   Representing
8                   _____________________________________

                      .LT.     Less than
                      .LE.     Less than or equal to
                      .EQ.     Equal to
                      .NE.     Not equal to
                      .GT.     Greater than
                      .GE.     Greater than or equal to
8                   _____________________________________
7                  |7|7|7|7|7|7|7|7|7|








                            |7|7|7|7|7|7|7|7|7|








                                                       |7|7|7|7|7|7|7|7|7|










          6.3.2  Arithmetic_Relational_Expression.  The  form  of
          an arithmetic relational expression is:

                               e_918 relop_____ e_92
9          where: e_918 and e_928 are  each  an  integer,  real,  double
                     precision, or complex expression

                 relop_____ is a relational operator

          A complex operand is permitted only when the relational
          operator is .EQ. or .NE.

          6.3.3  Interpretation    of    Arithmetic    Relational
          Expressions.   An  arithmetic  relational expression is
          interpreted as having the logical  value  true  if  the
          values  of  the operands satisfy the relation specified
          by the operator.  An arithmetic  relational  expression
          is interpreted as having the logical value false if the
          values of the operands  do  not  satisfy  the  relation
          specified by the operator.

          If the two  arithmetic  expressions  are  of  different
          types, the value of the relational expression

                               e_918 relop_____ e_92
9          is the value of the expression

                               ((e_918) - (e_928)) relop_____ 0

          where 0 (zero) is of the same type as the expression ((e
          _918) (e_928)), and relop_____ is the same relational operator in
          both expressions.  Note that the comparison of a double

9
          FORTRAN 77 Full Language                      Page 6-11







          EXPRESSIONS                              ANSI X3J3/90.4



          precision value and a complex value is not permitted.

          6.3.4  Character_Relational_Expression.  The form of  a
          character relational expression is:

                               e_918 relop_____ e_92
9          where: e_918 and e_928 are character expressions

                 relop_____ is a relational operator

          6.3.5  Interpretation    of    Character     Relational
          Expressions.   A  character  relational  expression  is
          interpreted as the logical value true if the values  of
          the  operands  satisfy  the  relation  specified by the
          operator.   A  character   relational   expression   is
          interpreted as the logical value false if the values of
          the operands do not satisfy the relation  specified  by
          the operator.

          The character expression e_918 is considered  to  be  less
          than  e_928 if the value of e_918 precedes the value of e_928 in
          the collating sequence; e_918 is greater than e_928  if  the
          value  of  e_918 follows the value of e_928 in the collating
          sequence (3.1.5).  Note  that  the  collating  sequence
          depends partially on the processor; however, the result
          of the use of the operators  .EQ.  and  .NE.  does  not
          depend  on the collating sequence.  If the operands are
          of unequal length, the shorter operand is considered as
          if  it  were  extended  on the right with blanks to the
          length of the longer operand.

          6.4  Logical_Expressions

          A logical expression  is  used  to  express  a  logical
          computation.    Evaluation   of  a  logical  expression
          produces a result of type logical, with a value of true
          or false.

          The simplest form of a logical expression is a  logical
          constant,  symbolic name of a logical constant, logical
          variable reference, logical  array  element  reference,
          logical  function  reference, or relational expression.
          More complicated logical expressions may be  formed  by
          using  one  or  more  logical  operands  together  with
          logical operators and parentheses.

          6.4.1  Logical_Operators.  The logical operators are:






          FORTRAN 77 Full Language                      Page 6-12







          EXPRESSIONS                              ANSI X3J3/90.4



8                __________________________________________

                 Operator   Representing
8                __________________________________________

                  .NOT.     Logical Negation
                  .AND.     Logical Conjunction
                   .OR.     Logical Inclusive Disjunction
                  .EQV.     Logical Equivalence
                  .NEQV.    Logical Nonequivalence
8                __________________________________________
7               |7|7|7|7|7|7|7|7|







                         |7|7|7|7|7|7|7|7|







                                                         |7|7|7|7|7|7|7|7|









          6.4.2  Form_and_Interpretation_of_Logical_Expressions.
          A  set  of  formation  rules  is  used to establish the
          interpretation of a logical  expression  that  contains
          two  or  more logical operators.  There is a precedence
          among the logical operators, which determines the order
          in  which  the  operands  are to be combined unless the
          order is  changed  by  the  use  of  parentheses.   The
          precedence of the logical operators is as follows:

8                      ______________________________

                          Operator       Precedence
8                      ______________________________

                            .NOT.        Highest
                            .AND.
                            .OR.
                       .EQV. or .NEQV.   Lowest
8                      ______________________________
7                     |7|7|7|7|7|7|7|






                                      |7|7|7|7|7|7|7|






                                                   |7|7|7|7|7|7|7|








          For example, in the expression

                               A .OR. B .AND. C

          the .AND.  operator  has  higher  precedence  than  the
          &'.OR.   operator; therefore, the interpretation of the
          above expression is the same as the  interpretation  of
          the expression

                               A .OR. (B .AND. C)

          The logical operands are:

             (1) Logical primary

             (2) Logical factor

             (3) Logical term

             (4) Logical disjunct





          FORTRAN 77 Full Language                      Page 6-13







          EXPRESSIONS                              ANSI X3J3/90.4



             (5) Logical expression

          The formation rules to be applied in  establishing  the
          interpretation  of  a logical expression are in 6.4.2.1
          through 6.4.2.5.

          6.4.2.1  Logical_Primaries.  The logical primaries are:

             (1) Logical constant (4.7.1)

             (2) Symbolic name of a logical constant (8.6)

             (3) Logical variable reference (2.5)

             (4) Logical array element reference (5.3)

             (5) Logical function reference (15.2)

             (6) Relational expression (6.3)

             (7) Logical  expression  enclosed   in   parentheses
                 (6.4.2.5)

          6.4.2.2  Logical_Factor.  The forms of a logical factor
          are:

             (1) Logical primary

             (2) .NOT. logical primary

          6.4.2.3  Logical_Term.  The forms  of  a  logical  term
          are:

             (1) Logical factor

             (2) Logical term .AND. logical factor

          Thus, a logical term is a sequence of  logical  factors
          separated  by  the  .AND. operator.  Form (2) indicates
          that in interpreting a logical term containing  two  or
          more .AND.  operators, the logical factors are combined
          from left to right.

          6.4.2.4  Logical_Disjunct.   The  forms  of  a  logical
          disjunct are:

             (1) Logical term

             (2) Logical disjunct .OR. logical term





          FORTRAN 77 Full Language                      Page 6-14







          EXPRESSIONS                              ANSI X3J3/90.4



          Thus, a logical disjunct is a sequence of logical terms
          separated  by  the  .OR.  operator.  Form (2) indicates
          that in interpreting a logical disjunct containing  two
          or  more .OR. operators, the logical terms are combined
          from left to right.

          6.4.2.5  Logical_Expression.  The forms  of  a  logical
          expression are:

             (1) Logical disjunct

             (2) Logical expression .EQV. logical disjunct

             (3) Logical expression .NEQV. logical disjunct

          Thus, a logical expression is  a  sequence  of  logical
          disjuncts separated by either the .EQV. operator or the
          .NEQV. operator.  Forms (2) and (3)  indicate  that  in
          interpreting  a  logical  expression  containing two or
          more .EQV. or .NEQV. operators, the  logical  disjuncts
          are combined from left to right.

          6.4.3  Value of Logical Factors, Terms, Disjuncts,  and
          Expressions.   The  value of a logical factor involving
          .NOT. is shown below:

8                            __________________

                              x928     .NOT. x92
7                            __________________

                             true     false
                             false    true
8                            __________________
7                           |7|7|7|7|7|




                                  |7|7|7|7|7|




                                             |7|7|7|7|7|






          The value of a logical term involving  .AND.  is  shown
          below:

8                       _____________________________

                         x918      x928     x918 .AND. x92
7                       _____________________________

                        true    true       true
                        true    false      false
                        false   true       false
                        false   false      false
8                       _____________________________
7                      |7|7|7|7|7|7|7|






                             |7|7|7|7|7|7|7|






                                     |7|7|7|7|7|7|7|






                                                   |7|7|7|7|7|7|7|








          The value of a logical disjunct involving .OR. is shown
          below:






          FORTRAN 77 Full Language                      Page 6-15







          EXPRESSIONS                              ANSI X3J3/90.4



8                       ____________________________

                         x918      x928     x918 .OR. x92
7                       ____________________________

                        true    true      true
                        true    false     true
                        false   true      true
                        false   false     false
8                       ____________________________
7                      |7|7|7|7|7|7|7|






                             |7|7|7|7|7|7|7|






                                     |7|7|7|7|7|7|7|






                                                  |7|7|7|7|7|7|7|








          The value of a logical expression  involving  .EQV.  is
          shown below:

8                       _____________________________

                         x918      x928     x918 .EQV. x92
7                       _____________________________

                        true    true       true
                        true    false      false
                        false   true       false
                        false   false      true
8                       _____________________________
7                      |7|7|7|7|7|7|7|






                             |7|7|7|7|7|7|7|






                                     |7|7|7|7|7|7|7|






                                                   |7|7|7|7|7|7|7|








          The value of a logical expression involving  .NEQV.  is
          shown below:

8                      ______________________________

                        x918      x928     x918 .NEQV. x92
7                      ______________________________

                       true    true       false
                       true    false      true
                       false   true       true
                       false   false      false
8                      ______________________________
7                     |7|7|7|7|7|7|7|






                            |7|7|7|7|7|7|7|






                                    |7|7|7|7|7|7|7|






                                                   |7|7|7|7|7|7|7|








          6.4.4  Logical_Constant_Expression.  A logical constant
          expression  is  a  logical  expression  in  which  each
          primary is a logical constant, the symbolic name  of  a
          logical constant, a relational expression in which each
          primary is a constant expression, or a logical constant
          expression   enclosed   in   parentheses.    Note  that
          variable, array element, and  function  references  are
          not allowed.

          6.5  Precedence_of_Operators

          In 6.1.2 and 6.4.2 precedences  have  been  established
          among   the   arithmetic   operators  and  the  logical
          operators, respectively.  There is only  one  character
          operator.  No precedence has been established among the
          relational operators. The precedences among the various
          operators are:

9
          FORTRAN 77 Full Language                      Page 6-16







          EXPRESSIONS                              ANSI X3J3/90.4



8                         _________________________

                          Operator     Precedence
8                         _________________________

                          Arithmetic   Highest
                          Character
                          Relational
                          Logical      Lowest
8                         _________________________
7                        |7|7|7|7|7|7|7|






                                    |7|7|7|7|7|7|7|






                                                 |7|7|7|7|7|7|7|








          An  expression  may