USER'S MANUAL
                                          
                                          
                                  FORTRAN-lint 
                                          
                                          
                              SOURCE CODE ANALYZER
                                                         
                                               
                                  Version 3.00
                                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                       IPT
                                          
                                   Since 1974
                                          
                  1096 East Meadow Circle, Palo Alto, CA 94303 
                                          
                   Tel: (415) 494-7500    Fax: (415) 494-2758
                                          
                            E-mail: lint@iptcorp.com
        
        
        
        
        
        
        

                           FORTRAN-lint  USER'S MANUAL
                                          
                          A SOURCE LEVEL CODE ANALYZER
                                          
                             For FORTRAN PROGRAMMING
                                          
                          On UNIX and VMS BASED SYSTEMS
                                          
                                   March 1994
                                          
                                  Version 3.00
                                          
              Note: Licensed Users may photocopy for distribution.
                                          
                   Direct comments concerning this manual to:
                                          
                                       IPT
              1096 East Meadow Circle, Palo Alto, California 94303
                    Tel: (415) 494-7500   Fax: (415) 494-2758
                            E-mail: lint@iptcorp.com
                                        
                               Copyright 1987-1994 
                                        
                                        
                                       IPT
                              NOTICE OF COPYRIGHTS
            
        Copyrighted by IPT as an unpublished work.  All rights reserved.  
        In claiming any copyright protection which may be applicable, IPT 
        reserves and does not waive any other rights that it may have (by 
        agreement, statutory or common law, or otherwise) with respect to 
        this material.  See Notice of Proprietary Rights.
        
                          NOTICE OF PROPRIETARY RIGHTS
        
        This manual and the material on which it is recorded are the 
        property of IPT.  Its use, reproduction, transfer and/or 
        disclosure to others, in this or any other form, is prohibited 
        except as permitted by a written License Agreement with IPT.
        
        This manual is intended as a thorough product description.  It 
        is, to the best of our knowledge, complete and accurate.  IPT 
        reserves the right to update this document without prior 
        notification.
            
        IPT warrants that this product works essentially as described in 
        this manual.  IPT reserves the right to update this documentation 
        without prior notification.
            
            
        FORTRAN-lint is a registered trademark of IPT.
        Xlint is a trademark of IPT.
        SunOS is a registered trademark of Sun Microsystems, 
        Incorporated.
        UNIX is a registered trademark of AT&T Bell Laboratories.
        DEC, ULTRIX, VAX, and VMS are registered trademarks of Digital 
        Equipment 
        Teamwork and Teamwork/SD are registered trademarks of CADRE 
        Technologies.


                                                          
                                Table of Contents
                                                                        
                                                                        
             
        1. Introduction
             1.1 Overview
        
        2. Getting Started
             2.1 Analyzing Programs
             2.2 Managing the Output
                  2.2.1 Redirection
                  2.2.2 Summary Mode
                  2.2.3 Statistics Output
             2.3 Call Trees and Cross Reference Tables
              
        3. Command Reference
             3.1 Command Format
                  3.1.1 Command Line Switches
                  3.1.2 Using UNIX Style Options Under VMS
             3.2 Summary Of Options
                  3.2.1 Option Summary Under UNIX
                  3.1.2 Option Summary Under VMS
             3.3 Configuration Files
             3.4 Environment Variables / Logicals
        
        4. FORTRAN-lint Source Conventions
             4.1 Source Format
             4.2 Include Files
             4.3 C Preprocessor (CPP) (UNIX Only)
             4.4 CDD and DBMS Processing (VMS Only)
                  4.4.1 CDD (Common Data Dictionary) Declarations
                  4.4.2 DBMS Support (FDML statements)
                  4.4.3 CDD/DBMS Requirements
             4.5 FORTRAN-77 Extensions
             4.6 Changing the FORTRAN Dialect
             4.7 Default Sizes
        
        
        5. Controlling Analysis
             5.1 Setting the Scope
             5.2 Message Classification
             5.3 Selecting Analysis Level
             5.4 Supressing Individual Messages
             5.5 Portability Checking
        
        6. Analysis Output
             6.1 Overview
             6.2 Splitting the Output
             6.3 Summary Mode
             6.4 Analysis Output
                  6.4.1 Switches and Filenames
                  6.4.2 Source Listing
                  6.4.3 Diagnostic Messages
             6.5 Statistics Output
        
        7. Call Trees
             7.1 Overview
             7.2 Tree Options
                  7.2.1 Arguments
             7.3 Call Tree Format
                  7.3.1 Trimmed Trees
                  7.3.2 Condensing Multiple Calls
                  7.3.3 Sorting Alphabetically
                  7.3.4 Squished Trees
                  7.3.5 Graphic Character Set
             7.4 Call Tree Content
                  7.4.1 Top Node
                  7.4.2 Undefined Routines
                  7.4.3 Library Routines
             7.5 Recursion
             7.6 Dummy Routines
             7.7 Entry Point
        
        8. Cross Reference
             8.1 Overview
             8.2 Layout
                  8.2.1 Program Routines
                  8.2.2 Block Data Routines
                  8.2.3 Subroutines and Functions
                  8.2.4 Common Blocks
                  8.2.5 Structures
                  8.2.6 Variables, Arrays, and Records
                  8.2.7 Parameters
             8.3 Format Selection
             8.4 Content Selection
        
        9. Library Support
             9.1 Using Library Files
             9.2 Creating Library Files
             9.3 Miscellaneous Library Issues
                  9.3.1 Interaction with Cross Reference and Call Trees
                  9.3.2 Library File Format
             9.4 Creation of Library Routine Shells
        
        10. Database and ".fdb" Files
             10.1 What Are ".fdb" Files
             10.2 How to Create ".fdb" Files
             10.3 ".fdb" and Xlint
                  10.3.1 What Is Xlint
                  10.3.2 Creating ".fdb" Files for Xlint
        
        11. CADRE Teamwork Support
             11.1 Overview
             11.2 Configuration

        Appendix D. Output Samples
             D.1 Sample FORTRAN Program
             D.2 Analysis Output
             D.3 Statistics Output
             D.4 Call Tree
             D.5 Freeform Cross Reference
             D.6 Tabular Cross Reference
        
        Appendix E. Diagnostic Messages
             E.1 Format
             E.2 Diagnostic message list
                  syntactical errors
                  data and symbol classification errors
                  variable usage checking
                  miscellaneous errors
                  control structures
                  local data type checking
                  interface checking (argument passing)
                  preprocessor
                  constants
                  data type conversions
                  statements
                  miscellaneous
        
        Appendix F. Performance
             F.1 Disk Space
                  F.1.1 Program Size
                  F.1.2 Temporary Files


                                    Chapter 1
        
        
                                  Introduction
        
              
        1.1 Overview
              
              FORTRAN-lint is a programming tool that simplifies the
              debugging and maintenance of both large and small FORTRAN
              programs.
        
              FORTRAN-lint includes a source code analyzer which can 
              detect a wide range of potential problems, including:
                          
                  -    inappropriate arguments passed to functions
                                      
                  -    inappropriate library calls
                                      
                  -    inconsistencies in common-block declarations
                                      
                  -    non-portable code
                                      
                  -    type usage conflicts across different modules
                                      
                  -    unused functions, subroutines, and variables
                                      
                  -    variables which are referenced but not set
                                
              The FORTRAN-lint source code analyzer is more comprehensive
              than a standard FORTRAN compiler, in many aspects. 
              FORTRAN-lint analyzes source files both individually and as
              a group, and can identify problems which are beyond the
              scope of a compiler. For the same reason, FORTRAN-lint can
              perform some of the checking that might be done by an 
              advanced program linker, and can carry the analysis out to 
              a greater extent.
                          
              The FORTRAN-lint source code analyzer can be used to:
                          
                  -    examine source files extensively before they are 
                       compiled
                                      
                  -    map out the structure of unfamiliar programs
                                      
                  -    point out undetected problems in a production 
                       program
                                      
                  -    enforce programming standards
                                      
                  -    improve portability
        
              The diagnostic messages produced by the FORTRAN-lint source 
              code analyzer are more detailed than those produced by 
              standard compilers and cover a wider range of problems.  In 
              addition, FORTRAN-lint can produce a detailed call tree and 
              a symbol table cross reference.
                          
              The manager of a programming group may not have the time to 
              study all of the code written by the group in detail. 
              FORTRAN-lint allows the manager to spot deviations from
              good programming practice quickly and efficiently.
                          
              FORTRAN-lint can be used to spot potential portability 
              problems in a body of code.  This feature can reduce the 
              amount of work to be done when a program must be moved
              to a new machine or a new operating system.


                                    Chapter 2
        
        
                                 Getting Started    
                                                                        
              
        2.1 Analyzing Programs
              
              To run FORTRAN-lint, use a command of the form under UNIX:
                              
                  flint -switches file1.f file2.f file3.f
                              
              or under VMS:
                          
                  flint /switches file1.for file2.for file3.for
                              
              where "switches" can be one or more of the FORTRAN-lint 
              letter switches, and each of the specified files is a 
              FORTRAN source file containing any number of FORTRAN 77 
              subprograms.  Switches may be intermixed with or appear 
              after file names.
                          
              If FORTRAN-lint is invoked without any switches or 
              parameters, i.e.,
                    
                  flint
                              
              a help screen will be output.
                          
              If source files are specified, but no switches are given, 
              FORTRAN-lint will perform a basic analysis of the source 
              files and output the results to the console.
                          
              The following command will analyze the FORTRAN source file 
              demo.f:
                    
                  flint demo.f                           under UNIX
              or
                  flint demo.for                         under VMS
                              
              The following command will perform a more detailed 
              analysis, including statistics:
                          
                  flint -fgs demo.f                      under UNIX
              or 
                  flint /FYI/GLOBAL/STATISTICS demo.for  under VMS  
        
        
        
        2.2 Managing the Output
              
              When running FORTRAN-lint on a large program for the first 
              time, it usually picks up hundreds or thousands of          
              inconsistencies.  FORTRAN-lint has several features to 
              allow for managing this output in an orderly manner.
                          
                          
                          
        2.2.1 Redirection
              
              The command-line switch "-Sname" under UNIX, or 
              "/SPLIT=name" under VMS will cause FORTRAN-lint to redirect 
              output from the console to the following files:
                    
              Under UNIX:
                  Analysis output           -->  name.lnt    
                  Xref table (-x)           -->  name.xrf
                  Call tree  (-t)           -->  name.tre
                  Statistics (-s)           -->  name.stt
                    
              Under VMS:
                  Analysis output           -->  name.lnt
                  Xref table (/XREFERENCE)  -->  name.xrf
                  Call tree  (/TREE)        -->  name.tre
                  Statistics (/STATISTICS)  -->  name.stt
                    
              For example, the following command under UNIX:
                          
                  flint -fgs demo.f -Sdemo                        
                              
              Or under VMS:
                    
                  flint /FYI/GLOBAL/STATISTICS demo.for /SPLIT=demo
                                  
              will analyze the FORTRAN file "demo.f" and send the 
              analysis output to the file "demo.lnt".  The statistics 
              output will be sent to the file "demo.stt".
        
        
        
        2.2.2 Summary Mode
              
              Useful for large programs, the summary mode (the "-+" 
              switch under UNIX, or "/SUMMARY" under VMS) provides a 
              meter to gauge progress as the sources are analyzed.  Upon 
              completion, a one-page summary of the most frequent         
              messages encountered is output to the console.  This mode 
              forces redirection of all other output if redirection has 
              not already been selected with the "-S" or "/SPLIT" switch.
        
              The following command will perform a detailed analysis of 
              the source file "demo.f", output a one-page summary to the 
              console, send analysis output to the file "flint.lnt",
              and send statistics output to the file "flint.stt":
                    
                  flint -fgs+ demo.f
              or
                  flint /FYI/GLOBAL/STATISTICS/SUMMARY demo.for
                              
              The following command will do the same, but will send 
              output to "demo.lnt" and "demo.stt":
                    
                  flint -fgs+ demo.f -Sdemo
              or
                  flint /FYI/GLOBAL/STATISTICS/SUMMARY demo.for 
                       /SPLIT=demo
                        
              
              
        2.2.3 Statistics Output
              
              When the "-s" or "/STATISTICS" switch is used, a list of 
              program statistics and an error message summary is output 
              after the analysis is complete.  When there is a large 
              amount of analysis output, the error message summary is 
              useful for a quick determination of the types of problems 
              found in the FORTRAN sources.
                          
              In summary mode ( "-+" or "/SUMMARY" switch ), the first 
              screenful of the error message summary is also output to 
              the console.
                     
              
              
        2.3 Call Trees and Cross Reference Tables
              
              In addition to reporting inconsistencies in the source 
              code, FORTRAN-lint can generate diagrams of program 
              structure and cross referenced tables of symbols.
        
              The following command will analyze the FORTRAN file 
              "demo.f", output a call tree to the file "demo.tre", and 
              output a cross reference table to the file "demo.xrf":
                    
                  flint -tx demo.f -Sdemo
              or
                  flint /TREE/XREFERENCE demo.for /SPLIT=demo
                              
              See Section 3.2.1, and Chapters 7 and 8, for more 
              information about the call tree and cross reference 
              features.


                                    Chapter 3
        
        
                                Command Reference
        
        
        3.1 Command Format
              
              FORTRAN-lint is invoked by the "flint" command, followed by 
              switches and file names.  A complete format may look like 
              this:
        
               flint [switches] [file1 [file2 ...]] [file.lbt] [file.fdb]
        
              where "switches" can be one or more of the FORTRAN-lint 
              letter switches, "file1" and "file2" are FORTRAN source 
              files, "file.lbt" is a call interface library file, and 
              "file.fdb" is a database file. 
        
              If there are no switches or file names present on the 
              command line, a help screen will be output to the console.
        
              File names on the command line which are not part of a 
              switch and do not have the special extensions, ".lbt" 
              (library files) or ".fdb" (database files), are taken as
              FORTRAN source files to be analyzed.  On the UNIX based 
              systems, if the source file has an ".F" (capital F) 
              extension, the C preprocessor will first be run on the 
              file.
                          
                          
                          
        3.1.1 Command Line Switches
              
              Switches may be given in any order, and may be intermixed 
              freely with the source file names.  Some switches are 
              simple toggles, while others require one or more arguments. 
              
              On the UNIX based systems, the lowercase switches indicate 
              that they are simple toggles, and may be combined; e.g., 
              "-s -x -t" may be written as "-sxt".  The uppercase 
              switches require one or more arguments, which may be 
              separated from the switch with a space; e.g., "-S result" 
              and "-P SGI SUN".  
                          
              On the VMS based systems, all word switches may be 
              abbreviated to the point of uniqueness, which usually takes 
              3 or 4 characters.   For switches that accept arguments, 
              the arguments may be separated from the switch with an 
              equal ("=") sign or nothing; a space should not be used.  
                          
              If a switch accepts multiple arguments, they should either 
              be separated by commas, or used in multiple instances of 
              the switch.  If separated by commas, there should be no 
              spaces before or after the comma.  Note that if multiple
              arguments are used for a switch under VMS, parentheses 
              ("()") are required before the first and the last arguments 
              for FORTRAN-lint to take all of them.  
                          
              For instance, the "-O" and "/SUPPRESS=" options are used to 
              suppress messages under UNIX and VMS, respectively.  Using 
              "-O 123 -O 200,201,202" under UNIX, or "/SUPPRESS=123 
              /SUPPRESS=(200,201,202)" under VMS, will suppress messages 
              123, 200, 201, and 202.
                          
              Switches may be disabled by preceding the switch with an 
              additional dash ("--")  under UNIX or with the word "NO" 
              under VMS.  When a multiple argument switch is cleared, all 
              the arguments applied to that switch up to that point are
              cleared.
                          
              Example:
                          
                    flint --w --x file.f
              or 
                    flint /NOWARNING/NOXREFERENCE file.for
                              
              The above will suppress all warning messages and the 
              cross-reference on the FORTRAN-lint diagnostic output.
                          
              Switches are processed from left to right; therefore, the 
              rightmost appearance of a toggle switch determines its 
              final state.  Switches that take multiple arguments have 
              their argument lists built up from left to right.  Switches
              which take only one argument use the argument from the 
              rightmost appearance of the switch.
                          
              Default values for switches are set with configuration 
              files, one of which is supplied with the package.  See 
              Section 3.3 (Configuration Files) for more information.
                          
              A complete list of the FORTRAN-lint switches is as follows:
              
              
              -a,   /ANSI
              
                    Description:  Report non-ANSI constructs.  Same 
                                  effect as "-P ansi" 
                                  ("/PORTABILITY=ansi").
                                                      
                    UNIX syntax:  -a
                                                      
                    VMS  syntax:  /ANSI 
        
        
              -B,   /DATABASE=
              
                    Description:  Create a database file (".fdb")  that 
                                  contains all the information 
                                  FORTRAN-lint and Xlint need to 
                                  regenerate call trees, symbol table 
                                  cross reference information, and source 
                                  analysis messages, at a later time 
                                  without having to reprocess the 
                                  sources.
                                                      
                                  The ".fdb" extension is automatically 
                                  attached to the file name when a 
                                  database is created. 
                                                      
                    UNIX syntax:  -B file
                                                      
                    VMS  syntax:  /DATABASE=file
                                  
              
              -C,   /CADRE=
                                  
                    Description:  Generate CADRE data files.
                                                      
                    UNIX syntax:  -C option,...
                                                      
                    VMS  syntax:  /CADRE=(option,...)
                                                      
                    Examples:     -Cteamwork=treefile
                                  /CADRE=teamwork:treefile
                                                      
                                  The above command will create a file 
                                  called "treefile" that can be used as 
                                  the input for building a Teamwork/SD 
                                  model.
                                  
              
              -d,   /DLINES
              
                    Description:  Include debug lines (i.e. source lines 
                                  with a "D" in their first columns) in 
                                  the source analysis.  
                                                      
                                  If this option is not selected, they 
                                  are treated as comment lines.
                                                      
                    UNIX syntax:  -d
                                                      
                    VMS  syntax:  /DLINES 
        
        
              -D
                                  
                    Description:  Define symbols for the C preprocessor. 
                                  Applies only if source files are 
                                  preprocessed (".F" file extension or 
                                  "-p" switch).  Available only on UNIX 
                                  based systems. 
        
                    UNIX syntax:  -D symbol[=value],...
                                  
              
              -e,   /EXTEND
              
                    Description:  Extend width of source file lines from  
                                  72 to 132 columns.  
                                                      
                                  If this option is not selected, all 
                                  characters past column 72 are ignored.
                                                      
                    UNIX syntax:  -e
                                                      
                    VMS  syntax:  /EXTEND
                                  
              
              -E,   /FILES=
              
                    Description:  Expand a specification file, which may 
                                  contain names of the source files to be 
                                  processed and/or the FORTRAN-lint 
                                  options, onto the command line.
                                              
                                  Source file names and FORTRAN-lint 
                                  options may be intermixed together in a
                                  specification file.  They can be 
                                  separated by commas, newlines, or 
                                  spaces, and are treated as if they
                                  appeared on the command line in place 
                                  of the "-E" or "/FILE=S" switch. Nested 
                                  expansions are allowed ( i.e. the file
                                  may contain the "-E" or "/FILES=" 
                                  switches ).   
                                                               
                                  This switch can not be suppressed by 
                                  using "--E" or "/NOFILES".
                                                      
                    UNIX syntax:  -E file,...
                                                      
                    VMS  syntax:  /FILES=(file,...) 
                                  
              
              -f,   /FYI
              
                    Description:  FYI (for your information) diagnostics. 
        
                                  Print hints which may be cause for 
                                  concern, reporting anything that looks 
                                  useless, wasteful or redundant.
                                                      
                    UNIX syntax:  -f
                                                      
                    VMS  syntax:  /FYI
                                  
              
              -g,   /GLOBAL
              
                    Description:  Global analysis.  
                                                      
                                  If this switch is not specified, 
                                  subprograms are processed on an 
                                  individual basis and call interface 
                                  checking is not performed.
                                                      
                                  This switch enables checking for 
                                  consistencies between subprograms, such 
                                  as argument lists and common blocks. 
                                  Also improves usage checking and cross 
                                  referencing of variables passed as 
                                  actual arguments in function or 
                                  subroutine calls. Highly recommended.
                                                      
                                  This switch must be turned on if a 
                                  database is to be generated for Xlint 
                                  to use.
                                                      
                    UNIX syntax:  -g
                                                      
                    VMS  syntax:  /GLOBAL
                                  
              
              -i,   /INCLUDE
              
                    Description:  Expand include files in source listing. 
                                  Applies only when the option for source 
                                  listing is selected ( "-l" or 
                                  "/LISTING" ).
                                                      
                    UNIX syntax:  -i
                                                      
                    VMS  syntax:  /INCLUDE
                                  
              
              -I,   /PATH=
              
                    Description:  Set the search path for the files in 
                                  the INCLUDE statements.
                                                       
                    UNIX syntax:  -I path,...
                                  
                    VMS  syntax:  /PATH=([path],...)
                                                      
                    Example:      -I ../myftn,/usr/sam/headers 
                                      under UNIX
                                  /PATH=([FTNCODE],[USR.SAM.HEADERS])  
                                      under VMS

              /IMPLICIT
                                  
                    See option "-m" below.
                                                      
                                  
              -l,   /LISTING
                  
                    Description:  Output a source listing with line 
                                  numbers.
                                                      
                    UNIX syntax:  -l 
                                   
                    VMS  syntax:  /LISTING
                                                      
                                  
              -L,   /LIBRARY=
              
                    Description:  Create or update a call interface 
                                  library file ( ".lbt" ).  
                                                      
                                  Interface information from subprograms 
                                  can be stored in call interface 
                                  libraries to be used in analysis at a 
                                  later date.  Libraries can be used on 
                                  subsequent runs during global analysis  
                                  to check for subroutine or function 
                                  argument list consistency without       
                                  having to reparse the source file they  
                                  were generated from.  
                                                      
                                  This option causes FORTRAN-lint to run 
                                  in a special mode, bypassing normal 
                                  analysis, so it should only be used to 
                                  create libraries.  Because no 
                                  diagnostic output is given when         
                                  creating or updating libraries, files 
                                  should be clean before this switch is
                                  used.
                                                      
                    UNIX syntax:  -L file
                                                      
                    VMS  syntax:  /LIBRARY=file
                                                      
                    Example:      flint -L vmslib.lbt vmslib.lsh
                                  flint /LIBRARY=mylib.lbt mylib.for
                                                      
              /LPP=
                                  
                    See option "-Y" below.
                                  
              
              -m,   /IMPLICIT

                    Description:  Report the use of implicit data typing.
                                                      
                    UNIX syntax:  -m
                                                      
                    VMS  syntax:  /IMPLICIT
                                                      
                                  
              -O,   /SUPPRESS=
              
                    Description:  Suppress individual error messages by 
                                  their numbers.
                                                      
                    UNIX syntax:  -O #,...
                                                      
                    VMS  syntax:  /SUPPRESS=(#,...)
                                                      
                    Example: flint -O 123 -O 200,201 myftn.f
                             flint /SUPPRESS=123 /SUPPRESS=(200,201)      
                                 myftn.for
                                  
              
              /OUTPUT=
                                  
                    Description:  Redirect output to a file.  Available 
                                  only on VMS based systems.
                                                      
                    VMS  syntax:  /OUTPUT=file
                                                      
                    See also "-S" or "/SPLIT=" option.
                                                      
                                     
              -p 
              
                    Description:  Send all source files through the C
                                  preprocessor.  
                                                      
                                  If this option is not selected, only,
                                  source files with the ".F" extension 
                                  will be preproccessed.  
                                                               
                                  Available only on UNIX based systems.
                                                      
                    UNIX syntax:  -p
                                                      
                                                      
              -P,   /PORTABILITY=
              
                    Description:  Check portability to target system. 
                                  One or more systems can be checked at 
                                  once.  
                                  
                                  Systems currently supported by 
                                  FORTRAN-lint include:
                                                      
                                    ANSI (Fortran-77)       SGI
                                    CRAY                    SUN
                                    HPUX                    ULTRIX
                                    NCUBE                   VAX or VAXVMS
                                    OS32(Concurrent OS/32)
                                            
                    UNIX syntax:  -P system,...
                                                      
                    VMS  syntax:  /PORTABILITY=(system,...)
                                  
              
              -q,   /QUIT
              
                    Description:  Do not queue the job if there are no 
                                  licenses currently available. By
                                  default, the FORTRAN-lint license 
                                  manager will queue jobs if all licenses 
                                  are in use.  
                                                      
                    UNIX syntax:  -q
                                                      
                    VMS  syntax:  /QUIT
                                  
              
              -s,   /STATISTICS
                                  
                    Description:  Print statistics related to the source 
                                  code being analyzed, including a 
                                  summary of the messages output during 
                                  analysis.
                                                      
                    UNIX syntax:  -s
                                                      
                    VMS  syntax:  /STATISTICS
                                  
              
              -S,   /SPLIT=
                                  
                    Description:  Redirect and split output to a group of 
                                  files. This sends the analysis, 
                                  statistics, call tree, and cross 
                                  reference to separate files ( file.lnt, 
                                  file.stt, file.tre, file.xrf ).
                                                      
                    UNIX syntax:  -S file
                                                      
                    VMS  syntax:  /SPLIT=file
                                  
        
              /SUMMARY
                                  
                    See option "-+" below.
                                                      

              /SYSTEM=
                                  
                    See option "-V" below.
                                                      
                                  
              -t,   /TREE
                                  
                    Description:  Generate a call tree.  This shows the 
                                  calling structure of the analyzed 
                                  program in a graphical diagram.  See
                                  "-T" or "/TREE=" for options.
                                                      
                    UNIX syntax:  -t
                                                      
                    VMS  syntax:  /TREE
        
        
              -T,   /TREE=
        
                    Description:  Tree formatting and content options. 
                                  Implies "-t" or "/TREE". 
                            
                                  One or more options can be specified,   
                                  including:
                                                      
                                  help           Outputs a help screen 
                                                 describing tree 
                                                 commands.
                                                               
                                  head:symbol    Show tree headed by 
                                                 given symbol.  
                                                               
                                  trim           Trims the tree by 
                                                 suppressing repeated 
                                                 subtrees.
                                                               
                                  squish         Shrinks the tree 
                                                 vertically by single
                                                 spacing.
                                                               
                                                              
                                  graphics=xxx   Changes the tree 
                                                 graphics characters.
                                                               
                                  condensed      Condenses multiple calls 
                                                 to the same routine.
        
                                  alphabetical   Sorts call tree 
                                                 alphabetically.
                                                               
                                  nolibrary      Suppress calls to 
                                                 libraries ( ".lbt" 
                                                 files ).
                                                               
                                  noundefined    Suppress calls to 
                                                 undefined routines.
                                                      
                                  See Chapter 7 (Call Trees) for further 
                                  details on this option.
                                                      
                    UNIX syntax:  -T option,...
                                                      
                    VMS  syntax:  /TREE=(option,...)
        
        
              -u,   /USAGE
                                  
                    Description:  Perform variable usage checking.  
                                                      
                                  This option flags bad usage such as 
                                  variables referenced (used) but never 
                                  set.  Usually on by default, but can be 
                                  disabled ("--u" or "/NOUSAGE") for call 
                                  tree or cross reference generation      
                                  without excess checking.
                                                      
                    UNIX syntax:  -u
                                                      
                    VMS  syntax:  /USAGE
                                                      
                                                      
              /UNIXHELP
              
                    See option "-?" below.
        
              
              -V,   /SYSTEM=
                                  
                    Description:  Specify the target compiler/FORTRAN 
                                  dialect by system name.
                                                      
                                  This helps the parser resolve ambiguous 
                                  extensions (constructs which look 
                                  similar, but are handled differently on 
                                  different systems).  This switch is 
                                  only necessary when the source code is 
                                  not expected to compile properly on the 
                                  host machine.  
                                                      
                                  The following systems are supported:
                                                                        
                                    ANSI (Fortran-77)       SGI
                                    CRAY                    SUN
                                    HPUX                    ULTRIX
                                    NCUBE                   VAX or VAXVMS
                                    OS32(Concurrent OS/32)
                                               
                    UNIX syntax:  -V system
                                                      
                    VMS  syntax:  /SYSTEM=system
                                    
        
              -w,   /WARNINGS
                                  
                    Description:  Report warnings.  Usually on by 
                                  default.  May be disabled by using 
                                  "--w" or "/NOWARNINGS".
                                                      
                    UNIX syntax:  -w
                                                      
                    VMS  syntax:  /WARNINGS
        
                                  
              -W,   /WIDTH=
                                  
                    Description:  Set output width in columns.  Affects 
                                  all output, including analysis and 
                                  cross reference table.
                                                      
                                  Any value between 40 and 500 is 
                                  allowed.  Under VMS, if output is being 
                                  directed to SYS$OUTPUT, the default 
                                  width is 80 columns; otherwise, it is 
                                  132 columns.  Under UNIX, the default 
                                  width is 80 columns.
                                                      
                    UNIX syntax:  -W number
                                                      
                    VMS  syntax:  /WIDTH=number
                                                      
                                                      
              -x,   /XREFERENCE 
              
                    Description:  Generate a cross reference listing. 
                                  Shows information on all symbols, 
                                  including where they appear, and how 
                                  they are used. See "-X" or 
                                  "/XREFERENCE=" for options.
                                                      
                    UNIX syntax:  -x
                                                      
                    VMS  syntax:  /XREFERENCE
                                                      
                                                      
              -X,   /XREFERENCE=
              
                    Description:  Cross reference formatting and content. 
                                  Implies "-x" or "/XREFERENCE".  Options 
                                  include:
                                                      
                                  freeform       A compact format with 
                                                 variable width 
                                                 (default).
                                                          
                                  tabular        A table format, needs 
                                                 132 columns.
                                                               
                                  linenumbers    Locations by line 
                                                 numbers rather than
                                                 subprogram.  This option 
                                                 must be selected if a 
                                                 database  file ( ".fdb") 
                                                 is to be generated for 
                                                 Xlint to use.
                                                               
                                  nolegend       Suppress legend 
                                                 describing line number 
                                                 usage codes.
                                                               
                                  <filters>      For specific queries. 
                                                 See Sections 8.3 and 
                                                 8.4.
                                                      
                                  See Chapter 8 (Cross Reference) for 
                                  further details on this option.
                                                      
                    UNIX syntax:  -X option,...
                                                      
                    VMS  syntax:  /XREFERENCE=(option,...)
                                  
        
              -Y,   /LPP=
              
                    Description:  Set lines per page.  Use 0 to turn off 
                                  pagination.  Default is 0 for screen 
                                  output, and 60 lines per page if output 
                                  is redirected with "-S" or "/SPLIT=".
                                                      
                    UNIX syntax:  -Y number
                                                      
                    VMS  syntax:  /LPP=number
                                                      
                                                      
              -2,   /NOI4
              
                    Description:  Assume two-byte integers and two-byte 
                                  logical variables.
                                                      
                                  By default, INTEGER and LOGICAL 
                                  declarations are interpreted as 
                                  INTEGER*4 and LOGICAL*4.  If this 
                                  option is used, INTEGER and LOGICAL 
                                  declarations are interpreted as 
                                  INTEGER*2 and LOGICAL*2.

                    UNIX syntax:  -2
                                                      
                    VMS  syntax:  /NOI4
        
                                                      
              -+,   /SUMMARY
              
                    Description:  Show animated progress meter during 
                                  parsing, and output the FORTRAN-lint 
                                  analysis summary upon completion.  
                                                      
                                  If the "-S" or "/SPLIT=" switch was not
                                  specified, it will be implied, sending 
                                  analysis output to "flint.lnt", 
                                  "flint.stt", etc.
                                                      
                    UNIX syntax:  -+
                                                      
                    VMS  syntax:  /SUMMARY
                                                      
                                                      
              -?,   /UNIXHELP
              
                    Description:  Display UNIX style command options 
                                  ("-option").  
                                                      
                                  Besides the VMS style options 
                                  ("/option"), FORTRAN-lint also
                                  accepts the UNIX style options under 
                                  VMS. See Section 3.1.2. 
                            
                                  Available only on VMS based systems.  
                                                      
                    VMS  syntax:  -?   or    /UNIXHELP
                                  
        
        
        3.1.2 Using UNIX Style Options Under VMS
              
              The UNIX style FORTRAN-lint options ("-options") can be 
              also used under VMS.  Unlike the options used under UNIX, 
              FORTRAN-lint does not allow any space between the "-" sign  
              and the options under VMS.
                          
              Lowercase switches indicates that they are simple toggles, 
              and may be combined.  For example, "-g -w -t" may be 
              written as "-gwt".  The toggle switches are not case 
              sensitive under VMS.  Therefore, when users enter "-GWT",
              FORTRAN-lint regards it as "-gwt", and translates it into 
              "/GLOBAL /WARNINGS/TREE".  Double quotes (" ") are not 
              necessary here.
                          
              Uppercase is required for switches that require arguments. 
              Users must use double quotes (" ") before the uppercase 
              switch and after its argument for FORTRAN-lint to take both 
              as a whole; e.g., "-Psgi" is the same as /PORTABILITY=sgi.  
                          
              FORTRAN-lint takes only one argument for each uppercase 
              switch.  If users want to assign multiple arguments to a 
              switch, they should separate the arguments, and treat
              them as the single arguments of multiple switches.  For
              example, "/TREE=condensed,nolibrary" may be also written as 
              "-Tcondensed" "-Tnolibrary" under VMS.
                          
              The following examples show users how to use the UNIX style 
              options under VMS to achieve what their equivalent VMS 
              style options do:
                          
              1) flint /IMPLICIT myfile.for
                                           
                    flint -m myfile.for  or  flint -M myfile.for
                                      
                                  
              2)  flint /IMPLICIT /XREF /NOI4 myfile.for
                              
                    flint -mx2 myfile.for    
                                 
              3)  flint /SPLIT=result /WARNINGS /WIDTH=50 myfile.for
                                 
                    flint "-Sresult" -W "-W50" myfile.for 
                                      
              4) flint /PORTABILITY=(SUN,SGI,VAX) myfile.for
                                                
                    flint "-Psun" "-Psgi" "-PVAX" myfile.for
                                  
              5)  flint /ANSI /FYI /GLOBAL/SUPPRESS=(123,201,202) 
                        myfile.for
                                  
                    flint -afG "-O200" "-O201" "-O202" myfile.for
                  
        
        
        3.2 Summary of Options
              
        3.2.1 Option Summary Under UNIX
              
              Source configuration options:
        
                -d                  include debug lines
                -e                  extend source width to 132 columns
                -I path,...         set search path for include files
                -p                  send all source files through 
                                    preprocessor (CPP)
                -V system           specify FORTRAN dialect
                -2                  two byte integers and logicals
                  
              Diagnostic options:

                -a                  report non-ANSI constructs
                -f                  report FYI messages
                -g                  global processing
                -m                  report implicit variables
                -O number,...       suppress individual error       
                                    messages
                -P system,...       portability checking
                -u                  data usage checking
                -w                  report warnings
                          
              Cross reference options:
        
                -x                  generate cross reference
                -X option,...       cross reference content and 
                                    formatting ( -Xhelp for more 
                                    information )
                          
              Call tree options:
                      
                -t                  generate call trees
                -T option,...       call tree content and formatting
                                    ( -Thelp for more information )
                         
              Output format options:
        
                -i                  expand include files in listing
                -l                  source listing
                -W number           set output width
                -Y number           set output page length
                          
              Other output control options:
        
                -+                  progress/summary mode ( implies -S )
                -B file             create database ( ".fdb" )
                -L file             call interface library generation 
                                    mode ( ".lbt")
                -s                  statistics
                -S file             split and redirect output to files
        
              Miscellaneous options:
                  
                -C option,...       generate Cadre data files
                -D definition,...   define symbols for preprocessor (CPP)
                -E file             expand configuration file onto 
                                    command line
                -q                  do not queue jobs if no licenses are 
                                    available
                           
        
                    
        3.2.2 Option Summary Under VMS
              
              Source configuration options: 

                /DLINES             include debug lines
                /EXTEND             extend source width to 132 columns
                /NOI4               two byte integers and logicals
                /SYSTEM=system      specify version of extended 
                                    FORTRAN 77
                /PATH=([path],...)  set search path for include files
              
              Diagnostic options:
                     
                /ANSI               report non-ANSI constructs
                /FYI                report FYI messages
                /GLOBAL             global processing
                /IMPLICIT           report implicit variables
                /NOUSAGE            suppress usage checking
                /NOWARNINGS         suppress warnings
                /PORTABILITY=(system,...)  portability checking
                /SUPPRESS=(number,...)     suppress individual error 
                                           messages
                /USAGE              data usage checking
                /WARNINGS           report warnings
              
              Cross reference options:
                
                /XREFERENCE         generate cross reference
                /XREFERENCE=(option,...)   format options for cross 
                                           reference ( /XREF=help for 
                                           more information )
              
              Call tree options:
                
                /TREE               generate call tree
                /TREE=(option,...)  formal options for call tree 
                                    ( /TREE=help for more information )
              
              Output format options:
        
                /INCLUDE            expand include files in listing
                /LIST               source listing
                /LPP=number         set output page length
                /WIDTH=number       set output width
        
              Other output control options:
            
                /DATABASE=file      create database ( ".fdb" )
                /LIBRARY=file       call interface library generation 
                                    mode ( ".lbt")
                /OUTPUT=file        redirect output to a specified file
                /SPLIT=file         split and redirect output
                /STATISTICS         statistics
                /SUMMARY            progress/summary mode
              
              Miscellaneous options:
                
                /CADRE=(option,...) generate CADRE data files
                /FILES=file         expand configuration file onto 
                                    command line
                /LICENSE=option     license manager options
                /QUIT               do not queue jobs if no licenses are 
                                    free
                /UNIXHELP  or  -?   display UNIX style command options
              
              
              
              
              
              * See Appendix C for administrative commands for 
                FORTRAN-lint license managers.
              
              
          
        3.3 Configuration Files
              
              FORTRAN-lint can be used for many different purposes: 
              running a quick syntax check on a recently modified file,   
              evaluating the reliability of a large production program, 
              or helping understand unfamiliar code, to name a few.  This 
              wide range of uses makes one set of defaults unsuitable for 
              all situations.  Several levels of configuration have been 
              provided to allow for appropriate defaults.
                               
              Configuration files contain switches and file names in much
              the same format as they would be used on the command line. 
              The differences are that newlines may by used as white 
              space, and that an exclamation point (!) designates the 
              start of a comment, which continues to the end of the line.
                          
              Under UNIX, configuration files are not parsed by the 
              shell, so wildcard expansions, redirection, backgrounding,
              etc. cannot be done from within these files.
                          
              Whenever FORTRAN-lint is run, it looks for the "flint.cfg" 
              files in the following order, with the last taking the 
              highest precedence:
        
              1)  In the directory specified by the environment
                  variable/logical name  FLINTCFG.
                                  
              2)  If FLINTCFG is not defined, or if there is no 
                  "flint.cfg" in that directory, then it looks into the 
                  FORTRAN-lint installation directory.
                                  
              3)  In the current directory.
                              
              These configuration files are processed before the command 
              line, so that switches specified on the command line 
              override or supplement those in the configuration files.
                          
              Configuration files specified by the "-E" or "/FILES=" 
              (expand) switch are processed at the same position as the 
              "-E" or "/FILES=" switch.
        
              File names may also appear in configuration files, but 
              there is no provision for deselecting files.  Note that 
              wildcards in file names in configuration files are 
              expanded under VMS while they are not under UNIX.  On the 
              UNIX base systems, using configuration files to hold source 
              file names can get up to the 1024 command line argument
              limit of some shells.
                          
              This is a typical default "flint.cfg" provided with 
              FORTRAN-lint under UNIX:
                          
              -w                    ! enable warnings
              -u                    ! enable usage checking
              -O207                 ! hollerith constant warning
              -O276                 ! data type conversion      
              -O76                  ! mixed mode arithmetic
              -O261                 ! initializer data type converted
              -Ttrim                ! make TRIM the default tree format
              --t                   ! default is to NOT output tree
              -Xno_unreferenced_parameters 
                                    ! eliminate unreferenced parameters
              -Xno_unused_common_variables 
                                    ! show common variables only where 
                                    ! they are used
              --x                   ! default is to NOT output xref
        
                    
              Check your "flint.cfg" file.  Your default switches may 
              vary from those shown above.
        
              Similarly, a typical default "flint.cfg" under VMS may look 
              like the following:
                    
              /WARNINGS            ! enable warnings
              /USAGE               ! enable usage checking
              /SUPPRESS=207        ! hollerith constant warning
              /SUPPRESS=276        ! data type conversion
              /SUPPRESS=76         ! mixed mode arithmetic
              /SUPPRESS=261        ! initializer data type converted
              /TREE=trim           ! make TRIM the default tree format
              /NOTREE              ! default is to NOT output tree
              /XREFERENCE=no_unreferenced_parameters  
                                   ! eliminate unreferenced parameters
              /XREFERENCE=no_unused_common_variable   
                                   ! show common variables only where 
                                   ! they are used
              /NOXREFERENCE        ! default is to NOT output xref
        
        
        
        3.4 Environment Variables / Logicals

              Certain defaults can be overridden by setting environment 
              variables.  These are generally installation or system 
              configuration options.
                    
              environment   
              variable      description 
              -----------   ---------------------------------------------
              FLINTHOST     host name of machine running license server 
                            daemon
              FLINTHOME     directory that contains the flint support 
                            files (flint.err, etc.)
              FLINTCFG      directory that contains alternate support 
                            files
              TMPDIR        directory to store temporary files under UNIX
              SYS$SCRATCH   directory to store temporary files under VMS 
              
              
              The environment variable (logical) "FLINTCFG" allows the 
              user to alter FORTRAN-lint's configuration by specifying a 
              directory that will be searched before the installation 
              directory when looking for the support files.
              
              The files that follow this search path include "flint.err" 
              (the error message file), "flint.cfg"  (the default 
              configuration file), "flint.hls" (the help screen file), 
              and the library files "unixlib.lbt" and "vmslib.lbt".
              
              The environment variable "TMPDIR" under UNIX and the 
              logical "SYS$SCRATCH" under VMS can be set to change the  
              directory where FORTRAN-lint places its temporary files. 
              They can be redefined at any time to point to another 
              location with sufficient disk quota.  "TMPDIR" is supported 
              on the UNIX based systems that provide it within the  
              "tempnam( )" system function.
              
              "FLINTHOME" and "FLINTHOST" override the values that were 
              patched into the executable during installation.  See 
              Appendix A (Installation Under UNIX) or B (Installation 
              Under VMS) for more information.


                                    Chapter 4
        
        
                         FORTRAN-lint Source Conventions
        
        
        4.1 Source Format
              
              FORTRAN-lint accepts one or more FORTRAN 77 source files, 
              each of which may contain one or more FORTRAN 77 
              subprograms.  A subprogram may be a subroutine, a function, 
              a block data module, or a main program.  Do not place 
              INCLUDE file names on the command line or in configuration  
              files.
                          
              FORTRAN-lint understands several different source formats.  
              The default format is the ANSI standard fixed format, with 
              a continuation indicator at column 6, and a comment field 
              starting at column 73.
                          
              If the source file contains code beyond column 72, the "-e" 
              switch under UNIX or "/EXTEND" under VMS can be used to 
              tell FORTRAN-lint to accept input lines of up to 132 
              columns, with no fixed position comment field.
                          
              TAB formatting is supported for those systems that allow 
              it, where a TAB character in the label field skips to an 
              optional non-zero single digit continuation indicator. 
              There is no fixed position comment field in TAB formatted 
              lines.  TAB formatting can coexist with fixed format lines 
              in the same file, subprogram, or even in a continued 
              statement.
                          
              Spaces are significant only in character strings or 
              Hollerith constants.  There is optional checking to detect 
              spaces embedded in symbol names, however.
                              
              The maximum number of continuation lines supported is 1000 
              lines per statement, and there is a maximum of 32,000 
              significant characters per statement.
                    
             
        
        4.2 Include Files
              
              The INCLUDE statement is supported, and include files may 
              be nested up to 10 levels deep.
                          
              Files included by the INCLUDE statement are searched for in 
              the following directories:
                          
              1st:   The directory of the source file that the INCLUDE 
                     statement belongs to.
                          
              2nd:   The current directory when FORTRAN-lint is run.
                          
              3rd:   (VMS only) The absolute path or logical name 
                     specified in the INCLUDE statement.
                          
              4th:   The directories specified in the "-I" switch, from 
                     left to right.
                          
              5th:   (SUN/UNIX only) The directory "/usr/include".
                          
              If an include file is not found, an error message is 
              generated and processing continues as best it can.
                          
              For the FORTRAN programs that utilize the C preprocessor
              under UNIX, there is also the "#include" directive.  This 
              directive is different than the INCLUDE statement, and is 
              described in the C Preprocessor Section.
                    
              
              
        4.3 C Preprocessor (CPP) (UNIX Only)
              
              Some FORTRAN programs utilize the C preprocessor to perform 
              conditional compilation, file inclusion, and macro 
              expansions.  FORTRAN-lint has the capability to invoke the 
              C preprocessor on each source file before parsing it, and 
              performing line number translations so the appropriate line 
              numbers will appear on messages.
                          
              If the C preprocessor is not "/usr/lib/cpp", FORTRAN-lint 
              must be given the full path name of the C preprocessor. 
              This is done by patching the cpp pathname in the "flint" 
              executable with the "flpatch" program.  See Appendix A for 
              details on how to do this.
                          
              The "-D" and "-I" switches are passed to the C 
              preprocessor, to allow for symbol predefinition and include 
              search paths.  Arguments following the switches in the 
              preprocessor command line are the input file (the actual 
              FORTRAN source file), and the output file (a temporary 
              filename generated by FORTRAN-lint).
                          
              All source files with the ".F" (capital F) file name 
        
              extension are run though the preprocessor.  If the "-p" 
              switch is selected, then all source files will be 
              preprocessed regardless of the file extension.
                          
              Note that the files included by the INCLUDE statement will 
              not be affected by the C preprocessor, because these files 
              are read in directly by the FORTRAN-lint parser and are not 
              preprocessed.
                    
              

        4.4 CDD and DBMS Processing (VMS Only)
              
        4.4.1 CDD (Common Data Dictionary) Declarations
              
              The dictionary statement is somewhat similar to the INCLUDE 
              statement in that it includes variable declarations into 
              the current routine.  It differs from include files by 
              building the data structures from a CDD dictionary during 
              compilation rather than just reading them from a source 
              file.  FORTRAN-lint supports the dictionary statements by 
              using the FORTRAN compiler as a preprocessor to expand 
              these statements.
                          
                          
                    
        4.4.2 DBMS Support (FDML statements)
              
              FORTRAN-lint supports FDML statements, including the 
              invoke, ready, use, commit, rollback, disconnect, connect, 
              erase, get, modify, fetch, find, free, also, null, within, 
              keep, reconnect, and store statements.  The  invoke
              statements are preprocessed by the FORTRAN compiler in the 
              same fashion as the CDD dictionary statement, and all other 
              FDML statements are parsed by FORTRAN-lint.  Usage checking 
              is suppressed on variables that are created by the invoke 
              statement.
              
              
              
        4.4.3 CDD/DBMS Requirements
              
              Dictionary and invoke statements are expanded into their 
              equivalent source code by using the FORTRAN compiler as a 
              preprocessor and analyzing the resulting compiler output    
              files.  This requires the FORTRAN compiler and the CDD 
              and/or DBMS packages to be installed and available in order 
              for FORTRAN-lint to be able to process these statements.  
              The compiler is used only if a dictionary or invoke 
              statement is actually present, and then only the dictionary 
              or invoke statement is run through the compiler.
        
                          
        
        4.5 FORTRAN-77 Extensions
                    
              FORTRAN-lint is based on the 1978 ANSI FORTRAN-77 standard. 
              It also understands extensions to this standard used by the 
              following compilers:
                    
              
              system                   compiler              dialect code 
              ------------------------ --------------------- ------------
                                       FORTRAN ANSI X3.9-1978    ANSI 
              Concurrent OS/32         FORTRAN Version 5.5       OS32 
              Cray YMP UNICOS          CFT77 5.0                 CRAY 
              HP9000 Series  HPUX      FORTRAN/9000 8.05         HPUX
              NCUBE                    FORTRAN 77                NCUBE   
              Silicon Graphics IRIS-4D 3.3 FORTRAN 77            SGI 
              SunOS                    Sun FORTRAN 1.4           SUN 
              VAX/VMS                  VAX FORTRAN Version 5.0   VAX 
              
              
              Extensions supported by FORTRAN-lint include, but are not 
              limited to the following:
                    
                 -  Data type size specifiers (eg., integer*4) 
                 -  Records, structures and maps 
                 -  Pointers 
                 -  Debugging lines with "D" or "X" in the first column 
                 -  TAB formatting 
                 -  Inline comments, both "!" and ";" styles 
                 -  Long symbol names, with non-alphanumeric characters 
                 -  A plethora of binary, octal, and hex constant formats 
                 -  Hollerith constants 
                 -  Namelist I/O 
                 -  Dozens of system-specific I/O statement specifiers 
                 -  Hundreds of intrinsic functions 
                 -  All I/O format strings, including embedded 
                    expressions 
                 -  Abbreviated and symbolic expression operators 
                 -  Recursion 
                 -  Array sections & array expressions
                          
              
              
        4.6 Changing the FORTRAN Dialect
              
              The FORTRAN dialect of the source code may be specified 
              using the "-V" switch under UNIX or "/SYSTEM=" under VMS.  
              FORTRAN-lint will then allow the language extensions 
              provided by the specified compiler.  This switch defaults 
              to the version of FORTRAN for the system FORTRAN-lint is 
              currently running on.  Dialects currently supported by this 
              switch are the dialect codes from the system/compiler table
              in Section 4.5.  This allows users to cross develop 
              software for multiple systems on a single platform.
                          
              This switch is not needed if the default FORTRAN dialect 
              contains all the extensions that will be used by the source 
              program.
                          
              If what is desired is to flag the program syntax which is 
              not supported by a specific dialect, the "-P" or 
              "/PORTABILITY=" switch should be used instead.
                    
              
              
        4.7 Default Sizes
              
              On systems where integers and logicals are four bytes long 
              by default, the "-2" switch under UNIX or "/NOI4" under VMS 
              can be used to change the default to two bytes. That is, 
              INTEGER and LOGICAL declarations are interpreted as 
              INTEGER*2 and LOGICAL*2.  This applies only to type 
              statements without length specifiers and constants which 
              can fit in either size data type.


                                    Chapter 5
        
        
                              Controlling Analysis
                                                                        
              
        5.1  Setting the Scope 
              
              The "-g" switch under UNIX or "/GLOBAL" under VMS will 
              cause FORTRAN-lint to analyze all the FORTRAN sources as a 
              group, rather than individually.  This enables interface 
              checking and improves usage checking of variables passed as 
              actual arguments to other routines.
                          
              If  "-g" or "/GLOBAL" is not specified, subprograms are 
              processed on an individual basis, and call interface 
              checking is not performed.
                    
              
              
        5.2  Message Classification
              
              FORTRAN-lint checks for the following five general classes 
              of problems:
                          
                  - syntax problems
                                      
                  - subprogram interface problems
                                      
                  - variable usage problems
                                      
                  - portability problems
                                      
                  - implicitly typed variables
                                
              Syntax problems are constructs that will not compile or 
              that may be interpreted by the compiler in a different way 
              than the programmer intended.  This includes symbol names 
              that have embedded blanks, re-declared or re-dimensioned  
              variables, and poorly structured branches using GOTOs.
                          
              Interface problems are problems with the interaction 
              between subprograms.  This includes inconsistent argument 
              lists in function or subroutine calls, inconsistent common 
              block organization, and unused or missing subroutines and   
              functions.
                          
              Usage problems cover improper use of variables and arrays.  
              Variables should be both set and referenced; any deviation 
              from this is flagged.  Attempted redefinition of constants 
              in subprogram calls is also flagged.
                          
              Portability problems are constructs that are allowed on the 
              host system, but are not recognized or are interpreted 
              differently on other systems.  This includes structures, 
              pointers, data type length specifiers, and other 
              extensions.
                          
              Implicitly-typed variables can be flagged whether or not 
              the "IMPLICIT NONE" statement was used.  If "IMPLICIT NONE" 
              was used, they will be categorized as syntax errors.
                          
              FORTRAN-lint breaks syntax problems, interface problems, 
              data usage problems, and portability problems down into 
              three levels of severity and reports them accordingly:
                          
                  - Error messages are the most serious and indicate that 
                    the code will not compile or will probably not 
                    operate correctly.
                                      
                  - Warning messages flag constructs which may not 
                    operate as intended, may cause intermittent problems, 
                    or just don't make sense.
                                      
                  - FYI (for your information) messages show unused 
                    clutter, implied truncations and data type 
                    conversions, and naming inconsistencies.
                                      
                                      
                          
        5.3  Selecting Analysis Level
              
              The default analysis level is a basic syntax analysis, 
              flagging errors and warnings.
                          
              Categories of messages may be enabled or suppressed with 
              the following switches:
                          
                  - syntax            always enabled
                                      
                  - interface         "-g" or "/GLOBAL"
        
                  - usage             "-u" or "/USAGE".   Enabled by 
                                      default; improved with "-g" or 
                                      "/GLOBAL"
                                      
                  - portability       "-a" or "/ANSI";  "-Psys" or 
                                      "/PORTABILITY=sys" 
                                      (see Section 5.5)
                                      
                  - implicit          "-m" or "/IMPLICIT"
                                
                          
              Severity level of messages in the above categories is 
              controlled with the following switches:
                          
                  - errors            always enabled

                  - warnings          "-w" or "/WARNINGS", enabled by 
                                      default
                                      
                  - FYIs              "-f" or "/FYI"
                                
              To disable a category or level, precede the switch with an 
              additional dash (e.g., "--w") under UNIX, or with "NO" 
              (e.g. "/NOWARNINGS") under VMS.
                          
              Selecting "-gamf" or "/GLOBAL/ANSI/IMPLICIT/FYI" on the 
              command line would perform a very detailed analysis, while 
              "--uw" or "/NOUSAGE/NOWARNINGS" would provide the bare 
              minimum.
                    
              
              
        5.4 Suppressing Individual Messages
              
              The "-O" (omit) switch under UNIX and "/SUPPRESS=" under 
              VMS can be used to selectively suppress individual 
              messages.  This can be useful when a category or level 
              of analysis is desired, but a few unwanted messages from 
              that category or level appear so frequently that they 
              clutter the output.
                          
              The "-O" and "/SUPPRESS=" switches accept message numbers 
              as their arguments.  Message numbers are shown in the 
              analysis output between the category/severity and the 
              message text.  Multiple instances of the same message have 
              the same number.  Message numbers also appear in the error 
              file "flint.err".  See Appendix E (Diagnostic Messages) for 
              more details. 
                          
              In addition to message numbers, the "-O" and "/SUPPRESS=" 
              switches accept the word "all" to mean all messages.  This 
              suppresses all numbered messages, including syntax errors.
        
              If a message number or the word "all" is preceded with a 
              plus sign ("+"), the message or messages are 
              "unsuppressed".  This allows a message that was suppressed 
              to be enabled again.  An unsuppressed message will be shown 
              only if its analysis category and level were selected.
                    
                  -O arg              
                  /SUPPRESS=arg   Action   
                  -------------   ------------------------
                  n               Suppress message #n
                  all             Suppress all messages
                  +n              Unsuppress message #n
                  +all            Unsuppress all messages
                        
              For example, the switch "-Oall,+279,+281" or 
              "/SUPPRESS=(all,+279,+281)" will suppress all messages but
              #279 and #281.  Since messages #279 and #281 are interface 
              FYIs, the switches "-gf" or "/GLOBAL/FYI" must also be 
              selected in order for these messages to be output.
                          
                    
              
        5.5 Portability Checking
              
              The "-P" switch under UNIX and "/PORTABILITY=" under VMS 
              flag problems that will occur when porting the Fortran code 
              to a different system.  This includes constructs which are 
              not recognized or may operate differently on the target 
              system.
                          
              "-P" and "/PORTABILITY=" take one or more arguments, which 
              are the names of the target systems.  These names are those 
              described in Section 4.5 (Fortran-77 extensions), and 
              include ANSI, VAX, SUN, OS32, CRAY, SGI, HPUX, and NCUBE.
                          
              Portability to multiple targets may be checked at the same 
              time.  This is done by specifying multiple system names on 
              the "-P" or "/PORTABILITY=" switch.
                          
              The "-a" and "/ANSI" switches flag non-ANSI constructs.  
              They have the same effect as "-Pansi" and 
              "/PORTABILITY=ANSI".
                          
              For example, if a Fortran program is being ported to a VAX 
              system and a CRAY system and the programmer wishes to 
              examine portability issues related to the port, then he 
              would add the switch "-Pvax,cray" or 
              "/PORTABILITY=(VAX,CRAY)" to the FORTRAN-lint command line.


                                    Chapter 6
        
        
                                 Analysis Output
        
        
        6.1 Overview
              
              When run without any output redirection switches, 
              FORTRAN-lint sends all of its text output to the console 
              (stdout under UNIX, or SYS$OUTPUT under VMS) in the      
              following order:   
                    
              
              item                         controlled by
              --------------------------   ------------------------------
              echo selected switches 
              
              echo selected source files 
              
              source listing               -l  -i 
                                           ( /LISTING  /INCLUDE )
              
              analysis output              -g  -u  -m  -P  -a  -w  -f  -O 
                                           ( /GLOBAL  /USAGE  /IMPLICIT  
                                             /PORTABILITY  /ANSI 
                                             /WARNINGS  /FYI  /SUPPRESS )
              
              call tree                    -t  -T 
                                           ( /TREE  /TREE= )
        
              cross reference tables       -x -X 
                                           ( /XREFERENCE  /XREFERENCE= )
        
              statistics output            -s
                                           ( /STATISTICS )
        
              
              Under UNIX, output can be redirected by the shell, or with 
              the "-S" (split) and "-+" (summary mode) redirection 
              switches.  Under VMS, redirection can be done by redefining 
              "SYS$OUTPUT" with switches "/OUTPUT", "/SPLIT", and 
              "/SUMMARY".
                          
              The width and page length of the output can be altered with 
              the "-W" and "-Y" switches under UNIX, or "/WIDTH=" and 
              "/LPP=" under VMS.
        
        
        
        6.2 Splitting the Output
              
              The output redirection switch "-S" under UNIX or "/SPLIT=" 
              under VMS causes the output to be sent to several different 
              files, rather than to the console.  It takes the argument 
              following this switch as the base name of the filenames to 
              redirect the output to.  The extensions ".lnt", ".tre", 
              ".xrf", and ".stt" will be appended to this base name to 
              create the output file names.
                          
              The switches, source files, and analysis output will be 
              sent to the ".lnt" file.  If a call tree was selected, it 
              will be output to the ".tre" file.  If a cross reference 
              was selected, it will be output to the ".xrf" file.  If 
              statistics are selected, they will be output to the ".stt" 
              file.
                    
              Example:
              
                  flint -Sprog -t -s myfile.f            
              or
                  flint /SPLIT=PROG/TREE/STATISTICS myfile.f
                        
              The command line above will create the output files 
              "prog.lnt", "prog.tre", and "prog.stt".
                    
               
              
        6.3 Summary Mode
              
              The "-+" switch under UNIX and "/SUMMARY" under VMS 
              switches are used in conjunction with the "-S" and 
              "/SPLIT=" switches to provide a progress meter while
              FORTRAN-lint is running, and a brief summary of the results 
              when analysis is completed.
                          
              The "-+" or "/SUMMARY" progress and summary output is sent 
              to the console, so normal output must be redirected with 
              the "-S" or "/SPLIT=" switch.  If the "-S" or "/SPLIT=" 
              switch is not specified, it is implied with "flint" as the 
              base name.  This implied redirection will cause the output 
              files to be "flint.lnt", "flint.tre", "flint.xrf", and
              "flint.stt".
                          
              During analysis, progress is tracked by showing level of 
              completion from 0% to 100%. Backspaces are output to 
              overwrite and provide a stationary counter.
                          
              Once analysis is complete, the counter is erased and the 
              first screenful of the message summary is shown.  After the 
              message summary, a final line shows total count of messages
              by level, and the names of the files containing the 
              redirected output.
             
              For more detail about summary, see Section 6.5 (Statistics 
              Output).
        
        

        6.4 Analysis Output
              
        6.4.1 Switches and Filenames
              
              The first line of the analysis output shows the 
              FORTRAN-lint revision number and the current date and time. 
              The next few lines show the selected switches, along with 
              where they were specified.
                          
                  -    Default options are options that were specified 
                       in the "flint.cfg" configuration file in the 
                       installation directory.  These are the system 
                       defaults.
                                
                  -    User options are options that were specified in a 
                       "flint.cfg" configuration file in the directory   
                       named in the environment variable "FLINTCFG".  
                       These are a user's custom tailored defaults.
                                      
                  -    Local options are options that were specified in a 
                       "flint.cfg" configuration file in the local 
                       directory.  These are usually the defaults for a 
                       specific project.
                                      
                  -    Expanded options are options that were specified 
                       in a configuration file expanded onto the command 
                       line with the "-E" or "/FILES=" (expand) switch.
                                      
                  -    Command options are options that were placed on 
                       the command line.
                                
              The selected source file names are shown next, grouped by 
              directory.  Next is the source listing, then the diagnostic 
              messages.
                          
                          
                    
        6.4.2 Source Listing
              
              FORTRAN-lint will produce a source listing if the "-l" or 
              "/LISTING" switch is used.  If the "-i" or "/INCLUDE" 
              switch is also used, the source listing will expand all the 
              include files where they are included.
                          
                          
        
        6.4.3 Diagnostic Messages
              
              FORTRAN-lint generates a diagnostic message for each 
              problem detected within a subprogram.  Each message 
              includes the source line and a pointer to the column where
              the problem appears.  Also shown is the name of the source 
              file, the subprogram name, the line number, the message 
              category and severity, the message number, and the message 
              text.
                          
              A message might look as follows:
                    
                  >         CALL DIPSTAT( 4, CURITEM) 
                  >                       ^ 
                  demo.f:PRINTIT 
                  line 43: INTERFACE ERROR #59- constant is changed by 
                           subprogram.
                        
                    
              Messages are generally output in the order they appear in 
              the source file, and are grouped by subprogram.  Each 
              subprogram message group is delimited by a line of 
              asterisks followed by information on where the subprogram 
              begins.  This delimiter looks like:
                    
                 ********************************************************
                 Subroutine PRINTIT         File demo.f           Line 39
                                  
                        
              Additional diagnostic messages may be printed after a 
              subprogram is completely processed or after all subprograms 
              are processed; e.g.,
                    
              IMPLICIT- symbols were implicitly typed:  A, AQDATA, DELTI 
                                  
              USAGE ERROR- local variables referenced but never set: J, K 
                                  
              SYNTAX FYI- unused labels: 150
                        
              
              
        6.5 Statistics Output
              
              If the "-s" switch under UNIX or "/STATISTICS" under VMS 
              switch is used, FORTRAN-lint will generate various 
              statistics on the source files, including program size, 
              comment percentage, and diagnostic message summary by 
              number, category, and severity.
                          
              Appearing first are program size statistics.  The number of 
              source files is shown, followed by the number of lines and 
              bytes of code for the source files, the include files, and 
              the total of the two.  Counts on "Include files" reflect 
              all appearances of the include files, and will be much 
              higher than that of the include files alone.  Total parsed 
              is calculated after all include files are expanded. 
                          
              Byte counts do not include the newline characters.
                          
              Comment percentage is based on byte counts, and takes both 
              comment lines and inline comments into account.  The 
              comment percentage for include files and total parsed is
              calculated after all include files are expanded.  This 
              multiplies the weight of an include file comment by how 
              many times it is included.  
                    
              Number of source files:     1
                                  
             Source files:  52 lines, 1314 bytes ( 5% comments, 95% code) 
             Include files: 44 lines, 1052 bytes (14% comments, 86% code)
             Total parsed:  96 lines, 2366 bytes ( 9% comments, 91% code)
                        
                    
              Shown second are the number of subprograms, broken down by 
              type. 
                    
                  Total subprograms: 7
                     Subroutines:    6
                     Functions:      0
                     Program:        1
                     Block Data:     0
                            
              
              Shown next is the message summary, broken down by message 
              number.  Messages are sorted by frequency of appearance.  
              Displayed for each message are its category, severity, 
              number, frequency, and message text.  Context-dependant 
              fields in the message text are shown as asterisks (*).
                    
              Individual message summary 
        
              -----------------------------------------------------------
              INTRFC  ERR #57-     2x: too many arguments. 
              INTRFC  WARN #63-    2x: expression is changed by 
                                       subprogram. 
              SYNTAX WARN #47-     1x: branch into do loop via label *. 
              INTRFC  ERR #56-     1x: not enough arguments. 
              INTRFC  ERR #59-     1x: constant is changed by subprogram. 
              INTRFC  ERR #95-     1x: this name is defined as a 
                                       subroutine.
                        
              The number of messages is displayed last, shown in total 
              and broken down by category and severity.  The code <supp>, 
              meaning "suppressed", is shown for message categories and 
              severities that were not selected.
              
                  Total messages: 18
                                  
                              Errors       Warnings          FYIs
                              ------       --------          ---- 
                  Syntax:       0             1               0 
                  Interface:    8             4               0 
                  Data usage:   2             1               2
                                  
                  Implicit typing:       <supp>


                                    Chapter 7
        
        
                                   Call Trees
        
              
        7.1 Overview
              
              If the "-t" switch under UNIX or "/TREE" under VMS is used, 
              FORTRAN-lint produces a call tree which outlines the 
              calling structure of the source files analyzed.  A call 
              tree in the default format might look like:
              
                 FORTRAN-lint    (call tree)                              
                 
                 This is a primary tree starting at the program 'PROCDAT'
                 
                 PROCDAT-+-GETUNIT
                         |
                         +-READNAME
                         |
                         +-SETTYPE--PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                         |                         |
                         |                         +-GETUNIT
                         |
                         +-PRINT--PRINTIT-+-DIPSTAT--*PRINT*              
                                          |
                                          +-GETUNIT
                        
              See Appendix D (Output Samples) for source listing 
              demo.for.
                          
                    
              
        7.2 Tree Options
              
              The "-T" or "/TREE=" switch allows the user to customize 
              the call tree with several suboptions.  Whenever the "-T" 
              or "/TREE=" switch is used, the "-t" or "/TREE" option is 
              implied. This switch is used in the following format:
                    
                  -Toption,option,option, ...                 under UNIX
              or
                  /TREE=(option,option,option, ...)           under VMS
                        
              Where "option" can be replaced with any of the arguments 
              listed in the next subsection.
        
        
        
        7.2.1 Arguments
              
              The following commands may be given as the arguments to the 
              "-T" and "/TREE=" switches:

              {no}alphabetic   Sorts call tree alphabetically.  Calls by 
                               a routine are usually shown in the order 
                               called.  This option sorts those calls 
                               into alphabetical order.  The condensed 
                               option is  recommended if this is used.
                          
              {no}condensed    Condenses multiple calls to the same 
                               routine. If a routine calls the same 
                               routine many times, these calls are merged 
                               into one call  (Default for prior 
                               revisions of FORTRAN-lint).
                          
              disable          Disables the call tree.  This has the same 
                               effect as "--t" or "/NOTREE", and is 
                               simply an alternate way to disable the 
                               call tree.
                          
              enable           Enables the call tree.  This has the same 
                               effect as "-t" or "/TREE", and is simply 
                               an alternate way to enable the call tree.
                          
              graphics=xx:xx: ...  
                               Changes the tree graphics characters.  The 
                               values given are the hex codes for the 
                               following shapes:
                       
                                (1)     (2)     (3)      (4)      (5)
                                  
                                         |                |        |
                               -----     |     --+--      +--      +--
                                         |       |        |
                        
                               The values should be two-digit hex codes 
                               separated by colons.  For example:
              
                                      graphics=C4:B3:C2:C3:C0 
                        
                               for the IBM extended character set.
              
              nographics       Restore default shape characters 
                               (- | + + +).
              
              head:symbol      Suppresses the full call tree and shows a 
                               call tree with the specified symbol as the 
                               top node.  Multiple top nodes may be 
                               given.
              
              help             Outputs a help screen on tree commands and 
                               terminates FORTRAN-lint.
        
              {no}library      Shows calls made to routines in the 
                               FORTRAN-lint ".lbt" files specified on the 
                               command line and/or the ".cfg" file.
                    
              {no}squish       Compresses the tree vertically by removing 
                               excess line graphics. Less readable, but 
                               takes up half the space.
              
              {no}trim         Trims the call tree by suppressing 
                               repeated subtrees.  Trees are trimmed by 
                               default.
              
              {no}undefined    Shows calls made to routines that are 
                               undefined in the source code, or 
                               libraries.
              
              
              
        7.3 Call Tree Format
              
              The call tree displays routines, subroutine calls, and 
              function references in a graphical format.  The starting 
              routine is shown at the left top of the graph, and each 
              level of routine calls is shown to the right of the calling 
              routine.  Each routine is connected to its called routines 
              by lines drawn from dashes, vertical bars, and plus signs.  
              Within each routine, calls are shown in the order they
              appear in the source code.
                          
              Routines which are not the program routine and are not 
              called by any other routine are considered "detached".  
              They will not appear in the main tree, but will be shown as 
              the head of their own detached trees.
                    
              
                  symbol      explanation
                  -------     -------------------------------------
                                  
                  ( )         Parenthesis are used to mark undefined 
                              routines.
                                  
                  { }         Brackets are used to mark library routines 
                              (from ".lbt" libraries).
                                  
                  @           Precedes calls to dummy routines.
                                  
                  *<name>*    Marks recursive chains that are chopped 
                              after the first iteration.
                        
              
        
        7.3.1 Trimmed Trees
              
              The size of call trees grow exponentially with program 
              size.  This makes generating a complete call tree of a 
              large program impractical, if not impossible.
                          
              Trimmed call trees have duplicate subtrees removed, 
              reducing the tree to a manageable size.  At each trimmed
              point is a numerical reference to where a subtree for the   
              routine can be found.  FORTRAN-lint, as installed, trims 
              trees by default. The switch "-Ttrim" or "/TREE=TRIM" in 
              the default configuration file sets this default.  Full 
              trees can be selected by specifying the "-Tnotrim" or 
              "/TREE=NOTRIM" switch.
                          
              Example of a trimmed tree:
                    
                 PROCDAT-+-GETUNIT
                         |
                         +-READNAME
                         |
                         +-SETTYPE--PRINT (1)--PRINTIT-+-DIPSTAT--*PRINT* 
                         |                             |
                         |                             +-GETUNIT 
                         |
                         +-PRINT see 1
                        
        
              
        7.3.2 Condensing Multiple Calls
              
              The call tree normally shows all routine calls in the 
              program. If one routine calls another several times, each 
              call will be shown in the tree.  If you only want to see 
              the relationships between routines and do not care about 
              the specific number of calls, the "-Tcondensed" or 
              "/TREE=CONDENSED" can be used to show only one call per
              association.  This will show the first time a routine calls 
              another, but will suppress additional calls to the same 
              routine.  The calling order is preserved, but will be based
              only on the first calls to each routine.
                    
                 PROCDAT-+-GETUNIT
                         |
                         +-READNAME
                         |
                         +-SETTYPE--PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                         |                         |
                         |                         +-GETUNIT
                         |
                         +-PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                                          |
                                          +-GETUNIT
        
        
        
        7.3.3 Sorting Alphabetically
              
              For each routine, calls are normally shown in the order 
              they appear in the source code.  If the call ordering is 
              not important, these routine names can be sorted 
              alphabetically for easy look-up.  This is accomplished with 
              the "-Talphabetical" switch under UNIX, or 
              "/TREE=ALPHABETICAL" under VMS.
                          
              Since the call order is lost when sorting alphabetically, 
              the appearance of multiple calls to the same routine will 
              usually not be wanted.  Switches "-Tcondensed" and
              "/TREE=CONDENSED" will suppress these.  See Section 7.3.2 
              for more information.
                   
                 PROCDAT-+-GETUNIT
                         |
                         +-PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                         |                |
                         |                +-GETUNIT
                         |
                         +-READNAME
                         |
                         +-SETTYPE--PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                                                   |
                                                   +-GETUNIT
                        
        
              
        7.3.4 Squished Trees
              
              Call trees are normally double-spaced to aid readability.  
              They can be single-spaced by using the "-Tsquish" or 
              "/TREE=SQUISH" option.  Limitations in line-drawing
              capability of the ASCII character set makes single spaced 
              trees harder to interpret.  If an extended ASCII character 
              set with line drawing characters is available, 
              single-spaced trees can look quite presentable.
                    
                 PROCDAT-+-GETUNIT
                         +-READNAME
                         +-SETTYPE--PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                         |                         +-GETUNIT
                         +-PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                                          +-GETUNIT
                        
        
        
        7.3.5 Graphic Character Set
              
              The call tree uses the ASCII characters "-", "|", and "+" 
              to connect the routine names.  If an extended ASCII 
              character set is available with line joints, these 
              characters can be used to improve the appearance of the 
              call tree.
                          
              Alternate graphic characters can be selected with 
              "-Tgraphics=xx:xx:xx:xx:xx" or 
              "/TREE=(GRAPHICS=xx:xx:xx:xx:xx)", where the "xx" are 
              hexadecimal codes for the ASCII characters.  Alpha hex 
              characters may be either uppercase or lowercase.  All codes 
              must be specified, even if only one or two are changed.  
              The default codes are "-Tgraphics=2d:7c:2b:2b:2b" or
              "/TREE=(GRAPHICS=2d:7c:2b:2b:2b)" for the characters -, |,  
              +, +, and +.
        
              An example is using the "-Tgraphics=c4:b3:c2:c3:c0" option 
              under UNIX, or "/TREE=(GRAPHICS=c4:b3:c2:c3:c0)" under VMS 
              for the IBM extended character set.
                          
              The default shape codes can be reselected with the 
              "-Tnographics" or "/TREE=NOGRAPHICS" switch.
                          
                          
                    
        7.4 Call Tree Content
              
        7.4.1 Top Node
              
              Call trees can be generated with any routine as the top 
              routine.  When the top routine is selected, the full tree 
              and detached trees are suppressed.
                          
              The "-Thead:name" or "/TREE=HEAD:name" option will select 
              "name" as the head of the tree.  Multiple trees can be 
              selected by giving multiple routine names; eg.
              "-Thead:PRINT,head:SETTYPE" or 
              "/TREE=(HEAD:PRINT,HEAD:SETTYPE)" will show trees for both 
              "PRINT" and "SETTYPE".
        
                    
                 FORTRAN-lint    (call tree)                              
                                          
                 This is a primary tree starting at the program 'PRINT'
                        
                 PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                                |
                                +-GETUNIT
        
                              
                 This is a primary tree starting at the program 'SETTYPE'
                        
                 SETTYPE--PRINT--PRINTIT-+-DIPSTAT--*PRINT* 
                                         |
                                         +-GETUNIT
                        
              
              If the switch "-Tnohead" or "/TREE=NOHEAD" appears after 
              one of the "-Thead:name" or "/TREE=HEAD:name" switches, the 
              full tree and detached subtrees are restored and 
              "-Thead:name" and "/TREE=HEAD:name" is ignored.
                          
                          
                          
        7.4.2 Undefined Routines
              
              Undefined routines are subroutines and functions which are 
              called but do not appear in the source code or libraries 
              analyzed.  These are normally shown in the call tree with
              the routine name within parenthesis.  These routines can be 
              suppressed with "-Tnoundefined" or "/TREE=NOUNDEFINED" if 
              desired.  If "-Tnoundefined" or "/TREE=NOUNDEFINED" was 
              used as a default in a configuration file, the undefined
              routines can be selected again with the "-Tundefined" or 
              "/TREE=undefined" switch on the command line.
        
                    
        
        7.4.3 Library Routines
               
              Library routines are subroutines and functions whose 
              definition appears in a FORTRAN-lint library (".lbt" file) 
              rather than the source code.  These routines will appear in 
              the tree only if they are called from routines in the 
              source code, and if the appropriate library is specified on 
              the command line when the sources are analyzed.  Library 
              routines are shown surrounded by curly braces.
                          
              Call chains are not preserved in libraries, so a library 
              routine will appear as not calling any other routines, even 
              if the library routine did contain routine calls.
                          
              Library routines can be suppressed from the call tree with 
              the "-Tnolibrary" or "/TREE=NOLIBRARY" switch.  If 
              "-Tnolibrary" or "/TREE=NOLIBRARY" was used as a default in 
              a configuration file, the library  routines can be  
              selected  again with the "-Tlibrary" or "/TREE=LIBRARY" 
              switch.
        
        
        
        7.5 Recursion
              
              If recursive calls were shown in the call tree, any 
              recursion would cause the tree to grow to infinite size.  
              To prevent this, recursive chains are chopped after the 
              first iteration.  Asterisks ("*") surround the recursively 
              called routine to indicate that the chain was truncated.
                          
                    
              
        7.6 Dummy Routines 
              
              The at ("@") sign before a routine name indicates that a 
              subroutine or function was called indirectly through the 
              argument list of another function.
                          
                    
              
        7.7 Entry Point
                    
              The ">" symbol in a call tree indicates that the call was
              made through an entry point. 
              
              Example:
                                |
                                +-SUB1>ENTRPT
                                |
                              
              Where ENTRPT is the entry point into subroutine or function 
              SUB1. 


                                    Chapter 8
        
        
                                 Cross Reference
                                                                        
              
        8.1 Overview
              
              If the switch "-x" under UNIX or "/XREFERENCE" (cross 
              reference) under VMS is used, FORTRAN-lint generates a 
              cross reference symbol table.
              
              Cross reference tables can be generated from the sources, 
              or may quickly be generated from a database file (see 
              chapter 10).
                          
              The "-X" and "/XREFERENCE=" (cross reference options) 
              switches are used to control the format and content of the 
              cross reference table under UNIX and VMS, respectively.
                          
              The options that control the cross reference format under 
              UNIX are:
                    
                  -X{no}tabular     Selects tabular format (as opposed to 
                                    freeform)
                  -Xfreeform        Selects freeform format
                  -X{no}line        Selects line resolution (as opposed 
                                    to subprogram resolution)
                  -X{no}legend      Selects legend for line resolution 
                                    codes
                                  
                              
              The options that control the cross reference format under 
              VMS are:
                    
                  /XREFERENCE={no}tabular     Selects tabular format (as 
                                              opposed to freeform)
                  /XREFERENCE=freeform        Selects freeform format
                  /XREFERENCE={no}line        Selects line resolution 
                                              (as opposed to subprogram 
                                              resolution)
                  /XREFERENCE={no}legend      Selects legend for line 
                                              resolution codes
                                  
                              
              There are two available formats for the cross reference
              table: "freeform" and "tabular".
        
              The "freeform" cross reference is the default format.  It 
              has variable length lines and shows the information in a 
              compact format.  The default options for this form are
              "-Xnoline" and "-Xnolegend" under UNIX, or 
              "/XREFERENCE=noline" and "/XREFERENCE=nolegend" under VMS.

              The "tabular" cross reference has its fields organized into 
              columns, and is at least 132 characters wide.  This form 
              has the defaults "-Xline" and "-Xlegend" under UNIX, or
              "/XREFERENCE=line" and "/XREFERENCE=legend" under VMS.
                          
              The "line" or "noline" option sets the cross reference to 
              either line resolution or subprogram resolution, 
              respectively.  Subprogram resolution shows usage of a 
              symbol within a subprogram, while line resolution shows 
              usage of a symbol on each line in which that symbol 
              appears.  This must be set during source analysis to have 
              effect.
                          
              Using the "-g" or "/GLOBAL" switch during analysis of the 
              sources collects more information and improves the cross 
              reference.  Specifically, dummy argument usage is shown for 
              subroutine and function definitions.  In addition, the 
              usage of the variables and arrays that are passed as actual 
              arguments are determined.
                    
              
              
        8.2 Layout
              
              Symbols are grouped into the following categories:
                    
                  - programs
                  - block data modules
                  - subroutines
                  - functions
                  - common blocks
                  - structures
                  - records
                  - variables and arrays
                  - parameters
                                
                          
              Symbols are sorted alphabetically by name within each 
              group.
                          
              If a symbol appears in more than one context (e.g., as a 
              variable in one subprogram and as a subroutine name in 
              another), the symbol is shown in both groups.
                          
              In the tabular format cross reference, the program, block 
              data, subroutine, and function sections are combined, as 
              are the records and variable/array sections.
                          
              The information shown for each symbol will vary by 
              category.
                          
                          
                    
        8.2.1 Program Routines

              This symbol name is derived from the program name given on 
              a program statement.  If an unnamed program routine exists, 
              it is given the name "Program".  Multiple unnamed programs 
              are named "Program2, Program3, etc...".  The filename and 
              the line number where the program routine begins are shown 
              along with the program name.
        
        
        
        8.2.2 Block Data Routines
              
              These are the symbol names from block data statements. Like 
              program symbols, unnamed block data subprograms are named 
              "Blockdata", "Blockdata2", etc.
                          
              The filename and the line number where the block data 
              subprogram begins are shown along with the block data name.
                          
                          
                    
        8.2.3 Subroutines and Functions
              
              External routines, statement functions, and intrinsic 
              functions are shown in this section, and are labeled 
              correspondingly.
                          
              For functions, the data type is shown.  This is normally 
              the data type of the function definition.  If the function 
              is undefined, the data type used by the first function call 
              is used.
                          
              If the code for the subroutine or function appeared in the 
              sources analyzed, the filename and line number of the 
              subroutine/function statement are shown.  If the definition 
              was in a FORTRAN-lint library (".lbt" file), the name of 
              this library is shown.
                          
              Argument descriptions of external and statement functions 
              are also shown if the "-g" or "/GLOBAL" switch was used 
              during analysis.  The argument descriptions show the
              class, data type, and usage of each argument.  Argument 
              class is one of the following:
              
                    <blank>       variable
                    array         variable or record array
                    subprogram    function or subroutine
                    return        alternate return
                    ---           unused argument
                              
                          
              Argument usage is shown by the single-letter codes listed 
              below. 
                    
                    code          description
                    ----          -------------------
                     S            set
                     R            referenced (used)
                     X            undetermined
                              
              For external subroutines and functions, called routines are 
              shown.  If the table is in tabular format, the line number 
              of each call or function reference is also shown.
                          
              Finally, all calls to the function or subroutine are 
              listed.  In the tabular cross reference, the location of 
              the calls are shown by subprogram, filename, and line 
              number.
             
        
               
        8.2.4 Common Blocks
              
              Common blocks are shown along with their size (in bytes), 
              and a list of their members.
                          
              The routines that the common blocks appear in are shown, 
              categorized into the following groups:
                    
                    model            the definition used for comparison 
                                     (shown as "same" if freeform)
                    same             same declaration as the model
                    names differ     data types and sizes of members 
                                     match model but have different names
                    layout differs   data types or sizes of members do 
                                     not match the model
                        
              
              
        8.2.5 Structures
              
              The structures used within the program are listed, along 
              with their size and format.  Structures of the same name, 
              size, and format will be merged.
                          
                          
        
        8.2.6 Variables, Arrays, and Records
              
              Variables, arrays, records, and arrays of records are shown 
              in this section.  This includes automatic (local), dummy, 
              and common block members.
                          
              Arrays are distinguished by the dimension list.  Each 
              dimension is shown as either an upper bound or a 
              lower/upper bound pair separated by a colon, depending on 
              whether the lower bound is 1.  If the lower or upper bounds 
              are adjustable, "adj" appears.  For open ended dimensions, 
              an asterisk ("*") appears as the upper bound.
                          
              The data type appears next, which includes a length 
              specifier.  For records, the name of the associated 
              structure is shown.
                          
              Next is the scope, which is either "local" or the common
              block that contains it.  For common block members, the 
              location within the common block is also shown.
                          
              Variables, arrays, or records with the same name, 
              dimensions, data type, and scope (if in common, the same 
              block and position) will be merged.
                          
              Finally, the cross reference of the symbol is shown.  The 
              location resolution is either per subprogram or per line, 
              depending on the setting of the "-Xlinenumbers" or
              "/XREFERENCE=linenumbers" option when the sources are 
              analyzed.  Subprogram resolution will show usage within 
              each subprogram, and is described in words.  Line 
              resolution will show usage for each line the symbol appears 
              on, and is described in single-letter codes.
                          
              Symbol usage is described as one or more of the following:
                    
                  line        subprogram
                  resolution  resolution
                  codes       codes               description
                  ----------  --------------  --------------------------- 
                     ---      Unused          Symbol was not referenced, 
                                              set, or indeterminate
                      A       Actual arg      Symbol passed as an actual 
                                              argument
                      B       Array bound     Symbol was used as an 
                                              adjustable bound for an 
                                              array
                      D       ---             Symbol appeared in a 
                                              declaration (type decl, 
                                              dim, common)
                      E       Equivalenced    Appeared in an equivalence 
                                              statement
                      F       SF Dummy arg    Appeared as a statement 
                                              function dummy argument
                      G       Ref as Label    An assigned goto jumped to 
                                              label assigned to this 
                                              symbol
                      i       Indirect Init   A symbol equivalenced to 
                                              this symbol was initialized
                      I       Initialized     Initialized in data 
                                              statement, or when given 
                                              data type
                      L       Set to Label    Symbol was assigned a label
                      P       Dummy arg       Symbol appeared in a 
                                              subroutine or function 
                                              statement
                      R       Ref             Symbol was referenced (it's 
                                              value was used)
                      S       Set             Symbol was assigned a value
                      X       Indeterminate   May be ref or set, but 
                                              exact usage cannot be 
                                              determined
                                 
                          
              Usage information (Ref/Set) is carried through all variable 
              associations, including actual/dummy argument associations, 
              common block member associations, and equivalences.
                          
              The default is to suppress unused common blocks.  See 
              Section 8.4 for more information.
                          
                          
                          
        8.2.7 Parameters
              
              Parameters are shown along with their data type and their 
              value.  Parameters from different routines which have the 
              same name and the same value will be merged.
                          
              The following usage codes apply to parameters:
                    
                  line          subprogram
                  resolution    resolution
                  codes         codes         description
                  ----------    ----------    --------------------------
                      D           ---         Symbol appeared in a 
                                              declaration (type decl, 
                                              parameter)
                      R           Ref         Symbol was referenced (it's 
                                              value was  used)
                      S           Set         Symbol was assigned a value 
                                              (parameter statement)
                        
              The default is to suppress unreferenced parameters.  See 
              Section 8.4 for more information.
              
              
        
        8.3 Format Selection 
              
              FORTRAN-lint allows users to select different formats for 
              the cross reference table by using the "-X" option under 
              UNIX, or "/XREFERENCE=" under VMS.  Available formats 
              include:
                                 
                  -X{no}tabular               /XREFERENCE={no}tabular
                  -Xfreeform                  /XREFERENCE=freeform
                  -X{no}linenumbers           /XREFERENCE={no}linenumbers
                  -X{no}legend                /XREFERENCE={no}legend

              
              A)  tabular/notabular/freeform
                                  
                  The "-Xtabular" or "/XREFERENCE=tabular" option selects 
                  a table style with cross reference data appearing at 
                  fixed columns.  Output is 132 or more columns wide.  
                  The default line numbering option for this format is 
                  "-Xlinenumbers" or "/XREFERENCE=linenumbers".
                                  
                  "-Xfreeform" or "-Xnotabular" under UNIX, and 
                  "/XREFERENCE=freeform" or "/XREFERENCE=notabular" under 
                  VMS select a more compact style with data separated by 
                  single spaces.  The width is the same as in analysis 
                  output.  The default line numbering option for these 
                  formats is "-Xnolinenumbers" or 
                  "/XREFERENCE=nolinenumbers".
                                  
                  The default format is "-Xfreeform" or 
                  "/XREFERENCE=freeform".
                                  
                                  
              B)  linenumbers/nolinenumbers
                                  
                  Selecting "-Xlinenumbers" or "/XREFERENCE=linenumbers" 
                  increases the amount of information shown in the
                  cross reference by giving the line number of each 
                  appearance of a symbol.
                                  
                  Selecting "-Xnolinenumbers" or 
                  "/XREFERENCE=nolinenumbers" limits the resolution of 
                  the cross reference to the subprogram level.
                                  
                  This option must be selected after the "-Xtabular", 
                  "-Xnotabular", "-Xfreeform", "/XREFERENCE=tabular", 
                  "/XREFERENCE=notabular", or "/XREFERENCE=freeform" 
                  option to be effective.
                                  
                  Note that if users want to generate a database file 
                  (".fdb"), "-Xlinenumbers" or "/XREFERENCE=linenumbers" 
                  must be selected besides the "-B" or "/DATABASE=" 
                  option to create a database effectively.
                                  
        
              C)  legend/nolegend
                                  
                  When "-Xlinenumbers" or "/XREFERENCE=linenumbers" is 
                  selected, usage descriptions are represented by single 
                  letter codes.  These are described in a legend at the 
                  end of the cross reference table.   This  legend  may  
                  be suppressed with the "-Xnolegend" or 
                  "/XREFERENCE=nolegend" option.  It may be selected 
                  again with "-Xlegend" or "/XREFERENCE=legend".
                                  
                  This option must be selected after the "-Xtabular", 
                  "-Xnotabular", "-Xfreeform", "/XREFERENCE=tabular", 
                  "/XREFERENCE=notabular", or "/XREFERENCE=freeform" 
                  option to be effective.
                        
              
              
        8.4 Content Selection
              
              Content selection arguments to "-X" or "/XREFERENCE=" 
              are sentence fragments composed of one to six words, 
              separated by underlines or dashes.  Each sentence
              fragment describes a criteria which can be used to select, 
              add to, or filter the cross reference table output.    
                          
              A complete content selection includes the following words 
              as its arguments:
                          
              Under UNIX:
                             
                  -X{conjunction}{_usage}{_scope}{_class}{_named_xxx}
                        
              Under VMS:
                             
                  /XREF={conjunction}{_usage}{_scope}{_class}{_named_xxx} 
           
                  
        CONJUNCTIONS USAGE-ADJECTIVE   SCOPE-ADJECTIVE        CLASS-NOUN
        ------------ ----------------- ---------------------- -----------
        only (D)     used/unused       local                  routines
        and          ref/unref         dummy/nondummy         programs
        no           set/unset         statement/nonstatement subroutines
                     called/uncalled   intrinsic/nonintrinsic functions
                     indeterm/determ   global                 blockdata
                     actual/notactual  common/noncommon       extern
                     init/uninit       external/nonexternal   blocks
                     decl/undecl                              structures
                     equiv/unequiv                            variables
                                                              scalars
                                                              arrays
                                                              records
                                                              parameters
        
        
              While any of the words composing the criteria sentence is
              optional, the order of the words is significant.  All words 
              may be abbreviated as long as they remain unambiguous.  A 
              few examples are:
              
                  example                       result
                  ---------------------------   -------------------------
                  -Xno_unused_variables         Suppress unused variables
                  -Xand_par_named_+oo           Also show parameters with 
                                                names ending in "oo"
                  -Xonly_ref_dum_var_nam_i      Show referenced dummy     
                                                variables named "i"
                  /XREFERENCE=common_arrays     Show arrays in common 
                                                blocks
                  /XREFERENCE=arr_named_a?b+c   Show arrays named         
                                                a{any-letter}
                                                b{zero-or-more-letters}c
                        
              
              (1) The conjunction, if specified, must be first.  This 
                  word specifies whether the criteria sentence is a 
                  selection, filter, or addition.  The default is a 
                  selection.
                        
                  word     type       description
                  ----     ---------  -----------------------------------
                  ONLY     selection  suppress everything but the 
                                      following (default)
                  NO       filter     suppress the following
                  AND      addition   add the following to what is 
                                      already selected (will not be 
                                      subject to previous filter 
                                      criteria)
                                  
                                  
              (2) The usage adjective, if specified, must be next.  This 
                  word acts on symbols at the subprogram level.  
                                  
                  If a symbol is used in a particular subprogram in the 
                  fashion described by the usage adjective, the use of 
                  that symbol within the subprogram is included in the
                  selection.  If the usage adjective is omitted, usage is 
                  not used in determining the selection.
        
                  word           antonym          description
                  -------------  ---------------  -----------------------
                  used           unused           (referenced, set, 
                                                  called, or 
                                                  indeterminate)
                  referenced     unreferenced
                  set            unset
                  called         uncalled
                  indeterminate  determinate
                  actualarg      notactualarg     (variables passed to 
                                                  external routines)
                  initialized    uninitialized
                  declared       undeclared       (data type, dimensions, 
                                                  or common)
                  equivalenced   unequivalenced
                                      
                                  
                  Filtering acts on references at a subprogram level, 
                  filtering out the references to a symbol that match the 
                  filter criteria.  If all references to a symbol are 
                  filtered out, then the symbol itself is suppressed.
                                  
                                  
              (3) The scope adjective, if specified, must be next.  
                                  
                  This is used in a similar fashion to the usage 
                  adjective, but relates to the scope of the symbol.  If 
                  the scope adjective is omitted, scope is not used in 
                  determining the selection.
                        
                  word           antonym         description
                  -------------  --------------  ------------------------
                  local             -            Dummy, Statement,        
                                                 Intrinsic, or Automatic
                  dummy          nondummy        Dummy argument
                  statement      nonstatement    Statement function
                  intrinsic      nonintrinsic    Intrinsic function
                  global            -            Common or External
                  common         noncommon       Common block or common 
                                                 block member
                  external       nonexternal     External routine
                                  
                                  
              (4) The class noun, if specified, must be next. This 
                  specifies the class of the symbol.
                                  
                  The class noun describes categories of symbols.  If the 
                  class noun is omitted, the selection contains all 
                  categories of symbols, limited by the usage and scope
                  adjectives.
        
                  class          subclasses    description
                  ------------   ------------- --------------------
                  routines                     Includes programs,         
                                               subroutines, etc...
                                 programs
                                 subroutines   Includes dummy subroutines
                                 functions     Includes statement, dummy, 
                                               and intrinsic functions
                                 blockdata
                                 external      External routines which 
                                               are undefined and unused
                  blocks            -          Common blocks
                  structures        -
                  variables                    Includes scalars, arrays, 
                                               and records
                                 scalars       Single-valued variables
                                 arrays
                                 records       Structured records
                  parameters        -          Defined in parameter 
                                               statement
                                  
                                  
                  Each class contains all its subclasses.

                                  
              (5) The symbol name is specified last.  
                                  
                  This is composed of two words, the word "named" 
                  followed by the actual symbol name.  The following 
                  wildcards are allowed:
                                  
                        *  or  +    matches zero or more characters
                        ?  or  .    matches one character
                                  
                  These wildcards may be combined in any fashion.  
                                  
                  Example:
                        
                        -Xnamed_ab+f.h                         under UNIX
                  or       
                        /XREFERENCE=named_ab+f.h               under VMS
                                 
                          
              The default content of the cross reference table is 
              everything except unused common variables and unreferenced 
              parameters.
                          
              Some more examples:
                    
                  -Xno_intrinsic                   Suppress intrinsic 
                                                   functions.
                                  
                  -Xuncalled_routines              Only routines that 
                                                   have not been called.
                                   
                  -Xand_unused_parameters          Show unused 
                                                   parameters, too.
                                  
                  -Xno_unused_common_variables     Do not show 
                                                   declarations of common 
                                                   variables where they 
                                                   are unused (if it's 
                                                   never used, the symbol 
                                                   name is not shown).
                                  
                  /XREFERENCE=routines             Only show routine 
                                                   names.
                                  
                  /XREFERENCE=no_common            Suppress common blocks 
                                                   and common block       
                                                   members
                                  
                  /XREFERENCE=unset_functions      Show only undefined 
                                                   functions.
                                  
                  /XREFERENCE=unused_dummy_arrays  Show array dummy       
                                                   arguments that are     
                                                   unused.
                              
                          
              Multiple phrases may be given, which are checked in order 
              from left to right.  The phrases may be either on the same 
              switch or on separate switches.   
                          
              Example:
                    
                   /XREFERENCE=routines,and_common_blocks     
                              
              This will show routines and common blocks.
                          
                          
              Example:
                    
           -Xset_variables -Xno_unref_common_arrays -Xand_init_common_var
        
              This will show set variables that are not unreferenced 
              array common block members, and any common block members 
              that are initialized.
                          
              Remember, the default conjunction is "only".  The following
              example will produce unexpected results:
                    
                  -Xused_variables -Xequivalenced_variables
              or
                  /XREFERENCE=used_variables                          
                  /XREFERENCE=equivalenced_variables
                              
                          
              If the intent is to produce a cross reference table with 
              only variables that are used or equivalenced, then the 
              above command line option will not work.  The second
              argument "equivalenced_variables" will override the first 
              argument "used_variables" since the default conjunction is 
              "only".  The cross reference table produced by this option 
              will only include equivalenced variables.  The above option 
              should be rewritten as follows:
                    
                  -Xused_variables -Xand_equivalenced_variables
              or
                  /XREFERENCE=used_variables
                  /XREFERENCE=and_equivalenced_variables


                                    Chapter 9
                                                          
                                                          
                                 Library Support
                                                                        
              
        9.1 Using Library Files
              
              FORTRAN-lint searches library files specified on the 
              command line to check the interface of calls to routines 
              not defined in the source.  All files specified with the
              extension ".lbt" are assumed to be FORTRAN-lint created 
              libraries.
                          
              If all specified libraries have been searched and an 
              undefined routine could not be found in any of them, 
              libraries "unixlib.lbt" and "vmslib.lbt" are searched on
              the UNIX and VMS systems, respectively.
                    
              
              
        9.2 Creating Library Files
              
              You can create or update any FORTRAN-lint library file in 
              the following manner.
                          
              Under UNIX:
                    
                  flint -L mylib.lbt file1.f file2.f ...     
                              
              Under VMS:
                          
                  flint /LIBRARY=mylib.lbt file1.for file2.for ...     
                           
                              
              These commands add all routines in the source files 
              "file1.f file2.f ..." (or "file1.for file2.for ...") to the 
              library "mylib.lbt".  If the file "mylib.lbt" is already 
              present, it will be updated.  Otherwise, a new library will 
              be created.
                          
              Source files should be debugged before "flint -L" or "flint 
              /LIBRARY=" is used, as the "-L" and "/LIBRARY=" options 
              cause FORTRAN-lint to run in a special mode, bypassing the 
              normal analysis with reporting errors.
        
              If a library routine is modified and the library needs to 
              be updated, simply repeat the command used to create the 
              library, using the proper source file and library file 
              names.  The library will be updated to include the new 
              definitions of routines in the source file.  Other routines 
              in the library will be left alone.  It is important to 
              update your library whenever the library sources are 
              modified.

        9.3 Miscellaneous Library Issues
            
        9.3.1 Interaction with Cross Reference and Call Trees
              
              The cross reference table and the call tree automatically 
              include referenced library routines.  In the cross 
              reference table, each appearance of a library function is 
              preceded by its associated library name.  Library functions 
              are marked within the call tree with curly braces ("{ }").
                          
                          
                          
        9.3.2 Library File Format
              
              To avoid possible formatting problems, library files are 
              presently revision locked.  FORTRAN-lint will give a 
              warning message if incompatible library files are used.
                    
              
               
        9.4 Creation of Library Routine Shells
              
              In order to allow FORTRAN-lint to check parameter passing 
              between FORTRAN subroutines and library routines 
              (particularly package routines), it is necessary for 
              FORTRAN-lint to have something to look at which shows the 
              structure of the routine call, the type of value returned 
              and, of course, the arguments which need to be passed by 
              the calling routine to the called routine.
                          
              In the case of most package software routines, the source 
              code is not available for FORTRAN-lint to "look at".  
              Therefore, the creation of a "shell" file is necessary.  A  
              "shell" file defines the calling interface of the library 
              routines.
        
              The FORTRAN-lint package includes ASCII text files  
              "vmslib.lsh" and "unixlib.lsh" ("unixlib.F" for compilers 
              supporting CPP under UNIX).
                    
                  flint -L unixlib.lsh unixlib.lbt             under UNIX
              or
                  flint /LIBRARY=vmslib.lsh vmslib.lbt         under VMS
                        
              
              The required elements of a shell are: 
                    
                  (1)  definition of the return value 
                                      
                  (2)  name of the function  
                                      
                  (3)  the dummy argument list.  
                          
              The data type of the dummy arguments and their usage need   
              to be defined within the shell of the function.  Switches 
              on the arguments have been designed to allow FORTRAN-lint 
              to handle the shell more efficiently.  
              
              Function argument switches may only be used on the 
              arguments in function shells, not in subroutine shells.  
              Available switches include:
              
              /v          Parameter passed by value.  [call foo(%val(3))]
              
              /q          Suppress error #251 (scalar passed to array) 
                          and data type checking.  This switch is used to 
                          allow binary data to be passed in any form 
                          without the data type being checked.  For 
                          example, a quadword may be passed in any of the 
                          following forms:  LOG*1 FOO(8), INTEGER*2 
                          FOO(4), or INTEGER*4 FOO(2).
              
              /z          Suppress all interface checking with regards to 
                          this argument.  The argument is of unspecified 
                          data type.
              
              /o          This argument is optional.
                          [call foo(a,,b,,c,d)]
                    
                          
              Optional argument switches:
                          
              /l          The rest of the argument list starting from the 
                          current argument with this "/l" switch is 
                          optional.  This allows for variable length 
                          argument lists to be handled.
                          
              /s          This argument is set in the function.
                          
              /r          This argument is referenced in the function.
                          
              /i          This argument is indeterminate.
                          
              Each "shell" is a simple FORTRAN subprogram that takes the 
              same arguments as the associated library subprogram and 
              references or sets these arguments in a similar fashion. 
        
              Examples below show the structure of some of the FORTRAN 
              library shells found in "unixlib.lbt".
                    
                  integer function signal (signum/r, proc, flog/r)
                  integer signum, flag
                  external proc
                  call proc
                  end

                  real function r_copysign (x/r, y/s)
                  real x,y
                  end
                        
              
              The following example tells FORTRAN-lint that only the 
              first two arguments in the argument list are required; the 
              rest of them are optional.  Note that arguments CLASS1, 
              CLASS2, CLASS3, and CLASS4 all need to specify the "/l" 
              switch.
                    
                  INTEGER FUNCTION STUDENT (NAME/r, CREDITS/r, CLASS1/rl, 
                     CLASS2/rl, CLASS3/rl, CLASS4/rl)
                  CHARACTER*40 NAME
                  INTEGER CREDITS
                  INTEGER CLASS1, CLASS2, CLASS3, CLASS4
                  END


                                   Chapter 10
        
        
                            Database and ".fdb" Files
                                                                        
              
        10.1  What Are ".fdb" Files
              
              Files with extension ".fdb" are the database files 
              generated by FORTRAN-lint for source code analysis.  These 
              database files contain the information on all symbols. They 
              can be used by FORTRAN-lint and Xlint to regenerate symbol 
              table cross reference information, call trees, and source 
              analysis messages, at a later time without having to 
              reanalyze the source code.
                    
              
              
        10.2  How to Create ".fdb" Files
                    
              Database files are created by using the "-B" switch under 
              UNIX, or "/DATABASE=" under VMS.  For example:
                     
                  flint -Bdbfile source.f
              or
                  flint /DATABASE=dbfile source.for
                        
              where "dbfile" can be substituted with any name the user 
              wishes for the database.
                          
              The extension ".fdb" will be automatically added to the 
              filename.  
                          
              If the database already exists, it will be overwritten.   
              This command can be run on a single file, or a list of 
              files, so that interaction between several sources can be 
              checked. 
              
              To reference a database file, simply place the database 
              filename on the command line.  Any file with the ".fdb" 
              extension is assumed to be a database file.  Any other 
              source filenames will be ignored.  Only one database may be 
              queried at a time.  
        
              Example:
                              
                  flint -t dbfile.fdb                    
              or
                  flint /TREE dbfile.fdb                
                                  
              where "dbfile.fdb" is a database file that has been created 
              prior to this query.

              All call tree options are available when operating on 
              database files.  All cross reference options are available, 
              with a few exceptions, the "-Xline" or "/XREFERENCE=line"   
              option will be ignored, and will revert to the value set 
              when generating the database file.  
                          
              Example: 
                          
              If database file "dbfile.fdb" was created without 
              specifying "-Xline" or "/XREFERENCE=line", and later this 
              database is referenced for the cross reference information 
              as in:
                          
                  flint -Xline dbfile.fdb
              or
                  flint /XREFERENCE=line dbfile.fdb
                              
              Users will not get the complete cross reference information 
              because the information is based on "dbfile.fdb" and thus 
              options "-Xline" and "/XREFERENCE=line" have no effect.
        
        
              Also, if unreferenced parameters or unused common block 
              members are not selected when creating the database file, 
              they will not be available in subsequent cross reference
              queries.
                          
              Using the "-B" or "/DATABASE=" switch has no effect on 
              operations other than to create a database file.  
                          
              It is important that ".fdb" files must be regenerated 
              whenever users' source code is modified, so that the 
              diagnostic information stored in the database will reflect 
              the latest sources.
        
        
        
        10.3  ".fdb" and Xlint
              
        10.3.1 What Is Xlint
              
              Xlint is a Motif based programming tool developed by IPT.  
              It is designed to provide FORTRAN developers with an 
              interactive graphical user interface to browse FORTRAN 
              source files.  
                          
              Xlint operates on the databases (".fdb" files) generated by 
              FORTRAN-lint, and allows programmers to interactively 
              generate call trees with various options, or to perform 
              interactive queries on the cross reference table.  
                          
              Note that Xlint requires FORTRAN-lint version 2.95 or 
              greater.

                          

        10.3.2 Creating ".fdb" Files for Xlint
              
              To create a ".fdb" database file for Xlint to use, the 
              following options should be selected:
                          
              1)  "-g"                     under UNIX
                  "/GLOBAL"                under VMS 
                                  
                  This option must be specified for global analysis to 
                  enable checking for consistencies between subprograms, 
                  such as argument lists and common blocks.  It also 
                  improves usage checking and cross referencing of the 
                  arguments used in a function or subroutine call.
                                  
              2)  "-Xline"                 under UNIX 
                  "/XREFERENCE=LINE"       under VMS 
                                  
                  This option must be specified to enable the line 
                  resolution, as opposed to subprogram resolution.  Xlint 
                  always includes line numbers for the source code, error
                  messages, and cross reference information.  
                                  
              3)  "-Oall"                  under UNIX  
                  "/SUPPRESS=ALL"          under VMS
                                  
                  Users can use this option to suppress the output of the 
                  error messages to the screen.
         
        
              Example:
                          
                  flint -Xline -g -Oall -Bdbfile file.f
              or
                  flint /XREF=LINE /GLOBAL /SUPPRESS=ALL /DATABASE=dbfile 
                         file.for
                        
              where "dbfile" is a user specified name for the database 
              file.  The ".fdb" extension will be automatically attached 
              to the filename. 


                                   Chapter 11
        
        
                             CADRE Teamwork Support 
                                                                        
              
        11.1  Overview
              
              FORTRAN-lint is now capable of generating a call tree 
              format compatible with CADRE's Teamwork environment.  
                          
              The new command line option "-Cteamwork=treefile" under 
              UNIX or "/CADRE=teamwork:treefile" under VMS will create a 
              file called "treefile" that can be used as input for 
              building a Teamwork/SD model.  It is assumed that the user 
              is familiar with CADRE's Teamwork/FORTRAN Rev environment 
              and its reverse engineering capabilities.
                    
              
              
        11.2  Configuration
              
              For a seamless integration of FORTRAN-lint into Teamwork, a 
              parser script "frev_script" is included with the 
              FORTRAN-lint package.  This script can replace CADRE's 
              "frev_parser" program.  When frev is invoked, it will use 
              FORTRAN-lint as the front-end parser instead of FORTRAN Rev 
              configuration file.
                          
              The environment variable/logical FREV_PARSER_NAME defined 
              in the Teamwork/FORTRAN Rev configuration file will need to 
              be altered to point to FORTRAN-lint's invocation script.  
                          
              For example, under UNIX:
                          
                  FREV_PARSER_NAME=/cadre/tool_kit/frev_parser 
                        -parser_opt "%t.parser_opt" -pp_opt "%t.pp_opt" 
                            -call_tree %t.call_tree -files -%t.files
                              
              This line needs to be changed to the following:
                          
                  FREV_PARSER_NAME=$FLINTHOME/frev_script 
                        -parser_opt "%t.parser_opt" -pp_opt "%t.pp_opt"   
                            -call_tree %t.call_tree -files %t.files
        
        
              Make sure the environment variable/logical FLINTHOME is 
              defined and pointing to the correct FORTRAN-lint directory.
                          
              Command line options can be passed to FORTRAN-lint using 
              the "parser_opt" command line option on frev.
                          
              Example:

                  frev -model MODEL_NAME -call_tree TREE_NAME -files *.f 
                         -config CONFIG_file -parser_opt 
                             "-uw -xsfg -Xtabular"
        
              Where "-us -xsfg -Xtabular" are the command line options 
              for FORTRAN-lint to perform global analysis with 
              informational messages turned on while producing program 
              statistics and tabular cross reference table.  By default, 
              warnings and data usage messages are turned off in the file 
              "frev_script".
                          
              For example, under UNIX, "frev_script" contains the 
              following line:
                          
                  $PARSER --u --w $OPTIONS -E $FILES 
                         -Cteamwork=$CALL_TREE
                              
              The above line invokes FORTRAN-lint with a default set of 
              options.  Users can modify "frev_script" to add or delete 
              options from the FORTRAN-lint command line. 




                                   Appendix D
                                                          
                                                          
                                 Output Samples
                                                                        
              
        D.1 Sample FORTRAN Program 
              
              
        C  'PROCDAT'
               PROGRAM PROCDAT
               INTEGER IUNIT, PUNIT
               INCLUDE 'demo.inc'
               DO 100 I = 1, 5
         50      CALL GETUNIT( I+5, IUNIT, PUNIT)
                 CALL READNAME( CURITEM.NAME, CURITEM.DIMENSIONS)
                 CALL SETTYPE( CURITEM)
                 CALL PRINT( CURITEM, IUNIT)
        100    CONTINUE
               IF (IUNIT .EQ. 23) GO TO 50
               END
        C 'GETUNIT'
               SUBROUTINE GETUNIT( UNIT, UNIT1)
               INTEGER UNIT, UNIT1
               READ (UNIT1,*) UNIT
               END
        C 'READNAME'
               SUBROUTINE READNAME( NAME, DIMS)
               CHARACTER*(*) NAME
               INTEGER INUSE, STATUS
               COMMON /BLOCK/ INUSE, STATUS
               REAL*8 DIMS(3)
               READ (5, *) NAME, DIMS
               END
        C 'SETTYPE'
               SUBROUTINE SETTYPE( CURITEM)
               INCLUDE 'demo.inc'
               CURITEM.TYPE = CURITEM.DIMENSIONS(2)
               IF (CURITEM.TYPE .GT. 5) CALL PRINT( CURITEM)
               END
        C 'PRINT'
               SUBROUTINE PRINT( CURITEM, IUNIT)
               INCLUDE 'demo.inc'
               IF (CURITEM.TYPE .NE. COUNT) CALL PRINTIT( IUNIT, CURITEM)
               END
        C 'PRINTIT'
               SUBROUTINE PRINTIT( IUNIT, CURITEM)
               INCLUDE 'demo.inc'
               IF (IUNIT .EQ. INUSE) THEN
                 STATUS = 2
                 CALL DIPSTAT( 4, CURITEM)
                 CALL GETUNIT( INUIT, 3)
               END IF
               WRITE (IUNIT,*) CURITEM.TYPE
               END
        C 'DIPSTAT'
               SUBROUTINE DIPSTAT( ISTAT, CURITEM)
               ISTAT = PRINT( CURITEM, 1)
               END
        
        
        C                      <<< DEMO.INC >>>
               STRUCTURE /ITEM/
                 CHARACTER*10 NAME
                 INTEGER TYPE
                 REAL DIMENSIONS(3)
               END STRUCTURE
               RECORD /ITEM/ CURITEM
                    
               INTEGER INUSE*2, STATUS, COUNT, TIME
               COMMON /BLOCK/ INUSE, STATUS
               COMMON /BK2/ COUNT, TIME
                    
              
              
        D.2 Analysis Output 
              
              Under UNIX:
              
        FORTRAN-lint    Rev 3.00                      21-Feb-94  10:19:10 
        Local options:  -w -u -O207,276,76,261 --t 
                        -Xno_unreferenced_parameters 
                        -Xno_unused_common_variables
        Command options:  -Xtabular -x
                    
        demo.f  
                    
        *****************************************************************
             Program PROCDAT             File demo.f               Line 2
                    
        >       IF (IUNIT .EQ. 23) GO TO 50
        >                                ^
        demo.f:PROCDAT line 11:
        SYNTAX WARNING #47- branch into do loop via label 50.
                    
        *****************************************************************
                          
                          
                          
                  Under VMS:
              
        FORTRAN-lint    Rev 3.00             22-Feb-94  14:21:46   Page 1
                    
        Default options:  /WARNINGS /USAGE /SUPPRESS=207,276,76,261 
                          /TREE=trim /XREF=no_unreferenced_parameters, 
                                           no_unused_common_variables
        Command options:  /STATISTICS /TREE /XREF /OUTPUT=c1.out
                    
        DEMO.FOR;300  
        
        *****************************************************************
            Program PROCDAT              File DEMO.FOR             Line 2
                    
        >       IF (IUNIT .EQ. 23) GO TO 50
        >                                ^
        DEMO.FOR:PROCDAT line 11:
        SYNTAX WARNING #47- branch into do loop via label 50.
                    
        *****************************************************************
        
        
        
        D.3 Statistics Output 
              
              
        >>> Statistics:
                    
        Number of source files:     1
                    
        Source files:    50 lines,   1276 bytes  ( 6% comments, 94% code)
        Include files:   44 lines,   1052 bytes  (14% comments, 86% code)
        Total parsed:    94 lines,   2328 bytes  (10% comments, 90% code)
                    
        Total subprograms:      7
          Subroutines:          6
          Functions:            0
          Program:              1
          Block Data:           0
                    
        Individual message summary
        --------------------------
        SYNTAX WARN #47-    1x: branch into do loop via label *.
                    
        Total messages: 1
                    
                            Errors  Warnings   FYIs  
                            ------  -------- --------
            Syntax:              0        1   <supp> 
            Interface:      <supp>   <supp>   <supp> 
            Data usage:          0        0   <supp> 
                    
            Implicit typing:       <supp> 
        
        
        
        D.4 Call Tree 
              
              
              This is a primary tree starting at the program 'PROCDAT'

              PROCDAT-+-GETUNIT
                      |
                      +-READNAME
                      |
                      +-SETTYPE--PRINT (1)--PRINTIT-+-DIPSTAT--*PRINT* 
                      |                             |
                      |                             +-GETUNIT
                      |
                      +-PRINT see 1
        
        D.5 Freeform Cross Reference
               
        ******** SYMBOL TABLE ********
                    
        *** Program:
                    
        PROCDAT : defined at line 2 of demo.f
                            Calls- demo.f:GETUNIT, demo.f:READNAME, 
                                   demo.f:SETTYPE, demo.f:PRINT
                    
        *** Subroutines:
                    
        DIPSTAT : defined at line 48 of demo.f
                            Calls- demo.f:PRINT
                            Called by- demo.f:PRINTIT
        GETUNIT : defined at line 14 of demo.f
                            Called by- demo.f:PROCDAT, demo.f:PRINTIT
        PRINT : defined at line 33 of demo.f
                            Calls- demo.f:PRINTIT
                            Called by- demo.f:PROCDAT, demo.f:SETTYPE, 
                                       demo.f:DIPSTAT
        PRINTIT : defined at line 38 of demo.f
                            Calls- demo.f:DIPSTAT, demo.f:GETUNIT
                            Called by- demo.f:PRINT
        READNAME : defined at line 19 of demo.f
                            Called by- demo.f:PROCDAT
        SETTYPE : defined at line 27 of demo.f
                            Calls- demo.f:PRINT
                            Called by- demo.f:PROCDAT
                    
        *** Common blocks:
                    
        BK2 : size = 8 bytes : Members- COUNT, TIME
                            Defined in- demo.f:PROCDAT, demo.f:SETTYPE, 
                                        demo.f:PRINT, demo.f:PRINTIT
        BLOCK : size = 6 bytes : Members- INUSE, STATUS
                            Defined in- demo.f:PROCDAT, demo.f:READNAME, 
                                        demo.f:SETTYPE, demo.f:PRINT,     
                                        demo.f:PRINTIT 
                    
        *** Structures:
                    
        ITEM : size = 26 bytes : Format- CHAR*10, I*4, R*4
                    
        *** Records:
                    
        CURITEM : struct ITEM : local
                  in (demo.f:PROCDAT) is Indeterminate, Actual arg
                  in (demo.f:SETTYPE) is Dummy arg, Ref, Set, 
                                         Indeterminate, Actual arg
                  in (demo.f:PRINT) is Dummy arg, Ref, Indeterminate, 
                                       Actual arg
                  in (demo.f:PRINTIT) is Dummy arg, Ref, Indeterminate, 
                                         Actual arg
                    
        *** Vars/Arrays:
                    
        COUNT : I*4 : bytes 0-3 of common /BK2/
                  in (demo.f:PRINT) is Ref
        CURITEM : R*4 : local
                  in (demo.f:DIPSTAT) is Dummy arg, Indeterminate, Actual 
                                         arg
        DIMS (3) : R*8 : local
                  in (demo.f:READNAME) is Dummy arg, Set
        I : I*4 : local
                  in (demo.f:PROCDAT) is Ref, Set
        INUIT : I*4 : local
                  in (demo.f:PRINTIT) is Indeterminate, Actual arg
        INUSE : I*2 : bytes 0-1 of common /BLOCK/
                  in (demo.f:PRINTIT) is Ref
        ISTAT : I*4 : local
                  in (demo.f:DIPSTAT) is Dummy arg, Set
        IUNIT : I*4 : local
                  in (demo.f:PROCDAT) is Ref, Indeterminate, Actual arg
                  in (demo.f:PRINT) is Dummy arg, Indeterminate, Actual 
                                       arg
                  in (demo.f:PRINTIT) is Dummy arg, Ref
        NAME : CHAR*(*) : local
                  in (demo.f:READNAME) is Dummy arg, Set
        PUNIT : I*4 : local
                  in (demo.f:PROCDAT) is Indeterminate, Actual arg
        STATUS : I*4 : bytes 2-5 of common /BLOCK/
                  in (demo.f:PRINTIT) is Set
        UNIT : I*4 : local
                  in (demo.f:GETUNIT) is Dummy arg, Set
        UNIT1 : I*4 : local
                  in (demo.f:GETUNIT) is Dummy arg, Ref
                  
        D.6 Tabular Cross Reference
              
        ******** SYMBOL TABLE ********
                    
        *** Subroutines:
        
        Name         Class           Type         Definition 
        -----------------------------------------------------------------
                          /---Calls---\     /--------References---------\
         Arguments         Line-Subprog     Subprog      File        Line
        -----------------------------------------------------------------
        DIPSTAT      subroutine                   demo.f line 48          
                           49-PRINT         PRINTIT      demo.f        42
        ----------------------------------------------------------------- 
        GETUNIT      subroutine                   demo.f line 14          
                                            PROCDAT      demo.f        6
                                            PRINTIT      demo.f        43
        ----------------------------------------------------------------- 
        PRINT        subroutine                   demo.f line 33          
                           35-PRINTIT       PROCDAT      demo.f        9
                                            SETTYPE      demo.f        30
                                            DIPSTAT      demo.f        49
        ----------------------------------------------------------------- 
        PRINTIT      subroutine                   demo.f line 38          
                           42-DIPSTAT       PRINT        demo.f        35
                           43-GETUNIT
        ----------------------------------------------------------------- 
        PROCDAT      program                      demo.f line 2           
                           6-GETUNIT
                           7-READNAME
                           8-SETTYPE
                           9-PRINT
        ----------------------------------------------------------------- 
        READNAME     subroutine                   demo.f line 19          
                                            PROCDAT      demo.f        7
        ----------------------------------------------------------------- 
        SETTYPE      subroutine                   demo.f line 27          
                           30-PRINT         PROCDAT      demo.f        8
        ----------------------------------------------------------------- 
                  
        *** Common blocks:
                    
        Name         Size     Members          
         Consistency     References
        ----------------------------------------------------------------- 
        BK2          8        COUNT  TIME      
         model           PROCDAT
         same            SETTYPE  PRINT  PRINTIT
        ----------------------------------------------------------------- 
        BLOCK        6        INUSE  STATUS                               
         model           PROCDAT
         same            READNAME  SETTYPE  PRINT  PRINTIT
        ----------------------------------------------------------------- 

        *** Structures:
                    
        Name         Size     Fields
        ----------------------------------------------------------------- 
        ITEM         26       CHAR*10,   I*4,   R*4
        ----------------------------------------------------------------- 
        
        *** Vars/Arrays:
                    
        Name         Type                  Attributes 
         Subprogram   File          References
        ----------------------------------------------------------------- 
        COUNT        I*4                   bytes 0-3 of
                                           common /BK2/             
         PRINT        demo.f          34-D     35-R
        
        ----------------------------------------------------------------- 
        CURITEM      struct ITEM           local 
         PROCDAT      demo.f           4-D      7-XA     8-XA     9-XA
         SETTYPE      demo.f          27-P     28-D     29-RS    30-RXA
         PRINT        demo.f          33-P     34-D     35-RXA
         PRINTIT      demo.f          38-P     39-D     42-XA    45-R
        ----------------------------------------------------------------- 
        CURITEM      R*4                   local 
         DIPSTAT      demo.f          48-P     49-XA
        ----------------------------------------------------------------- 
        DIMS         R*8 (3)               local 
         READNAME     demo.f          19-P     23-D     24-S
        ----------------------------------------------------------------- 
        I            I*4                   local 
         PROCDAT      demo.f           5-RS     6-R
        ----------------------------------------------------------------- 
        INUIT        I*4                   local 
         PRINTIT      demo.f          43-XA
        ----------------------------------------------------------------- 
        INUSE        I*2                   bytes 0-1 of
                                           common /BLOCK/ 
         PRINTIT      demo.f          39-D     40-R
        -----------------------------------------------------------------
        ISTAT        I*4                   local 
         DIPSTAT      demo.f          48-P     49-S
        ----------------------------------------------------------------- 
        IUNIT        I*4                   local 
         PROCDAT      demo.f           3-D      6-XA     9-XA    11-R
         PRINT        demo.f          33-P     35-XA
         PRINTIT      demo.f          38-P     40-R     45-R
        ----------------------------------------------------------------- 
        NAME         CHAR*(*)              local 
         READNAME     demo.f          19-P     20-D     24-S
        ----------------------------------------------------------------- 
        PUNIT        I*4                   local 
         PROCDAT      demo.f           3-D      6-XA
        ----------------------------------------------------------------- 
        STATUS       I*4                   bytes 2-5 of 
                                           common /BLOCK/ 
         PRINTIT      demo.f          39-D     41-S
        ----------------------------------------------------------------- 
        UNIT         I*4                   local 
         GETUNIT      demo.f          14-P     15-D     16-S
        ----------------------------------------------------------------- 
        UNIT1        I*4                   local 
         GETUNIT      demo.f          14-P     15-D     16-R
        -----------------------------------------------------------------
        
        
        
        
                  ------------------ LEGEND ------------------
        
                  P - dummy argument                         
                  D - declaration                            
                  R - referenced                             
                  S - set                                    
                  I - initialized                            
                  i - initialized indirectly                 
                  X - usage cannot be determined             
                  A - actual argument                        
                  B - used as an assumed bound         
                  L - used as a label in an assign statement 
                  G - used as a label in a goto statement    
                  F - statement function dummy argument      
                  E - equivalenced                           
        
                  --------------------------------------------



                                   Appendix E
                                                          
                                                          
                               Diagnostic Messages
                                                                        
              
        E.1   Format
              
              FORTRAN-lint's diagnostic messages are defined in a text 
              file "flint.err".  This file contains one message per line 
              in the following format:
                          
                    ### XX ---------------------------------
                                    
              where   ###  is a three-digit message number
                          
                      XX   is a two-letter diagnostic code
                            
                      -----------------------------  is the message text
                          
              Example:
                          
                    157 SE no matching "(".
                              
                          
              The message number may be less than three digits long, but 
              it must be right-justified in a three column field.
                          
              The first letter of the diagnostic code specifies a basic 
              error category as follows:
                    
                    letter      kind of problem
                    ------      ---------------------------
                    'S'         syntax
                    'U'         data usage
                    'I'         call interface
                    'P'         portability
                    'M'         implicit typing
                    'O'         overflow (limit exceeded)
                        
             
              The second letter of the diagnostic code specifies a 
              severity level as follows:
              
                    letter      kind of problem
                    ------      ----------------
                    'E'         error
                    'W'         warning
                    'F'         hint (FYI)
                        
              Lines that begin with an "I" are not diagnostic messages, 
              but contain the control information used during portability 
              checking to select diagnostic messages.
              

              
        E.2   Diagnostic message list
                    
              The following is the list of the diagnostic messages for 
              FORTRAN-lint version 3.00:
                          
        syntactical errors:
                     
              2 SE illegal character in label field.
              3 SE expected symbol name.
              5 SE missing "/".
              6 SE illegal character.
             17 SE missing "(".
              7 SE missing ")".
             10 SE filename must be enclosed in quotes.
             16 SE illegal delimiter after array subscript.
             20 SE extra characters following an otherwise valid 
                   statement.
             21 SE unexpected end of line.
             25 SE illegal character after argument.
             28 SE not a fortran statement.
             29 SE missing "." after logical constant.
             33 SE expected "=".
             36 SE missing delimiter (expected a comma).
             43 SE missing label.
             42 SE missing expression.
             62 SE not enough chars in hollerith (only %0 of %1).
             64 SE expected 'TO'.
             67 SE unterminated string.
             69 SE this is not a valid constant.
             70 SE missing operand.
             71 SE missing operator after period.
             72 SE unknown operator after period.
             73 SE missing period after operator.
             75 SE missing '>'
             77 SE illegal value for repeater.
             87 SE expected ':'.
             99 SE expected a ',' or a '/'.
            107 SE illegal character after argument in function call.
            108 SE illegal character after argument in subroutine call.
            109 SE missing "THEN".
            157 SE no matching "(".
            199 SE no preceding line to continue from.
             98 SE exceeded internal limit of %0 continuation lines.
            262 SE label field of continuation line must be blank.
             12 SE invalid length specifier.
            150 SE missing structure name.
            151 SE missing field name.
            188 SE missing constant list.
            231 SE the %0 i/o specifier requires a value
            232 SE unknown i/o specifier %0.
            283 SE bad value for length specifier.
            284 SE variable expression where constant required.
             32 SE missing constant (expected .TRUE. or .FALSE.)
             15 SW symbol name %0 is split onto a continuation line.
             19 SW symbol name %0 is broken by whitespace.
                     
              
              
        data and symbol classification errors:
        
              8 SE fixed value data item not allowed here.
              9 SE symbol %1 previously used and implicitly typed as %0.
             14 SW symbol %1 re-declared with the same data type %0.
            244 SE symbol %2 previously declared as %0, now %1.
             11 SE array %0 redimensioned with different dimensions.
            242 SW array %0 redimensioned with same dimensions.
             13 SE only a variable or array may be initialized in a data 
                   statement.
             18 SE illegal program name.
             22 SE symbol name already used.
             23 SE maximum of 20 dimensions.
             24 SE bad symbol name.     
             26 SE illegal label.
             38 SE not a structure name.
             40 SE subprogram name not allowed here.
             37 SE subroutine name not allowed here.
             41 SE duplicate dummy argument names in statement function.
             44 SE illegal use of statement function dummy argument.
             50 SE dummy argument not allowed in a common block.
             52 OO maximum of 256 statement function dummy arguments.
             58 SE illegal argument.
             65 SE parameter already assigned a value.
             68 SE structure name already used.
             88 SE variable is already in common block /%0/.
            115 SE function reference not allowed here.
            116 SE illegal dummy argument in statement function.
            144 SE statement function dummy argument should be a 
                   variable.
            120 SE structure reference not allowed here.
            145 SE program name not allowed here.
            146 SE block data name not allowed here.
            147 SE not a valid field name.
            167 SE this symbol was declared as an array.
            445 SE array referenced with too many subscripts.
            169 SE character string %0 subscript out of bounds.
            170 SE nonconstant subscript where constant required.
            171 SE invalid equivalence of common block members %0 and %1.
            172 SE equiv of %0 and %1 back-extends common /%2/ by %3 
                   bytes.
            173 SE %0 is inconsistently equivalenced to itself thru %1.
            174 SE scalar variable %0 referenced with %1 subscript(s).
            175 SE reference to %0-dimensional array %1 with %2  
                   subscript(s).
            176 SW subscript #%1 of array %0 out of bounds.{except case 
                   in #275}
            275 SF subscript #%1 of array %0 out of bounds (declared as 
                   single element).{highest dimension, single element, 
                   passed array}
            178 SE lower bound greater than upper bound 
                   in array declaration.
            267 SE unclosed structure block.
            197 SE dummy argument not allowed here.
            259 SW length of initializer list exceeds variable list by %0 
                   items (after %1).
            260 SW list of initialization constants is short by %0 items 
                   (no value for %1).
             27 SE this variable should not have an array subscript.
            158 SE not an intrinsic function.
            123 SE right bound less than left bound in character 
                   substring.
            148 SE no matching structure statement for this end 
                   structure.
            149 SE field-namelist allowed only in nested structures.
            152 SE this field should not have a subscript.
            180 SE constant required here.
            229 SE equivalenced symbol %0 is not a variable or array.
            233 SW symbol of type %0 used as pointer (forced to %0).
            234 SE pointer variable cannot be an array.
            235 SE a pointer variable cannot be pointer based.
            236 SE symbol %0 already based by pointer %1.
            263 SE a common block member cannot be pointer based.
            264 SE a dummy argument cannot be pointer based.
            266 SE this symbol not allowed as a pointer based variable.
            237 SE external subprogram name not allowed here.
            238 SE a pointer variable cannot be a record.
            239 SE cannot equivalence function variable.
            240 SE cannot equivalence dummy argument.
            241 SE cannot equivalence pointer based variable %0.
            160 SE function variable cannot be an array.
            243 SE a pointer variable cannot be an array.
             86 SE function variable not allowed here.
             51 SE function variable cannot be initialized.
            449 SE array section not allowed here.
            450 SE variable not allowed here.
            451 SE array sections not conformable (%0 vs %1 dimensions).
            452 SE cannot assign an array expression to a variable.
            294 SW multiple blank SAVE statements.
            245 SE symbol %0 appears in multiple SAVE statements.
            454 SE dummy arguments cannot appear in a SAVE statement.
            455 SE common block members cannot appear in a SAVE 
                   statement.
            481 SE only variables, arrays, or common blocks may appear in 
                   a SAVE statement.
                     
              
              
        variable usage checking:
        
            106 UW function variable %0 was not set.
            192 UE variable %0 is used as a label but was never assigned 
                   one.
            193 UW variable %0 is assigned a label but never used as 
                   such.
            194 UW variable %0 is used to hold both a label and a value.
            195 UW dummy argument %0 is used as a label.
            124 UF dummy argument %0 is unused.
            126 UE local variable %0 is referenced but never set.
            480 UW local pointer based variable %0 is referenced but 
                   never set.
            127 UW local variable %0 is set but never referenced.
            482 UW local pointer based variable %0 is set but never 
                   referenced.
            128 UF local variable %0 declared but unused.
            133 UE common block members referenced but not set:  %0~~, 
                   %0~~
            134 UW common block members set but not referenced:  %0~~, 
                   %0~~
            135 UF unused common block members:  %0~~, %0~~
            500 UE local variable %0 always referenced before set.
            501 UE local variable %0 conditionally referenced with no way 
                   of being set first.
            502 UW local variable %0 conditionally set but always 
                   referenced. Not set on %1%% of possible paths (%2 
                   of %3).
            503 UW local variable %0 is referenced before set on %1%% of 
                   possible paths (%2 of %3).
            505 UE local variable %0 always referenced (in a called 
                   subroutine) before set.
            506 UE local variable %0 conditionally referenced (in a 
                   called subroutine) with no way of being set first.
            507 UW local variable %0 conditionally set but always 
                   referenced (in a called subroutine). Not set on %1%% 
                   of possible paths (%2 of %3).
            508 UW local variable %0 is referenced (in a called 
                   subroutine) before set on %1%% of possible paths (%2 
                   of %3).
            510 UE SAVEd variable %0 always referenced before set.
            511 UE SAVEd variable %0 conditionally referenced with no way 
                   of being set first (even on a prior invocation of 
                   subprogram).
            512 UF SAVEd variable %0 conditionally set but always 
                   referenced. Not set on %1%% of possible paths (%2 
                   of %3).
            513 UF SAVEd variable %0 is referenced before set on %1%% of 
                   possible paths (%2 of %3).
            514 UF SAVEd variable %0 conditionally referenced, possibly 
                   set first on a prior invocation of subprogram.
            515 UE SAVEd variable %0 always referenced (in a called
                   subroutine) before set.
            516 UE SAVEd variable %0 conditionally referenced (in a 
                   called subroutine) with no way of being set first 
                   (even on a prior invocation of subprogram).
            517 UF SAVEd variable %0 conditionally set but always 
                   referenced (in a called subroutine). Not set on %1%% 
                   of possible paths (%2 of %3).
            518 UF SAVEd variable %0 is referenced (in a called 
                   subroutine) before set on %1%% of possible paths (%2 
                   of %3).
            519 UF SAVEd variable %0 conditionally referenced (in a 
                   called subroutine), possibly set first on a prior 
                   invocation of subprogram.
            520 UE local pointer based variable %0 always referenced 
                   before set.
            521 UF local pointer based variable %0 conditionally 
                   referenced with no way of being set first (other than 
                   prior invocation of subprogram).
            522 UF local pointer based variable %0 conditionally set but 
                   always referenced. Not set on %1%% of possible 
                   paths (%2 of %3).
            523 UF local pointer based variable %0 is referenced before 
                   set on %1%% of possible paths (%2 of %3).
            525 UE local pointer based variable %0 always referenced (in 
                   a called subroutine) before set.
            526 UF local pointer based variable %0 conditionally 
                   referenced (in a called subroutine) with no way of 
                   being set first (other than prior invocation of 
                   subprogram).
            527 UF local pointer based variable %0 conditionally set but 
                   always referenced (in a called subroutine). Not set on 
                   on %1%% of possible paths (%2 of %3).
            528 UF local pointer based variable %0 is referenced (in a 
                   called subroutine) before set on %1%% of possible 
                   paths (%2 of %3).
                     
              
              
        miscellaneous errors:
                     
              1 ZE missing include file.
            477 ZE problem with CDD dictionary definition.
            478 ZE problem with DBMS invoke statement.
            479 SE unknown DBMS clause %0.
            349 ZE label not found in include file; nothing included.
            350 ZE no include file currently open; nothing included.
              4 OO include nesting too deep.
             35 SE unknown compiler directive.
             60 SE cannot mix IMPLICIT NONE and IMPLICIT statements.
             66 SE statement out of order, statement ignored.
             74 SE must occur before %0 in line %1, statement ignored.
            100 ZE missing text library.
            118 ZE text library module not found.
            156 SE invalid specifier.
            166 OO expression too complex.
            179 SE division by zero.
            186 SE executable statements not allowed in block data 
                   module.
                     
              

        control structures:
                     
            137 SE referenced but undefined labels:  %0~~, %0~~
            138 SF unused labels:  %0~~, %0~~
            104 SE entry not allowed in this subprogram.
            196 SE inconsistent usage of label.
             46 SW branch into block if via label %0.
             47 SW branch into do loop via label %0.
             48 SE unclosed block if.
             49 SE unclosed do loop.
             53 SW branch to label %0 from outside block if.
             54 SW branch to label %0 from outside do loop.
            101 SE label multiply defined.
            110 SE no matching "IF" for this "ELSE IF".
            111 SE no matching "IF" for this "ELSE".
            112 SE no matching "IF" for this "END IF".
            113 SE do loop end label inside nested DO LOOP or BLOCK IF.
            114 SE no matching "DO" for this "END DO".
            117 SE missing end statement.
            153 SE $ELSE directive with no matching $IF directive
            265 SE $ENDIF directive with no matching $IF directive
            464 SE $ELSE directive inside $ELSE block
            103 SW dead code

                     
              
        local data type checking:
                     
             34 SE only character values allowed with // operator.
            154 SE must be character data type.
            161 SE %0{numeric/logical} data assigned to a character 
                   variable.
            162 SE character data assigned to a %0{numeric/logical} 
                   variable.
            177 SE non-character variable %0 referenced as character 
                   substring.
            181 SE character expression where numeric data required.
             84 SE variable used in assigned goto must be I*4 data type.
             39 SE illegal data type.
             80 SE %0{numeric/char} expression not allowed in logical if.
             81 SE %0{char} expression not allowed in arithmetic if.
             82 SE arithmetic expression expected.
            105 SF string will be truncated (from %0 to %1 chars).
            125 SM symbols were implicitly typed as %0:  %1~~, %1~~
            136 SE type declaration for symbol %0 missing.{implicit 
                   under/none}
            187 SE cannot assign label to non-integer variable.
             76 SF mixed-mode arithmetic: (%0 o %1).{all operators other 
                   than '='}
            276 SF data type conversion: (%0 = %1).{only = operator, 
                   others use #76}
            
            261 SF %0 initializer converted to match %1 variable %2.
            222 SF %1 variable %2 incompatible with %0 initializer.

        interface checking (argument passing):
              
        >>> obvious mismatches (subprogram name passed to alternate 
            return, etc...)
                     
            250 IE %0 passed to dummy arg which is %1 %2.{obvious 
                   mismatches, ANSI 15.9.3}
                            
                            
                     
        >>> mismatches with scalar entity passed to variable
                     
             55 IE %0 actual arg passed to a %1 dummy arg.{except for the 
                   following}{ANSI 15.9.3}
                            
            I874 /VAX:217          *VAX-VAX:223 ; int constant passed to 
                   larger int
            I875 /VAX:226          *VAX-VAX:223 ; int expression passed 
                   to larger int
            I880 /VAX:226 *VAX:203 *VAX-VAX:223 ; int variable passed to 
                   larger int and not modified
            I876 /VAX:226 *VAX:289 *VAX-VAX:223 ; int variable passed to 
                   larger int and modified
            217 IE %0 actual arg passed to %1 dummy arg.{int const -> 
                   larger int}
            226 IE %0 actual arg passed to %1 dummy arg.
            223 PW %p doesn't allow an %0 actual arg to be passed to an 
                   %1 dummy arg.
            203 IW an %0 variable passed to an %1 dummy arg will 
                   incorporate surrounding memory into its value.
            289 IE an %0 variable passed to an %1 dummy arg which 
                   modifies its value will overwrite surrounding memory.
                            
            I878 /VAX:277          *VAX-VAX:410 ; int passed to smaller 
                   int that is not modified
            I879 /VAX:277 *VAX:227 *VAX-VAX:410 ; int passed to smaller 
                   int that is modified
            277 IE %0 actual arg passed to %1 dummy arg.
            410 PW %p doesn't allow an %0 actual arg to be passed to an 
                   %1 dummy arg.
            227 IW an %0 actual arg passed to an %1 dummy arg which 
                   modifies its value will not change the upper bytes.
                            
            I881 /VAX:457          *VAX-VAX:413 ; logical constant passed 
                   to larger log
            I882 /VAX:412          *VAX-VAX:413 ; logical expression 
                   passed to larger log
            I883 /VAX:412          *VAX-VAX:413 ; logical variable passed 
                   to larger log and not modified
            I884 /VAX:412 *VAX:414 *VAX-VAX:413 ; logical variable passed 
                   to larger log and modified
            457 IE %0 actual arg passed to %1 dummy arg.{log const -> 
                   larger log}
            412 IE %0 actual arg passed to %1 dummy arg.
            413 PW %p doesn't allow a %0 actual arg to be passed to an %1 
                   dummy arg.
            414 IE an %0 variable passed to an %1 dummy arg which 
                   modifies its value will overwrite surrounding memory.
        
            I887 /VAX:278 *VAX-VAX:411 ; logical passed to smaller 
                   logical
            278 IE %0 actual arg passed to %1 dummy arg.
            411 PW %p doesn't allow a %0 actual arg to be passed to a %1 
                   dummy arg.
                            
            I877 /VAX:61 *VAX-VAX:224 ; char constant passed to non-char
             61 IE %0{character} actual arg passed to %1{non-character} 
                   dummy arg.
            224 PW %p doesn't allow a %0{character} actual arg to be 
                   passed to a %1{non-character} dummy arg.
                            
            249 IE %0{structure} passed to a %1{structure} dummy arg 
                   (same size but different format).
            255 IE %0{structure} passed to a %1{structure} dummy arg 
                   (different size and different format).
            256 IF %0{structure} passed to a %1{structure} dummy arg 
                   (same format but different names).
            248 IE %0{structure} passed to a %1 dummy arg.{structure 
                   passed to non-structure}
                            
            >>>future replacement of #248...246 IE %0{structure} passed 
                   to a %1 dummy arg of the same size.    
            >>>future replacement of #248...247 IE %0{structure} passed 
                   to a %1 dummy arg of different size.
            280 IW %0{character} constant passed to a %1{smaller  
                   character} dummy arg.
            281 IF %0{character} actual arg passed to a %1{smaller 
                   character} dummy arg. 
            282 IE %0{character} actual arg passed to a %1{larger 
                   character} dummy arg.
                            
                            
                     
        >>> mismatches with array passed to another array
                     
            252 IE %0 array passed to dummy arg which is a %1 array.{ANSI 
                   15.9.3}
            253 IE %0 array member passed to dummy arg which is a %1 
                   array.{ANSI 15.9.3}
            272 IE %0{structure} array passed to a %1{structure} array 
                   dummy arg (structures have same length but a different 
                   format).
            273 IE %0{structure} array passed to a %1{structure} array 
                   dummy arg (structures have different lengths and 
                   different formats).
            274 IF %0{structure} array passed to a %1{structure} array 
                   dummy arg (structures have same format but different 
                   names).
            287 IE %0 array passed to %1 array of larger size (by %2 
                   elements).
            279 IF %0 array passed to %1 array of smaller size (by %2 
                   elements).
                            
                            
                     
        >>> mismatches with scalar entity passed to an array
                     
            251 IE %0 variable passed to dummy arg which is a %1 
                   array.{except I886}{ANSI 15.9.3.3}
            257 IE %0 expression passed to dummy arg which is a %1 
                   array.{except I885}{ANSI 15.9.3.3}
                            
            I885 /SUN:268 *SUN-SUN:228 ; character expression passed to 
                   byte or L*1 array
            I886 /SUN:230 *SUN-SUN:409 ; character variable passed to 
                   byte or L*1 array
            268 IE %0 expression passed to dummy arg which is a %1 array.
            228 PW %p doesn't allow a %0 expression to be passed to a %1 
                   array.
            230 IE %0 variable passed to dummy arg which is a %1 array.
            409 PW %p doesn't allow a %0 variable to be passed to a %1 
                   array.
                            
            271 IE %0{structure} passed to a %1 array dummy 
                   arg.{structure passed to non-structure array}
            >>>future replacement of #271...269 IE %0{structure} passed 
                   to a %1 array dummy arg of the same size.
            >>>future replacement of #271...270 IE %0{structure} passed 
                   to a %1 array dummy arg of different size.
                            
                              
                     
        >>> mismatches with an array passed to a variable
                     
            254 IE %0 array passed to a %1 dummy arg.{ANSI 15.9.3.2}
                            
                            
                     
        >>> usage conflicts
              
             59 IE constant is changed by subprogram.{ANSI 15.9.3.2}
             63 IW expression is changed by subprogram.{ANSI 15.9.3.2}
        
        
        
        >>> conflict in number of arguments
                     
            258 IE missing argument.
             56 IE not enough arguments.{ANSI 15.9}
             57 IE too many arguments.{ANSI 15.9}
                            
                            
                     
        >>> intrinsic function checking
                     
            198 IE intrinsic function called with improper number of 
                   arguments.
            292 IE %0 is not an allowable type for this intrinsic 
                   function.
            293 IE %0 argument is not compatible with the %1 first 
                   argument.
            295 IE this intrinsic function may not be passed to a 
                   subprogram.
                            
                            
                     
        >>> other interface checking
                     
             85 IE %0 function locally typed as %1.
            140 IW calling a function.
             90 IE cannot call a common block.
             91 IE cannot call a function with a type of CHAR, R*16, or 
                   C*16.
             92 IE cannot call a program name.
             93 IE cannot call a block data name.
             94 IE this name is a common block name.
             95 IE this name is defined as a subroutine.
             96 IE this name is a program name.
             97 IE this name is a block data name.
            121 IF common block /%0/ member names differ (compared to 
                   initial use in routine %1).
            122 IW common block /%0/ organization differs at member %2 
                   (compared to initial use in routine %1).
            185 IW common block /%0/ length mismatch (compared to initial 
                   use in routine %1).
            129 IE missing functions:  %0~~, %0~~
            130 IE missing subroutines:  %0~~, %0~~
            131 IF unused functions:  %0~~, %0~~
            132 IF unused subroutines:  %0~~, %0~~
            189 IW no main program module present.
            190 IW there are %0 program modules.
            191 IE symbol %0 is multiply defined (%1 at %2 line %3 and %4 
                   at %5 line %6).
                     
              
              
        preprocessor:
              
            I804 /VAX/HP:308 -VAX-HP:201 ;debugging lines with D in 
                   column one
            308 SE D-style debugging lines not supported.
            201 PE D-style debugging lines not supported by %p.{ANSI 3.2}

            I872 /OS32:405 -OS32:406 ;debugging lines with X in column 
                   one
            405 SE X-style debugging lines not supported.
            406 PE X-style debugging lines not supported by %p.{ANSI 3.2}
                            
            I855 /SUN/IRIS:318 -SUN-IRIS:320 ;continuation line with "&" 
                   in column 1
            318 SE &-style continuation lines not supported.
            320 PE %p does not support &-style continuation lines.
                            
            I805 /VAX/AOS/SUN/CRAY/IRIS/HP/NCUBE:310 
                   -VAX-AOS-SUN-CRAY-IRIS-HP-NCUBE:202 ;"!"-style inline  
                   comments
            310 SE exclamation point inline comments are not supported.
            202 PE exclamation point inline comments are not supported by 
                   %p.{ANSI 3.2}
                            
            I870 /OS32:347 -OS32:348 ;";"-style inline comments
            347 SE semicolon inline comments are not supported.
            348 PE semicolon inline comments are not supported by 
                   %p.{ANSI 3.2}
                            
            I800 *ANSI:322                                
                   +ANSI:219                                      
                   ;sym 6-31 chars
            I801 *ANSI:322 *VAX*CRAY*NCUBE:301            
                   +ANSI:219 +VAX+CRAY+NCUBE:302                  
                   ;sym 32 chars
            I929 *ANSI:322 *VAX*CRAY*NCUBE:301 *SUN:30    
                   +ANSI:219 +VAX+CRAY+NCUBE:302 +SUN:31          
                   ;sym 33-36 chars
            I930 *ANSI:322 *VAX*CRAY*NCUBE:301 *SUN:30 *OS32:300 
                   +ANSI:219 +VAX+CRAY+NCUBE:302 +SUN:31 +OS32:286 
                   ;sym 37-xx chars
            322 SE symbol name longer than 6 characters.
            301 SE symbol name longer than 31 characters.
             30 SE symbol name longer than 32 characters.
            300 SE symbol name longer than 36 characters.
            219 PE symbol names longer than 6 characters not supported by 
                   %p.{ANSI 2.2}
            302 PE symbol names longer than 31 characters not supported 
                   by %p.
             31 PE symbol names longer than 32 characters not supported 
                   by %p.
            286 PE symbol names longer than 36 characters not supported 
                   by %p.
                            
            I807 /VAX/SUN/OS32/CRAY/IRIS/HP/NCUBE:45 
                   -VAX-SUN-OS32-CRAY-IRIS-HP-NCUBE:204 ;"_" in mid 
                   symbol name
            I808 /VAX/SUN/IRIS/HP/NCUBE:45 
                   -VAX-SUN-IRIS-HP-NCUBE:204           
                   ;"$" in mid symbol name
            I809 /AOS:45                           
                   -AOS:204                             
                   ;"?" in symbol name
             45 SE invalid character in symbol name.
            204 PE non-alphanumeric characters in symbol names not 
                   supported by %p.{ANSI 2.2}
                            
            I935 *NCUBE:497 /NCUBE:498 -NCUBE:499  ; $ or _ as first char 
                   in sym name
            497 SF using an _ or $ to start a symbol name is not 
                   recommended
            498 SE symbol names must begin with a letter
            499 PE %p requires symbol names start with a letter
                            
            I873 /OS32/NCUBE:407 -OS32-NCUBE:408 ; symbolic relational    
                   operators   == <> < > <= >=
            407 SE symbolic form of relational operator not supported.
            408 PE %p does not support symbolic forms of relational       
                   operators.
        
            I933 /OS32:493 -OS32:494 ; symbolic logical operators & (and) 
                   ! (or)
            493 SE symbolic form of logical operator not supported.
            494 PE %p does not support symbolic forms of logical          
                   operators.
                     
              
              
        constants:
                     
            I815 /VAX:325 -VAX:326 ;"123 style octal constant
            325 SE double quote style octal constants not supported.
            326 PE double quote style octal constants not supported by    
                   %p.{ANSI 3.1.4}
                            
            I862 /IRIS:345 -IRIS:346 ;$123 style hex constant
            345 SE $123 style hex constants not supported
            346 PE $123 style hex constants not supported by %p.{ANSI     
                   4.2}
                            
            I816 /VAX/SUN/IRIS/HP/NCUBE:327 -VAX-SUN-IRIS-HP-NCUBE:212    
                   ;'123'O style octal constant
            327 SE octal constants of the form '123'O are not supported.
            212 PE octal constants of the form '123'O are not supported 
                   by %p.{ANSI 4.2}
                            
            I817 /VAX/SUN/IRIS/HP/NCUBE:329 -VAX-SUN-IRIS-HP-NCUBE:213 
                    ;'123'X style hex constant
            329 SE hex constants of the form '123'X are not supported.
            213 PE hex constants of the form '123'X are not supported by 
                    %p.{ANSI 4.2}
            I856 /SUN/IRIS:311 -SUN-IRIS:324 ;B'010101' style binary      
                    constant
            311 SE B'01'-style binary constants not supported.
            324 PE %p does not support B'01' style binary constants.
                            
            I926 /IRIS:462 -IRIS:463 ;'010101'B style binary constant
            462 SE '01'B style binary constants not supported.
            463 PE %p does not support '01'B style binary constants.
                            
            I927 /IRIS:485 -IRIS:486 ;'ff'Z style hex constant
            485 SE 'ff'Z style hex constants not supported.
            486 PE %p does not support 'ff'Z style hex constants.
                            
            I928 /IRIS:487 -IRIS:488 ;O"77" style octal constant
            487 SE O"77" style octal constants not supported.
            488 PE %p does not support O"77" style octal constants.
                            
            I857 /SUN/CRAY/IRIS/HP:328 -SUN-CRAY-IRIS-HP:330 ;O'157' 
                    style octal constant
            328 SE O'17'-style octal constants not supported.
            330 PE %p does not support O'17' style octal constants.
                            
            I858 /SUN/OS32/CRAY/IRIS:332 -SUN-OS32-CRAY-IRIS:334 ;X'3EF' 
                    style hex constant
            332 SE X'3F'-style hex constants not supported.
            334 PE %p does not support X'3F' style hex constants.
                            
            I889 *SUN:419 *OS32:419 +SUN:420 +OS32:420 ;X'1ef' constant 
                    contains +/- or spaces.
            419 SE hexadecimal constant must be composed only of 
                    hexadecimal digits.
            420 PE non-hexadecimal characters in hex constant not 
                    supported by %p.
                            
            I859 /OS32:335 -OS32:336 ;Y'3EF' style hex constant
            335 SE Y'3F'-style hex constants not supported.
            336 PE %p does not support Y'3F' style hex constants.
                            
            I860 /SUN/CRAY/IRIS/HP:338 -SUN-CRAY-IRIS-HP:340 ;Z'3EF' 
                    style hex constant
            338 SE Z'3F'-style hex constants not supported.
            340 PE %p does not support Z'3F' style hex constants.
                            
            I861 /OS32/VAX:342 -OS32-VAX:344 ;Z1234 style hex constant
            342 SE Z3FFF-style hex constants not supported.
            344 PE %p does not support Z3FFF style hex constants.
                            
            I818 /VAX/SUN/HP:331 -VAX-SUN-HP:214 ;Q-style real constant 
                    (quad precision)
            331 SE Q-style real constants not supported.
            214 PE Q-style real constants not supported by %p.{ANSI 4.5}
                            
            I869 /VAX/SUN/HP:415 -VAX-SUN-HP:416 ; double precision real 
                   in complex constant
            415 SE double precision real is not allowed as a part of a 
                   complex constant.
            416 PE %p does not allow a double precision real as a part of 
                   a complex constant.
                            
            I925 /VAX/SUN:483 -VAX-SUN:484 ; quad precision real in 
                   complex constant
            483 SE quad precision real is not allowed as a part of a 
                   complex constant.
            484 PE %p does not allow a quad precision real as a part of a 
                   complex constant.
                            
            I888 /CRAY/HP:417 -CRAY-HP:418 ;1234567B style octal constant
            417 SE octal constants of the form 377B are not supported.
            418 PE octal constants of the form 377B are not supported by 
                    %p.{ANSI 4.2}
                            
            I893 /CRAY:427 -CRAY:428 ; .T. and .F. abbreviations of 
                    .TRUE. and .FALSE.
            427 SE .T. and .F. abbreviations not supported.
            428 PE .T. and .F. abbreviations not supported by %p.
                            
            I894 /CRAY:429 -CRAY:430 ; .N., .A., .O., and .X. operator 
                    abbreviations.
            429 SE .N., .A., .O. and .X. operator abbreviations not 
                    supported.
            430 PE .N., .A., .O. and .X. operator abbreviations not 
                    supported by %p.
                            
            I905 /CRAY:182 -CRAY:183 ;'abc'h or 'abc'r or 'abc'l form of 
                    hollerith
            182 SE this form of hollerith constant is not supported
            183 PE %p does not support this form of hollerith constant
                     
              
              
        data type conversions:
                     
            I825 /VAX/SUN:163 -VAX-SUN:220 ;numeric assigned to a 
                   logical.
            163 SE %0{numeric} data assigned to a %1{logical} variable.
            220 PE %p does not allow a numeric expression to be assigned 
                   to a logical variable.
                            
            I826 /VAX/SUN:164 -VAX-SUN:221 ;logical assigned to a 
                   numeric.
            164 SE %0{logical} data assigned to a %1{numeric} variable.
            221 PE %p does not allow a logical expression to be assigned 
                   to a numeric variable.
                            
            I820 /VAX/SUN/IRIS:313 -VAX-SUN-IRIS:314 ;using integer val 
                   as logical
            313 SE %0{integer} expression where a logical value required.
            314 PE %p does not allow an integer expression to be used as 
                   a logical value.
                            
            I827 /VAX/SUN/IRIS:184 -VAX-SUN-IRIS:218 ;using logical val 
                   as integer
            184 SE %0{logical} value where numeric required.
            218 PE %p does not allow logical data to be referenced as an 
                   integer value.
                            
            I907 /VAX/OS32:460 -VAX-OS32:216 ;character constant in place 
                   of logical
            I829 /VAX/OS32/CRAY/SUN/IRIS:353 -VAX-OS32-CRAY-SUN-IRIS:165 
                   ;character constant in place of numeric
            460 SE character constant where logical data required.
            353 SE character constant where numeric data required.
            216 PE %p does not allow a character constant to be used as a 
                   logical value.
            165 PE %p does not allow a character constant to be used as a 
                   numeric value.
                            
            I854 /SUN:317 -SUN:225 ;using hollerith as a character string
            317 SE hollerith where character type required.
            225 PE %p does not allow hollerith to be used in place of 
                   character type.
                            
            I910 /CRAY/SUN/VAX/IRIS:468 *CRAY:467         
                 -CRAY-SUN-VAX:474 +CRAY:473               
                       ;log     .or. int/hol/char*X
            I911 /CRAY/SUN/VAX/IRIS:468 *CRAY:467  *SUN:465 *VAX*IRIS:465 
                   -CRAY-SUN-VAX:474 +CRAY:473 +SUN:471
                       +VAX+IRIS:471 ;log     .or. real
            I912 /CRAY/SUN/VAX/IRIS:468                   
                   -CRAY-SUN-VAX:474                         
                       ;int/h*8 .or. int/hol*8
            I913 /CRAY/SUN/VAX/IRIS:468            *SUN:465 *VAX*IRIS:465 
                   -CRAY-SUN-VAX:474           +SUN:471
                       +VAX+IRIS:471 ;real    .or. int/real/hol*8/char*8
            I914 /CRAY/SUN/VAX/IRIS:468 *CRAY:469         
                   -CRAY-SUN-VAX:474 +CRAY:475               
                       ;hol*9   .or. int/hol*x
            I915 /CRAY/SUN/VAX/IRIS:468          *SUN:466                 
                   -CRAY-SUN-VAX:474           +SUN:472      
                       ;char*8  .or. int/hol*8/char*x
            I916 /CRAY/SUN/VAX/IRIS:468 *CRAY:470*SUN:466                 
                   -CRAY-SUN-VAX:474 +CRAY:476 +SUN:472      
                       ;char*9  .or. int/hol*8/char*X
            I917 /CRAY/SUN/VAX/IRIS:468 *CRAY:469 *SUN:465 *VAX*IRIS:465 
                   -CRAY-SUN-VAX:474 +CRAY:475 +SUN:472 +VAX+IRIS:471 
                       ;real    .or. hol*9 
            I918 /CRAY/SUN/VAX/IRIS:468 *CRAY:470 *SUN:465 *VAX*IRIS:465 
                   -CRAY-SUN-VAX:474 +CRAY:476 +SUN:472 +VAX+IRIS:471 
                       ;real    .or. char*9
            I919 /CRAY/SUN/VAX/IRIS:468 *CRAY:469 *SUN:466 
                   -CRAY-SUN-VAX:474 +CRAY:475 +SUN:472      
                       ;hol*9   .or. char*X
            461 SE cannot use a %0 value with a logical operator.
            465 SE cannot use a logical operator on a real value.
            466 SE cannot use a logical operator on a character string.
            467 SE cannot mix logical and non-logical with logical 
                   operator.
            468 SE logical operator can only be used on logical values.
            469 SE cannot use logical operator on a hollerith value > 8 
                   chars
            470 SE cannot use logical operator on a character value > 8 
                   chars
            471 PE %p does not allow a logical operator to be used on a 
                   real value.
            472 PE %p does not allow a logical operator to be used on a 
                   character string.
            473 PE %p does not allow logical and non-logical values to be 
                   mixed with a logical operator.
            474 PE %p allows a logical operator to be used only on 
                   logical values.
            475 PE %p does not allow a logical operator to be used on a 
                   hollerith value longer than 8 chars.
            476 PE %p does not allow a logical operator to be used on a 
                   character value longer than 8 chars.
                     
              
              
        statements:
                     
            I906 /CRAY:458 -CRAY:459 ; BUFFER IN/OUT statements
            458 SE BUFFER IN and BUFFER OUT statements not supported.
            459 PE BUFFER IN and BUFFER OUT statements not supported by 
                   %p.{ANSI 3.3}
                            
            I832 /VAX/SUN/IRIS/HP:354 -VAX-SUN-IRIS-HP:355 ; any type of 
                   structure statement
            354 SE structures and unions not supported.
            355 PE structures and unions not supported by %p.{ANSI 3.3}
                            
            I833 /VAX/OS32/CRAY/SUN/IRIS/HP:356 
                   -VAX-OS32-CRAY-SUN-IRIS-HP:357 ; encode/decode 
                       statements
            356 SE ENCODE and DECODE statements not supported.
            357 PE ENCODE and DECODE statements not supported by %p.{ANSI 
                   3.3}
                            
            I834 /VAX/OS32/SUN/IRIS/HP:358 -VAX-OS32-SUN-IRIS-HP:359 ; 
                   accept statement
            358 SE ACCEPT statement not supported.
            359 PE ACCEPT statement not supported by %p.{ANSI 3.3}
            I835 /VAX/IRIS:360 -VAX-IRIS:361 ; definefile statement
            360 SE DEFILE FILE statement not supported.
            361 PE DEFILE FILE statement not supported by %p.{ANSI 3.3}
                            
            I836 /VAX/IRIS:362 -VAX-IRIS:363 ; delete statement
            362 SE DELETE statement not supported.
            363 PE DELETE statement not supported by %p.{ANSI 3.3}
                            
            I837 /VAX/IRIS:364 -VAX-IRIS:365 ; find statement
            364 SE FIND statement not supported.
            365 PE FIND statement not supported by %p.{ANSI 3.3}
                            
            I838 /VAX/IRIS:366 -VAX-IRIS:367 ; rewrite statement
            366 SE REWRITE statement not supported.
            367 PE REWRITE statement not supported by %p.{ANSI 3.3}
                            
            I839 /VAX/OS32/SUN/IRIS/HP:368 -VAX-OS32-SUN-IRIS-HP:369 ; 
                   type statement
            368 SE TYPE statement not supported.
            369 PE TYPE statement not supported by %p.{ANSI 3.3}
                            
            I840 /VAX:370 -VAX:371 ; unlock statement
            370 SE UNLOCK statement not supported.
            371 PE UNLOCK statement not supported by %p.{ANSI 3.3}
                            
            I841 /VAX/OS32/SUN/CRAY/IRIS/HP/NCUBE:372 
                   -VAX-OS32-SUN-CRAY-IRIS-HP-NCUBE:373 ; implicit none
                       statement
            372 SE IMPLICIT NONE statement not supported.
            373 PE IMPLICIT NONE statement not supported by %p.{ANSI 3.3}
                            
            I842 /VAX/SUN/IRIS/HP:374 -VAX-SUN-IRIS-HP:375 ; virtual 
                   statement
            374 SE VIRTUAL statement not supported.
            375 PE VIRTUAL statement not supported by %p.{ANSI 3.3}
                            
            I843 /VAX/SUN/IRIS/HP:376 -VAX-SUN-IRIS-HP:377 ; volatile 
                   statement
            376 SE VOLATILE statement not supported.
            377 PE VOLATILE statement not supported by %p.{ANSI 3.3}
                            
            I844 /VAX/SUN/IRIS:378 -VAX-SUN-IRIS:379 ; options statement
            378 SE OPTIONS statement not supported.
            379 PE OPTIONS statement not supported by %p.{ANSI 3.3}
                            
            I845 /VAX:380 -VAX:381 ; dictionary statement
            380 SE DICTIONARY statement not supported.
            381 PE DICTIONARY statement not supported by %p.{ANSI 3.3}
                            
            I846 /VAX/SUN/CRAY/IRIS/HP/NCUBE:382 
                   -VAX-SUN-CRAY-IRIS-HP-NCUBE:383 ; include statement
            382 SE INCLUDE statement not supported.
            383 PE INCLUDE statement not supported by %p.{ANSI 3.3}
                            
            I847 /VAX/SUN/IRIS/HP:384 -VAX-SUN-IRIS-HP:385 ; byte 
                   statement
            384 SE BYTE statement not supported.
            385 PE BYTE statement not supported by %p.{ANSI 3.3}
                            
            I848 /VAX/SUN/CRAY/IRIS/HP:386 -VAX-SUN-CRAY-IRIS-HP:387 ; 
                   doublecomplex statement
            386 SE DOUBLE COMPLEX statement not supported.
            387 PE DOUBLE COMPLEX statement not supported by %p.{ANSI
                   3.3}
                            
            I849 /VAX/SUN/OS32/CRAY/IRIS/HP/NCUBE:388 
                   -VAX-SUN-OS32-CRAY-IRIS-HP-NCUBE:389 ; enddo statement
            388 SE END DO statement not supported.
            389 PE END DO statement not supported by %p.{ANSI 3.3}
                            
            I850 /VAX/SUN/OS32/CRAY/IRIS/HP/NCUBE:390 
                   -VAX-SUN-OS32-CRAY-IRIS-HP-NCUBE:391 ; namelist 
                        statement
            390 SE NAMELIST statement not supported.
            391 PE NAMELIST statement not supported by %p.{ANSI 3.3}
        
            I851 /SUN:392 -SUN:393 ; static/automatic data types
            392 SE STATIC and AUTOMATIC data types not supported.
            393 PE STATIC and AUTOMATIC data types not supported by 
                   %p.{ANSI 3.3}
                            
            I852 /SUN/CRAY/IRIS/HP:394 -SUN-CRAY-IRIS-HP:395 ;pointer 
                   statement
            394 SE pointers not supported.
            395 PE pointers not supported by %p.{ANSI 3.3}
                            
            I890 /CRAY:421 -CRAY:422 ; task common statement
            421 SE task common blocks not supported.
            422 PE task common blocks not supported by %p.
                            
            I891 /CRAY:423 -CRAY:424 ; local common statement
            423 SE local common blocks not supported.
            424 PE local common blocks not supported by %p.
        
            I892 /CRAY:425 -CRAY:426 ; RECURSIVE qualifier to function 
                   statement.
            425 SE RECURSIVE function qualifier not supported.
            426 PE RECURSIVE function qualifier not supported by %p.
                            
            I896 /CRAY:433 -CRAY:434 ; two-branch arithmetic IF
            433 SE two-branch arithmetic IF not supported.
            434 PE two-branch arithmetic IF not supported by %p.
                            
            I897 /CRAY:435 -CRAY:436 ; indirect logical IF
            435 SE indirect logical IF not supported.
            436 PE indirect logical IF not supported by %p.
        
            I900 /CRAY:441 *CRAY:83 -CRAY:442 +CRAY:89; PUNCH statement
            441 SE PUNCH statement not supported.
            442 PE PUNCH statement not supported by %p.
             83 SE PUNCH statement not supported by in CRAY CFT77 5.0.
             89 PE PUNCH statement not supported by in CRAY CFT77 5.0.
                            
            I901 /CRAY:443 -CRAY:444 ; DOUBLE statement
            443 SE DOUBLE statement not supported.
            444 PE DOUBLE statement not supported by %p.
                            
            I924 /VAX:298 -VAX:299 ; DBMS statements 
            298 SE DBMS statements not supported.
            299 PE DBMS statements not supported by %p.
                     
              
              
        miscellaneous:
                     
            I828 /CRAY:168 *CRAY:351 -CRAY:456 ;array referenced with too 
                   few arguments
            168 SE array referenced with too few subscripts.
            351 SW array referenced with too few subscripts.
            456 PE %p does not allow an array to be referenced with too 
                   few subscripts.
                            
            I903 /CRAY:447 -CRAY:448 ; array section
            447 SE array sections not supported.
            448 PE array sections not supported by %p.
                            
            I902 *CRAY/CRAY:453 +CRAY-CRAY:446 ; pointer based character 
                   variable
            453 SE character variables may not be pointer-based.          
                   {OK in 5.0}
            446 PE pointer-based character variables not supported by %p. 
                   {OK in 5.0}
                            
            I898 /CRAY:437 -CRAY:438 ; file name as unit number
            437 SE use of a file name in place of unit number not 
                   supported.
            438 PE %p does not support the use of a file name in place of 
                   a unit number.
                            
            I899 /CRAY:439 -CRAY:440 ; WRITE statement w/o control list
            439 SE WRITE statement without a control list not supported.
            440 PE WRITE statement without a control list not supported 
                   by %p.
        
            I819 /OS32/IRIS:333 -OS32-IRIS:209 ;non-char data type length 
                   specifier surrounded by parens
            333 SE non-character length specifiers may not be enclosed in 
                   parenthesis.
            209 PE %p does not allow non-character length, specifiers to 
                   be enclosed in parenthesis.
                            
            I821 /VAX/SUN/IRIS:337 -VAX-SUN-IRIS:215 ;linear array 
                   reference
            337 SE reference to %0-dimensional array %1 with a single 
                   subscript.
            215 PE linear element array reference not supported by 
                   %p.{ANSI 5.3}
                            
            I822 /VAX/SUN:339 -VAX-SUN:141 ;sub name in CALL used to be a 
                   variable
            339 SE this symbol was previously declared as a variable 
                   name.
            141 PE %p requires subroutine names to be untyped.{ANSI 8.4}
        
            I823 /VAX/SUN:341 -VAX-SUN:142 ;sub name in CALL used to be a 
                   function name
            341 SE this symbol was previously used as a function name.
            142 PE %p does not allow functions to be called by the CALL 
                   statement.{ANSI 15.6.2.1}
                            
            I824 /VAX/SUN:343 -VAX-SUN:143 ;func name used to be a sub 
                   name
            343 SE this symbol was previously used as a subroutine name.
            143 PE %p does not allow subroutines to be referenced as 
                   functions.{ANSI 15.2.1}
                            
            I802 /VAX:304 -VAX:139 ;missing parens on function statement
            304 SE parenthesis required on function definition.
            139 PE %p requires parenthesis on function definitions.{ANSI 
                   15.5.1}
                            
            I803 /VAX/SUN/IRIS/HP:306 -VAX-SUN-IRIS-HP:200 ;the & form of 
                   alternate return specifier in call
            I931 /HP:489 -HP:490 ;the & form of alternate return 
                   specifier in subroutine statement
            306 SE the & form of alternate return in call statements is 
                   not supported; use *.
            200 PE the & form of alternate return in call statements is 
                   not supported by %p; use *.{ANSI 15.6.2.3}
            489 SE the & form of alternate return in subroutine 
                   statements is not supported; use *.
            490 PE the & form of alternate return in subroutine 
                   statements is not supported by %p; use *.{ANSI
                       15.6.2.3}
                            
            I806 /VAX/SUN/IRIS/HP:312 -VAX-SUN-IRIS-HP:205 ;parameter 
                   statement without parens
            312 SE parameter statement requires parentheses.
            205 PE constant-typed parameter statement not supported by 
                   %p.{ANSI 8.6}
        
            I830 /SUN:303 -SUN:305 ;parameter statement with comma 
                   outside of parens
            303 SE commas must be placed within parenthesis.
            305 PE %p requires comma to be placed within 
                   parentheses.{ANSI 8.6}
        
            I810 /AOS/SUN/OS32/CRAY/IRIS/HP/NCUBE:316 
                   -AOS-SUN-OS32-CRAY-IRIS-HP-NCUBE:208 ;double quoted 
                        string
            316 SE double quote string delimiters not supported.
            208 PE double quote string delimiters not supported by 
                   %p.{ANSI 4.8.1}
                            
            I811 +ANSI:207 ;hollerith constant
            207 PF hollerith constants are not recommended.{ANSI C1}
                            
            I812 /VAX/IRIS/HP:319 -VAX-IRIS-HP:211 ; built in function 
                   %LOC()
            319 SE built in function %%LOC is not supported.
            211 PE built in function %%LOC is not supported by %p.
                            
            I813 /VAX/SUN/IRIS/HP:321 -VAX-SUN-IRIS-HP:206 ;actual arg 
                   %VAL()
            321 SE %%VAL is not supported.
            206 PE %%VAL is not supported by %p.
                            
            I831 /VAX/IRIS/HP:307 -VAX-IRIS-HP:309 ;actual arg %REF(), 
                   %DESCR()
            307 SE %%REF, and %%DESCR are not supported.
            309 PE %%REF, and %%DESCR are not supported by %p.
                            
            I871 /OS32:352 -OS32:404 ;dummy args surrounded by slashes
            352 SE slashes on dummy arguments are not supported.
            404 PE slashes on dummy arguments are not supported by 
                   %p.{ANSI 3.2}
                                         
            I814 /VAX/OS32/SUN/IRIS/HP/NCUBE:323 
                   -VAX-OS32-SUN-IRIS-HP-NCUBE:210 ;data type statement 
                       initialization list
            323 SE type statement initialization lists not supported.
            210 PE type statement initialization lists not supported by 
                   %p.{ANSI 8.4.1}
                            
            I853 /SUN/IRIS:155 -SUN-IRIS:315 ;undefined data type in  
                  implicit statement
            155 SE undefined data type not supported.
            315 PE undefined data type not supported by %p.
                            
            I863 /VAX/SUN/OS32/CRAY/IRIS/HP/NCUBE:396 
                  -VAX-SUN-OS32-CRAY-IRIS-HP-NCUBE:397      ;NONCHAR*2
                       BAR*2,BAR()*2
            I864 /VAX/SUN/OS32/IRIS/HP/NCUBE:396 
                   -VAX-SUN-OS32-IRIS-HP-NCUBE:397          ;NONCHAR*2
                       FUNCTION BAR()
            I865 /VAX/SUN/OS32/IRIS:396 *VAX*SUN*NCUBE:400 
                   -VAX-SUN-OS32-IRIS:397 +VAX+SUN+NCUBE:401
                       ;NONCHAR BAR*2()
            I866 /VAX/SUN/OS32/IRIS/HP:396  *SUN*NCUBE:402 
                   -VAX-SUN-OS32-IRIS-HP:397  +SUN+NCUBE:403 ;NONCHAR
                       FUNCTION BAR*2()
            I867                           /OS32:400      
                  -OS32:401 ;CHARACTER BAR*2()
            I868                  /VAX/OS32/IRIS:402 
                  -VAX-OS32-IRIS:403 ;CHARACTER FUNCTION
                       BAR*2()
            manual says: I864 /VAX/SUN/OS32/IRIS:396    *VAX:398 
                   -VAX-SUN-OS32-IRIS:397     +VAX:399 ;NONCHAR*2
                       FUNCTION BAR()
            285 SE length specifier not allowed on this data type.
            288 SE a length specifier can only be used if a data type is 
                   given.
            396 SE length specifier allowed only on character data type.
            397 PE %p does not support length specifiers on non-character 
                   data types.
            398 SE length specifier on non-character function statement 
                   must appear after function name.
            399 PE %p requires that the length specifier on a 
                   non-character function statement appear after the  
                   function name.
            400 SE length specifier must appear after the array 
                   declaration.
            401 PE %p requires length specifier to appear after the array 
                   declaration.
            402 SE length specifier must appear before FUNCTION.
            403 PE %p requires length specifier to appear before 
                   FUNCTION.
                            
            I895 /CRAY/HP:431 -CRAY-HP:432 ; arguments on PROGRAM 
                   statement
            431 SE arguments not allowed on PROGRAM statement.
            432 PE %p does not allow arguments on a PROGRAM statement.
                            
            I920 *ANSI:102 +ANSI:119 ; array or subprogram as a statement 
                   function actual arg
            102 SE only expressions or variables are allowed as statement 
                   function arguments.
            119 PE %p only allows expressions or variables as statement 
                   function arguments.{ANSI 15.4.2}
                            
            I921 /VAX:78 -VAX:79 ; statement function dummy arg is 
                   modified
             78 SE statement function dummy arguments may not be 
                   modified.
             79 PE %p does not allow a statement function dummy argument 
                   to be modified.{ANSI 15.4.3}
                            
            I922 /VAX:78 -VAX:79 ; statement function dummy arg is an 
                   array
        
            290 SE an array may not be a statement function dummy 
                   argument.
            291 PE %p does not allow an array as a statement function 
                   dummy argument.{ANSI 15.4.1}
                            
            I923 /SUN:296 -SUN:297 ; null string 
            296 SE character constants must contain at least one 
                   character. 
            297 PE %p does not allow null character constants.
                            
            I932 /NCUBE:491 -NCUBE:492 ; type statement CHARACTER 
                   ([LEN=]length) v, v...
            491 SE missing asterisk or symbol name. 
            492 PE non-asterisk form of character length specification 
                   not allowed by %p.
                            
            I934 /NCUBE:495 -NCUBE:496 ; routine type and name on end 
                   statement
            495 SE extra characters on END statement.
            496 PE %p does not allow routine types or names on the END 
                   statement.
                            
            I936 *ANSI:529 +ANSI:530 ; more than 19 continuation lines
            529 SE cannot exceed 19 continuation lines.
            530 PE %p does not allow more than 19 continuation lines.
                     
            unused: 904,508,509
            reserved: 246,247,269,270


                                   Appendix F
                                                          
                                                          
                                   Performance
                                                                        
              
        F.1 Disk Space
              
        F.1.1 Program Size
              
              The FORTRAN-lint production files, as delivered, occupy 
              approximately 1 MB of disk space excluding the Xlint 
              related files, which occupy another 2 MB.  The amount of
              disk space required during processing will depend on the 
              files processed.  
                    
              
              
        F.1.2 Temporary Files
              
              FORTRAN-lint generates temporary files during its 
              processing of the source files.  These files are 
              automatically deleted upon program termination, even if 
              aborted.
                          
              On the UNIX based systems, the tempnam() system library 
              call is used to obtain the names for these temporary files, 
              which lends a bit of configurability as to where these
              files are placed. The man page for tempnam() gives the 
              details, but generally the directory /usr/tmp or /tmp is 
              used unless overridden by the environment variable TMPDIR.
                          
              Under VMS, temporary file names begin with SYS$SCRATCH to 
              allow user control over where the files are placed.
                          
              The most temporary space is needed when generating cross 
              reference tables or databases, especially when using line 
              resolution of symbol references. 'Including' unused common 
              members or unreferenced parameters in the cross reference 
              increases this demand even more.  Expect about 1-2 MB 
              tempfile size per 10,000 lines of source code.