Man Linux: Main Page and Category List

NAME

       ftnchek - Fortran 77 program checker

SYNOPSIS

       ftnchek [ -arguments[=list] ] [ -array[=list] ]
            [ -[no]brief ] [ -calltree[=list] ] [ -[no]check ]
            [ -columns[=num] ] [ -common[=list] ]
            [ -[no]crossref[=list] ] [ -[no]declare ]
            [ -[no]division ] [ -errors[=num] ] [ -[no]extern ]
            [ -[no]f77[=list] ] [ -[no]f90[=list] ]
            [ -[no]f95[=list] ] [ -[no]help ]
            [ -[no]identifier-chars[=list] ] [ -include=str ]
            [ -intrinsic[=list] ] [ -[no]library ] [ -[no]list ]
            [ -makedcls[=list] ] [ -mkhtml[=list] ]
            [ -[no]novice ] [ -output=str ]
            [ -pointersize[=num] ] [ -[no]portability[=list] ]
            [ -[no]pretty[=list] ] [ -project[=list] ]
            [ -[no]pure ] [ -[no]quiet ] [ -[no]reference ]
            [ -[no]resources ] [ -[no]sixchar ] [ -[no]sort ]
            [ -source[=list] ] [ -style[=list] ] [ -[no]symtab ]
            [ -[no]truncation[=list] ] [ -usage[=list] ]
            [ -[no]vcg ] [ -[no]version ] [ -[no]volatile ]
            [ -wordsize[=num] ] [ -wrap[=num] ] [ files ...  ]

DESCRIPTION

       ftnchek  (short  for  Fortran  checker)  is  designed to detect certain
       errors in a Fortran program that a compiler usually does not.   ftnchek
       is  not  primarily intended to detect syntax errors.  Its purpose is to
       assist the user in finding semantic errors.  Semantic errors are  legal
       in  the  Fortran  language  but  are  wasteful  or  may cause incorrect
       operation.  For example, variables which are never  used  may  indicate
       some  omission  in the program; uninitialized variables contain garbage
       which may cause incorrect results to be calculated; and variables which
       are  not  declared may not have the intended type.  ftnchek is intended
       to assist users in the debugging of their Fortran program.  It  is  not
       intended  to  catch  all  syntax  errors.   This is the function of the
       compiler.  Prior to using ftnchek, the  user  should  verify  that  the
       program compiles correctly.

       This  document  first  summarizes  how to invoke ftnchek.  That section
       should be  read  before  beginning  to  use  ftnchek.   Later  sections
       describe  ftnchek’s options in more detail, give an example of its use,
       and explain how to interpret the output.  The  final  sections  mention
       the limitations and known bugs in ftnchek.

INVOKING FTNCHEK

       ftnchek is invoked through a command of the form:

               $ ftnchek [-option -option ...] filename [filename ...]

       The  brackets  indicate  something  which  is  optional.   The brackets
       themselves are not  actually  typed.   Here  options  are  command-line
       switches  or  settings,  which control the operation of the program and
       the amount of information that will be printed out.  If  no  option  is
       specified, the default action is to print error messages, warnings, and
       informational messages, but not the program listing or symbol tables.

       Each option begins with the  ’-’  character.   (On  VAX/VMS  or  MS-DOS
       systems  you  may  use  either ’/’ or ’-’.)  For the sake of conformity
       with an increasingly common convention, options  can  also  begin  with
       ’--’.  The options are described at greater length in the next section.

       ftnchek options fall into two categories: switches,  which  are  either
       true or false, and settings, which have a numeric or string value.  The
       name of a switch is prefixed by ’no’ or ’no-’  to  turn  it  off:  e.g.
       -nopure  would  turn  off the warnings about impure functions. The ’no’
       prefix can also be used with numeric settings,  having  the  effect  of
       turning off the corresponding warnings.  Settings that control lists of
       warnings have a special syntax  discussed  below.   Only  the  first  3
       characters  of  an option name (not counting the ’-’) need be provided.
       A colon may be used in place of an equals sign for  numeric  or  string
       setting  assignments; however, we show only the equals sign form below.

       The switches and settings which ftnchek currently recognizes are listed
       below.  For each option, the default is the value used if the option is
       not explicitly specified, while the turn-on is the value  used  if  the
       option is given without assigning it a value.

       -arguments=list
              Control  warnings about subprogram type and argument mismatches.
              Default = turn-on = all.

       -array=list
              Control warnings in checking  array  arguments  of  subprograms.
              Default = turn-on = all.

       -brief Use shorter format for some error messages.  Default = no.

       -calltree=list
              Produce  subprogram  call  hierarchy  in  one of 3 formats: text
              call-tree, who-calls-who and VCG.  Default  =  none,  turn-on  =
              tree,prune,sort.

              If  the  -mkhtml  option  is  invoked  and  tree  is the applied
              calltree option, a file named CallTree.html,  will  be  produced
              depicting the tree in HTML format.

       -check Perform checking.  Default = yes.

       -columns=num
              Set  maximum  line  length  to  num  columns.  (Beyond  this  is
              ignored.)  Turn-on = max = 132.  Default = 72.

       -common=list
              Set degree of strictness in checking COMMON blocks.   Default  =
              turn-on = all.

       -crossref=list
              Print  cross-reference  list  of  subprogram calls, label usage,
              and/or COMMON block use.  Default = none.

       -declare
              Print a list of all identifiers whose datatype is not explicitly
              declared.  Default = no.

       -division
              Warn  wherever division is done (except division by a constant).
              Default = no.

       -errors=num
              Set the maximum number of error messages per cascade.  Default =
              turn-on = 3.

       -extern
              Warn  if  external  subprograms  which  are  invoked  are  never
              defined.  Default = yes.

       -f77=list
              Control specific warnings  about  supported  extensions  to  the
              Fortran 77 Standard.  Default  = none, turn-on = all.

       -f90=list
              Control  specific  warnings  about  supported  extensions to the
              Fortran 77 Standard that were not adopted as part of the Fortran
              90 Standard.  Default  = none, turn-on = all.

       -f95=list
              Control  specific  warnings  about  standard Fortran 77 features
              that were deleted from the  Fortran  95  Standard.   Default   =
              none, turn-on = all.

       -help  Print command summary.  Default = no.

       -identifier-chars=list
              Define   non-alphanumeric   characters   that  may  be  used  in
              identifiers.  Default = turn-on = dollar sign and underscore.

       -include=path
              Define a directory to search for INCLUDE files before  searching
              in  the system-wide directory.  Cumulative.  Default = turn-on =
              none.

       -intrinsic=list
              Control treatment of nonstandard intrinsic functions.  Default =
              all  except  vms  for  Unix  version,  all  except  unix for VMS
              version, all except unix and vms for other versions.  Turn-on  =
              all.

       -library
              Begin  library  mode: do not warn about subprograms in file that
              are defined but never used.  Default = no.

       -list  Print source listing of program.  Default = no.

       -makedcls=list
              Prepare a file of declarations.  The list specifies options  for
              the   format   of   this   file.   Default  =  none,  turn-on  =
              declarations.

       -mkhtml=list
              Create individual HTML document files from ftnchek analysis  and
              code comments.  Usually you will also want to specify -call=tree
              to create the root HTML file  CallTree.html.   Default  =  none,
              turn-on = documents.

       -novice
              Give output suitable for novice users.  Default = yes.

       -output=filename
              Send output to the given file.  Default and turn-on sends output
              to the screen. (Default filename extension is .lis).

       -pointersize=num
              Set the size of ‘‘Cray pointer’’ variables to num bytes.  Min  =
              1, max = 16.  Default = turn-on = 4

       -portability=list
              Warn  about non-portable usages.  Default = none, turn-on = all.

       -pretty=list
              Give warnings for possibly misleading appearance of source code.
              Default = turn-on = all.

       -project=list
              Create project file (see explanation below).  Default = no.

       -pure  Assume functions are pure, i.e. have no side effects.  Default =
              yes.

       -quiet Produce less verbose output.  Default = no.

       -reference
              Print  table  of  subprograms  referenced  by  each  subprogram.
              Default = no.

       -resources
              Print  amount  of  resources  used  in  analyzing  the  program.
              Default = no.

       -sixchar
              List any variable names which  clash  at  6  characters  length.
              Default = no.

       -sort  Print list of subprograms sorted in prerequisite order.  Default
              = no.

       -source=list
              Select source  formatting  options:  fixed  or  free  form,  DEC
              Fortran  tab-formatted lines, VMS-style INCLUDE statement, UNIX-
              style  backslash  escape  sequences,  and  implicit  typing   of
              parameters.  Default = none, turn-on = all.

       -style=list
              Produce  extra-picky warnings about obsolescent or old-fashioned
              programming constructions.  Default = none, turn-on = all.

       -symtab
              Print symbol table and label table for each subprogram.  Default
              = no.

       -truncation=list
              Check  for  possible  loss of accuracy by truncation.  Default =
              turn-on = all.

       -usage=list
              Control warnings about unused or uninitialized variables, common
              blocks, etc.  Default = turn-on = all.

       -vcg   Produce VCG format of call graph.

       -version
              Print version number.  Default = no.

       -volatile
              Assume   COMMON  blocks  lose  definition  between  activations.
              Default = no. (Obsolete.  Use -common=volatile instead.)

       -wordsize=num
              Set the default word size for numeric quantities to  num  bytes.
              Default = turn-on = 4 bytes.

       -wrap=num
              Set  output  column  at  which  to  wrap long error messages and
              warnings to the next line.  If set  to  0,  turn  off  wrapping.
              Default = turn-on = 79.

       When  more than one option is used, they should be separated by a blank
       space, except on systems such as VMS where options begin with slash ( /
       ).   No  blank  spaces  may be placed around the equals sign ( = ) in a
       setting.  ftnchek "?"  will  produce  a  command  summary  listing  all
       options and settings.

       For  settings  that take a list of keywords, namely -arguments, -array,
       -calltree, -common, -crossref, -f77, -f90, -f95, -intrinsic, -makedcls,
       -mkhtml, -portability, -pretty, -project, -source, -style, -truncation,
       and -usage, the list  consists  of  keywords  separated  by  commas  or
       colons.   If  the list of keywords is omitted, the effect is to set the
       option to its turn-on value (same as ‘‘all’’ in most cases).  Also,  if
       the list is omitted, the setting name can be prefixed with no or no- to
       turn off all the options it controls.  For example, -f77 turns  on  all
       warnings  about  nonstandard constructions, while -nof77 turns them all
       off.    Three special keywords are:

       help   Print out all the option keywords  controlled  by  the  setting,
              with a brief explanation of their meanings.  This keyword cannot
              be given in a list with other keywords.

       all    Set all options. This turns on all  options  controlled  by  the
              setting.

       none   Clear all options.  This turns off all options controlled by the
              setting.

       These three special keywords must be given  in  full.   For  all  other
       keywords,  only  as  many  letters  of  the keyword as are necessary to
       identify it unambiguously need be given, or a wildcard pattern  may  be
       used.   Including  a keyword in the list turns the corresponding option
       on.  For example, -f77=intrinsic would turn on only the warnings  about
       use  of  nonstandard  intrinsic  functions.  Prefixing a keyword by no-
       turns its option off.   For  example,  -pretty=no-long-line  turns  off
       warnings  about  lines exceeding 72 columns in length while leaving all
       other warnings about misleading appearance in effect.  If a setting has
       default  none,  you  can turn on all options except one or two by using
       all first.  For example, -f77=all,no-include enables warnings about all
       nonstandard  extensions  except  INCLUDE  statements.  If a setting has
       default all, you can turn off all warnings except one or two  by  using
       none  first.  For example, -truncation=none,demotion would turn off all
       precision related warnings except about demotions.   Wildcard  patterns
       contain  an  asterisk  to  stand  for  any  string of characters.  If a
       wildcard pattern is used, all the warnings that match it are  affected.
       If no- is prefixed to the pattern, all the matching warnings are turned
       off, otherwise they are all turned on.  The minimum unambiguous  length
       rule   does  not  apply  to  wildcard  matching.     For  example,  use
       -usage=no-*var* to turn off all warnings  relating  to  variable  usage
       (both  local  and  common).   (Unix users may need to quote any options
       containing wildcards in order to prevent the shell from  attempting  to
       expand  them.)   Wildcards  are  recognized  only  in  lists of warning
       keywords, not in the top-level options themselves.

       When ftnchek starts up, it looks for environment variables and also for
       a  preferences  file.  Any options defined in the environment or in the
       preferences file  are  used  as  defaults  in  place  of  the  built-in
       defaults.   They  are over-ridden by any command line options.  See the
       section on changing the defaults  for  details  about  the  environment
       options and the preferences file.

       When  giving a name of an input file, the extension is optional.  If no
       extension is given, ftnchek will first look for  a  project  file  with
       extension  .prj,  and will use that if it exists.  If not, then ftnchek
       will look for a Fortran source file with the  extension  .for  for  VMS
       systems,  .f for UNIX systems.  More than one file name can be given to
       ftnchek, and it will process the modules in all files as if  they  were
       in a single file.

       Wildcards  are allowed in the specification of filenames on the command
       line for the VMS and MS-DOS versions, as also of course under UNIX  and
       any  other  system  that  performs  wildcard  expansion  in the command
       processor.

       If no filename is given, ftnchek will  read  input  from  the  standard
       input.

OPTIONS

       This  section  provides  a more detailed discussion of ftnchek command-
       line options.  Options and filenames may be interspersed on  a  command
       line.   Most options are positional: each option remains in effect from
       the point it is encountered until it is overridden by a  later  change.
       Thus  for example, the listing may be suppressed for some files and not
       for  others.   Exceptions  are:  the  -intrinsic,   -pointersize,   and
       -wordsize  settings,  which  cannot be changed once processing of input
       files  has  started;  the  -arguments,  -array,   -calltree,   -common,
       -crossref,  -extern, -reference, -resources, -sort, -vcg, and -volatile
       options, where the action depends only on the value of the option after
       the  processing  of  input files is finished; and the -include setting,
       which is cumulative.

       The option names in the following list are in alphabetical order.

       -arguments=list
              Controls warnings about  mismatches  between  actual  and  dummy
              subprogram arguments, and also about mismatches between expected
              and actual subprogram type.  (An actual argument is an  argument
              passed  to  the subprogram by the caller; a dummy argument is an
              argument received by the subprogram.)  By default, all  warnings
              are turned on.

              The  list  consists  of  keywords separated by commas or colons.
              Since all these warnings are on by default,  include  a  keyword
              prefixed  by  no-  to  turn off a particular warning.  There are
              three special keywords: all to turn on all  the  warnings  about
              arguments, none to turn them all off, and help to print the list
              of all the keywords with a brief explanation of each.   If  list
              is  omitted,  -arguments  is  equivalent  to -arguments=all, and
              -noarguments is  equivalent  to  -arguments=none.   The  warning
              keywords with their meanings are as follows:

              arrayness:
                    warn  about inconsistent use of arguments that are arrays.
                    These warnings can be further  controlled  by  the  -array
                    option.

              type:
                  warn about dummy arguments of a different data type from the
                  actual arguments.

              function-type:
                  warn if the invocation assumes the function’s  return  value
                  is  a  different  type than it actually is.  Also warns if a
                  function is called as a subroutine, or vice-versa.

              number:
                  warn about invoking a subprogram with a different number  of
                  arguments than the subprogram expects.

              For  compatibility with previous versions of ftnchek,  a numeric
              form of this setting is also accepted: the list is replaced by a
              number  from 0 to 3.  A value of 0 turns all the warnings off, 1
              turns on only number, 2 turns on all except number, and 3  turns
              all the warnings on.

              This setting does not apply to checking invocations of intrinsic
              functions or statement functions, which can only be  turned  off
              by the -nocheck option.

              See also: -array, -library, -usage.

       -array=list
              Controls  the degree of strictness in checking agreement between
              actual and dummy subprogram  arguments  that  are  arrays.   The
              warnings  controlled  by this setting are for constructions that
              might legitimately be used by a  knowledgeable  programmer,  but
              that   often  indicate  programming  errors.   By  default,  all
              warnings are turned on.

              The list consists of keywords separated  by  commas  or  colons.
              Since  all  these  warnings are on by default, include a keyword
              prefixed by no- to turn off a  particular  warning.   There  are
              three  special  keywords:  all to turn on all the warnings about
              array arguments, none to turn them all off, and  help  to  print
              the  list  of all the keywords with a brief explanation of each.
              If list is omitted, -array  is  equivalent  to  -array=all,  and
              -noarray  is  equivalent  to  -array=none.  The warning keywords
              with their meanings are as follows:

              dimensions:
                  warn if the arguments differ in their number of  dimensions,
                  or  if  the  actual  argument  is an array element while the
                  dummy argument is a whole array.

              size:
                  warn if both arguments are arrays, but they differ in number
                  of elements.

              For  compatibility with previous versions of ftnchek,  a numeric
              form of this setting is also accepted: the list is replaced by a
              number  from 0 to 3.  A value of 0 turns all the warnings off, 1
              turns on only dimensions, 2 turns on only size, and 3 turns  all
              the warnings on.

              Note:  A  warning  is always given regardless of this setting if
              the actual argument is an array while the dummy  argument  is  a
              scalar  variable, or if the actual argument is a scalar variable
              or expression while the dummy argument is an array.  These cases
              are  seldom  intentional.  (To turn off even these warnings, use
              -arguments=no-arrayness.)  No  warning  is  ever  given  if  the
              actual  argument is an array element while the dummy argument is
              a  scalar  variable.   Variable-dimensioned  arrays  and  arrays
              dimensioned  with  1  or  asterisk  match  any  number  of array
              elements.  There is no check of whether multi-dimensional arrays
              agree in the size of each dimension separately.

              See also: -arguments, -library, -usage.

       -brief
              Selects a shorter format for some warning messages.  At present,
              the only warnings controlled by this flag  are  those  that  are
              printed at the end of processing each subprogram.  These include
              warnings about variables that are  set  but  not  used  or  used
              before set, variable names that do not conform to the Fortran 77
              standard, etc.   (These  warnings  may  be  suppressed  entirely
              depending on other flags, such as the -usage or -f77 flags.)  In
              the default format each variable is listed on a  separate  line,
              along  with  the line number where the variable is declared, set
              or used, according to the nature of the  warning.   The  briefer
              format  simply lists all variables to which the warning applies,
              with up to 4 variables per line.

              See also: -quiet.

       -calltree=list
              Causes ftnchek to print out the call structure of  the  complete
              program.

              The  list  consists  of  keywords separated by commas or colons.
              There are two  special  keywords:  none  to  turn  off  all  the
              options,  and  help to print the list of all the keywords with a
              brief explanation of each.  (The keyword all turns  on  all  the
              options,  but  should not normally be used since only one format
              should  be  specified.)   If  list  is  omitted,  -calltree   is
              equivalent  to  -calltree=tree, and -nocalltree is equivalent to
              -calltree=none.  By default no call graph is printed.

              If the -mkhtml  option  is  invoked  and  tree  is  the  applied
              calltree  option,  a  file  named  CallTree.html,  will  also be
              produced depicting the tree in HTML format.  This file is useful
              as  a starting point for browsing the HTML files describing each
              component of the program.

              The keywords which control which format is used are as follows:

              tree:
                  produce the call graph in tree format.

              reference:
                  produce the call graph  in  who-calls-who  format  (same  as
                  -reference switch).

              vcg:
                  produce  the call graph in VCG format (same as -vcg switch).

              Only  one  of  the  formats  tree,  reference,  or  vcg  may  be
              specified.

              The following keywords control options affecting the output:

              prune:
                  prune  repeated  subtrees (applicable only with tree).  This
                  the default.

              sort:
                  sort children of each routine into alphabetical order.  This
                  is the default.

              See  the discussion of the -reference and -vcg flags for details
              about these formats.

              For tree format, The call graph is printed out starting from the
              main  program,  which  is  listed  on the first line at the left
              margin.  Then on the following lines, each routine called by the
              main  program  is listed, indented a few spaces, followed by the
              subtree starting at that routine.

              In the default mode, if a routine is called  by  more  than  one
              other  routine,  its call subtree is printed only the first time
              it is encountered Later calls give only the routine name and the
              notice  ‘‘(see  above)’’.   To have the subtree printed for each
              occurrence of the routine, use option no-prune.

              Note that the call tree will be incomplete if any of  the  input
              files  are  project  files  containing more than one module that
              were created in -library mode.  See the  discussion  of  project
              files below.

              Technical  points:  Each  list  of  routines  called  by a given
              routine is printed in  alphabetical  order  unless  the  no-sort
              option  is given.  If multiple main programs are found, the call
              tree of each is printed  separately.   If  no  main  program  is
              found,  a  report  to  that  effect is printed out, and the call
              trees of any top-level non-library routines are  printed.   This
              flag  only  controls  the  printing  of  the  call tree: ftnchek
              constructs the call tree in any  case  because  it  is  used  to
              determine  which library modules will be cross-checked.  See the
              discussion of the -library flag.

              For compatibility with previous versions of ftnchek,  a  numeric
              form of this setting is also accepted: the list is replaced by a
              number from 0 to 15.  This number is  formed  from  1  for  tree
              format,  2 for reference format, or 3 for vcg format, plus 4 for
              no-prune, and 8 for no-sort.

              See also: -crossref, -library, -reference, -sort, -symtab, -vcg.

       -check
              This  switch is provided so that errors and warning messages can
              be turned off when ftnchek  is  used  for  purposes  other  than
              finding  bugs,  such as making declarations or printing the call
              tree.  It is  positional,  so  after  turning  all  checks  off,
              selected  checks  can be turned back on.  The effect of -nocheck
              is  to  put  all  switches,  numeric  settings,   and   settings
              controlling  lists  of  warnings to their turn-off values, as if
              they had all been specified with the -no prefix.   Switches  and
              settings  that  specify  options  and modes of operation, rather
              than controlling warnings, are unaffected.  These are  -columns,
              -crossref,  -include,  -intrinsic,  -library,  -list, -makedcls,
              -novice, -output, -pointersize,  -project,  -quiet,  -reference,
              -resources,  -sort, -source, -symtab, -vcg, -version, -wordsize,
              and -wrap.  Default = yes.

              Parse errors (syntax errors due  to  unrecognized  or  malformed
              statements) are not suppressed by this switch, since the results
              may  be  incorrect  if  ftnchek  has  not  parsed  the   program
              correctly.

              There  are  some  miscellaneous errors and warning messages that
              are not controlled by any other switch, and so can be turned off
              only  by this switch.  Note that using -check following -nocheck
              only has the effect of turning these special warnings  back  on,
              and  does  not  restore  all  the  checks  it turned off.  These
              warnings are:

              o   Module contains no executable statements.

              o   In free source form, missing space where space  is  required
                  (e.g.  between a keyword and an identifier) or space present
                  where none is allowed (e.g. within an identifier).

              o   Zero  or  negative  length  specification  in  a  data  type
                  declaration of the form type*len.

              o   Invalid operand(s) in an expression.

              o   Array assigned to scalar.

              o   Type mismatch between DO index and bounds.

              o   Undefined common block declared in SAVE statement.

              o   Intrinsic  function explicitly declared with an incompatible
                  type.

              o   Unknown  intrinsic  function  explicitly  declared   in   an
                  INTRINSIC statement.

              o   Intrinsic  function  passed  as a subprogram argument is not
                  declared in an INTRINSIC statement.

              o   Intrinsic   function   or   statement    function    invoked
                  incorrectly.

              o   Function   does   not  set  return  value  prior  to  RETURN
                  statement.

              o   Parameter constant value not evaluated  (this  is  ftnchek’s
                  fault, and it is just informing you of the fact).

              o   Entry  point  of  a  subprogram is later used as a different
                  subprogram’s name.

              o   Unknown keyword used in an I/O statement.

              o   Illegal  label  reference  (e.g.  GOTO  refers  to  a   non-
                  executable  statement;  I/O statement refers to a non-format
                  statement).

              See also: -errors.

       -columns=num
              Set maximum statement length to num columns.   (Beyond  this  is
              ignored.)   This  setting  is  provided  to  allow  checking  of
              programs which may violate the  Fortran  standard  limit  of  72
              columns  for  the  length  of  a  statement.   According  to the
              standard, all characters past column 72 are  ignored.   If  this
              setting  is  used when the -f77=long-line option is in effect, a
              warning will be given for any lines  in  which  characters  past
              column 72 are processed.  Turn-on = max = 132.  Default = 72.

              This  setting  does  not suppress warnings about the presence of
              characters beyond column 72.  To process  code  with  meaningful
              program  text beyond column 72, use this setting and be sure the
              -f77 long-line option is off.  To  process  code  with  sequence
              numbers  in  columns  73 to 80, leave the the columns setting at
              the default value and use the -pretty=no-long-line flag.

              See also: -f77, -pretty.

       -common=list
              This setting controls  the  strictness  of  checking  of  COMMON
              blocks.  By default, all warnings except volatile are turned on.

              The list consists of keywords separated  by  commas  or  colons.
              Since  most  of  these  warnings  are  on  by default, include a
              keyword prefixed by no- to turn off a particular warning.  There
              are  three  special  keywords:  all to turn on all the warnings,
              none to turn them all off, and help to print the list of all the
              keywords  with a brief explanation of each.  If list is omitted,
              -common is equivalent  to  -common=dimensions,exact,length,type,
              and  -nocommon  is  equivalent  to  -common=none.   The  warning
              keywords with their meanings are as follows:

              dimensions:
                  corresponding arrays in each declaration  of  a  block  must
                  agree  in  size  and number of dimensions.  This option only
                  has an effect when used together with exact.

              exact:
                  the comparison of two blocks  is  done  variable-by-variable
                  rather than simply requiring agreement between corresponding
                  storage locations.  Use this if all declarations of a  given
                  COMMON  block  are supposed to be identical, which is a good
                  programming practice.

              length:
                  warn if different declarations of the  same  block  are  not
                  equal  in  total  length.   The Fortran 77 Standard requires
                  each named common block, but not blank  common,  to  be  the
                  same length in all modules of the program.

              type:
                  in  each  declaration of a given COMMON block, corresponding
                  memory locations (words or bytes) must agree in  data  type.
                  If   used  together  with  exact,  this  will  require  that
                  corresponding variables agree in data type.

              volatile:
                  Assume that COMMON blocks are volatile.

              Many Fortran programmers assume that variables, whether local or
              in  COMMON,  are  static,  i.e. that once assigned a value, they
              retain that value permanently until assigned a  different  value
              by  the  program.  However, in fact the Fortran 77 Standard does
              not require this to be the case.   Local  variables  may  become
              undefined  between  activations  of  a  module in which they are
              declared.  Similarly, COMMON blocks may become undefined  if  no
              module  in  which  they  are declared is active.  (The technical
              term for entities  with  this  behavior  is  ‘‘automatic’’,  but
              ftnchek  uses  the  word ‘‘volatile’’ since it is clearer to the
              nonspecialist.)   Only  COMMON  blocks  declared   in   a   SAVE
              statement,  or  declared  in the main program or in a block data
              subprogram remain defined as long as  the  program  is  running.
              Variables  and  COMMON  blocks that can become undefined at some
              point are called volatile.

              If the -common=volatile flag is turned on, ftnchek will warn you
              if  it finds a volatile COMMON block.  If, at the same time, the
              -usage=com-block-volatile  option is turned  on  (which  is  the
              default),  ftnchek  will  try  to check whether such a block can
              lose its defined status between activations of the modules where
              it  is  declared.   ftnchek does not do a very good job of this:
              the rule used is to see whether the block  is  declared  in  two
              separated  subtrees  of the call tree.  For instance, this would
              be the case if two modules, both called from the  main  program,
              shared  a  volatile  COMMON  block.   A  block  can  also become
              undefined between two successive calls of the  same  subprogram,
              but ftnchek is not smart enough to tell whether a subprogram can
              be called more than once, so this case is not checked for.

              The -common=volatile flag does not affect the way ftnchek checks
              the usage of local variables.

              For  compatibility with previous versions of ftnchek,  a numeric
              form of this setting is also accepted: the list is replaced by a
              number  from 0 to 3.  A value of 0 turns all the warnings off, 1
              or greater turns on type, 2 or greater turns on  length,  and  3
              turns  on  dimensions  and  exact also.  The numeric form cannot
              turn on the volatile option.

              See also: -library, -usage.

       -crossref=list
              Prints cross-reference tables.  Default = none.

              The list consists of keywords separated  by  commas  or  colons.
              The keywords with their meanings are as follows:

              calls:
                    table lists each subprogram followed by a list of routines
                    that call it.  This listing omits library modules that are
                    not  in  the  call  tree of the main program.  The list is
                    alphabetized.

              common:
                    table lists each COMMON block followed by a  list  of  the
                    routines  that access it.  These listed routines are those
                    in which some variables in the COMMON block are  accessed,
                    not  simply  those  routines  that declare the block.  (To
                    find out what routines declare a COMMON block but  do  not
                    use it, see the -usage flag.)

              labels:
                    table   lists  each  label  followed  by  a  list  of  all
                    references to it.  A label reference  is  denoted  by  the
                    line number and statement type of the referring statement.
                    The label list is in sequential order.  The references are
                    listed in the order they are encountered in the program.

              See also: -calltree, -reference, -sort, -symtab, -vcg.

       -declare
              If  this  flag  is  set,  all  identifiers whose datatype is not
              declared in each module will be listed.  This flag is useful for
              helping  to  find  misspelled  variable  names,  etc.   The same
              listing will be given if the module contains  an  IMPLICIT  NONE
              statement.  Default = no.

              See also: -sixchar, -usage.

       -division
              This switch is provided to help users spot potential division by
              zero problems.  If  this  switch  is  selected,  every  division
              except  by  a constant will be flagged.  (It is assumed that the
              user is intelligent enough not to divide by a constant which  is
              equal to zero!)  Default = no.

              See also: -portability, -truncation.

       -errors=num
              Set  the  maximum  number  of  error  messages in a ‘‘cascade’’.
              During checking of agreement  of  subprogram  arguments,  common
              block  declarations,  and so forth, sometimes a single case will
              generate a long string of warnings.  Often this simply indicates
              some  other  cause than a genuine item-by-item mismatch, such as
              for example a varible missing from one list.  So in  such  cases
              ftnchek  stops  printing the warnings after the cascade limit is
              reached, and the trailer ‘‘etc...’’ is printed to indicate  that
              there  were  more  errors  not printed.  If you think that these
              warnings are likely to be genuine, use this setting to see  more
              of  them.  Turn-on = default = 3, max = 999.  A value of 0 means
              no limit.

              This setting does not set an overall  limit  on  the  number  of
              error  messages  printed,  only  the  number  printed in any one
              cascade.  Most types of warnings  and  error  messages  are  not
              subject  to  the  cascade effect and so are not affected by this
              setting.  To turn off warnings  generally,  use  the  individual
              warning control options or the -nocheck option.

              See also: -check.

       -extern
              Causes  ftnchek to report whether any subprograms invoked by the
              program are never defined.  Ordinarily, if ftnchek is being  run
              on  a complete program, each subprogram other than the intrinsic
              functions should be defined somewhere.  Turn off this switch  if
              you  just  want  to check a subset of files which form part of a
              larger complete program.  Subprogram  arguments  will  still  be
              checked for correctness.  Default = yes.

              The  -extern  flag is now superseded by the -usage=ext-undefined
              option.  For the  sake  of  convenience,  the  -extern  flag  is
              retained,     so     that    -noextern    is    equivalent    to
              -usage=no-ext-undefined  option.   The  -extern  switch  may  be
              retired eventually.

              See also: -library.

       -f77=list
              Use  this setting to catch language extensions which violate the
              Fortran 77 Standard.  Such extensions may cause your program not
              to  be  portable.   Examples  include  the use of underscores in
              variable names;  variable  names  longer  than  six  characters;
              statement  lines  longer  than  72  characters;  and nonstandard
              statements such as the DO ... ENDDO structure.  ftnchek does not
              report  on  the  use  of  lowercase  letters.   By  default, all
              warnings are turned off.

              This setting provides detailed control over the  warnings  about
              supported  extensions  to  the  Fortran  77  Standard.  (Further
              details about the extensions themselves are given below  in  the
              section on Extensions.)  The list consists of keywords separated
              by commas or colons.  There are three special keywords:  all  to
              turn  on  all the warnings about nonstandard extensions, none to
              turn them all off, and  help  to  print  the  list  of  all  the
              keywords  with a brief explanation of each.  If list is omitted,
              -f77 is equivalent to -f77=all,  and  -nof77  is  equivalent  to
              -f77=none.   The  warning  keywords  with  their meanings are as
              follows:

              accept-type:
                    ACCEPT and TYPE I/O statements.

              array-bounds:
                    Expressions  defining  array  bounds  that  contain  array
                    elements or function references.

              assignment-stmt:
                    Assignment statements involving arrays.  In Fortran 90, an
                    array can be  assigned  to  another  array  of  compatible
                    shape,  or  a scalar can be assigned to an array.  Neither
                    of these assignments is permitted in Fortran 77.

                    A related warning occurs when an array is  assigned  to  a
                    scalar.   Since  this is illegal also in Fortran 90, it is
                    always warned about regardless of the -f77 setting (unless
                    all checking is turned off with the -nocheck flag).

              attribute-based-decl:
                    Type  declarations  in  the new Fortran 90 attribute-based
                    style.  This style of declaration is distinguished by  the
                    use  of a double colon (::) between the list of attributes
                    and the list of  declared  variables.   This  option  also
                    controls  warnings  for  use  of Fortran 90 length or kind
                    specifiers  in   type   declarations.    (Although   these
                    specifiers    can    be    used   in   non-attribute-based
                    declarations, they are controlled by this option to  avoid
                    proliferation of -f77 options.)

              automatic-array:
                    Local  (not dummy) arrays which have variable size.  These
                    would correspond to arrays whose storage would have to  be
                    dynamically allocated at run time.

              backslash:
                    Unix  backslash  escape  in strings.  This warning will be
                    given  only  if  the  -source=unix-backslash  setting   is
                    specified   to   cause   the   escape   interpretation  of
                    backslash..

              byte: BYTE data type declaration.

              case-construct:
                    The SELECT CASE construct.

              character:
                    Extensions to the Fortran 77 standard regarding  character
                    data.   At  present,  this  only  controls  warnings about
                    character variables declared with zero or negative length.
                    In Fortran 77, all character variables must be of positive
                    length.  In Fortran 90,  they  can  be  zero  length,  and
                    declarations  that specify negative lengths are permitted,
                    turning into zero for the declared length.  Note:  because
                    negative  length  specifiers  may  indicate  a programming
                    error, the warning about them is given even if this option
                    is  turned  off,  and  is  suppressed only by the -nocheck
                    flag.

              common-subprog-name:
                    Common block and subprogram having the same name.

              construct-name:
                    Use of a construct-name to label a control statement.

              continuation:
                    More than 19 successive continuation lines.

              cpp:  Unix C preprocessor directives in the source code.

              cray-pointer:
                    ‘‘Cray pointer’’ syntax.

              cycle-exit:
                    The CYCLE and EXIT statements.

              d-comment:
                    Debugging comments starting with D in the source code.

              dec-tab:
                    DEC Fortran style tab-formatted source code.  This warning
                    will  be  given  only  if  the  -source=dec-tab setting is
                    specified to cause interpretation of tabs in this style.

              do-enddo:
                    DO loop extensions: terminal statement label omitted,  END
                    DO, and WHILE.

              double-complex:
                    Double precision complex datatype.

              format-dollarsign:
                    Dollar sign control code in FORMAT statements.

              format-edit-descr:
                    Nonstandard edit descriptors in FORMAT statements.

              function-noparen:
                    Function definition without parentheses.

              implicit-none:
                    IMPLICIT NONE statement.

              include:
                    INCLUDE statement.

              inline-comment:
                    Inline comments starting with an exclamation point.

              internal-list-io:
                    List-directed I/O to or from an internal file.

              intrinsic:
                    Nonstandard intrinsic functions.

              io-keywords
                    Nonstandard  keywords  used in I/O statements.  These fall
                    into three groups.  The first group includes keywords that
                    are accepted in Fortran 90:

                                  ACTION    PAD        READWRITE
                                  ADVANCE   POSITION   SIZE
                                  DELIM     READ       WRITE
                                  EOR
                    The  second  group  comprises  the  following  VMS Fortran
                    keywords:

                          BLOCKSIZE         EXTENDSIZE       READONLY
                          BUFFERCOUNT       INITIALSIZE      RECORDSIZE
                          CARRIAGECONTROL   MAXREC           RECORDTYPE
                          DEFAULTFILE       NAME (in OPEN)   SHARED
                          DISP              NOSPANBLOCK      TYPE
                          DISPOSE           ORGANIZATION
                    (The  keyword  NAME  is  standard  only  in  the   INQUIRE
                    statement.)   The  third  group  consists of the following
                    IBM/MVS keyword:

                                           NUM
                    This  flag  also  controls  a   warning   about   use   of
                    ACCESS=’APPEND’, which is accepted by some compilers.  The
                    value of ’APPEND’ is not valid for any  I/O  specifier  in
                    standard  Fortran 77, and in Fortran 90 ’APPEND’ should be
                    used as a value of the POSITION specifier, not  ACCESS.

              long-line:
                    Statements with meaningful code  past  72  columns.   This
                    warning  is  given  only  if the -columns setting has been
                    used to increase the statement field width.

              long-name:
                    Identifiers over 6 characters long.

              mixed-common:
                    Mixed character and noncharacter data in COMMON block.

              mixed-expr:
                    Nonstandard type combinations in expressions, for  example
                    DOUBLE  PRECISION  with  COMPLEX,  assigning  hollerith to
                    integer, logical operations on integers.

              name-dollarsign:
                    Dollar sign used as a character in identifiers.

              name-underscore:
                    Underscore used as a character in identifiers.

              namelist:
                    NAMELIST statement.

              param-implicit-type:
                    Implicit typing of a parameter by the  data  type  of  the
                    value  assigned.   This warning can only occur if implicit
                    parameter   typing   has   been   turned   on    by    the
                    -source=param-implicit-type  option,  or  if the PARAMETER
                    statement is of the nonstandard form without  parentheses.
                    If  this  option  is  turned  on, then any instances where
                    implicit parameter typing occurs will be warned about.  If
                    you  want  to  be warned only in those instances where the
                    implicit data type differs  from  the  default  type,  use
                    -portability=param-implicit-type  instead.   According  to
                    the Fortran 77 standard, the data type of a  parameter  is
                    given  by  the  same  rules  as  for  a  variable,  and if
                    necessary a type conversion is  done  when  the  value  is
                    assigned.

              param-intrinsic:
                    Intrinsic  function  or  exponentiation  by a real used to
                    define the value of a PARAMETER definition.

              param-noparen:
                    PARAMETER statement without parentheses.  The user  should
                    be  aware that the semantics of this form of the statement
                    differs from that of the standard form: in this form,  the
                    parameter  takes  its  data  type from the value assigned,
                    rather than having its default  data  type  based  on  the
                    first  letter  of  the  parameter name.  (This form of the
                    PARAMETER statement  was  introduced  by  DEC  before  the
                    Fortran 77 standard was defined, and should be avoided.)

              pointer:
                    Fortran  90  standard  pointer-related  syntax,  including
                    POINTER,  TARGET  and   ALLOCATABLE   type   declarations,
                    ALLOCATE,  DEALLOCATE, and NULLIFY statements, and pointer
                    assignment using =>.

              quad-constant:
                    Quad precision real constants, e.g. of the form 1.23Q4.

              quotemark:
                    Strings delimited by quote marks rather than  apostrophes.

              relops:
                    Relational (comparison) operators composed of punctuation,
                    namely: < <= == /= > >=.

              semicolon:
                    Semicolon used as statement separator.

              statement-order:
                    Statements out of the sequence mandated by  the  Standard.
                    The  allowed  sequence  is  illustrated  in Table 1 in the
                    section on Interpreting the Output.

              typeless-constant:
                    Typeless constants, for example Z’19AF’.

              type-size:
                    Type declarations specifying a size, for example REAL*8.

              variable-format:
                    Variable repeat specification or  field  size  in  FORMAT.
                    These are of the form < expr >.

              vms-io:
                    Obsolete.   Now  has  the  same meaning as the io-keywords
                    keyword.

              See also: -f90, -f95, -portability, -pretty, -style,  -wordsize.

       -f90=list
              This  setting  provides detailed control over the warnings about
              supported extensions to the Fortran 77 Standard  that  were  not
              adopted  as  part of the Fortran 90 Standard.  Note that ftnchek
              does not support the full Fortran 90 language.  However, it does
              support some common extensions to Fortran 77 that were prevalent
              before Fortran 90 was defined.  Some of these extensions  became
              part  of  the Fortran 90 Standard, but others did not.  The -f90
              setting warns only about the latter.  That is, this flag  covers
              things  that  are neither legal Fortran 77 nor legal Fortran 90.
              Therefore, the warnings controlled by this flag are basically  a
              subset  of  the  warnings  controlled  by -f77.  There are a few
              cases, described below, where the  circumstances  in  which  the
              warning is given are slightly different for the two flags.

              The  list  consists  of  keywords separated by commas or colons.
              There are three  special  keywords:  all  to  turn  on  all  the
              warnings  about  nonstandard  extensions,  none to turn them all
              off, and help to print the list of all the keywords with a brief
              explanation  of each.  If list is omitted, -f90 is equivalent to
              -f90=all, and -nof90 is equivalent to -f90=none.

              The following keywords have identical meanings for -f90  as  for
              -f77.  The reader is referred to the explanations under -f77.

                    accept-type   double-complex        param-noparen
                    backslash     format-dollarsign     cray-pointer
                    byte          format-edit-descr     quad-constant
                    cpp           function-noparen      type-size
                    d-comment     name-dollarsign       variable-format
                    dec-tab       param-implicit-type   vms-io

              The  keywords  which differ somewhat from the corresponding -f77
              keywords are as follows.

              continuation:
                    The limit on  the  number  of  continuation  lines  for  a
                    statement  in fixed source form is the same, namely 19, in
                    Fortran 90 as in Fortran 77.  For  free  source  form  the
                    limit  is  39  continuation lines, and a line containing a
                    continuation mark cannot be  otherwise  empty  or  contain
                    only a comment.

              intrinsic:
                    This  is  the  same  as  for -f77 except for the intrinsic
                    functions defined in MIL-STD 1753, which are all  included
                    in  Fortran  90,  and  so  are  not  warned  about.   (See
                    -intrinsic for a list.)

              io-keywords:
                    This is the same as for -f77 except that no  warnings  are
                    given  for  the  I/O keywords that are standard in Fortran
                    90.

              long-line:
                    Although the Fortran 90 Standard allows lines longer  than
                    72  characters in free source form, this restriction still
                    applies to fixed source form.  In  free  source  form  the
                    line  length  limit  is  132  characters, and unlike fixed
                    form, ftnchek does not allow this limit to be increased.

              mixed-expr:
                    This is the same as for -f77 except for expressions mixing
                    extended precision real with complex data types, which are
                    permitted in Fortran 90.

              statement-order:
                    This is similar to the  corresponding  -f77  warning,  but
                    applies  the  somewhat  looser  restrictions  on statement
                    order of the Fortran 90 Standard.  In particular,  Fortran
                    90   allows   DATA   statements   and   statement-function
                    definitions   to   be   intermixed   with    specification
                    statements.

              typeless-constant:
                    In Fortran 90, binary, octal, and hexadecimal constants of
                    the form B’ddd’, O’ddd’,  and  Z’ddd’,  respectively,  are
                    permitted.   Here  ’ddd’  represents  a  string of digits.
                    ftnchek recognizes these forms, as well as  a  variant  of
                    the  form  X’ddd’  for  a  hexadecimal constant, and other
                    variants in which the base indicator B, O, Z, or X follows
                    the  digit  string.   These  variants  were not adopted in
                    Fortran 90, so only they are warned about when  this  flag
                    is turned on.

              See  also: -f77, -f95, -portability, -pretty, -style, -wordsize.

       -f95=list
              This setting  provides  detailed  control  over  warnings  about
              standard  Fortran 77 features that were deleted from the Fortran
              95 Standard.  Unlike the -f77 and -f90 settings, these  warnings
              apply to syntax which is legal Fortran 77.  However, since these
              features have been deleted from the  Standard,  it  is  possible
              that programs containing them will be unacceptable to some newer
              compilers.

              The list consists of keywords separated  by  commas  or  colons.
              There  are  three  special  keywords:  all  to  turn  on all the
              warnings about nonstandard extensions, none  to  turn  them  all
              off, and help to print the list of all the keywords with a brief
              explanation of each.  If list is omitted, -f95 is equivalent  to
              -f95=all,  and  -nof95  is equivalent to -f95=none.  The warning
              keywords with their meanings are as follows.

              real-do:
                    A DO variable of any real numeric type.

              pause:
                    The PAUSE statement.

              assign:
                    The ASSIGN statement, assigned GOTO, or assigned format.

              h-edit:
                    The H edit descriptor in a format.

              There is one other Fortran 77 syntax feature that was deleted in
              Fortran  95,  namely   branching to an ENDIF from outside the IF
              block.  However, ftnchek is unable to analyze program flow,  and
              so it does not provide a warning for this.

              See  also: -f77, -f90, -portability, -pretty, -style, -wordsize.

       -help
              Prints a list of all  the  command-line  options  with  a  short
              description  of each along with its default value.  This command
              is identical in function to the ‘‘?’’  argument, and is provided
              as  a  convenience  for those systems in which the question mark
              has special meaning to the command interpreter.  Default = no.

              The help listing also prints the version number and patch  level
              of ftnchek and a copyright notice.

              Note:  the  ‘‘default’’ values printed in square brackets in the
              help listing are, strictly speaking, not the  built-in  defaults
              but  the  current  values  after any environment options and any
              command-line  options  preceding  the  -help  option  have  been
              processed.

              See  also:  -novice,  -version,  and help option of all settings
              that take a list of keywords.

       -identifier-chars=list
              Define  non-alphanumeric  characters  that  may   be   used   in
              identifiers.   By  default, ftnchek only accepts the dollar sign
              and underscore  as  non-alphanumeric  characters  in  identifier
              names.   The  characters  in  the  list  replace whatever set of
              accepted non-alphanumeric characters was previously  in  effect.
              Thus, if dollar sign or underscore are not included in the list,
              they lose their status as acceptable characters.

              This option is provided to enable ftnchek to handle source files
              containing  non-standard identifer names that may be needed, for
              example, to access certain operating system services.   See  the
              section  on  Limitations  and  Extensions  for  the treatment of
              identifiers containing these characters in implicit typing.

              Using  -noidentifer-chars   turns   off   acceptance   of   non-
              alphanumeric characters entirely.

              See also: -source.

       -include=path
              Specifies  a  directory  to  be  searched for files specified by
              INCLUDE statements.  Unlike  other  command-line  options,  this
              setting is cumulative; that is, if it is given more than once on
              the command line, all the directories so specified are placed on
              a  list  that  will  be  searched  in the same order as they are
              given.  The order in which ftnchek searches for  a  file  to  be
              included  is:  the current directory; the directory specified by
              environment variable FTNCHEK_INCLUDE  if  any;  the  directories
              specified  by  any  -include options; the directory specified by
              environment variable INCLUDE; and finally in a standard  system-
              wide  directory (/usr/include for UNIX, SYS$LIBRARY for VMS, and
              \include for MSDOS).

              See also: -f77, -source.

       -intrinsic=list
              Controls  whether   ftnchek   recognizes   certain   nonstandard
              intrinsic functions as intrinsic.  The list consists of keywords
              separated by commas or colons.  Some  of  the  keywords  control
              whether  to  recognize  certain  groups  of functions, and other
              keywords  control  the  expected  syntax   for   invoking   some
              nonstandard   intrinsics.    Include   a   keyword  to  turn  on
              recognition of the corresponding set of intrinsics or  to  allow
              the  corresponding syntax.  Include a keyword prefixed by no- to
              turn off that recognition.

              There are three special keywords: all  turns on  recognition  of
              all the nonstandard intrinsics (listed below) and accepts either
              syntax for those that have variations.  Use  none  to  turn  off
              recognition  of  all  nonstandard  intrinsics except those noted
              below.  Use help to print the list of all the  keywords  with  a
              brief  explanation  of  each.  If list is omitted, -intrinsic is
              equivalent to -intrinsic=all, and -nointrinsic is equivalent  to
              -intrinsic=none.

              The  nonstandard  intrinsic  functions  needed  to  support  the
              nonstandard extended precision data types  (double  complex  and
              quad  precision)  are always recognized.  The intrinsics for the
              double complex data type are:

                               CDABS   CDSQRT   DREAL   ZLOG
                               CDCOS   DCMPLX   IMAG    ZSIN
                               CDEXP   DCONJG   ZABS    ZSQRT
                               CDLOG   DIMAG    ZEXP    ZCOS
                               CDSIN

              The intrinsics for the quad precision  and  quad  complex  types
              are:

                              CQABS    QARCOS   QEXT     QNINT
                              CQCOS    QARSIN   QEXTD    QPROD
                              CQEXP    QATAN    QFLOAT   QREAL
                              CQLOG    QATAN2   QIMAG    QSIGN
                              CQSIN    QCMPLX   QINT     QSIN
                              CQSQRT   QCONJG   QLOG     QSINH
                              DBLEQ    QCOS     QLOG10   QSQRT
                              IQINT    QCOSH    QMAX1    QTAN
                              IQNINT   QDIM     QMIN1    QTANH
                              QABS     QEXP     QMOD     SNGLQ

              The   keywords  controlling  recognition  of  other  nonstandard
              intrinsic functions are as follows:

              extra:
                    recognize the  following  commonly  available  nonstandard
                    intrinsics (all except EXIT and LOC are defined in MIL-STD
                    1753):

                                  BTEST   IBCLR   IEOR    ISHFTC
                                  EXIT    IBITS   IOR     LOC
                                  IAND    IBSET   ISHFT   NOT

              unix: recognize these common Unix-specific intrinsic functions:

                                ABORT    GMTIME   LTIME    SRAND
                                AND      IARGC    OR       SYSTEM
                                GETARG   IRAND    RAND     TIME
                                GETENV   LSHIFT   RSHIFT   XOR

              vms:  recognize these common VMS-specific intrinsic functions:

                                  DATE     IDATE   SECNDS   TIME
                                  ERRSNS   RAN     SIZEOF

              iargc-no-argument:
                    specify that IARGC may be invoked with no arguments.

              iargc-one-argument:
                    specify that IARGC may be invoked with one argument.

              rand-no-argument:
                    specify that  RAND  and  IRAND  may  be  invoked  with  no
                    arguments.

              rand-one-argument:
                    specify  that  RAND  and  IRAND  may  be  invoked with one
                    argument.

              The no-argument  and  one-argument  keywords  work  as  follows:
              turning the option on causes ftnchek to accept the corresponding
              syntax for invocation of the  function,  without  excluding  the
              possibility  of  the alternative syntax.  Turning the option off
              causes the corresponding syntax not to  be  accepted.   If  both
              options  are turned on at once (the default), then either syntax
              is accepted.  Turning both options off  at  once  would  not  be
              meaningful.  These options have no effect if recognition of Unix
              intrinsics has been turned off.

              Note that this setting does  not  control  whether  non-standard
              warnings  are issued about these functions.  It controls whether
              the  functions  are  assumed  to  be  intrinsic  or  not,  which
              determines how their usage is checked.  When functions in any of
              these sets are  included,  their  invocations  will  be  checked
              according  to  the  rules for the intrinsic functions; otherwise
              they  will  be  checked  as   normal   (user-written)   external
              functions.   The  non-standard  warnings  are  controlled by the
              -f77=intrinsic option.

              The  default  value   of   this   setting   is   equivalent   to
              -intrinsic=all   followed  by  -intrinsic=no-vms  for  the  Unix
              version,   -intrinsic=no-unix   for   the   VMS   version,   and
              -intrinsic=no-unix,no-vms for other versions.

              Note:  In versions of ftnchek prior to 2.10, the -intrinsic flag
              took a numeric argument instead of a list of options.   For  the
              sake  of  users who may have written scripts invoking ftnchek in
              this way, the numeric form is still accepted.  The numeric  form
              of the setting consists of three digits.  The ones digit selects
              the set of intrinsic functions to be  supported.   The  digit  0
              selects only Fortran 77 standard intrinsics plus those needed to
              support the nonstandard  extended  precision  data  types.   The
              digit  1  is equivalent to extra, 2 is equivalent to extra,unix,
              and 3 is equivalent  to  extra,vms.   The  tens  digit  of  this
              setting  controls the syntax of the RAND intrinsic function, and
              the hundreds digit controls the syntax of  the  IARGC  function.
              For  these  digits,  specify  0  to  require  invocation with no
              argument, 1 to require one argument, and 2 to allow either form.

              See also: -f77.

       -library
              This  switch  is used when a number of subprograms are contained
              in a file, but not all of them  are  used  by  the  application.
              Normally,  ftnchek  warns you if any subprograms are defined but
              never used.  This switch will suppress these warnings.   Default
              = no.

              This  switch  also  controls  which  subprogram calls and COMMON
              block declarations are checked.  If a  file  is  read  with  the
              -library  flag  in  effect,  the  subprogram  calls  and  COMMON
              declarations contained in a routine in that file will be checked
              only if that routine is in the main program’s call tree.  On the
              other hand, if the -library switch is turned off,  then  ftnchek
              checks  the  calls  of  every  routine  by  every other routine,
              regardless of whether those  routines  could  ever  actually  be
              invoked  at run time, and likewise all COMMON block declarations
              are compared for agreement.

              The difference between this switch and the  -usage=no-ext-unused
              option  for  subprograms  is that the latter suppresses only the
              warning  about  routines  being  declared  but  not  used.   The
              -library  switch  goes  further  and  excludes  unused  routines
              processed while it is  in  effect  from  all  cross-checking  of
              arguments and COMMON block declarations as well.

              (If  there  is no main program anywhere in the set of files that
              ftnchek has read, so that there is no call  tree,  then  ftnchek
              will  look  for  any non-library routines that are not called by
              any other routine, and use these as  substitutes  for  the  main
              program  in  constructing  the  call  tree  and deciding what to
              check.  If no such top-level  non-library  routines  are  found,
              then  all inter-module calls and all COMMON declarations will be
              checked.)

              See also: -arguments, -calltree, -common, -extern, -usage.

       -list
              Specifies that a listing of the Fortran program is to be printed
              out  with  line numbers.  If ftnchek detects an error, the error
              message follows the program line with a caret ( ^  )  specifying
              the  location of the error.  If no source listing was requested,
              ftnchek will still print out any line containing  an  error,  to
              aid the user in determining where the error occurred.  Default =
              no.

              See also: -output, \fB-symtab, fB-quiet.

       -makedcls=list
              Prepare a neatly-formatted file of  declarations  of  variables,
              common blocks, and namelist lists, for possible merging into the
              source code.  The declarations are stored in a file of the  same
              name as the source code, but with the extension changed to .dcl.
              If no declarations are written to the file,  it  is  deleted  to
              reduce clutter from empty files.

              If  input  comes  from  standard input, instead of a named file,
              then declarations are written to standard output.

              Variables  are  declared  in  alphabetical  order  within   each
              declaration  class  and  type,  with  integer  variables  first,
              because of their later possible use in array dimensions.

              PARAMETER statements are an exception to the alphabetical  order
              rule,   because  the  Fortran  77  Standard  requires  that  the
              expressions defining parameter values refer  only  to  constants
              and  already-defined  parameter names.  This forces the original
              source file order of such statements  to  be  preserved  in  the
              declaration files.

              Explicit  declaration of all variables is considered good modern
              programming practice.   By  using  compiler  options  to  reject
              undeclared   variables,  misspelled  variable  names  (or  names
              extending past  column  72)  can  be  caught  at  compile  time.
              Explicit declarations also greatly facilitate changing floating-
              point  precision  with  filters  such  as  dtoq(1L),   dtos(1L),
              fd2s(1L),  fs2d(1L), qtod(1L), and stod(1L).  These programs are
              capable  of  changing  types  of  explicit  floating-point  type
              declarations,  intrinsic  functions,  and constants, but because
              they do not carry out rigorous lexical and grammatical  analysis
              of  the  Fortran  source code, they cannot provide modified type
              declarations for undeclared variables.   Default  setting  =  0,
              turn-on = 1.

              Various  options  for  the  form  of  the  declarations file are
              controlled by the list, which consists of keywords separated  by
              commas or colons.  There are three special keywords: all to turn
              on all the options, none to turn them all off, and help to print
              the  list  of all the keywords with a brief explanation of each.
              If   list   is   omitted,    -makedcls    is    equivalent    to
              -makedcls=declarations (i.e. produce the declarations file using
              the  default  options),  and  -nomakedcls   is   equivalent   to
              -makedcls=none.

              For  compatibility  with previous versions of ftnchek, a numeric
              form of this setting is also accepted:  the list is replaced  by
              a  number  which is the sum of the numbers in parentheses beside
              the keywords in the following list.  The warning  keywords  with
              their meanings are as follows:

              declarations (1):
                    Write  a declaration file.  (This is implied by any of the
                    other options, and can be omitted if any other options are
                    given.)

              undeclared-only (2):
                    By  default, all variables are included in the declaration
                    file.   With  this   option,   include   only   undeclared
                    variables.   This  setting  is useful if you want to check
                    for undeclared variables, since Fortran source files  with
                    all  variables properly declared will not result in a .dcl
                    file.  With this option, common blocks and namelist  lists
                    will  not  be  included  in the declaration file, since by
                    their nature they cannot be undeclared.

              compact (4):
                    The declarations are normally  prettyprinted  to  line  up
                    neatly  in  common  columns,  as  in the declaration files
                    output by the Extended PFORT  Verifier,  pfort(1L).   This
                    option  value  selects  instead  compact  output,  without
                    column alignment.

              use-continuation-lines (8):
                    Causes continuation lines to be  used  where  permissible.
                    The  default  is  to begin a new declaration on each line.
                    This option is appropriate to use together with compact.

              keywords-lowercase (16):
                    Output Fortran  keywords  in  lowercase,  instead  of  the
                    default uppercase.

              vars-and-consts-lowercase (32):
                    Output  variables  and  constants in lowercase, instead of
                    the default uppercase.   Character  string  constants  are
                    not affected by this option.

              exclude-sftran3 (64):
                    Omit  declarations  of internal integer variables produced
                    by the SFTRAN3 preprocessor,  xsf3(1L),  as  part  of  the
                    translation  of  structured Fortran statements to ordinary
                    Fortran.  These variables have six-character names of  the
                    form  NPRddd,  NXdddd,  N2dddd,  and  N3dddd, where d is a
                    decimal digit.  Because they are invisible in the  SFTRAN3
                    source  code,  and  will  change  if  the  SFTRAN3 code is
                    modified,  such  variables  should   not   be   explicitly
                    declared.   Instead,  they  should just assume the default
                    Fortran INTEGER data type based on their  initial  letter,
                    N.

              asterisk-comment (128):
                    Use  an  asterisk as the comment character; the default is
                    otherwise ’C’.

              comment-char-lowercase (256):
                    Use ’c’ instead of ’C’ or ’*’ as the comment character.

              suppress-array-dimensions (512):
                    Suppress  dimensioning  of   arrays   in   the   generated
                    declarations.   This  option  is for use with code lacking
                    type declarations, to allow the declaration  files  to  be
                    inserted  without  change  into  the code.  Since the code
                    will have dimension statements already,  dimensioning  the
                    array  variables in the type statements of the declaration
                    file is redundant.  This option should  be  used  only  in
                    conjunction   with  option  2  =  undeclared-only  because
                    otherwise any arrays  that  were  dimensioned  in  a  type
                    statement will lose their dimensioning.

              free-form (1024):
                    Produce  declarations  in  free source form.  This mode is
                    automatically used if the input source is free form.   Use
                    this  option  to produce declarations in free form even if
                    the input is in fixed form.  Free  form  declarations  are
                    indented  only 2 columns instead of 6, use the exclamation
                    mark as the comment character, and  indicate  continuation
                    lines  by  an  ampersand  at  the  end  of  the line to be
                    continued.

              The declaration files contain distinctive comments that mark the
              start  and  end  of  declarations  for  each  program  unit,  to
              facilitate using text editor macros for merging the declarations
              back into the source code.

              The  ftnchek  distribution  includes  a  program, dcl2inc, which
              processes  declaration  files  to   produce   files   containing
              declarations of all COMMON blocks, in a form suitable for use as
              INCLUDE files.  See the dcl2inc(1L) man page for the details  of
              its use.

              See also: -mkhtml.

       -mkhtml=list
              Produce  HTML documentation from source. Creates individual HTML
              files from ftnchek analysis  and  code  comments.  All  comments
              immediately  preceding  and following the function or subroutine
              definition are captured to the HTML  file.  No  reformatting  of
              source  comments  is  performed  other than stripping of FORTRAN
              comment characters.  In addition, the HTML file lists the  local
              variables  declared,  common block variables used, functions and
              subroutines called, I/O unit usage, and other information  about
              each   subprogram.   Usually  you  will  also  want  to  specify
              -call=tree to create the root HTML file CallTree.html.  (Perhaps
              this file should be named index.html.)

              Various options for the form of the HTML files are controlled by
              the list, which consists of  keywords  separated  by  commas  or
              colons.   There  are  three special keywords: all to turn on all
              the options, none to turn them all off, and help  to  print  the
              list  of  all the keywords with a brief explanation of each.  If
              list is omitted,  -mkhtml  is  equivalent  to  -mkhtml=documents
              (i.e.   produce  the  HTML  document  files  using  the  default
              options), and -nomkhtmls is equivalent to -mkhtml=none.

              For the sake of simplicity, the options for -mkhtml are the same
              as  those  for -makedcls except for those that are inapplicable.
              Likewise,  a numeric form of this setting can be used, formed as
              the  sum  of  the numbers in parentheses in the list below.  The
              warning keywords with their meanings are as follows:

              documents (1):
                    Create the HTML documents.  (This is implied by any of the
                    other options, and can be omitted if any other options are
                    given.)

              compact (4):
                    The declarations are normally  prettyprinted  to  line  up
                    neatly  in  common  columns.   This  option  value selects
                    instead compact output, without column alignment.

              use-continuation-lines (8):
                    Causes continuation lines to be used instead of  beginning
                    a   new   declaration   on  each  line.   This  option  is
                    appropriate to use together with compact.

              keywords-lowercase (16):
                    Output Fortran  keywords  in  lowercase,  instead  of  the
                    default uppercase.

              vars-and-consts-lowercase (32):
                    Output  variables  and  constants in lowercase, instead of
                    the default uppercase.   Character  string  constants  are
                    not affected by this option.

              exclude-sftran3 (64):
                    Omit  declarations  of internal integer variables produced
                    by the SFTRAN3 preprocessor, xsf3(1L).  (See -makedcls for
                    discussion.)

              suppress-array-dimensions (512):
                    Suppress   dimensioning   of   arrays   in  the  generated
                    declarations.   This  is  normally  undesirable,  but   is
                    available  if  for  some  reason you do not want the array
                    dimensions to appear in the HTML.

              free-form (1024):
                    Produce variable declarations in free source  form.   This
                    mode  is  automatically  used  if the input source is free
                    form.  This mainly affects the form of continuation  lines
                    if they are used.

              See also: -calltree, -makedcls.

       -novice
              This  flag  is  intended  to  provide  more  helpful  output for
              beginners.  It has two effects:

              (a) provides an extra message to the effect that a function that
                  is used but not defined anywhere might be an array which the
                  user forgot to declare in a DIMENSION statement  (since  the
                  syntax  of  an  array  reference  is  the  same as that of a
                  function reference).

              (b) modifies the form of the error messages  and  warnings.   If
                  the  flag  is  turned  off  by -nonovice, these messages are
                  printed in a style more resembling UNIX lint.

              Default = yes.

       -output=filename
              This setting is provided for convenience on systems which do not
              allow  easy  redirection  of  output  from  programs.  When this
              setting is given, the  output  which  normally  appears  on  the
              screen  will  be sent instead to the named file.  Note, however,
              that operational errors of ftnchek itself (e.g. out of space  or
              cannot  open  file)  will  still  be  sent  to  the screen.  The
              extension for the filename is optional, and if no  extension  is
              given, the extension .lis will be used.

       -pointersize=num
              Specifies  the  size  of  a  ‘‘Cray pointer’’ variable to be num
              bytes.  Default = turn-on = 4 bytes.

              The pointer size is used to inform precision  mismatch  warnings
              involving  pointer  variables,  for  example  when  a pointer is
              assigned a value from an allocation  routine,  or  passed  as  a
              subprogram parameter.

              See also: -f77, -portability, -truncation, -wordsize.

       -portability=list
              ftnchek will give warnings for a variety of non-portable usages.
              Examples include the use of tabs except in  comments  or  inside
              strings,  the  use of Hollerith constants, and the equivalencing
              of variables of different data  types.   This  option  does  not
              produce  warnings  for  supported  extensions  to the Fortran 77
              Standard, which may also cause portability problems.   To  catch
              those,  use  the  -f77  setting.   By  default, all warnings are
              turned off.

              This setting provides detailed control over the  warnings  about
              possible  portability  problems.   The list consists of keywords
              separated  by  commas  or  colons.   There  are  three   special
              keywords:  all  to  turn  on  all the warnings about nonportable
              usages, none to turn them all off, and help to print the list of
              all  the  keywords with a brief explanation of each.  If list is
              omitted, -portability is  equivalent  to  -portability=all,  and
              -noportability  is equivalent to -portability=none.  The warning
              keywords with their meanings are as follows:

              backslash:
                    Backslash character  in  strings.   Since  some  compilers
                    treat  the  backslash as an escape character, its presence
                    can cause problems even though it is used in  a  standard-
                    conforming way.

              common-alignment:
                    COMMON  block variables not in descending order of storage
                    size.  Some compilers require  this  ordering  because  of
                    storage alignment requirements.

              hollerith:
                    Hollerith    constants    (other    than   within   FORMAT
                    specifications).  The Hollerith data type is a feature  of
                    Fortran  IV  that  has  been  deleted  in  the  Fortran 77
                    standard.  It is superseded by the  character  data  type.
                    Storing  Hollerith  data  in  variables  of  a  numeric or
                    logical data type is nonportable  due  to  differing  word
                    sizes.

              long-string:
                    String constants, variables, or expressions over 255 chars
                    long.

              mixed-equivalence:
                    Variables of different data types equivalenced.

              mixed-size:
                    Variables  declared  with  default  precision  used   with
                    variables   given   explicit  precision,  in  expressions,
                    assignments, or as arguments.  For example, if a  variable
                    declared  as  REAL*8  is  treated  as equivalent to DOUBLE
                    PRECISION.

              real-do:
                    Non-integer DO loop index and bounds.  These can  cause  a
                    program’s    results    to    depend   on   the   hardware
                    characteristics of the particular computer used.

              param-implicit-type:
                    Implicit typing of a parameter by the  data  type  of  the
                    value assigned, if it differs from the default type.  This
                    warning can only occur if implicit  parameter  typing  has
                    been  turned on by the -source=param-implicit-type option,
                    or if the PARAMETER statement is of the  nonstandard  form
                    without  parentheses.   If  this option is turned on, then
                    any instances where implicit parameter typing  occurs  and
                    where the implicit type is different from the default type
                    based on the first letter of the parameter name,  will  be
                    warned  about.   Implicit  parameter typing can change the
                    semantics of  statements  where  the  parameter  is  used,
                    causing portability problems.

              tab:  Tabs  in source code.  Tabs are interpreted differently by
                    different compilers.  This  warning  will  be  given  only
                    once, at the end of the file.

              See also: -f77, -f90, -f95, -pretty, -style, -wordsize.

       -pretty=list
              Controls  certain  messages  related  to  the  appearance of the
              source code.  These warn about things that might make a  program
              less  readable  or  be deceptive to the reader.  By default, all
              warnings are turned on.

              This setting provides detailed control over the  warnings  about
              appearance.   The  list consists of keywords separated by commas
              or colons.  Since all warnings are  on  by  default,  include  a
              keyword prefixed by no- to turn off a particular warning.  There
              are three special keywords: all to  turn  on  all  the  warnings
              about  misleading  appearances,  none  to turn them all off, and
              help to print  the  list  of  all  the  keywords  with  a  brief
              explanation  of each.  If list is omitted, -pretty is equivalent
              to -pretty=all, and -nopretty  is  equivalent  to  -pretty=none.
              The warning keywords with their meanings are as follows:

              alternate-return:
                    A  RETURN statement has a constant specifying an alternate
                    return point that is not between 0 and the number of dummy
                    arguments  that  are  labels.   This is legal, and has the
                    same  effect  as  a  RETURN  with  no   alternate   return
                    expression,  but  suggests that the programmer intended to
                    use an alternate return label that is not provided.

              embedded-space:
                    Space embedded in variable  names  or  in  multi-character
                    operators such as **.

              continuation:
                    Continuation mark following a comment line.

              long-line:
                    Lines  (except  comments) over 72 columns in width (beyond
                    72 is normally ignored by compiler).

              missing-space:
                    Lack of space between variable and a preceding keyword.

              multiple-common:
                    COMMON block declared in multiple statements.  No  warning
                    is  given  if  the  statements  are consecutive except for
                    comment lines.

              multiple-namelist:
                    NAMELIST declared in multiple statements.  No  warning  is
                    given if the statements are consecutive except for comment
                    lines.

              parentheses:
                    Parentheses around a variable by itself.  As a  subprogram
                    argument,  this  makes  the  argument  an  expression, not
                    modifiable by the subprogram.

              Note that in free source form, extra space and missing space are
              forbidden  by  the  Fortran  90 Standard, and are not mere style
              violations.  In this case the warnings are  replaced  by  syntax
              error messages, and can be turned off only by using -nocheck.

              See also: -f77, -portability, -style.

       -project=list
              ftnchek will create a project file from each source file that is
              input while this option is turned on.  The project file will  be
              given the same name as the input file, but with the extension .f
              or .for replaced by .prj.  (If input is from standard input, the
              project file is named ftnchek.prj.)  Default = none.

              The  list  consists  of  keywords separated by commas or colons.
              There are three  special  keywords:  all  to  turn  on  all  the
              options,  none  to turn them all off, and help to print the list
              of all the keywords with a brief explanation of each.   If  list
              is   omitted,   -project  is  equivalent  to  -project=all,  and
              -noproject is equivalent to -project=none.   The  keywords  with
              their meanings are as follows:

              create:
                    Produce  a  project file.  The default is not to produce a
                    project file.  If this option is not turned on, the  other
                    options have no effect.

              trim-calls:
                    Trim  the amount of information stored in the project file
                    about subprogram declarations  and  calls.   This  is  the
                    default.   Turn  this  option off only in rare situations.
                    (See discussion below.)  The  amount  of  trimming  varies
                    depending  on  the  -library  flag.   More  information is
                    trimmed if that flag is turned on.

              trim-common:
                    Trim the number of common block declarations stored in the
                    project  file.  This is the default.  Turn this option off
                    only in rare situations.  (See  discussion  below.)   This
                    option  has  no effect if the -library flag is turned off:
                    when not in library mode,  no  trimming  of  common  block
                    declarations is done regardless of this option.

              A project file contains a summary of information from the source
              file, for use in checking agreement among FUNCTION,  SUBROUTINE,
              and  COMMON  usages  in  other  files.   It  allows  incremental
              checking, which saves time whenever you  have  a  large  set  of
              files  containing  shared  subroutines,  most  of  which  seldom
              change.  You can run ftnchek once on each file with the -project
              flag  set,  creating  the project files.  Usually you would also
              set the -library and -noextern flags at this time,  to  suppress
              messages  relating  to consistency with other files.  Only error
              messages pertaining to each file by itself will  be  printed  at
              this  time.   Thereafter, run ftnchek without these flags on all
              the project files  together,  to  check  consistency  among  the
              different  files.  All messages internal to the individual files
              will now be omitted.  Only when a file is  altered  will  a  new
              project file need to be made for it.

              Naturally,  when  the -project option is turned on, ftnchek will
              not read project files as input.

              Ordinarily, the trim options should be left on when  you  intend
              to  create  project  files  for  future input to ftnchek.  Since
              trimming is on by default, this means  that  simply  giving  the
              command  -project  with  no option list is the recommended mode.
              The trim options are provided only as a  convenience  for  those
              who  want  to  make use of project files for purposes other than
              checking the program with ftnchek.  To  use  project  files  for
              their  intended  purpose,  the trim options should not be turned
              off.

              Project files  contain  only  information  needed  for  checking
              agreement  between  files.  This means that a project file is of
              no use if all modules of the complete program are contained in a
              single file.

              A  more  detailed  discussion  is  given in the section on Using
              Project Files.

       -pure
              Assume functions are ‘‘pure’’, i.e., they  will  not  have  side
              effects  by  modifying  their arguments or variables in a COMMON
              block.  When this flag is  in  effect,  ftnchek  will  base  its
              determination  of set and used status of the actual arguments on
              the assumption that arguments  passed  to  a  function  are  not
              altered.  It will also issue a warning if a function is found to
              modify any of its arguments or any COMMON variables.  Default  =
              yes.

              When  this  flag  is  turned  off,  actual  arguments  passed to
              functions will be handled  the  same  way  as  actual  arguments
              passed to subroutines.  This means that ftnchek will assume that
              arguments may be modified by the functions.  No warnings will be
              given  if  a  function  is  found to have side effects.  Because
              stricter checking is possible if functions  are  assumed  to  be
              pure,  you  should  turn  this  flag  off  only  if your program
              actually uses functions with side effects.

       -quiet
              This option reduces the amount  of  output  relating  to  normal
              operation,  so  that  error  messages  are  more apparent.  This
              option is provided for the convenience of users who are checking
              large suites of files.  The eliminated output includes the names
              of project files, and  the  message  reporting  that  no  syntax
              errors were found.  It also eliminates some blank lines that are
              ordinarily included for clarity. (Some of this output is  turned
              back on by the -list and -symtab options.)  Default = no.

              Note: the way to remember the difference  between the -quiet and
              -brief is  that  -quiet  doesn’t  suppress  any  warning-related
              information, whereas -brief does.

              See also: -brief.

       -reference
              Specifies  that  a  who-calls-who  table be printed.  This table
              lists each subprogram followed by a  list  of  the  routines  it
              calls.    This  switch  is  equivalent  to  -calltree=reference.
              Default = no.

              The reference list  omits  routines  called  by  unused  library
              modules.  Thus it contains the same information as for the call-
              tree format, namely  the  hierarchy  of  subprogram  calls,  but
              printed  in  a  different  way.  This prints out a breadth-first
              traversal of the call tree whereas -calltree=tree prints  out  a
              depth-first traversal.

              See  also: -calltree, -crossref, -library, -sort, -symtab, -vcg.

       -resources
              Prints the amount of resources used by ftnchek in processing the
              program.   This  listing may be useful in analyzing the size and
              complexity of a program.  It can also help  in  choosing  larger
              sizes  for  ftnchek’s  internal  tables if they are too small to
              analyze a particular program.  Default = no.

              In this listing, the term ‘‘chunk size’’  is  the  size  of  the
              blocks  of  memory  allocated  to store the item in question, in
              units of the size of one item, not necessarily in  bytes.   When
              the  initially  allocated  space  is  filled  up, more memory is
              allocated  in  chunks  of  this  size.   The  following  is   an
              explanation of the items printed:

              Source lines processed:
                  Total  number  of  lines  of  code, with separate totals for
                  statement lines and comment lines.   Comment  lines  include
                  lines with ’C’ or ’*’ in column 1 as well as blank lines and
                  lines containing only an inline  comment.   Statement  lines
                  are  all  other  lines,  including lines that have an inline
                  comment following some code.  Continuation lines are counted
                  as  separate lines.  Lines in include files are counted each
                  time the file is included.

              Total executable statements:
                  Number  of   statements   in   the   program,   other   than
                  specification,  data, statement-function, FORMAT, ENTRY, and
                  END statements.

              Total number of modules:
                  A module is any  external  subprogram,  including  the  main
                  program, subroutines, functions, and block data units.  This
                  count is of modules defined within the source,  not  modules
                  referenced.    Statement  functions  are  not  included.   A
                  subprogram with multiple entry points is only counted  once.

              Total statement labels defined
                  Number  of  labels  attached  to  statements  (often  called
                  statement numbers).  The total label count  for  the  entire
                  program  is  given,  as  well  as  the maximum number in any
                  single subprogram.

              Max identifier name chars:
                  Number of characters used for storing identifier names.   An
                  identifier  is a variable, subprogram, or common block name.
                  Local names are those of local variables  in  a  subprogram,
                  whereas  global  names  refer to subprogram and common block
                  names, as well as dummy argument names and  common  variable
                  names.   Actual  argument text (up to 15 characters for each
                  argument) is also included here.  The space used  for  local
                  names  is  not  recovered at the end of each module, so this
                  number, like global space, grows until the whole program  is
                  analyzed.   Unfortunately, this figure may include some text
                  stored more than once, although a  heuristic  is  used  that
                  will avoid duplicates in many cases.

              Max token text chars:
                  A  token  is  the  smallest  syntactic  unit  of the FORTRAN
                  language above  the  level  of  individual  characters.  For
                  instance  a  token  can  be  a  variable  name,  a numerical
                  constant, a quoted text string, or a punctuation  character.
                  Token text is stored while a module is being processed.  For
                  technical reasons, single-character tokens are not  included
                  in this total.  Items that are not represented in the symbol
                  table may be  duplicated.   The  space  for  token  text  is
                  recovered  at  the  end  of  each  module,  so  this  figure
                  represents the maximum for any one module.

              Max local symbols:
                  This is the largest number of entries in  the  local  symbol
                  table  for  any  module.  Local symbol table entries include
                  all variables and parameters, common block names,  statement
                  functions,  external  subprograms  and  intrinsic  functions
                  referenced by the module.  Literal constants are not  stored
                  in the local symbol table.

              Max global symbols:
                  This  is the number of entries in the global symbol table at
                  the end of processing.  Global symbol table entries  include
                  external  subprogram  and  common  block  names.   Intrinsic
                  functions and statement functions are not included.

              Max number of tokenlists:
                  A token list is a sequence of tokens representing the actual
                  or  dummy  argument  list  of  a  subprogram, or the list of
                  variables in a common block  or  namelist.   Therefore  this
                  number  represents the largest sum of COMMON, CALL, NAMELIST
                  and ENTRY statements and function invocations  for  any  one
                  module.  The space is recovered at the end of each module.

              Max token list/tree space:
                  This  is the largest number of tokens in all the token lists
                  and token trees of any one module.  A token tree  is  formed
                  when  analyzing an expression: each operand is a leaf of the
                  tree, and the  operators  are  the  nodes.   Therefore  this
                  number  is  a  measure  of  the  maximum  complexity  of  an
                  individual module.  For instance a  module  with  many  long
                  arithmetic  expressions  will have a high number.  Note that
                  unlike token text described above, the number of  tokens  is
                  independent  of  the length of the variable names or literal
                  constants in the expressions.

              Number of subprogram invocations:
                  This is the sum over all  modules  of  the  number  of  CALL
                  statements   and   function  invocations  (except  intrinsic
                  functions and statement functions).

              Number of common block decls:
                  This is the sum over all modules of  the  number  of  common
                  block declarations.  That is, each declaration of a block in
                  a different module is  counted  separately.   (The  standard
                  allows  multiple  declarations  of  a  block within the same
                  module; these are counted as only one declaration since they
                  are equivalent to a single long declaration.)

              Number of array dim & param ptrs:
                  This  is  the  sum  over  all modules of the number of array
                  dimension and parameter definition text  strings  saved  for
                  use by the -makedcls option.  The length of the text strings
                  is not counted.  Each dimension of a multidimensional  array
                  is counted separately.

              These  numbers are obviously not the same when project files are
              used in place of the original source code.  Even the numbers for
              global   entities   may   be  different,  since  some  redundant
              information is eliminated in project files.

       -sixchar
              One of the goals of the ftnchek program  is  to  help  users  to
              write  portable  Fortran  programs.   One  potential  source  of
              nonportability is the use of variable names that are longer than
              six   characters.    Some   compilers   just  ignore  the  extra
              characters.   This  behavior  could  potentially  lead  to   two
              different variables being considered as the same.  For instance,
              variables named AVERAGECOST and AVERAGEPRICE are the same in the
              first  six  characters.   If  you  wish  to  catch such possible
              conflicts, use this flag.  Default = no.

              Use the -f77=long-names if you want to list all variables longer
              than  six  characters, not just those pairs that are the same in
              the first six.

              See also: -f77, -portability.

       -sort
              Specifies that a sorted list of all modules used in the  program
              be  printed.   This list is in ‘‘prerequisite’’ order, i.e. each
              module is printed only after all the modules from  which  it  is
              called  have  been printed.  This is also called a ‘‘topological
              sort’’ of the call tree.   Each  module  is  listed  only  once.
              Routines  that  are not in the call tree of the main program are
              omitted.  If there are any cycles in the call graph (illegal  in
              standard  Fortran) they will be detected and diagnosed.  Default
              = no.

              See also: -calltree, -crossref, -reference, -symtab, -vcg.

       -source=list
              This setting controls certain options  about  the  form  of  the
              Fortran source code.  The list consists of keywords separated by
              commas or colons.  There are three special keywords: all to turn
              on all the options, none to turn them all off, and help to print
              the list of all the keywords with a brief explanation  of  each.
              If  list  is  omitted, -source is equivalent to -source=all, and
              -nosource is equivalent to -source=none.

              For compatibility with previous versions of ftnchek,  a  numeric
              form  of this setting is also accepted:  the list is replaced by
              a number which is the sum of the numbers in  parentheses  beside
              the keywords in the following list.  (The fixed and free options
              do not have numeric values.)  The warning  keywords  with  their
              meanings are as follows:

              fixed:
                    Interpret   the  source  as  fixed  form  (with  supported
                    extensions  such  as  exclamation  mark   for   comments).
                    Statements  must  be  in columns 7 to 72 (unless the -cols
                    setting has been used to change this), and blanks are  not
                    significant  outside  character  context (but warned about
                    under the -pretty  option).   This  is  the  default  mode
                    unless  the  source  file extension is .f90 or .F90.  this
                    option cannot be given together with -source=free.

              free: Interpret the source as  free  form.   Statements  may  be
                    anywhere in columns 1 to 132, comments can only begin with
                    an exclamation mark,  and  blanks  are  required  in  some
                    places  such as between identifiers and keywords.  This is
                    the default mode if the source file extension is  .f90  or
                    .F90.    This   option   cannot  be  given  together  with
                    -source=fixed or -source=dec-tab

              dec-tab (1):
                    Accept DEC-style tab-formatted source.  A  line  beginning
                    with  an  initial  tab  will be treated as a new statement
                    line unless the character  after  the  tab  is  a  nonzero
                    digit, in which case it is treated as a continuation line.
                    The next column after the  tab  or  continuation  mark  is
                    taken  as  column  7.  A warning will be given in the case
                    where the line is a continuation, if  -f77=dec-tab  is  in
                    effect.

              vms-include (2):
                    Accept  VMS-style  INCLUDE  statements.   These follow the
                    normal syntax, but with the following additional features:
                    (1) the file extension, if not given, defaults to the same
                    as a normal source file  extension;  and  (2)  the  option
                    /LIST or /NOLIST can be appended to the include-file name,
                    to control listing of its contents.

              unix-backslash (4):
                    Handle UNIX-style backslash escapes in character  strings.
                    The  escape  sequence  following  the  backslash  will  be
                    evaluated according to the ANSI standard for strings in C:
                    up  to three digits signify an octal value, an x signifies
                    the start of a hexadecimal constant, any of the letters  a
                    b  f  n  r  t signify special control codes, and any other
                    character  (including  newline)  signifies  the  character
                    itself.   When  this  source  code  option is in effect, a
                    warning will be given if  the  -f77=backslash  setting  is
                    specified.

                    The  default  behavior  is to treat the backslash like any
                    other normal character, but a  warning  about  portability
                    will  be  generated  if  the  -portability  flag  is  set.
                    Because  of  the  fact  that  some  compilers  treat   the
                    backslash  in  a  nonstandard  way,  it  is  possible  for
                    standard-conforming programs to be  non-portable  if  they
                    use the backslash character in strings.

                    Since  ftnchek  does  not  do  much  with  the interpreted
                    string, it is seldom necessary to use this option.  It  is
                    needed in order to avoid spurious warnings only if (a) the
                    program  being  checked  uses  backslash   to   embed   an
                    apostrophe  or quote mark in a string instead of using the
                    standard mechanism of  doubling  the  delimiter;  (b)  the
                    backslash  is  used  to escape the end-of-line in order to
                    continue a string across multiple source lines; or  (c)  a
                    PARAMETER  definition  uses  an  intrinsic string function
                    such as LEN with such a string as argument, and that value
                    is later used to define array dimensions, etc.

              param-implicit-type (8):
                    Implicit  typing  of  a  parameter by the data type of the
                    value assigned.  Some non-standard compilers may allow the
                    data  type of the value to override the Fortran 77 default
                    type of a parameter that is based on the first  letter  of
                    the parameter name.  This option only applies to PARAMETER
                    statements of the standard form which has parentheses.   A
                    parameter  that  has  been  explicitly  declared in a type
                    statement prior to the PARAMETER statement is not affected
                    by  this  option.   A  warning  will  be  given  under the
                    -f77=param-implicit-type                                or
                    -portability=param-implicit-type option.

                    Note that this implicit typing is treated as equivalent to
                    an  explicit   type   declaration   for   the   parameter.
                    Therefore,   if   you   use  -makedcls=undeclared-only  to
                    generate declarations only of undeclared variables,  these
                    parameters will not be included.

              dec-param-standard-type (16):
                    Follow  the Fortran 77 rule for data typing of DEC Fortran
                    style parameters.  These are declared using a  nonstandard
                    form  of  the PARAMETER statement which lacks parentheses.
                    According to DEC Fortran, parameters defined by this  form
                    of  the  statement  have their data type given by the data
                    type of the value  assigned.   Use  this  option  to  tell
                    ftnchek  not  to  follow  this rule but instead to use the
                    same rule as  for  standard  PARAMETER  statements.   This
                    option  does  not  apply  to  PARAMETER  statements of the
                    standard form.

              By default, all these source code options are turned off, except
              for  the  vms-include  option, which is on by default in the VMS
              version..

              See also: -f77, -include, -portability.

       -style=list
              Provides extra-picky warnings about obsolescent or old-fashioned
              programming  constructions.   This option is helpful for efforts
              to follow a modern  programming  style.   (Most  of  the  things
              complained about under this option are forbidden in the F subset
              language.)  By default, all warnings are turned off.

              The list consists of keywords separated  by  commas  or  colons.
              There  are  three  special  keywords:  all  to  turn  on all the
              options, none to turn them all off, and help to print  the  list
              of  all  the keywords with a brief explanation of each.  If list
              is omitted, -style is equivalent to -style=all, and -nostyle  is
              equivalent  to  -style=none.   The  warning  keywords with their
              meanings are as follows:

              block-if:
                    Complain about arithmetic IF statement.  Accept  block  IF
                    or logical IF (which controls a single statement).

              construct-name:
                    Complain  about  unnamed  block  constructs:  IF,  DO, and
                    SELECT CASE.  Note that if a construct name is present  on
                    the  opening statement of a construct, then it is required
                    to be present on all other component statements (ELSE, END
                    IF,  etc.)  of  the  construct.   In  that  case a missing
                    construct name on  those  statements  generates  a  syntax
                    error  regardless  of  this  option.   The purpose of this
                    option is to warn if the construct  completely  lacks  the
                    optional name.

              distinct-do:
                    Complain  if  two  DO  loops  share  a  common  terminator
                    statement.

              do-construct:
                    Complain if terminator of a DO loop is anything other than
                    an  END DO or CONTINUE statement.  This is the requirement
                    in order for the loop to meet the Fortran 90 definition of
                    a do-construct.

              do-enddo:
                    Complain if terminator of a DO loop is anything other than
                    an  END  DO  statement.   (This   option   overrides   the
                    do-construct option, being even stricter.)

              end-name:
                    Complain  about  the  absence  of  the  subprogram name on
                    structured END statements.

              format-stmt:
                    Complain about the presence of  FORMAT  statements.   Only
                    the  FORMAT  statements  themselves  are  flagged, not the
                    references to them in I/O lists.

              goto: Complain about the presence of unconditional, computed  or
                    assigned  GOTO  statements.  Also complain about alternate
                    returns (but not about labels as subprogram arguments).

              labeled-stmt:
                    Complain  about  the  presence  of  labels  (numbers)   on
                    statements  other  than  FORMAT statements.  (Since FORMAT
                    statements are arguably convenient and not readily abused,
                    complaints  about  them  are  controlled  by  the separate
                    format-stmt keyword.)

              program-stmt:
                    Complain about the absence of a PROGRAM statement  at  the
                    head of the main program.

              structured-end:
                    Complain  about  the use of a plain END statement to end a
                    subprogram, rather than a structured  END  statement  (END
                    PROGRAM, END SUBROUTINE, END FUNCTION, or END BLOCK DATA).

              See also: -f77, -f90, -f95, -pretty, -portability.

       -symtab
              A symbol table will be printed out for each module, listing  all
              identifiers  mentioned in the module.  This table gives the name
              of each variable, its datatype, and the number of dimensions for
              arrays.   An  asterisk  (*) indicates that the variable has been
              implicitly typed, rather than being named in  an  explicit  type
              declaration  statement.   The  table  also lists all subprograms
              invoked by the module, all COMMON blocks declared, etc.  Default
              = no.

              Also, for each module, a label table will be printed.  The table
              lists each label defined in the module; the line on  which  said
              statement  label is defined; and the statement type (executable,
              format, or specification).  The labels are listed in  sequential
              order.

              Also  printed  is  a  table describing the I/O units used by the
              module, together with information about how they are used:  what
              operations  are  performed,  whether the access is sequential or
              direct, and whether the I/O is formatted or unformatted.

              See also: -calltree, -crossref, -list, -reference, -sort,  -vcg.

       -truncation=list
              Warn  about  possible  truncation (or roundoff) errors.  Most of
              these are  related  to  integer  arithmetic.   By  default,  all
              warnings are turned on.

              This  setting  provides detailed control over the warnings about
              possible truncation  errors.   The  list  consists  of  keywords
              separated  by  commas  or  colons.  Since all warnings are on by
              default, include a  keyword  prefixed  by  no-  to  turn  off  a
              particular  warning.   There  are three special keywords: all to
              turn on all the warnings about truncation, none to turn them all
              off, and help to print the list of all the keywords with a brief
              explanation  of  each.   If  list  is  omitted,  -truncation  is
              equivalent  to  -truncation=all, and -notruncation is equivalent
              to -truncation=none.  The warning keywords with  their  meanings
              are as follows:

              int-div-exponent:
                    use  of  the  result  of  integer division as an exponent.
                    This suggests  that  a  real  quotient  is  intended.   An
                    example  would  be  writing  X**(1/3) to evaluate the cube
                    root of X. The correct expression is X**(1./3.).

              int-div-real:
                    Conversion of an expression involving an integer  division
                    to  real.  This suggests that a real quotient is intended.

              int-div-zero:
                    division in an integer constant expression that  yields  a
                    result of zero.

              int-neg-power:
                    exponentiation  of an integer by a negative integer (which
                    yields zero unless the base integer is  1  in  magnitude).
                    This suggests that a real base is intended.

              promotion:
                    automatic  conversion of a lower precision quantity to one
                    of higher  precision.   The  loss  of  accuracy  for  real
                    variables   in   this   process   is   comparable  to  the
                    corresponding demotion.  No warning is given for promotion
                    of  integer  quantities  to  real since this is ordinarily
                    exact.

              real-do-index:
                    use of a non-integer DO  index  in  a  loop  with  integer
                    bounds.   An  integer  DO index with real bounds is always
                    warned about regardless of this setting.

              real-subscript:
                    use of a non-integer array subscript.

              significant-figures:
                    overspecifying a  single  precision  constant.   This  may
                    indicate that a double precision constant was intended.

              size-demotion:
                    automatic conversion of a higher precision quantity to one
                    of lower precision of the same type.   This  warning  only
                    occurs when an explicit size is used in declaring the type
                    of one or both operands in an assignment.  For example,  a
                    warning  wil be issued where a REAL*8 variable is assigned
                    to a REAL variable, if the default wordsize  of  4  is  in
                    effect.   A  warning  is  also issued if a long integer is
                    assigned to a shorter one,  for  example,  if  an  INTEGER
                    expression is assigned to an INTEGER*2 variable.  There is
                    one exception to this last case, namely if the right  hand
                    side  of  the assignment is a small literal constant (less
                    than  128).   type-demotion:  automatic  conversion  of  a
                    higher  precision  quantity  to  one of lower precision of
                    different type.  This warning includes conversion of  real
                    quantities   to   integer,   double  precision  to  single
                    precision real,  and  assignment  of  a  longer  character
                    string to a shorter one.

              The  warnings about promotion and demotion also apply to complex
              constants, considering the precision to be that of the  real  or
              imaginary  part.   Warnings  about  promotions and demotions are
              given only when the conversion is done  automatically,  e.g.  in
              expressions  of  mixed  precision or in an assignment statement.
              If intrinsic functions such as  INT  are  used  to  perform  the
              conversion, no warning is given.

              See also: -portability, -wordsize.

       -usage=list
              Warn  about  unused  or possible uninitialized variables, unused
              common blocks, undefined or unused statement labels, and  unused
              or  undefined  subprograms.  By default, all warnings are turned
              on.

              This setting provides detailed control over the  warnings  about
              possible  usage errors.  The list consists of keywords separated
              by commas or colons.  Since all  warnings  are  on  by  default,
              include  a  keyword  prefixed  by  no-  to turn off a particular
              warning.  There are three special keywords: all to turn  on  all
              the warnings about usage, none to turn them all off, and help to
              print the list of all the keywords with a brief  explanation  of
              each.   If  list is omitted, -usage is equivalent to -usage=all,
              and -nousage is equivalent to -usage=none.  These warnings cover
              four  main  categories  of  objects: subprogram dummy arguments,
              common blocks and  variables,  subprograms  and  functions,  and
              local  variables.   Warnings  include  undefined items, multiply
              defined items, unused items, etc.   The  warning  keywords  with
              their meanings are as follows:

              arg-alias:
                    a  scalar  dummy  argument is actually the same as another
                    and is (or may be)  modified.   The  Fortran  77  standard
                    (section 15.9.3.6) prohibits modifying an argument that is
                    aliased to another.

              arg-array-alias:
                    a dummy argument which is an array or array element is  in
                    the  same  array as another and is modified.  This flag is
                    similar to arg-alias but provides  separate  control  over
                    array  arguments.   It  is  harder  to tell if aliasing is
                    occurring in the case of arrays, so if ftnchek  gives  too
                    many  false  warnings,  this flag allows the array-related
                    ones to be turned off without suppressing the warnings for
                    scalars.

              arg-common-alias:
                    a  scalar  dummy argument is the same as a common variable
                    in the subprogram, and either is modified.  This  is  also
                    prohibited by the Fortran 77 standard.  If common checking
                    is not exact (see the -common setting), it  is  harder  to
                    tell  if aliasing is occurring, so the warning is given if
                    the variable  is  anywhere  in  a  common  block  that  is
                    declared by the subprogram.

              arg-common-array-alias:
                    a  dummy argument which is an array or array element is in
                    the same  array  as  a  common  variable,  and  either  is
                    modified.   If  common checking is not exact, the variable
                    can be anywhere in a common block that is declared by  the
                    subprogram.

              arg-const-modified:
                    a  subprogram  modifies an argument which is a constant or
                    an expression.   Such  an  action  could  cause  anomalous
                    behavior of the program.

              arg-unused:
                    a  dummy  argument  is  declared  but never used.  This is
                    similar to the var-unused  keyword  described  below,  but
                    applies only to arguments.

              com-block-unused:
                    a common block is declared but none of the variables in it
                    are used by any subprogram.  This warning is suppressed if
                    the common strictness setting is 0.

              com-block-volatile:
                    a  common block may lose the definition of its contents if
                    common blocks are  volatile.   This  option  only  has  an
                    effect if the -common=volatile flag is in effect.  See the
                    discussion of the -common setting above.

              com-var-set-unused:
                    a common variable is assigned a value, but  its  value  is
                    not used by any subprogram.  This warning is suppressed if
                    the common strictness setting is 0.

              com-var-uninitialized:
                    a common variable’s value is used in some subprogram,  but
                    is not set anywhere.  Unfortunately, ftnchek does not do a
                    thorough enough analysis of the calling sequence  to  know
                    which  routines  are  called  before  others.  So warnings
                    about this type of error will only be given for  cases  in
                    which  a  variable  is used in some routine but not set in
                    any  other  routine.    Checking  of   individual   COMMON
                    variables  is  done  only  if  the  -common  setting  is 3
                    (variable  by  variable  agreement).   This   warning   is
                    suppressed if the common strictness setting is 0.

              com-var-unused:
                    a  common  variable  is  declared  but  not  used  by  any
                    subprogram.  This warning  is  suppressed  if  the  common
                    strictness setting is 0.

              do-index-modified:
                    a  variable  that is the index of a DO loop is modified by
                    some statement within the range of the loop.  The Standard
                    permits  an  active DO variable to be modified only by the
                    incrementation mechanism of the DO statement.

              ext-multiply-defined:
                    an external (a subroutine or  function)  is  defined  more
                    than  once.  Definition of an external means providing the
                    body of its source code.

              ext-declared-only:
                    a name is  declared  in  an  EXTERNAL  statement  in  some
                    module, but is not defined or used anywhere.

              ext-undefined:
                    an  external  is  used (invoked) but not defined anywhere.
                    This option is equivalent to the -external flag.   If  the
                    subprogram  is  invoked  more than once, those invocations
                    will still be checked for consistency.

              ext-unused:
                    an external is defined (its subprogram  body  is  present)
                    but  it  is  not  used.  A subprogram is considered unused
                    even if it is invoked by  some  other  subprogram,  if  it
                    cannot  be  called  from  any thread of execution starting
                    with the main program.  The agreement of the  subprogram’s
                    arguments  with  its  invocations is still checked even if
                    this warning is turned off.  If there is no main  program,
                    then  this warning is issued only if the subprogram is not
                    invoked anywhere.  This warning is suppressed  in  library
                    mode,  but  library  mode  has  the  additional  effect of
                    suppressing argument checking for unused routines.

              label-undefined:
                    a statement refers to a label that has not been defined.

              label-unused:
                    a statement label is defined, but never referred to.

              var-set-unused:
                    a local variable is assigned a value, but  that  value  is
                    not used.

              var-uninitialized:
                    a  local  variable’s  value  may  be  used  before  it  is
                    assigned.   Sometimes  ftnchek  makes  a  mistake  in  the
                    warnings  about  local variable usage.  Usually it errs on
                    the side of giving a warning where no problem exists,  but
                    in  rare  cases it may fail to warn where the problem does
                    exist.   See  the  section  on  Bugs  for  examples.    If
                    variables  are  equivalenced,  the rule used by ftnchek is
                    that  a  reference  to  any  variable  implies  the   same
                    reference  to  all  variables  it is equivalenced to.  For
                    arrays, the rule is that a reference to any array  element
                    is treated as a reference to all elements of the array.

              var-unused:
                    a  local  variable  is  declared  (for instance, in a type
                    declaration) but is not used  in  the  module.   Does  not
                    apply   to   dummy  arguments:  warnings  about  them  are
                    controlled by the keyword arg-unused described above.

              Note: In versions of ftnchek prior to 2.10, the -usage flag took
              a  numeric  argument instead of a list of options.  For the sake
              of users who may have written scripts invoking ftnchek  in  this
              way, the numeric form is still accepted.  The numeric setting is
              composed of three digits.   The  first  digit  (hundreds  place)
              controls warnings about subprograms (functions and subroutines),
              the second digit (tens place) warnings about common  blocks  and
              common  variables,,  and  the  third digit (ones place) warnings
              about local variables.  Each digit controls  warnings  according
              to  the convention that a 1 means warn about undefined items and
              variables that are used before set, a 2 means warn  about  items
              that  are  unused,  and  a 3 means warn about both types.  These
              numbers are now converted to  the  appropriate  values  for  the
              above-listed  keywords,  except for com-block-volatile, which is
              not affected by the numeric argument.

              See also: -common, -declare, -extern, -library.

       -vcg
              Produce the call graph in the form of a VCG  graph  description.
              This  description  is  written to a separate file, with the same
              stem as the file containing the main program, and  suffix  .vcg.
              This  file is able to be given directly to xvcg(1L) to visualize
              the call graph.  (If input is from the standard input, then  the
              graph  description  is sent to standard output.)  This switch is
              equivalent to -calltree=vcg.  Default = no.

              The VCG description as created is more complex than it need  be.
              VCG  allows  graphs  and  nested  subgraphs:  each subroutine is
              created as a subgraph nested inside its calling routines.   This
              allows you to interactively display subgraphs or summarise them.

              The -vcg option for ftnchek was written by Dr. Philip Rubini  of
              Cranfield University, UK.

              xvcg  is  a  graph  visualisation  tool  which  runs under the X
              windows system.  It is freely available  from  ftp.cs.uni-sb.de.
              It  was  written  by  G.  Sander  of the University of Saarland,
              Germany.

              See also: -calltree, -crossref, -reference, -sort.

       -version
              This option causes ftnchek to print a line  giving  the  version
              number,  release  date,  and  patch level of the program.  If no
              files are given, it then exits.  If files are given, the  effect
              of  this option is to include the patch level (normally omitted)
              in the version information printed at the start  of  processing.
              Default = no.

              See also: -help.

       -volatile
              Assume that COMMON blocks are volatile.  Default = no.

              This  flag  is  superseded  by  -common=volatile,  and should no
              longer be used.  It may be eliminated in  a  future  release  of
              ftnchek.

              See also: -common, -usage.

       -wordsize=num
              Specifies  the  default  word size to be num bytes.  This is the
              size of logical and single-precision numeric variables that  are
              not  given  explicit  precisions.  (Explicit precisions for non-
              character variables are an extension to the Fortran 77 Standard,
              and  are  given by type declarations such as REAL*8 X.)  Double-
              precision and complex variables will be twice  this  value,  and
              double  complex  variables four times.  Quad-precision constants
              and intrinsic function results will be four  times  this  value.
              Note that variables declared as REAL*16 will be regarded as quad
              precision only if the word size is 4 bytes.  Default = turn-on =
              4 bytes.

              The  word  size  value  does  not  matter for checking standard-
              conforming programs that do not declare explicit precisions  for
              non-character  variables  or  store Hollerith data in variables.
              This setting also does not affect the default size of  character
              variables, which is always 1 byte.  Hollerith constants also are
              assumed to occupy 1 byte per character.

              The word size is used to determine whether truncation occurs  in
              assignment  statements,  and  to  catch  precision mismatches in
              subprogram argument lists and common  block  lists.   The  exact
              warnings  that  are  issued  will  depend on the status of other
              flags.   Under  both   the   -portability=mixed-size   and   the
              -nowordsize  flag, any mixing of explicit with default precision
              objects (character expressions not included)  is  warned  about.
              This  applies to arithmetic expressions containing both types of
              objects, and  to  subprogram  arguments  and  COMMON  variables.
              Under control of the -truncation=demotion and promotion options,
              a warning is given for assignment of an expression to a  shorter
              variable of the same type, or for promotion of a lower precision
              value to higher precision in  an  arithmetic  expression  or  an
              assignment statement.

              Giving  a  word  size  of  0, or equivalently, using -nowordsize
              means that no default value will be assumed.  This is equivalent
              to  specifying -portability=mixed-size.  Use it to find cases of
              mixing default and  explicit  precision,  for  example  to  flag
              places   where   REAL*8  is  treated  as  equivalent  to  DOUBLE
              PRECISION.

              See also: -pointersize, -portability, -truncation.

       -wrap=col
              Controls the wrapping of error messages.   Long  error  messages
              that  would run past the specified column will be broken up into
              separate lines between the  words  of  the  message  for  better
              readability.   If  turned  off with -nowrap, each separate error
              message will be printed on  one  line,  leaving  it  up  to  the
              display to wrap the message or truncate it.  Default = turn-on =
              79.

CHANGING THE DEFAULTS

       ftnchek includes two mechanisms for changing the default values of  all
       options: by defining environment variables or by creating a preferences
       file.  When ftnchek starts up, it looks  in  its  environment  for  any
       variables  whose  names  are  composed by prefixing the string FTNCHEK_
       onto the uppercased version of the option name.  If such a variable  is
       found,  its  value is used to specify the default for the corresponding
       switch or setting.  In the case of settings (for example,  the  -common
       strictness  setting)  the  value of the environment variable is read as
       the default setting value.  In the case of switches, the default switch
       will  be  taken  as true or yes unless the environment variable has the
       value 0 or NO.

       Note that the environment variable name must be  constructed  with  the
       full-length  option  name, which must be in uppercase.  For example, to
       make ftnchek print a source listing by  default,  set  the  environment
       variable  FTNCHEK_LIST to 1 or YES or anything other than 0 or NO.  The
       names FTNCHEK_LIS (not the full option  name)  or  ftnchek_list  (lower
       case) would not be recognized.

       Here  are  some examples of how to set environment variables on various
       systems.  For simplicity, all the examples set the default -list switch
       to YES.

       1. UNIX, Bourne shell:        $ FTNCHEK_LIST=YES
                                     $ export FTNCHEK_LIST

       2. UNIX, C shell:             % setenv FTNCHEK_LIST YES

       3. VAX/VMS:                   $ DEFINE FTNCHEK_LIST YES

       4. MSDOS:                     $ SET FTNCHEK_LIST=YES

       After  processing  any  environment  variables,  ftnchek  looks  for  a
       preferences file containing options and settings.  It  will  search  in
       the following order, using only the first file found: (1) .ftnchekrc in
       the current directory, (2) ftnchek.ini in the  current  directory,  (3)
       .ftnchekrc  in  the  user’s home directory, (4) ftnchek.ini in the home
       directory.  If such a file is found, the options defined in it are used
       as  defaults  in  place  of  the  built-in  defaults and overriding any
       defaults set in the environment..

       Each option or setting in the preferences file must be  on  a  separate
       line.   They  are given in the same form as on the command line, except
       without the initial dash.  The preferences file can contain blank lines
       and  comments.   Comments  are  introduced  at any point in a line by a
       space character (blank or tab) or the ’#’ character, and are terminated
       by the end of the line.

       Command-line options override the defaults set in the environment or in
       the preferences file, in  the same way as they  override  the  built-in
       defaults.

USING PROJECT FILES

       This  section contains detailed information on how to use project files
       most effectively, and how to avoid some pitfalls.

       One can divide the checks ftnchek does into two categories,  local  and
       global.   Local  checking is restricted to within a single routine, and
       catches  things  like  uninitialized  variables,  unintended  loss   of
       precision in arithmetic expressions, etc.  This sort of checking can be
       done on each subprogram independently.  Furthermore, local checking  of
       a subprogram does not need to be repeated when some other subprogram is
       changed.  Global checking catches things like calling a subroutine with
       the  wrong argument types, or disagreeing in common block declarations.
       It requires looking at the whole set of  subprograms  interacting  with
       each other.

       The  purpose of project files is to allow the local checking and global
       checking steps to be separated.  Assuming that each  subprogram  is  in
       its  own  source file, you can run ftnchek once on each one to do local
       checking while suppressing global checking.  Then ftnchek  can  be  run
       once  on all the project files together to do the global checking.  The
       sample makefile below shows how to automate this task.  The  ‘‘.f.prj’’
       target updates a project file for a particular file any time the source
       file changes.  The information needed for global checking is  saved  in
       the  project  file.   The  ‘‘check’’  target  does  the combined global
       checking.   Typically  ‘‘make  check’’  would  repeat   the   ‘‘ftnchek
       -project’’ step only on changed source files, then do the global check.
       This is obviously  a  big  advantage  for  large  programs,  when  many
       subprograms seldom if ever change.

       It  is  best  when  using  project  files to place each subprogram in a
       separate source file.  If each source file may contain  more  than  one
       subprogram,   it complicates the definition of ‘‘local’’ and ‘‘global’’
       checking because there is some inter-module checking that is  contained
       within  a  file.  ftnchek tries to do the right thing in this case, but
       there are some complications (described below)  due  to  the  trade-off
       between avoiding re-doing cross-checks and preserving information about
       the program’s structure.

       Ordinarily, to do the least amount of re-checking, project files should
       be created with the -library flag in effect and trimming turned on.  In
       this mode, the information saved in the project file  consists  of  all
       subprogram  declarations,  all  subprogram  invocations not resolved by
       declarations in the same file, and one instance of  each  COMMON  block
       declaration.  This is the minimum amount of information needed to check
       agreement between files.

       If the source file contains more  than  one  routine,  there  are  some
       possible  problems  that  can  arise  from creating the project file in
       library mode, because the  calling  hierarchy  among  routines  defined
       within the file is lost.  Also, if the routines in the file make use of
       COMMON blocks that are shared with routines in other files, there  will
       not  be  enough  information  saved for the correct checking of set and
       used status of COMMON blocks and  COMMON  variables  according  to  the
       -usage setting.  Therefore if you plan to use project files when -usage
       checking is turned on (which is the default situation), and if multiple
       routines in one project file share COMMON blocks with routines in other
       files, the project files should  be  created  with  the  -library  flag
       turned  off.   In  this  mode,  ftnchek  saves, besides the information
       listed above, one invocation of each subprogram by any other subprogram
       in  the  same file, and all COMMON block declarations.  This means that
       the project file will be larger than necessary, and  that  when  it  is
       read  in,  ftnchek  may repeat some inter-module checks that it already
       did when the project file was created.  If each project  file  contains
       only  one  module,  there  is  no  loss  of information in creating the
       project files in library mode.

       Because of the possible loss of  information  entailed  by  creating  a
       project  file  with  the -library flag in effect, whenever that project
       file is read in later, it will be treated as a library file  regardless
       of  the  current  setting  of  the -library flag.  On the other hand, a
       project file created with library mode turned off can be read in  later
       in either mode.

       The  foregoing  discussion  assumes  that  the  trimming options of the
       -project setting are turned on when the project file is created.   This
       is  the  normal situation.  The no-trim options of the -project setting
       are provided in case one wants to use the project  files  for  purposes
       other  than checking the program with ftnchek.  For instance, one could
       write a Perl script to analyze the project files for information  about
       how  the  different  subprograms  are  called.   You should not use the
       no-trim options to deal with the issues of information  loss  discussed
       above,  since  they cause more information than necessary to be stored.
       This makes the project files bigger and causes ftnchek to do more  work
       later  when  it reads them to check your complete program.  Ordinarily,
       you should use the -library option to control how much  information  to
       store for later use by ftnchek in checking your program.

       Here is an example of how to use the UNIX make utility to automatically
       create a new project file each time the corresponding  source  file  is
       altered,  and  to  check  the  set of files for consistency.  Add these
       lines to your makefile.  The example assumes that a macro OBJS has been
       defined which lists all the names of object files to be linked together
       to form the  complete  executable  program.   (In  this  makefile,  the
       indented  lines  should  each  begin  with  a tab, not blanks.)  If any
       source file contains multiple routines that share common  blocks  among
       themselves,  then the no-com-\* option should be removed from NOGLOBAL,
       and/or drop the -library flag.

           # tell make what a project file suffix is
           .SUFFIXES: .prj

           # these options suppress global checks.
           NOGLOBAL=-usage=no-ext-undefined,no-com-\*

           # tell make how to create a .prj file from a .f file
           .f.prj:
                   ftnchek -project $(NOGLOBAL) -library $<

           # set up macro PRJS containing project filenames
           PRJS= $(OBJS:.o=.prj)

           # "make check" will check everything that has been changed.
           check: $(PRJS)
                   ftnchek $(PRJS)

       When a program  uses  many  routines  defined  in  a  large  number  of
       different  source  files in different directories, it can be cumbersome
       to specify all the different project files needed to check the  program
       properly.   To deal with such cases, ftnchek allows project files to be
       concatenated into a single large file.  This single file  can  then  be
       given to ftnchek to provide the information for checking the use of any
       or all of the routines defined in the  combined  project  files.   When
       using  such  a  ‘‘library’’  project file, you may want ftnchek’s error
       reports to document precisely the name of the file where  the  specific
       function  is  defined.   If  the  various  source  files are in several
       directories, an error report that gives  only  the  file  name  may  be
       ambiguous,  and  rather  should  include  the  path  to  the file.  The
       solution is to create each of the individual project  files  by  giving
       the  complete  path  to  the source file.  Then this complete path will
       appear in the error reports.  For example,  suppose  that  all  of  the
       library  subprogram  source  files are in subdirectories of a directory
       named /util/lib.  Then the individual  project  files  could  first  be
       created by a command such as

       find /util/lib -name ’*.f’ -exec ftnchek -project ’{}’ ’;’
       (Possibly  other  options  would  be  provided  to ftnchek as discussed
       above.  Also, this step could be handled instead by a revised  makefile
       rule  that  would provide the complete source file path instead of just
       the local name when invoking ftnchek.)  Next, concatenate all of  these
       project files manually.

       find /util/lib -name ’*.prj’ -exec cat ’{}’ ’;’ > ourlib.prj
       Then a program source file can be checked by using the command

       ftnchek prog.f ... -lib ourlib.prj
       and  an  error  message related to any library routine will include the
       full path to the routine’s source file.

       At present, there is no archive utility like ar to manage the  contents
       of  a concatenated project file like the one in the illustration above.
       If changes are made to one of the library routines,  the  only  way  to
       update  the  combined project file is to concatenate all the individual
       project files once again.  Such a utility would be quite easy to write.
       Someone should do so and contribute it to the ftnchek effort.

AN EXAMPLE

       The  following simple Fortran program illustrates the messages given by
       ftnchek.  The program is intended to accept an array of test scores and
       then compute the average for the series.

       C       AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO
       C       DATE:    MAY 8, 1989

       C       Variables:
       C               SCORE -> an array of test scores
       C               SUM ->   sum of the test scores
       C               COUNT -> counter of scores read in
       C               I ->     loop counter

               REAL FUNCTION COMPAV(SCORE,COUNT)
                   INTEGER SUM,COUNT,J,SCORE(5)

                   DO 30 I = 1,COUNT
                       SUM = SUM + SCORE(I)
       30          CONTINUE
                   COMPAV = SUM/COUNT
               END

               PROGRAM AVENUM
       C
       C                       MAIN PROGRAM
       C
       C       AUTHOR:   LOIS BIGBIE
       C       DATE:     MAY 15, 1990
       C
       C       Variables:
       C               MAXNOS -> maximum number of input values
       C               NUMS    -> an array of numbers
       C               COUNT   -> exact number of input values
       C               AVG     -> average returned by COMPAV
       C               I       -> loop counter
       C

                   PARAMETER(MAXNOS=5)
                   INTEGER I, COUNT
                   REAL NUMS(MAXNOS), AVG
                   COUNT = 0
                   DO 80 I = 1,MAXNOS
                       READ (5,*,END=100) NUMS(I)
                       COUNT = COUNT + 1
       80          CONTINUE
       100         AVG = COMPAV(NUMS, COUNT)
               END

       The  compiler  gives  no  error messages when this program is compiled.
       Yet here is what happens when it is run:

       $ run average
       70
       90
       85
       <EOF>
       $

       What happened?  Why didn’t the program do anything?  The  following  is
       the output from ftnchek when it is used to debug the above program:

       $ ftnchek -list -symtab average

       FTNCHEK Version 3.3 November 2004

       File average.f:

             1 C       AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO
             2 C       DATE:    MAY 8, 1989
             3
             4 C       Variables:
             5 C               SCORE -> an array of test scores
             6 C               SUM ->   sum of the test scores
             7 C               COUNT -> counter of scores read in
             8 C               I ->     loop counter
             9
            10         REAL FUNCTION COMPAV(SCORE,COUNT)
            11             INTEGER SUM,COUNT,J,SCORE(5)
            12
            13             DO 30 I = 1,COUNT
            14                 SUM = SUM + SCORE(I)
            15 30          CONTINUE
            16             COMPAV = SUM/COUNT
                                  ^
       Warning near line 16 col 20: integer quotient expr SUM/COUNT  converted to
        real
            17         END

       Module COMPAV: func: real

       Variables:

             Name Type Dims     Name Type Dims     Name Type Dims     Name Type Dims
           COMPAV real         COUNT intg             I intg*            J intg
            SCORE intg  1        SUM intg

       * Variable not declared. Type has been implicitly defined.

       Warning in module COMPAV: Variables declared but never referenced:
           J declared at line 11

       Warning in module COMPAV: Variables may be used before set:
           SUM used at line 14
           SUM set at line 14

       Statement labels defined:

           Label   Line  StmtType
            <30>     15      exec

            18
            19
            20         PROGRAM AVENUM
            21 C
            22 C                       MAIN PROGRAM
            23 C
            24 C       AUTHOR:   LOIS BIGBIE
            25 C       DATE:     MAY 15, 1990
            26 C
            27 C       Variables:
            28 C               MAXNOS -> maximum number of input values
            29 C               NUMS    -> an array of numbers
            30 C               COUNT   -> exact number of input values
            31 C               AVG     -> average returned by COMPAV
            32 C               I       -> loop counter
            33 C
            34
            35             PARAMETER(MAXNOS=5)
            36             INTEGER I, COUNT
            37             REAL NUMS(MAXNOS), AVG
            38             COUNT = 0
            39             DO 80 I = 1,MAXNOS
            40                 READ (5,*,END=100) NUMS(I)
            41                 COUNT = COUNT + 1
            42 80          CONTINUE
            43 100         AVG = COMPAV(NUMS, COUNT)
            44         END

       Module AVENUM: prog

       External subprograms referenced:

           COMPAV: real*

       Variables:

             Name Type Dims     Name Type Dims     Name Type Dims     Name Type Dims
              AVG real         COUNT intg             I intg        MAXNOS intg*
             NUMS real  1

       * Variable not declared. Type has been implicitly defined.

       Warning in module AVENUM: Variables set but never used:
           AVG set at line 43

       I/O Operations:

            Unit ID Unit No. Access Form Operation   Line
                    5          SEQ  FMTD READ         40

       Statement labels defined:

           Label   Line  StmtType    Label   Line  StmtType
            <80>     42      exec    <100>     43      exec

        0 syntax errors detected in file average.f
        6 warnings issued in file average.f

       Warning: Subprogram COMPAV argument data type mismatch at position 1:
           Dummy arg SCORE in module COMPAV line 10 file average.f is type intg
           Actual arg NUMS in module AVENUM line 43 file average.f is type real

       According  to ftnchek, the program contains variables which may be used
       before they are assigned an initial value, and variables which are  not
       needed.   ftnchek also warns the user that an integer quotient has been
       converted to a real. This may assist the user in catching an unintended
       roundoff error.  Since the -symtab flag was given, ftnchek prints out a
       table  containing  identifiers  from  the  local   module   and   their
       corresponding  datatype  and  number  of  dimensions.  Finally, ftnchek
       warns that the function COMPAV is not used  with  the  proper  type  of
       arguments.

       With  ftnchek’s  help, we can debug the program.  We can see that there
       were the following errors:

       1.  SUM and COUNT should have been converted to real before  doing  the
           division.

       2.  SUM should have been initialized to 0 before entering the loop.

       3.  AVG was never printed out after being calculated.

       4.  NUMS should have been declared INTEGER instead of REAL.

       We  also  see  that  I,  not  J,  should  have been declared INTEGER in
       function COMPAV. Also, MAXNOS was not declared as INTEGER,  nor  COMPAV
       as  REAL,  in  program  AVENUM.   These  are  not  errors, but they may
       indicate carelessness.  As it  happened,  the  default  type  of  these
       variables coincided with the intended type.

       Here is the corrected program, and its output when run:

       C       AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO
       C       DATE:    MAY 8, 1989
       C
       C       Variables:
       C               SCORE -> an array of test scores
       C               SUM ->   sum of the test scores
       C               COUNT -> counter of scores read in
       C               I ->     loop counter
       C
              REAL FUNCTION COMPAV(SCORE,COUNT)
                   INTEGER SUM,COUNT,I,SCORE(5)
       C
                   SUM = 0
                   DO 30 I = 1,COUNT
                       SUM = SUM + SCORE(I)
       30          CONTINUE
                   COMPAV = FLOAT(SUM)/FLOAT(COUNT)
               END
       C
       C
               PROGRAM AVENUM
       C
       C                       MAIN PROGRAM
       C
       C       AUTHOR:   LOIS BIGBIE
       C       DATE:     MAY 15, 1990
       C
       C       Variables:
       C               MAXNOS -> maximum number of input values
       C               NUMS    -> an array of numbers
       C               COUNT   -> exact number of input values
       C               AVG     -> average returned by COMPAV
       C               I       -> loop counter
       C
       C
                   INTEGER MAXNOS
                   PARAMETER(MAXNOS=5)
                   INTEGER I, NUMS(MAXNOS), COUNT
                   REAL AVG,COMPAV
                   COUNT = 0
                   DO 80 I = 1,MAXNOS
                       READ (5,*,END=100) NUMS(I)
                       COUNT = COUNT + 1
       80          CONTINUE
       100         AVG = COMPAV(NUMS, COUNT)
                   WRITE(6,*) ’AVERAGE =’,AVG
               END
       $ run average
       70
       90
       85
       <EOF>
       AVERAGE =   81.66666
       $

       With ftnchek’s help, our program is a success!

INTERPRETING THE OUTPUT

       The  messages  given by ftnchek include not only syntax errors but also
       warnings and informational messages about things that are legal Fortran
       but  that  may indicate errors or carelessness.  Most of these messages
       can be turned off by command-line options.  Which option controls  each
       message depends on the nature of the condition being warned about.  See
       the descriptions of the command-line flags in  the  previous  sections,
       and of individual messages below.  Each message is prefixed with a word
       or phrase indicating the nature of the condition and its severity.

       ‘‘Error’’ means a syntax error.  The simplest kind of syntax errors are
       typographical errors, for example unbalanced parentheses or misspelling
       of a keyword.  This type of error is caught by the parser  and  appears
       with  the description ‘‘parse error’’ or ‘‘syntax error’’ (depending on
       the version of the parser generator and whether it is GNU bison or UNIX
       yacc).  This type of error message cannot be suppressed.  Be aware that
       this  type  of  error  often  means  that  ftnchek  has  not   properly
       interpreted   the  statement  where  the  error  occurs,  so  that  its
       subsequent  checking  operations  will  be  compromised.   You   should
       eliminate  all  syntax  errors before proceeding to interpret the other
       messages ftnchek gives.

       ‘‘Warning: Nonstandard syntax’’ indicates an extension to Fortran  that
       ftnchek  supports but that is not according to the Fortran 77 Standard.
       The extensions that ftnchek accepts are described  in  the  section  on
       Extensions  below.  One example is the DO ... ENDDO construction.  If a
       program uses these extensions, warnings  will  be  given  according  to
       specifications under the -f77 setting.  The default behavior is to give
       no warnings.

       ‘‘Warning’’ in other cases means a condition  that  is  suspicious  but
       that  may  or  may  not  be  a  programming  error.   Frequently  these
       conditions are legal under the standard.  Some are illegal but  do  not
       fall under the heading of syntax errors.  Usage errors are one example.
       These refer to the possibility that a variable may be  used  before  it
       has  been  assigned a value (generally an error), or that a variable is
       declared but never used (harmless but may indicate carelessness).   The
       amount  of  checking for usage errors is controlled by the -usage flag,
       which specifies the maximum amount of checking by default.

       Truncation warnings cover situations in  which  accuracy  may  be  lost
       unintentionally,  for example when a double precision value is assigned
       to a real variable.  These warnings are controlled by  the  -truncation
       setting, which is on by default.

       ‘‘Nonportable usage’’ warns about some feature that may not be accepted
       by some compilers even though it is not  contrary  to  the  Fortran  77
       Standard,  or  that  may  cause  the  program to perform differently on
       different platforms.   For  example,  equivalencing  real  and  integer
       variables is usually a non-portable practice.  The use of extensions to
       the standard language is, of course, another source of non-portability,
       but  this  is  handled as a separate case.  To check a program for true
       portability, both the -portability and the -f77 flags should  be  used.
       They are both turned off by default.  The -wordsize setting is provided
       to check only those nonportable usages  that  depend  on  a  particular
       machine wordsize.

       ‘‘Possibly misleading appearance’’ is used for legal constructions that
       may not mean what they appear to mean at first  glance.   For  example,
       Fortran  is  insensitive  to  blank  space,  so extraneous space within
       variable names or the lack of space between a keyword  and  a  variable
       can  convey  the wrong impression to the reader.  These messages can be
       suppressed by turning off the -pretty flag, which is on by default.

       Other messages that are given after all the files  are  processed,  and
       having  to  do  with  agreement  between  modules,  do not use the word
       ‘‘warning’’ but generally fall into that  category.   Examples  include
       type  mismatches  between  corresponding  variables in different COMMON
       block  declarations,  or  between  dummy  and  actual  arguments  of  a
       subprogram.    These   warnings  are  controlled  by  the  -common  and
       -arguments settings respectively.  By default both are set for  maximum
       strictness of checking.

       Another  group  of  warnings  about  conditions that are often harmless
       refer to cases where the array properties of a  variable  passed  as  a
       subprogram  argument differ between the two routines.  For instance, an
       array element might be passed to a  subroutine  that  expects  a  whole
       array.  This is a commonly-used technique for processing single rows or
       columns of two-dimensional arrays.  However, it could also  indicate  a
       programming  error.   The  -array setting allows the user to adjust the
       degree of strictness to be used in  checking  this  kind  of  agreement
       between actual and dummy array arguments.  By default the strictness is
       maximum.

       ‘‘Oops’’ indicates a technical problem, meaning either a bug in ftnchek
       or that its resources have been exceeded.

       The  syntax error messages and warnings include the filename along with
       the line number and column number.  ftnchek has two  different  options
       for  the  appearance of these error messages.  If -novice is in effect,
       which is the default, the messages are in a style approximating  normal
       English.   (In  default  style, the filename is not printed in messages
       within the body of the program if -list is in effect.)  The other style
       of  error messages is selected by the -nonovice option.  In this style,
       the appearance of the messages is similar to  that  of  the  UNIX  lint
       program.

       ftnchek  is  still  blind to some kinds of syntax errors.  The two most
       important ones are detailed checking of FORMAT statements,  and  almost
       anything  to  do with control of execution flow by means of IF, DO, and
       GOTO statements: namely correct nesting of control structures, matching
       of  opening statements such as IF ... THEN with closing statements such
       as ENDIF, and the proper  use  of  statement  labels  (numbers).   Most
       compilers  will catch these errors.  See the section on Limitations for
       a more detailed discussion.

       If ftnchek gives you a syntax error message when the compiler does not,
       it  may  be  because  your  program  contains  an extension to standard
       Fortran which is accepted by the compiler but not by ftnchek.  (See the
       section  on Extensions.)  On a VAX/VMS system, you can use the compiler
       option /STANDARD to cause the compiler to accept only standard Fortran.
       On  most UNIX or UNIX-like systems, this can be accomplished by setting
       the flag -ansi.

       Many of the messages given by ftnchek are self-explanatory.  Those that
       need  some  additional  explanation  are  listed  below in alphabetical
       order.

       Common block NAME: data type mismatch at position n
              The n-th variable in the COMMON block differs in  data  type  in
              two  different  declarations  of  the  COMMON block.  By default
              (-common strictness level 3), ftnchek is very picky about COMMON
              blocks:  the variables listed in them must match exactly by data
              type  and  array  dimensions.   That  is,  the  legal  pair   of
              declarations in different modules:
                   COMMON /COM1/ A,B
              and
                   COMMON /COM1/ A(2)
              will  cause  ftnchek  to  give  warnings  at strictness level 3.
              These two declarations are legal  in  Fortran  since  they  both
              declare  two  real  variables.   At  strictness level 1 or 2, no
              warning would be given in this example, but the warning would be
              given  if  there  were  a data type mismatch, for instance, if B
              were declared INTEGER.  Controlled by -common setting.

       Common block NAME has long data type following short data type
              Some compilers require alignment of  multi-byte  items  so  that
              each  item  begins  at an address that is a multiple of the item
              size.  Thus if a short  (e.g.  single-precision  real)  item  is
              followed  by  a  long  (e.g.   double  precision real) item, the
              latter  may   not   be   aligned   correctly.    Controlled   by
              -portability=common-alignment option.

       Common block NAME has mixed character and non-character variables
              The  ANSI  standard  requires  that  if any variable in a COMMON
              block is of type CHARACTER, then all other variables in the same
              COMMON  block  must  also  be  of type CHARACTER.  Controlled by
              -f77=mixed-common option.

       Common block NAME: varying length
              For -common setting level 2, this message means  that  a  COMMON
              block  is  declared  to  have  different numbers of words in two
              different subprograms.  A word is the amount of storage occupied
              by  one  integer or real variable.  For -common setting level 3,
              it means that the two declarations  have  different  numbers  of
              variables,  where  an  array  of  any  size  is  considered  one
              variable.  This is not necessarily an error, but it may indicate
              that  a  variable  is  missing from one of the lists.  Note that
              according to the Fortran 77 Standard, it is an error  for  named
              COMMON  blocks  (but  not  blank  COMMON) to differ in number of
              words in declarations in different modules.  Given  for  -common
              setting 2 or 3.

       Error: Badly formed logical/relational operator or constant

       Error: Badly formed real constant
              The  syntax  analyzer  has found the start of one of the special
              words that begin and end with a period (e.g. .EQ.), or the start
              of a numeric constant, but did not succeed in finding a complete
              item of that kind.

       Error: cannot be adjustable size in module NAME
              A character variable cannot be declared with a size that  is  an
              asterisk  in  parentheses  unless  it  is  a  dummy  argument, a
              parameter, or the name of the function defined in the module.

       Error: cannot be declared in SAVE statement in module NAME
              Only local variables and common blocks can be declared in a SAVE
              statement.

       Error: No path to this statement
              ftnchek  will  detect  statements which are ignored or by-passed
              because there is no foreseeable route  to  the  statement.   For
              example,   an   unnumbered  statement  (a  statement  without  a
              statement label), occurring immediately after a GOTO  statement,
              cannot possibly be executed.

       Error: Parse error
              This  means  that the parser, which analyzes the Fortran program
              into expressions, statements, etc., has been unable  to  find  a
              valid  interpretation  for  some  portion  of a statement in the
              program.  If your compiler does not report a syntax error at the
              same  place,  the  most  common  explanations are: (1) use of an
              extension to ANSI standard Fortran that  is  not  recognized  by
              ftnchek,  or  (2)  the  statement  requires  more lookahead than
              ftnchek uses (see section on Bugs).

              NOTE: This message means that  the  affected  statement  is  not
              interpreted.    Therefore,   it   is   possible  that  ftnchek’s
              subsequent processing will be in error, if  it  depends  on  any
              matters affected by this statement (type declarations, etc.).

       Error: Syntax error
              This  is  the same as ‘‘Error: Parse error’’ (see above).  It is
              generated if your version of ftnchek was built  using  the  UNIX
              yacc parser generator rather than GNU bison.

       Identifiers which are not unique in first six chars
              Warns that two identifiers which are longer than 6 characters do
              not differ in the first 6 characters.  This is for  portability:
              they   may   not  be  considered  distinct  by  some  compilers.
              Controlled by -sixchar option.

       Nonportable usage: argument precision may not be correct for  intrinsic
       function
              The precision of an argument passed to an intrinsic function may
              be  incorrect on some computers.  Issued when a numeric variable
              declared with explicit precision (e.g.  REAL*8 X) is passed to a
              specific  intrinsic  function  (e.g.  DSQRT(X)).   Controlled by
              -portability=mixed-size and -wordsize.

       Nonportable usage: character constant/variable length exceeds 255
              Some compilers do not support character strings  more  than  255
              characters in length.  Controlled by -portability=long-string.

       Nonportable usage: File contains tabs
              ftnchek  expands  tabs to be equivalent to spaces up to the next
              column which is a multiple of  8.   Some  compilers  treat  tabs
              differently,  and  also  it  is  possible  that  files  sent  by
              electronic mail will have the tabs converted to blanks  in  some
              way.   Therefore  files  containing  tabs  may  not  be compiled
              correctly after being transferred.  ftnchek does not  give  this
              message   if  tabs  only  occur  within  comments  or  character
              constants.  Controlled by -portability=tab.

       Nonportable usage: non-integer DO loop bounds
              This warning is only given when the DO index and bounds are non-
              integer.   Use  of  non-integer quantities in a DO statement may
              cause unexpected  errors,  or  different  results  on  different
              machines,    due    to    roundoff   effects.    Controlled   by
              -portability=real-do.

       Possibly it is an array which was not declared
              This message is appended  to  warnings  related  to  a  function
              invocation  or  to  an  argument  type  mismatch,  for which the
              possibility exists  that  what  appears  to  be  a  function  is
              actually  meant  to  be  an  array.  If the programmer forgot to
              dimension an array, references to the array will be  interpreted
              as function invocations.  This message will be suppressed if the
              name in question appears in an EXTERNAL or INTRINSIC  statement.
              Controlled by the -novice option.

       Possibly misleading appearance: characters past 72 columns
              The program is being processed with the statement field width at
              its standard value of 72, and some nonblank characters have been
              found  past  column 72.  In this case, ftnchek is not processing
              the characters past column 72, and is notifying  the  user  that
              the  statement may not have the meaning that it appears to have.
              These characters might be  intended  by  the  programmer  to  be
              significant,   but   they  will  be  ignored  by  the  compiler.
              Controlled by -pretty=long-line.

       Possibly misleading appearance: Common block declared in more than  one
       statement
              Such multiple declarations are legal and have the same effect as
              a  continuation  of the original declaration of the block.  This
              warning is only given if the two declarations are  separated  by
              one    or    more   intervening   statements.    Controlled   by
              -pretty=multiple-common.

       Possibly misleading appearance: Continuation follows comment  or  blank
       line
              ftnchek issues this warning message to alert  the  user  that  a
              continuation  of  a  statement  is  interspersed  with comments,
              making it easy to overlook.  Controlled by -pretty=continuation.

       Possibly misleading appearance: Extraneous parentheses
              Warns  about  parentheses surrounding a variable by itself in an
              expression.  When a  parenthesized  variable  is  passed  as  an
              argument to a subprogram, it is treated as an expression, not as
              a variable whose value can be modified by  the  called  routine.
              Controlled by -pretty=parentheses.

       Subprogram NAME: argument data type mismatch at position n
              The  subprogram’s n-th actual argument (in the CALL or the usage
              of a function) differs in datatype or precision  from  the  n-th
              dummy argument (in the SUBROUTINE or FUNCTION declaration).  For
              instance, if the user defines a subprogram by
                   SUBROUTINE SUBA(X)
                   REAL X
              and elsewhere invokes SUBA by
                   CALL SUBA(2)
              ftnchek will detect the error.  The  reason  here  is  that  the
              number 2 is integer, not real.  The user should have written
                   CALL SUBA(2.0)

              When checking an argument which is a subprogram, ftnchek must be
              able to determine whether it is a function or a subroutine.  The
              rules  used  by  ftnchek  to  do  this  are  as  follows: If the
              subprogram, besides being passed as an actual argument, is  also
              invoked  directly elsewhere in the same module, then its type is
              determined by that usage.  If not,  then  if  the  name  of  the
              subprogram  does  not appear in an explicit type declaration, it
              is assumed to be a subroutine; if it is explicitly typed  it  is
              taken  as  a  function.  Therefore, subroutines passed as actual
              arguments need only be declared by an EXTERNAL statement in  the
              calling  module, whereas functions must also be explicitly typed
              in order to avoid generating this error message.  Controlled  by
              -arguments setting.

       Subprogram NAME: argument arrayness mismatch at position n
              Similar  to  the  preceding  situation, but the subprogram dummy
              argument differs from the corresponding actual argument  in  its
              number  of  dimensions  or  number  of  elements.  Controlled by
              -array together with -arguments settings.

       Subprogram NAME: argument mismatch at position n
              A character dummy argument  is  larger  than  the  corresponding
              actual  argument,  or  a Hollerith dummy argument is larger than
              the corresponding actual  argument.   Controlled  by  -arguments
              setting.

       Subprogram NAME: argument usage mismatch
              ftnchek detects a possible conflict between the way a subprogram
              uses an argument and the way in which the argument  is  supplied
              to  the  subprogram.   The  conflict can be one of two types, as
              outlined below.

          Dummy arg is modified, Actual arg is const or expr
              A dummy argument is an argument as  named  in  a  SUBROUTINE  or
              FUNCTION  statement  and  used within the subprogram.  An actual
              argument is an argument as passed to a subroutine or function by
              the caller.  ftnchek is saying that a dummy argument is modified
              by the subprogram, implying that its value  is  changed  in  the
              calling module.  The corresponding actual argument should not be
              a constant or expression, but rather a variable or array element
              which  can  be  legitimately  assigned  to.   Controlled  by the
              -usage=arg-const-modified option.

          Dummy arg used before set, Actual arg not set
              Here a dummy argument may  be  used  in  the  subprogram  before
              having   a   value  assigned  to  it  by  the  subprogram.   The
              corresponding actual argument should have a value assigned to it
              by  the  caller prior to invoking the subprogram.  Controlled by
              the -usage=var-uninitialized option.

              This warning is not affected by the -arguments setting.

       Subprogram NAME invoked inconsistently
              Here the mismatch is between  the  datatype  of  the  subprogram
              itself  as  used  and  as  defined.  For  instance,  if the user
              declares
                   INTEGER FUNCTION COUNT(A)
              and invokes COUNT in another module as
                   N = COUNT(A)
              without declaring its datatype, it will default  to  real  type,
              based  on  the  first  letter  of  its name.  The calling module
              should have included the declaration
                   INTEGER COUNT

              Given for -arguments setting 2 or 3.

       Subprogram NAME:  varying length argument lists:
              An inconsistency has been found  between  the  number  of  dummy
              arguments (parameters) a subprogram has and the number of actual
              arguments given it in an invocation.  ftnchek keeps track of all
              invocations  of  subprograms  (CALL  statements  and expressions
              using functions) and compares them with the definitions  of  the
              subprograms  elsewhere in the source code.  The Fortran compiler
              normally  does  not  catch  this  type  of  error.   Given   for
              -arguments setting 1 or 3.

       Variable not declared.  Type has been implicitly defined
              When  printing  the symbol table for a module, ftnchek will flag
              with an asterisk all identifiers that are not  explicitly  typed
              and  will  show  the datatype that was assigned through implicit
              typing.  This provides support for users who wish to declare all
              variables  as  is  required  in  Pascal or some other languages.
              This message appears only when the -symtab option is in  effect.
              Alternatively,  use  the -declare flag if you want to get a list
              of all undeclared variables.

       Variables declared but never referenced
              Detects any identifiers that were declared in your  program  but
              were  never used, either to be assigned a value or to have their
              value accessed.  Variables in COMMON are  excluded.   Controlled
              by the -usage=var-unused option.

       Variables set but never used
              ftnchek will notify the user when a variable has been assigned a
              value, but the variable is not otherwise used  in  the  program.
              Usually  this  results  from  an  oversight.   Controlled by the
              -usage=var-set-unused option.

       Variables used before set
              This message indicates that an identifier is used to  compute  a
              value  prior  to  its initialization.  Such usage may lead to an
              incorrect value being computed, since its initial value  is  not
              controlled.   Controlled by the -usage=var-uninitialized option.

       Variables may be used before set
              Similar to used before set except that ftnchek is  not  able  to
              determine its status with certainty.  ftnchek assumes a variable
              may be used before set if the first usage of the variable occurs
              prior  in the program text to its assignment.  Controlled by the
              -usage=var-uninitialized option.

       Warning: DO index is not integer
              This warning is only given when the DO bounds are  integer,  but
              the  DO  index is not.  It may indicate a failure to declare the
              index to  be  an  integer.   Controlled  by  -truncation=real-do
              option.

       Warning: integer quotient expr ... converted to real
              The  quotient of two integers results in an integer type result,
              in which the fractional part is dropped.   If  such  an  integer
              expression  involving  division  is  later  converted  to a real
              datatype, it may be that a real type division had been intended.
              Controlled by -truncation=int-div-real option.

       Warning: Integer quotient expr ... used in exponent
              The  quotient of two integers results in an integer type result,
              in which the fractional part is dropped.   If  such  an  integer
              expression  is  used  as  an exponent, it is quite likely that a
              real   type    division    was    intended.     Controlled    by
              -truncation=int-div-exponent option.

       Warning: NAME not set when RETURN encountered
              The way that functions in Fortran return a value is by assigning
              the value to the name of the function.  This  message  indicates
              that  the  function  was  not  assigned a value before the point
              where a RETURN statement was found.  Therefore  it  is  possible
              that the function could return an undefined value.

       Warning:  Nonstandard  syntax:  adjustable  size cannot be concatenated
       here
              The  Fortran  77  Standard  (sec.  6.2.2)  forbids concatenating
              character variables whose size is an  asterisk  in  parentheses,
              except    in    an   assignment   statement.     Controlled   by
              -f77=mixed-expr.

       Warning: Nonstandard syntax : significant characters past 72 columns
              This warning is given under the -f77=long-line  setting  if  the
              -columns  setting  has been used to increase the statement field
              width, and a statement has meaningful program text beyond column
              72.   Standard  Fortran  ignores  all text in those columns, but
              some  compilers  do  not.   Thus  the  program  may  be  treated
              differently by different compilers.

       Warning: Nonstandard syntax : Statement out of order.
              ftnchek  will  detect  statements  that  are out of the sequence
              specified for ANSI standard Fortran 77.  Table 1 illustrates the
              allowed   sequence   of  statements  in  the  Fortran  language.
              Statements which are out of order are nonetheless interpreted by
              ftnchek,   to  prevent  ‘‘cascades’’  of  error  messages.   The
              sequence counter is also rolled back to  prevent  repetition  of
              the error message for a block of similar statements.  Controlled
              by the -f77=statement-order option.

              --------------------------------------------------------
                                |               | implicit
                                |  parameter    |---------------------
                                |               | other specification
                      format    |---------------|---------------------
                       and      |               | statement-function
                      entry     |  data         |---------------------
                                |               | executable
              --------------------------------------------------------

                                    Table 1

       Warning: Possible division by zero
              This message is printed out wherever division  is  done  (except
              division  by  a  constant).   Use  it  to  help locate a runtime
              division by zero problem.  Controlled by -division option.

       Warning: real truncated to intg
              ftnchek has detected an assignment statement which  has  a  real
              expression  on  the  right, but an integer variable on the left.
              The fractional part of the real value  will  be  lost.   If  you
              explicitly  convert the real expression to integer using the INT
              or NINT intrinsic function,  no  warning  will  be  printed.   A
              similar  message  is printed if a double precision expression is
              assigned to a single precision  variable,  etc.   Controlled  by
              -truncation=demotion option.

       Warning: subscript is not integer
              Since  array subscripts are normally integer quantities, the use
              of  a  non-integer  expression  here  may   signal   an   error.
              Controlled by -truncation=real-subscript option.

       Warning: Unknown intrinsic function
              This message warns the user that a name declared in an INTRINSIC
              statement is unknown to ftnchek.  Probably it is  a  nonstandard
              intrinsic  function,  and  so  the program will not be portable.
              The function will  be  treated  by  ftnchek  as  a  user-defined
              function.   This  warning is not suppressed by any option, since
              it affects ftnchek’s analysis of the program.  However,  if  the
              intrinsic   function   is  in  one  of  the  supported  sets  of
              nonstandard intrinsics, you can use the  -intrinsic  setting  to
              cause ftnchek to recognize it.

LIMITATIONS AND EXTENSIONS

       ftnchek  accepts  ANSI  standard  Fortran-77  programs  with some minor
       limitations and numerous common extensions.

       Limitations:
              The dummy arguments in  statement  functions  are  treated  like
              ordinary  variables of the program.  That is, their scope is the
              entire subprogram, not just the statement function definition.

              The checking of FORMAT statements  is  lax,  tolerating  missing
              separators  (comma,  etc.)  between format descriptors in places
              where the Standard requires them,  and  allowing  .d  fields  on
              descriptors  that  should  not  have  them.   It does warn under
              -f77=format-edit-descr about nonstandard descriptor types  (like
              O), and supported extensions.

              There are some syntactic extensions and Fortran 90 elements that
              ftnchek accepts but does very little  checking.   For  instance,
              pointer  usage  (whether  the  nonstandard  Cray  syntax  or the
              Fortran 90 syntax) is not checked other than for  set  and  used
              status.   It  is hoped that some day more thorough checking will
              be  implemented,  but  for  now  the  user  should  regard   the
              acceptance  of  these syntactic features simply as a convenience
              to enable checking of other aspects of code that contains  them.
              See the section Extensions for specifics about what features are
              accepted but not fully checked.

              If a user-supplied subprogram has the same name as  one  of  the
              nonstandard  intrinsic  functions recognized by ftnchek, it must
              be declared in an EXTERNAL statement in any routine that invokes
              it.  Otherwise it will be subject to the checking normally given
              to the intrinsic function.  Since the nonstandard intrinsics are
              not  standard,  this  EXTERNAL  statement is not required by the
              Fortran  77  Standard.   Using  the   -intrinsic=none   setting,
              recognition of most nonstandard intrinsics (excepting only those
              needed to support the double complex data type)  can  be  turned
              off.  See the lists of supported nonstandard intrinsic functions
              under the discussion of the -intrinsic setting above.

       Extensions:
              All of these  extensions  (except  lower-case  characters)  will
              generate  warnings  if the relevant -f77 option is set.  Some of
              the extensions listed below are part of the Fortran-90 Standard.
              These are indicated by the notation (F90).

              Tabs  are permitted, and translated into equivalent blanks which
              correspond to tab stops every 8 columns.  The standard does  not
              recognize  tabs.  Note that some compilers allow tabs, but treat
              them differently.  The treatment defined for DEC FORTRAN can  be
              achieved using the -source=dec-tab setting.

              Strings  may  be delimited by either quote marks or apostrophes.
              A sequence of two  delimiter  characters  is  interpreted  as  a
              single embedded delimiter character.  (F90)

              Strings may contain UNIX-style backslash escape sequences.  They
              will  be  interpreted  as  such  if  the  -source=unix-backslash
              setting  is  given.   Otherwise  the backslash character will be
              treated as a normal printing character.

              Source  code  can  be  in  either  Fortran  90  free  format  or
              traditional fixed format.  (F90)

              A semicolon is allowed as a statement separator.  (F90)

              Lower   case   characters   are  permitted,  and  are  converted
              internally  to  uppercase  except  in  character  strings.   The
              standard  specifies  upper  case  only,  except  in comments and
              strings.  (F90)

              Hollerith  constants  are  permitted,  in  accordance  with  the
              Fortran  77  Standard,  appendix  C.  They should not be used in
              expressions, or confused with datatype CHARACTER.

              The letter ’D’ (upper or lower case) in column 1 is  treated  as
              the  beginning  of  a comment.  There is no option to treat such
              lines as statements instead of comments.

              Statements may be longer  than  72  columns  provided  that  the
              setting  -columns  was used to increase the limit.  According to
              the standard, all text from columns 73 through  80  is  ignored,
              and no line may be longer than 80 columns.

              Variable  names may be longer than six characters.  The standard
              specifies six as the maximum.  ftnchek permits names  up  to  31
              characters long (F90).

              Variable  names  may  contain  underscores  and dollar signs (or
              other   non-alphabetic   characters   as   specified   by    the
              -identifier-chars option).  These characters are are treated the
              same as alphabetic letters.   The  default  type  for  variables
              beginning  with  these  characters  is  REAL.   In IMPLICIT type
              statements specifying a range of  characters,  the  dollar  sign
              follows  Z  and  is  followed  by  underscore.  (Any other user-
              defined characters are treated the same  as  the  dollar  sign.)
              Fortran 90 permits underscores in variable names.

              The   UNIX   version  tolerates  the  presence  of  preprocessor
              directives, namely lines beginning  with  the  pound  sign  (#).
              These  are  treated  as  comments,  except for #line directives,
              which are interpreted, and are used to set the line  number  and
              source  file  name  for  warnings and error messages.  Note that
              #include directives are not processed by ftnchek.  Programs that
              use them for including source files should be passed through the
              preprocessor before being input to  ftnchek.   As  noted  below,
              ftnchek  does process INCLUDE statements, which have a different
              syntax.  An optional program, ftnpp(1L)  (available  separately)
              provides  preprocessing that properly handles INCLUDE files.

              The  Fortran  90  DO  ...  ENDDO control structure is permitted.
              The CYCLE and EXIT statements are accepted.  All  of  these  may
              have  an optional do-construct name, but construct names are not
              checked for consistency. (F90)

              The Fortran 90 SELECT CASE construct is accepted. (F90)

              Construct names are also accepted on IF, THEN, ELSE,  ENDIF  and
              SELECT CASE statements. (F90)

              The ACCEPT and TYPE statements (for terminal I/O) are permitted,
              with the same syntax as PRINT.

              The so-called ‘‘Cray pointer’’ syntax is tolerated.  It  is  not
              the  same as the Fortran 90 POINTER statement.  There is no real
              checking of the statement other than basic syntax.  The form  of
              this statement is
                 POINTER (pointer, pointee) [,(pointer, pointee)]
              The  pointer  variables  are assigned a data type of INTEGER *4.
              Usage checking of the pointee variables is suppressed, since  in
              practice they are accessed indirectly via the pointers.

              The  following Fortran 90 pointer related syntaxes are accepted:
              ALLOCATABLE,  POINTER,  and  TARGET  statements  and  the   same
              attributes  in  type  declarations;  ALLOCATE,  DEALLOCATE,  and
              NULLIFY  executable  statements;  pointer  assignment  using  =>
              operator;  and the intrinsic functions ALLOCATED and ASSOCIATED.
              Little semantic checking of pointer variables and operations  is
              done  beyond  basic set and used status.  For instance, there is
              no checking for such errors as  dangling  pointers,  or  use  of
              unallocated arrays.

              Statements  may  have  any  number  of  continuation lines.  The
              Fortran 77 and Fortran 90 standards allow a  maximum  of  19  in
              fixed  source form.  The Fortran 90 standard allows a maximum of
              39 in free source form.

              Relational  (comparison)  operators  composed  of   punctuation,
              namely: < <= == /= > >= are allowed.  (F90)

              Inline   comments,  beginning  with  an  exclamation  mark,  are
              permitted.  (F90)

              NAMELIST I/O is supported.  The syntax is the same as in Fortran
              90.

              FORMAT   statements  can  contain  a  dollar  sign  to  indicate
              suppression of carriage-return.  An integer expression  enclosed
              in  angle  brackets  can  be used anywhere in a FORMAT statement
              where the Fortran 77 Standard allows an integer constant (except
              for  the  length of a Hollerith constant), to provide a run-time
              value for a repeat specification or field width.

              Nonstandard   keywords   are   allowed   in   I/O    statements,
              corresponding to those in VMS Fortran.

              The  IMPLICIT  NONE statement is supported.  The meaning of this
              statement is that all  variables  must  have  their  data  types
              explicitly  declared.   Rather than flag the occurrences of such
              variables with syntax error messages, ftnchek waits till the end
              of  the  module,  and  then  prints out a list of all undeclared
              variables, as it does for the -declare option.  (F90)

              Data types INTEGER, REAL, COMPLEX, and LOGICAL  are  allowed  to
              have  an  optional precision specification in type declarations.
              For instance, REAL*8 means an 8-byte floating point  data  type.
              The  REAL*8 datatype is not necessarily considered equivalent to
              DOUBLE PRECISION,  depending  on  the  -wordsize  setting.   The
              Fortran  77  Standard  allows  a  length  specification only for
              CHARACTER data.

              ftnchek supports the DOUBLE COMPLEX  type  specification  for  a
              complex  quantity  whose  real  and  imaginary  parts are double
              precision.   Mixed-mode  arithmetic  involving  single-precision
              complex  with  double-precision  real data, prohibited under the
              Standard, yields a double complex result.

              Combined type declarations and data-statement-like  initializers
              are accepted.  These have the form of a standard Fortran 77 type
              declaration, followed by a  slash-delimited  list  of  constants
              like that used in a DATA statement.  An example of the syntax is
                   INTEGER  N / 100 /
              This bastard form of initializing declaration was not adopted in
              Fortran  90.   Such  declarations  should  be  written using the
              standard form described below, which is accepted by ftnchek.

              There is limited support for  Fortran  90  attribute-based  type
              declarations.  This style of declaration is distinguished by the
              use of a double colon (::) between the list  of  attributes  and
              the  list  of declared variables.  The features supported may be
              adequate for novice programmers, but are not yet sufficient  for
              professional-quality Fortran 90 programs.  I hope to add support
              for more features in future releases.  I  invite  volunteers  to
              assist  in  this  task.   See  the  ToDo file in the source code
              distribution for details.  The  attributes  currently  accepted,
              besides  all  the  usual  data  types,  are DIMENSION, EXTERNAL,
              INTRINSIC, PARAMETER, and SAVE.  The  new  form  of  declaration
              also  allows assignment of values to the variables declared.  At
              present, the (LEN=value) form of specifying character lengths is
              also  accepted.   Kind  specifications,  using  (KIND=value) are
              parsed but are not processed: all kinds are treated  as  default
              kind.   Also,  there  is  little  checking of these declarations
              beyond basic syntax.

              Many  commonly  found  nonstandard   intrinsic   functions   are
              provided.   See  the  discussion  of  -intrinsic  for  a list of
              functions and how to control which ones are recognized.

              Argument checking is not tight for those nonstandard  intrinsics
              that take arrays or mixed argument types.

              ftnchek permits the INCLUDE statement, which causes inclusion of
              the text of the given file.  The syntax is
                   INCLUDE ’filename’
              This is compatible with Fortran 90.  If the  -source=vms-include
              option is given, ftnchek follows VMS conventions with respect to
              this statement: it assumes a default extension  of  .for  if  no
              filename  extension is given, and allows the qualifier /[NO]LIST
              following the filename, to control the listing of  the  included
              file.  There is no support for including VMS text modules.

              In  diagnostic  output  relating  to  items contained in include
              files, the location of  the  error  is  specified  by  both  its
              location in the include file and the location in the parent file
              where the file was included.

              ftnchek accepts PARAMETER  statements  which  lack  parentheses.
              These  will  be  warned  about if the -f77=param-noparen flag is
              given.

              ftnchek accepts PARAMETER  definitions  that  involve  intrinsic
              functions and exponentiation by a non-integer exponent.  Both of
              these cases are prohibited by the Fortran 77 Standard, and  will
              be  warned  about if the -f77=param-intrinsic flag is given.  If
              an intrinsic function value is a compile-time integer  constant,
              ftnchek  will  evaluate  it.  This allows better checking if the
              parameter is used in declaring array sizes.  Fortran  90  allows
              intrinsic functions in PARAMETER definitions.

              The intrinsic functions that are evaluated are:

                            ABS     IABS   DIM     IDIM    MAX
                            MAX0    MIN    MIN0    MOD     SIGN
                            ISIGN   LEN    ICHAR   INDEX

              The  functions  of  integer  arguments are evaluated only if the
              arguments are integer constant expressions.  (These may  involve
              integer   constants,   parameters,   and   evaluated   intrinsic
              functions.)  The function LEN is evaluated if its argument is an
              expression  involving  only  character  constants  and variables
              whose length is not adjustable.  The functions ICHAR  and  INDEX
              are  evaluated  only  if  the arguments are character constants.
              ftnchek gives a warning if it needs the value of some  intrinsic
              function that is not evaluated.

NEW FEATURES

       Here are the changes from Version 3.2 to Version 3.3:

       1.  Front-end  has  been rewritten for unlimited lookahead, eliminating
           the  longstanding  bug  that  caused  incorrect  interpretation  of
           statements whose ambiguity was not resolved in the first line.

       2.  The -mkhtml option is now available in the MS-DOS version.

       3.  Added  support  for  Fortran  90  pointer related syntax: ALLOCATE,
           DEALLOCATE, and NULLIFY statements; the  ALLOCATABLE,  POINTER  and
           TARGET  attributes  in  type  declarations;  the  pointer assigment
           operator => and intrinsic functions ALLOCATED and  ASSOCIATED;  and
           deferred-shape  array  declarations.   At  present these new syntax
           features are accepted but not properly checked.  This  feature  was
           added by Robert Landrito.

       4.  The  -f77 and -f90 pointer option controlling warnings about ‘‘Cray
           pointers’’ has been  renamed  to  cray-pointer.   The  -f77=pointer
           option now instead controls warnings for code containing Fortran 90
           pointer-related syntax.

       5.  Re-implemented -mkhtml processing so  it  is  now  much  faster  on
           source files containing many routines.

       6.  Changed the arrangement of the test directory so there is no longer
           any need to modify the distribution in order to run the test  suite
           (check.bat) under MS-DOS.

       7.  Fixed  bug in reading numeric settings on command line when setting
           name abbreviated to 3 characters.

       8.  Fixed bug causing spurious  warning  for  a  GOTO  referring  to  a
           labeled END statement when the statement before END was a FORMAT.

       9.  New flag -f77=character to control warnings about extensions to the
           Fortran 77 character data type.   Accompanying  this  new  flag  is
           support  for  Fortran  90 rules for character variable declarations
           that evaluate  to  zero  or  negative  length,  allowing  them  and
           treating negative length values as zero.

       10. Fixed  minor  bug in printing of comments and blank lines following
           last END statement in -list mode.

BUGS

       ftnchek  still  has  much  room  for  improvement.   Your  feedback  is
       appreciated.   We want to know about any bugs you notice.  Bugs include
       not only cases in which ftnchek issues an error message where no  error
       exists,  but also if ftnchek fails to issue a warning when it ought to.
       Note, however, that ftnchek is not intended to catch all syntax  errors
       (see  section  on Limitations).  Also, it is not considered a bug for a
       variable to be reported as used before set, if the reason is  that  the
       usage of the variable occurs prior in the text to where the variable is
       set.  For instance, this could occur when a GOTO  causes  execution  to
       loop  backward to some previously skipped statements.  ftnchek does not
       analyze the program flow, but assumes that statements occurring earlier
       in the text are executed before the following ones.

       We  especially  want  to know if ftnchek crashes for any reason.  It is
       not  supposed  to  crash,  even  on  programs   with   syntax   errors.
       Suggestions  are  welcomed for additional features which you would find
       useful.  Tell us if any of  ftnchek’s  messages  are  incomprehensible.
       Comments  on  the  readability  and  accuracy of this document are also
       welcome.

       You may also suggest support for additional extensions to  the  Fortran
       language.   These  will  be  included  only  if  it  is  felt  that the
       extensions are sufficiently widely accepted by compilers.

       If you find a bug in ftnchek, first consult  the  list  of  known  bugs
       below  to  see if it has already been reported.  Also check the section
       entitled ‘‘Limitations and Extensions’’  above  for  restrictions  that
       could  be  causing  the  problem.   If  you  do  not  find  the problem
       documented in either place, then send a report including

       1.  The operating system and CPU type on which ftnchek is running.

       2.  The version of ftnchek and values of  any  environment  options  or
           settings defined in startup file.  (Capturing the output of ftnchek
           -help is useful for this.)

       3.  A brief description of the bug.

       4.  If possible, a small sample program showing the bug.

       The report should be sent to Dr. Robert Moniot (see contact information
       in section entitled ‘‘Installation and Support’’).

       Highest priority will be given to bugs which cause ftnchek to crash.

       Certain  problems  that arise when checking large programs can be fixed
       by increasing the sizes of the data areas in ftnchek.  (These  problems
       are generally signaled by error messages beginning with ‘‘Oops’’.)  The
       simplest way to increase the table sizes is by recompiling ftnchek with
       the  LARGE_MACHINE macro name defined.  Consult the makefile and README
       file for the method of doing this.

       The following is a list of known bugs.

       1.  Bug: Used-before-set message is suppressed for any  variable  which
           is  used as the loop index in an implied-do loop, even if it was in
           fact used before being set in some earlier statement.  For example,
           consider J in the statement

                 WRITE(5,*) (A(J), J=1,10)

           Here  ftnchek  parses  the  I/O  expression, A(J), where J is used,
           before it parses the implied loop where J is  set.   Normally  this
           would  cause  ftnchek  to report a spurious used-before-set warning
           for J.  Since this report is usually in  error  and  occurs  fairly
           commonly, ftnchek suppresses the warning for J altogether.

           Prognosis:  A  future  version  of   ftnchek  is planned which will
           handle implied-do loops correctly.

       2.  Bug:  Variables  used  (not  as  arguments)  in  statement-function
           subprograms  do  not  have  their  usage  status  updated  when the
           statement function is invoked.

           Prognosis: To be fixed in a future version of ftnchek.

       3.  Bug: VAX version does not expand  wildcards  in  filenames  on  the
           command  line if they are followed without space by an option, e.g.
           ftnchek *.f/calltree would not expand the  *.f.   This  is  because
           VMS-style  options  without  intervening space are not supported by
           the GNU shell_mung routine that is used to expand wildcards.

           Prognosis: unlikely to be fixed.

       4.  Bug: checking for nonstandard format edit descriptors is done  only
           in FORMAT statements, not in character strings used as formats.

           Prognosis: may be fixed someday.

ACKNOWLEDGEMENTS

       ftnchek  was  designed  by  Dr.  Robert  Moniot,  professor  at Fordham
       University.  During the academic year of 1988-1989, Michael  Myers  and
       Lucia  Spagnuolo  developed  the  program to perform the variable usage
       checks.  During the following year it was augmented by Lois  Bigbie  to
       check  subprogram  arguments  and  COMMON  block  declarations.   Brian
       Downing assisted with the  implementation  of  the  INCLUDE  statement.
       John Quinn wrote the common block usage checks.  Heba Elsayed wrote the
       label table printout and label usage checks.  Nelson H. F. Beebe of the
       University  of  Utah  added  most  of  the  new  code  to implement the
       -makedcls feature and wrote the dcl2inc script.   The  -mkhtml  feature
       was  contributed by Mark McVeigh of Framatome ANP, Inc.  The -reference
       feature was contributed by Gerome Emmanuel, Ecole des mines,  U.  Nancy
       (slightly  modified).   The  -vcg  option was contributed by Dr. Philip
       Rubini of Cranfield University,  UK.   The  support  for  Cray  pointer
       syntax  was  provided  by  John  Dannenhoffer  of  United  Technologies
       Research Center.  John C. Bollinger of  Indiana  University  added  the
       parser syntax for the SELECT CASE construct.  Robert Landrito added the
       parser syntax for F90 pointer-related  features.   Additional  features
       will be added as time permits.  As of Version 2.5, the name was changed
       from forchek to ftnchek, to avoid  confusion  with  a  similar  program
       named forcheck, developed earlier at Leiden University.

       We would like to thank John Amor of the University of British Columbia,
       Reg Clemens of the  Air  Force  Phillips  Lab  in  Albuquerque,  Markus
       Draxler  of  the  University  of  Stuttgart,  Victor  Eijkhout  of  the
       University of Tennessee at Knoxville, Greg Flint of Purdue  University,
       Daniel  P. Giesy of NASA Langley Research Center, Fritz Keinert of Iowa
       State University, Judah Milgram of the University of  Maryland  College
       Park,  Hugh  Nicholas  of  the  Pittsburgh  Supercomputing  Center, Dan
       Severance  of  Yale  University,  Phil  Sterne  of  Lawrence  Livermore
       National  Laboratory,  Larry  Weissman of the University of Washington,
       Warren J. Wiscombe of NASA Goddard, and  Nelson  H.  F.  Beebe  of  the
       University   of  Utah,  for  pointing  out  bugs  and  suggesting  some
       improvements.  Stefan A. Deutscher, Gunnar  Duus,  Clive  Page  of  the
       University  of  Leicester, Stephan Wefing of Heidelberg University, and
       Bob Wells of Oxford University were extremely helpful as alpha testers.
       We also thank Jack Dongarra for putting ftnchek into the netlib library
       of publicly available software.

INSTALLATION AND SUPPORT

       The ftnchek program is free software.  It can be obtained by  anonymous
       ftp  from  many  software servers, including ftp://netlib.org/fortran .
       Note that on Netlib the distribution is named ftnchek.tar.gz whereas on
       most  other  servers  the  file  name includes the version number, e.g.
       ftnchek-3.3.0.tar.gz.  If the file extension is .Z, uncompress with the
       Unix  uncompress(1)  utility.  If the file extension is .gz, uncompress
       with the GNU gunzip(1L) program.  Then use tar(1) to unpack  the  files
       into a subdirectory.

       Installation  requires a C compiler for your computer.  See the INSTALL
       file provided with the  distribution  for  instructions  on  installing
       ftnchek  on your system.  Executable binary for particular systems such
       as IBM PC or Macintosh, as available, can be obtained by anonymous  ftp
       from  ftp://ftp.dsm.fordham.edu/pub/ftnchek  .  Assistance in preparing
       such executable binary forms is welcome.

       The nroff version of this  document  is  named  ftnchek.man.   On  UNIX
       systems,  this  file  can be used as the man page, but actually it is a
       multi-purpose source file which is used to produce the other  forms  of
       the  documentation.   The  cleaned-up man page document, created during
       installation of ftnchek, is named  ftnchek.1.   The  distribution  also
       includes  a plain ASCII version named ftnchek.doc, a PostScript version
       named ftnchek.ps, an HTML version in directory html,  and  a  VMS  HELP
       version named ftnchek.hlp.

       Information  about the latest version and the status of the project can
       be     obtained     by     visiting      ftnchek’s      home      page,
       http://www.dsm.fordham.edu/~ftnchek  .   For further information and to
       report  bugs,  you  may  contact  Dr.  Robert  Moniot,  whose   contact
       information  can  be  found  by  a  Web search for his name and Fordham
       University.  (E-mail address is not provided here because  it  attracts
       unsolicited   commercial  e-mail,  but  it  is  easily  constructed  by
       combining his last name with the name of the  university  and  the  edu
       domain.)

SEE ALSO

       dcl2inc(1L), dtoq(1L), dtos(1L), f77(1), fd2s(1L), fs2d(1L), ftnpp(1L),
       pfort(1L), qtod(1L), sf3(1L), stod(1L).  xsf3(1L), xvcg(1L).

                                 November 2004                  FTNCHEK 3.3(1)