Here are the new features in version 3.2:
1. New option -mkhtml to generate HTML documentation files from
the source code. Thanks go to Mark McVeigh for contributing
this feature.
2. I/O unit usage information is now provided under the -symtab
option. A table is printed listing each I/O unit by name
and/or number, together with the opera- tions performed on it.
3. A single large project file, created by concatenating a number
of separately produced project files, can be input for use as a
library project file.
4. Combined type declarations and data-statement-like
initializers, as in INTEGER N / 100 / are accepted.
5. Fixed a bug that caused ftnchek to crash if a parameter is
declared with the same name as the subprogram containing it.
New error message for same.
6. Fixed a bug in checking type agreement between variables and
their initial values in Fortran 90-style declarations with
initializers, as in INTEGER :: N=100.
7. New error message when an internal file is a constant rather
than a variable. Some compilers permit this for READ
operations, but it is prohibited by the F90 Standard.
Changes made from patch level 1 to patch level 2:
1. Fixed bug in -makedcls option that allowed a buffer overflow when
module names exceed 20 characters.
2. Minor changes to source code to clean it up and make it compatible
with C++.
3. Fixed bug that caused crash when number of statement labels in a
subprogram exceeded 2000.
4. Fixed bug that could cause access violation on some systems, if
program contains variable names starting with AA or AB.
5. Fixed bug in handling a labeled END DO statement that matches a
DO statement that doesn't use a label.
6. Changed license from "BSD"-like to "MIT."
Some new features in version 3.1:
1. Block structure of the program is now kept track of, and proper
nesting of blocks is checked.
2. New check for modification of a DO index-variable within the
range of the loop.
3. New option -style to allow extra-picky warnings about obsolescent
or old-fashioned programming constructions.
4. Limited support for attribute-based type declarations (using ::).
See the manual for limitations on the accepted syntax. Note that
this new feature should be seen as a first step toward full
support for Fortran 90 type declarations, but it is not there
yet. The level of support may be sufficient for novice
programmers, but it is not yet ready for serious use.
5. Some implementation changes were made for faster execution. The
improvement in speed is greatest for small and medium-sized
programs, which are now processed about 2 times faster.
Bugs fixed in patch 1:
1. Erroneously reported "Block not closed when END statement
encountered" at end of an unnamed block data subprogram.
2. Under -pretty=embedded-space, warned of embedded space between
slashes in
COMMON / / X, Y, Z
Netlib (since they use version numbers).
Ftnchek Version 3.0 Patch Level 3
March, 2001
Changes made from patch 2 to patch 3:
1. Fixed two bugs in dcl2inc: Modified dcl2inc itself to recognize
declarations in the new free source form. Also changed the
format of output from -makedcls option to fix a bug that caused
dcl2inc to omit namelist declarations from the .dcn file
produced for any program containing both namelist and common
declarations. Both of these bug fixes were kindly provided by
Manfred Schwarb.
2. Updated MS Developer Studio project files to reflect the new
source configuration. These files were kindly provided by
Gunnar Duus.
3. Added code due to Michael Taeschner and provided by Stefan
Deutscher to expand wildcard arguments under OS/2 or DOS with
the EMX library.
4. Fixed Makefile so it conforms to autoconf standards on
configuring lispdir, where the emacs ftnchek-mode lisp file
ftnchek.el is installed. Formerly, the configure script
searched for an emacs/site-lisp directory on the system, and
hard-coded it into Makefile. Now lispdir defaults to
'${datadir}/emacs/site-lisp' where datadir defaults to
'${prefix}/share' and prefix defaults to '/usr/local'. If the
lispdir directory does not exist when "make install" is done,
ftnchek.el will not be installed. Hopefully, in most cases
this will be because emacs is not installed on the system, in
which case ftnchek.el is not needed. However, if the
emacs/site-lisp directory is not located in the default
location, e.g. it is in /usr/share instead of /usr/local/share,
you should either run configure with the option
'--datadir=/usr/share', or else do make install with the option
'datadir=/usr/share'.
Changes made from patch 1 to patch 2:
1. Fixed a bug: statements like READ 123, X or PRINT 123, X did
not register the use of the format label and so the label might
be incorrectly reported as defined but not used.
2. Revised the format of comment lines in declaration files
(generated by -makedcls option). The Begin Module and End
Module comments were changed to accommodate longer file names.
Formerly any file name longer than 12 characters was truncated
on the left in the comment. This would cause dcl2inc to
generate an incorrect include file name from the declaration
file. Now file names up to 25 characters can be accommodated.
Another format change that was made is that the path to the
file is no longer included in the comment with the file name.
Also, the description of the makedcls options, formerly located
in the Begin Module comment, is moved to a separate comment.
Thanks go to Manfred Schwarb of ETH Zurich for providing this
revision.
Note that these format changes affect only the comment lines,
not the Fortran content of the declarations. The changes are
significant only when using dcl2inc or another such program
that processes declarations files and pays attention to the
comments.
3. Changed the form of type-mismatch warnings so that instead of
simply identifying an item as "expr" or "const", the portion of
source code corresponding to it is also given. For instance,
in average.f, previously a warning was given as
Warning near line 16 col 20 file average.f: integer quotient
expr converted to real
The new form of the warning is
Warning near line 16 col 20 file average.f: integer quotient
expr SUM/COUNT converted to real
4. Suppressed warnings (controlled by -truncation flag) about
assigning a longer integer to a shorter integer, if the longer
integer is a small literal constant (specifically, less than
128). For instance, if N is declared as INTEGER*2, the
assignment N=1 will no longer generate a warning that a regular
integer is being truncated to a shorter one. Fortran 77 has no
standard way to specify a short integer literal constant, so
there would be no way for the programmer to write this
assignment with a constant that matches the variable's declared
size. This type of warning is not suppressed if the longer
integer is a parameter, since in this case it could be given
the matching size. There is also no suppression of warnings in
the analogous situation for reals since there is a way to write
real constants denoting their precision.
5. Fixed minor problems with Makefile install target: creating
bindir, libdir and mandir if they don't exist, and including
the optional .exe extension on executable for those OSes that
need it.
Changes made from the initial release in patch 1:
1. Fixed a family of bugs that caused ftnchek to crash due to a
segmentation violation on certain illegal programs that used an
identifier in incompatible ways, e.g. defined as a parameter
and called as a subroutine.
2. Added option -makedcls=free-form to produce the declarations
file in free source form:
-- comment character is !
-- continuation is indicated by & at end of line
-- declarations are indented by 2 cols instead of 6
-- max continuation lines is 39 instead of 19
-- blanks are removed from within numeric parameter values
This is the default mode for declarations if the input source is
free-form.
3. Fixed a bug in -makedcls action that caused the declarations to
be sent to standard output instead of a file if one used the
option-list form of this flag instead of the numeric form,
and did not include "declarations" explicitly in the list.
4. Remedied omission of a description in the documentation of the
new -source options fixed-form and free-form.