
			LANGTOOLS
			---------

Langtools contains the following Fortran utilities:

	ftnlist - source code listing
	ftnlint - fortran lint utility
	ftnsplit - f90 aware split/file dependecy analysis
	ftnmgen - fortran makefile generator
	ftnchop - program unit problem isolator

All of these utilities work with both f90 and f77 source. f90 Version 7.2
is required for ftnlist, ftnlint, ftnsplit, and ftnmgen. The compiler
is invoked as a by-product of running ftnsplit and ftnmgen.

ftnlist
-------

A listing utility which produces more cross reference information than
that provided with f90 -listing. To use, it is required to compile the
Fortran source with the -cif option enabled. For example:

% f90 -cif -c file.f
% ftnlist file.f > file.list

Information provided includes: variable and common block cross refernce
	tables, user defined type lists, loop information, static call
	graph details, etc.

ftnlist also provides (by default) all of the information that ftnlint
produces.

ftnlint
-------

The ftnlint command checks Fortran programs for program constructs
that may need further investigation.  ftnlint perform these checks
on two levels: local per subprogram and global for all encountered
subprograms. For example:

% f90 -cif -c file.f
% ftnlint file.f > file.lint
% more file.lint

 ftnlint 2.3:  initiated 08:48 Thu Jul24,1997  (created 14:02 Wed Jul23,97)     
 ftnlint   a.f

 ##################################################################################################################################



 DEMO(line 1) - 11 ftnlint messages

       1) <41>  No references to PARAMETER "DUMMY"
       2) <41>  No references to PARAMETER "ERF"
       3) <11>  No references to COMMON /NEW/
       4) <11>  No references to COMMON /DAVES/
       5) <11>  No references to COMMON /JIM/
       6) <11>  No references to COMMON /_BLNK__/
       7) <1>   Local Variable "EXTIME" may be used before it is assigned a value
       8) <4>   Local Variable "I" is assigned a value but never used
       9) <3>   Local Variable "MC" is used but never assigned a value

 TEST(line 42) - 1 ftnlint message

       1) <52>  Subprogram TEST() appears to not do anything.  That is, there
                are no external calls, no I/O, and no Arguments or COMMON
                Block elements are written or passed.

etc.


ftnsplit
--------

The ftnsplit utility splits named Fortran files into separate files,
with one unit per file, and lists the resultant files.  Each unit
includes the following program segments:  blockdata, function, main
program, module, and subroutine. 

ftnsplit works with f90 source code (ie as opposed to fsplit which only
works with f77 source).

In addition, ftnsplit may be used to show inter-file dependencies. That
is, for include file usage and module usage. For example:

    file.f
          program fred
          include "abc.h"
          ...
          end program fred
          subroutine jim
          use harry
          ...
          end subroutine jim

    harry.f
	  module harry
	  ...
	  end module harry


          % ftnsplit -xm file.f harry.f
          fred
             abc.h
          jim
             module harry
          harry

	Or
	  % ftnsplit -a file.f harry.f
	  file.f
		abc.h
		module harry from file harry.f


ftnmgen
-------

ftnmgen may be used to produce makefiles for compiling Fortran source
code. By default, ftnmgen uses ftnsplit to create multiple unit file's
and creates a makefile to compile and link those files. For example:

	% ftnmgen a.f
	demo.f
	test.f
	% make
	f90   -c demo.f 
	f90   -c test.f 
	f90  -o a.out demo.o test.o

Alternatively, a file base makefile can be created. For example:

	% ftnmgen -a a.f
	a.f
	% make
	f90   -c a.f
	f90  -o a.out a.o 


ftnchop
-------

The ftnchop utility is a program that isolates problems to object file
level by using a mix-and-match technique.  This utility is most useful
with programs that contain several source files.  To run the ftnchop
utility you need to have one working version of a program and one
version that is not working.  When run, ftnchop finds the object files
that are causing the program to malfunction.  Debugging efforts can
then be concentrated to those files.



/* USMID @(#) langtools/relnotes/relnotes	30.1	07/29/97 06:33:58 */

