------------- Version 7.60C October 2022 ------------- * A bug in processing of RESULT clause of FUNCTION subprograms fixed. The bug was introduced in 7.60A. ------------- Version 7.60A June 2022 ------------- * Initial support for Fortran 2003. SPAG now supports input and output of Fortran 2003 syntax, including the object oriented programming features. Known limitations are: + The use of the ASSOCIATE construct, and of associate names within a SELECT TYPE construct may cause SPAG to introduce spurious new local variables. + SPAG does not yet replicate the functionality of IMPLICIT modules, such as ISO_C_BINDING. + If declaration rewriting is requested (item 4 set to 5 or 6), SPAG may switch it off for code containing Fortran 2003 features, such as bound procedures. * Revised code indentation scheme for free format source form output (but not the fixed or F77 compatible forms). Outdenting for suprogram, CONTAINS and END statements, and optional indentating for executable code relative to declarations. * When automatic source form selection based on file extension is selected, SPAG also automatically distinguishes the traditional fixed form (72 characters, sequence numbers in columns 73-80), from the VAX source form (with TABs and longer records). * The default values for several SPAG configuration options have been changed: - Item 8 changed from 1 to 0 - marker for interface summary reports - Item 101 changed from 3 to 1 - COMMON variable capitalization - Item 104 changed from 9 to 0 - case of "other" symbols - Item 122 changed from 7 to 1 - left margin for free form output - Item 141 changed from 2 to 1 - F90 output formatting For details see the plusFORT manual * A bug which caused SPAG to hang with some invalid code fixed. * Various minor cosmetic improvements to restructured code. * Manual updated to revision M. ------------- Version 7.51B February 2022 ------------- * Bug when rewriting F90 declarations which include external subroutine as dummy argument. Bug was introduced in version 7.50. * Reorganization in preaparation for Fortran 2003 support. ------------- Version 7.51A January 2022 ------------- * Bug in typing of Functions when rewriting declaration in F90 style fixed. Bug was introduced in version 7.50. ------------- Version 7.50H January 2022 ------------- * Fixed possible crash in GXCHK cluster analysis report * Minor tidying of output formats. * Some internal reorganization. ------------- Version 7.50G August 2021 ------------- * Fixed bug in comments accompanying rewritten declarations. * Fixed incorrect assignment of type to external subroutine arguments. ------------ Version 7.50 February 2021 ------------ * SPAG now re-orders input files to ensure that MODULES are processed before code that uses them. This ensures that SPAG has the information it needs to make a full and accurate analysis, and is most effective if all the source code of a program is analysed in a single run. * When SPAG rewrites declarations using Fortran 95 syntax, it writes dummy arguments in the order they appear in the argument list, rather than alphabetically. Each dummy argument is declared in a separate statement to allow end of line comments for each argument. * When SPAG rewrites declarations using Fortran 95 syntax, it inserts INTENT and OPTIONAL clauses within dummy argument declarations, rather than as separate statements. * Possible errors when rewriting declarations from scratch in an internal subprogram fixed. * The "Modularisation Report" report produced by GXCHK has been re-designed, and renamed as the "Internalisation Report". It shows which subroutines and functions can be converted to internal subprograms, thus reducing the number of separate program units to be combined at link time. * GXCHK produces a new "Cluster Analysis Matrix" report which identifies groups of subprograms which appear, on the basis of data usage and calling patterns, to be candidates for inclusion in modules. * The name of the HTML report porduced by GXCHK has been changed from gxchk.htm to _gxchk.htm for consistency with other plusFORT tools, and to make it easier to find. * pusFORT Command Prompt and PFFE Windows start menu working directory changed to the current user's Documents directory. * Abilty to switch off header comments by setting item 220 of SPAG configuration to blanks restored. * Many other minor fixes and enhancements. * Manual updated to revision L. ------------- Version 7.25C August 2019 ------------- * Full context sensitive help (using F1) in Windows and Linux versions of PFFE. * PFFE updated to deal gracefully with "starter pack" version. * Possible broken links in GXCHK hypertext reports fixed. ------------ Version 7.25 July 2019 ------------ * All executables are now 64 bit, and in consequence, only 64 bit versions of Windows, Linux and MacOS are supported. Support for 32 bit will be withdrawn from the new version of MacOS, due later this year, and has been problematic in 64 bit Linux for some time. * Substantial reorganization and re-design of PFFE forms and dialogs. * Fixed SPAG could put output files in wrong directory when input path contained spaces. * Fixed misleading message when plusFORT.fig not found. * Fixed bugs in cvranal and probes.f90 coverage analysis routines relating to paths with spaces. * Fixed bug in naming of MODULEs created to replace INCLUDE files with names (excluding path and extension) longer than 20 characters. * Fixed bugs in command line processing on Linux and Mac. * Big increase in command line buffer on Linux and Mac. * Numerous improvements in processing long paths with embedded spaces. * Fixed comments in source code between modules were sometimes lost. * Various minor fixes and enhancements. ------------ Version 7.21 August 2018 ------------ * Fixed SPAG regression in treatment of character array element substring assignment. * Fixed SPAG treatment of "All Declarations ASIS" option (60=1). * Various minor fixes and enhancements. ------------ Version 7.20 December 2017 ------------ * plusFORT now includes a copy of HyperKWIC, a powerful tool for generating program documentation, in the form of hypertext keyword-in-context reports from source code written in any computer language. * Bugs in SPAG processing of WHERE and FORALL constructs and statements fixed. * Regression in SPAG treatment of a complex inheritance scenario fixed. * Improved error reporting in SPAG for some non-standard code. * Improved SPAG treatment of C pre-processor code, including multi-line directives. * It's no longer possible for SPAG to write fixed form output with a left margin before column 7. * SPAG no longer makes multiple copies of comments on lines with multiple statements. * SPAG produces a message when code beyond the right margin is truncated and the default right margin for free-source form code is increased to 512. * Improved error reporting when attempting to convert COMMON blocks to MODULEs. * Other minor fixes and enhancements * Manual updated to revision K. ------------ Version 7.10 April 2017 ------------ A major update with major improvements affecting usability and compatibility of plusFORT. * New default behaviour for SPAG output files (restructured output, symbol files, coverage files, and module files). Instead of being written to the source directory, SPAG creates a subdirectory called SPAGged (or as specified in option 229 of spag.fig) and writes them there. Restructured output files have the extension .f90 (or .for if item 141 is set to 0) instead of .spg. If option 229 is set, items 230, 231, 232, 234 and 236 are over-ridden. The original (pre 7.10) behaviour is restored if item 229 is absent from spag.fig. * Dynamic analysis instrumentation code rewritten to deal correctly with Fortran 95 allocatable arrays, KINDs, and the use of array sections. * Bug fixes in coverage analysis code to allow it to deal correctly with Fortran 95 modules. * Probe routines rewritten in Fortran 95 (in file probes.f90). * Timing probe and report enhancements * SPAG copies probes.f90 to the output directory when instrumenting source for coverage analysis or dynamic analysis. probes.f90 must be compiled and linked with the instrumented code when creating executables for dynamic or coverage analysis. * PFFE is now available for Linux and Mac. * PFFE stability and usability enhancements * Default for SPAG configuration option 56 (location of INCLUDE files with no specified path changed to 1 (same directory as source file). * New option for name of target executable in AUTOMAKE on Windows TARGET %cwd creates an executable with the name derived from the current working directory name. * Manual updated to revision J. including a new section on PFFE. ------------ Version 7.00 November 2016 ------------ Initial release of Version 7 * New GXCK HTML reports * New Modularization Report in GXCHK * New "Per Symbol" reporting in GXCHK. * Unicode output in GXCHK for improved rendering of call trees etc. * Many changes and bug fixes to improve compatability of SPAG and GXCHK with Fortran 95. * SPAG infers source form from source file extension * Multiple 215= allowed in SPAG.fig to allow for complex build environments with many directories containing INCLUDE files. * New PREFIX=, SELECT=#NOPROMPT, SELECT=#NOSELECT, and SELECT=#PREFIXxy, options in QMERGE. * If no SELECT= is specified, QMERGE now defaults to prompting, rather than performing a simple merge. * Substantial changes to manual - now at Revision H ------------ Version 6.70 August 2010 ------------ * GXCHK can now produce 3 different types of HTML output using its built-in viewer or the system browser * PFFE has been updated to have modern Windows look and feel * Added 'Clear Output Log' button to PFFE * Added 'View Source file' and 'View FIG file' options to PFFE * Added scroll-bars to file-list windows in PFFE ------------ Version 6.60 June 2010 ------------ GXCHK now defaults to standard ASCII characters for box-drawing. Fixed a bug in SPAG coverage analysis option that caused probes to be inserted in WHERE constructs. In the Windows version, output files whose name is derived from input filenames now preserve case where possible. Fixed a bug in SPAG which could cause the SAVE attribute to be wrongly specified when rewriting declarations in Fortran 90 style. Fixed a bug in SPAG which could cause SAVE statements to be retained for clutter variables when rewriting declarations on Fortran 77 style. An internal indexing scheme has been revised to allow SPAG to process subprograms with up to 40959 statements (up from 8191). Fixed GXCHK bug with very large argument lists. Fixed AUTOMAKE bug which could cause incorrect order of compilation. when MODULE statement is in an INCLUDE file. ------------ Version 6.55 September 2003 ------------ Lines in AUTOMAKE.FIG can be continued by placing the character "^" at the end of all except the last line. e.g. link=slink %ob ^ -file:%ex ^ -stack:0x600000 Fixed AUTOMAKE bug involving spaces in include file names. Fixed SPAG bug where TYPE is used as synonym for PRINT. Fixed SPAG bug when item 4 was set to 0, USE statements were lost Fixed CVRANAL produced "File not found" when run from PFFE Fixed SPAG bug with EQUIVALENCE when item 2 is -1 ------------ Version 6.54 March 2003 ------------ Fixed bug which replaced blank lines in F90 output with "!". Minor changes to EXEC SQL parser in SPAG (config option 59). ------------ Version 6.53 January 2003 ------------ Fixes for bugs in "preserve layout of declarations" mode. Improved treatment of control construct (DO, SELECT CASE) names. ------------ Version 6.52 December 2002 ------------ Context sensitive links to the plusFORT manual have been added to the plusFORT front-end (PFFE), and several bugs in PFFE were fixed. A number of size limits have been significantly increased in SPAG and GXCHK. New SPAG configuration items 134-136 allow greater control of static analysis output. In AUTOMAKE, where %LL or %LI produces a filename with spaces it is now automatically enclosed in quotes. ------------ Version 6.50 March 2002 ------------ SPAG now supports most of Fortran 90/95, including all code generated when SPAG converts existing Fortran 77 programs to Fortran 90. The main exception is that SPAG does not yet recognise declarations relating to overloaded operators and procedures. In addition SPAG supports dynamic and coverage analysis only for Fortran 77 code. In general, if a particular F90 feature is not supported, the output code generated by SPAG will be manifestly wrong and non-compilable. In some cases, SPAG may also generate spurious information or warning messages. For example, the F77 style argument checking in SPAG may throw up spurious errors when calling generics, or when passing derived type arguments. For this reason, we recommend that, when processing F90 code, argument type checking should be suppressed by setting the new configuration switch 133 to 0 e.g. spag *.f90 133=0 The treatment of modules has been substantially improved in version 6.50. SPAG now obtains information about the contents of modules by reading the symbol tables (.smb files) for the module. In order to find module symbol tables, SPAG maintains a ASCII text file called PFMODULE.KEY. This file contains records which specify the location of each module USEd by source code in the current directory. For example TRAJECTORY : traject.smb specifies that the symbol table for module TRAJECTORY is in the file "traject.smb". As SPAG processes source code, it automatically inserts records in PFMODULE.KEY for every module it encounters. When SPAG encounters a USE statement, it consults this file to find the module data. If the module has not been processed yet, there will be no record for it in PFMODULE.KEY, and SPAG will report an error. However once the entire source has been processed once, PFMODULE.KEY will contain all necessary records, and the second pass should be error free. An exception to this rule is that SPAG will not automatically find modules from a different directory. In this case it is recommended that the locations of modules be inserted in PFMODULE.KEY using a text editor. e.g. GPS_COORDS : gps\coordmod.smb Most Fortran 90 users will be familiar with the requirement that modules be compiled before code that USEs them. A similar requirement applies to SPAG. For example, if a module is changed, it is important that the file containing the source for the module be re-processed before any files that USE the module. The plusFORT AUTOMAKE tool provides a solution to this problem both for compilers and for SPAG. A new batch/shell file called Autospag uses AUTOMAKE to run SPAG in such a way that the processing order requirements are satisfied. A small configuration file called AUTOSPAG.FIG should be placed in the source directory. A typical case, in which all .F90 files are to be processed, and the symbol table files have the .SMB extension would be covered by the following configuration file: COMPILE=@spag %fi OBJEXT=SMB FILES=*.f90 NOQUITONERROR A file called "f90func.txt" containing a list of all Fortran 90 INTRINSIC functions, has been included in the installation directory. "f90func.txt" is now the default for item 210 of the SPAG configuration data. The default header comment ID (item 220 of the SPAG configuration data) is now "!*==" instead of "**==". The default interface header and trailer comment IDs (items 221 and 222 of the SPAG configuration data) are now "!*--" and "!*++" instead of "**--" and "**++". If no directories are specified on items 230 and 232 of the SPAG configuration data, the restructured source and symbol table files are written in the same directory as the input source code. Previously the default was the current directory. The maximum input record length (item 51 of the SPAG configuration data) may now be up to 512 characters (previously 136). ------------ Version 6.20 June 2000 ------------ The support for modules that was included in version 6.20 beta has been upgraded and replaced in version 6.50. Like version 6.20, SPAG 6.50 uses a file called PFMODULE.KEY. However the usage is slightly different, and it is recommended that any PFMODULE.KEY files created by the earlier version be deleted. The treatment of configuration option 141 (F77/F90 output source form) has been corrected. ------------ Version 6.11 Feb 2000 ------------ Support for RECURSIVE FUNCTION and RESULT clause added. A problem in converting DOUBLE PRECISION FUNCTION to F90 has been fixed. The CALL nesting limit in GXCHK has been increased to 200. A problem in converting double precision intrinsics to F90 has been fixed. Some internal limits in AUTOMAKE have been increased. The %LL placeholder can be inserted in the link command in AUTOMAKE. This expands to the name of a file (generated automatically by AUTOMAKE) which contains a list of libraries specified using LIBRARY=. This is an alternative to the %LI directive introduced and version 6.05, suitable for the case where the number of libraries is large. ------------ Version 6.09 Sept 1999 ------------ Several bugs in the conversion of declarations to Fortran 90 syntax have been fixed. The treatment of Cray pointers has been improved. SPAG now deals with more Fortran 90 features, including recursive subroutines and functions, the WHERE statement and the WHERE construct. There has also been substantial internal reorganization to prepare for the treatment of MODULES and internal subprograms. More consistency checks have been added to detect conflicting settings in SPAG.FIG. SPAG now has many internal self-validation checks to confirm correct and consistent operation. ------------ Version 6.05 May 1998 ------------ SPAG now leaves unrecognised statements unchanged. Previously, they were reformatted, sometimes with unfortunate results. Setting configuration item 138>0 causes SPAG to ignore #include statements, instead of converting them to standard INCLUDE statements. AUTOMAKE has been extended to deal with libraries. If lines of the form: LIBRARY=ABC.LIB LIBRARY=XYZ.VBG LIBRARY=dceqw are added to AUTOMAKE.FIG, AUTOMAKE checks whether any of the specified library files have been updated since the last link, and if so, ensures that the program is relinked. In addition, the %LI placeholder can be inserted in the link command. Before the command is executed, this is replaced by the list of libraries, with names separated by spaces. An AUTOMAKE configuration file editor has been included in the NT version of plusFORT. This is a Windows based utility which is started automatically if there is no AUTOMAKE.FIG in the current directory. It can also be started from the command line by typing a command of the form: AMEDIT myprog.fig A new install program has been developed for the NT version of plusFORT. The version of QSPLIT included with the NT version of plusFORT now supports long file names. PFFE has been enhanced with a more task-oriented user interface. When it is started, PFFE asks you to select the type of run you would like, and, for more complex tasks, leads you through the required steps. ------------ Version 6.02 November 1997 ------------ The release version of the plusFORT front-end, PFFE, for Windows 95/NT is now included. Note that the new version of PFFE cannot be used with earlier plusFORT releases. Bug fixes (1) A problem involving block IF followed immediately by 2 ENDIFs fixed. (2) Interaction between variable renaming and declaration rewriting caused variables to be declared more than once. (3) All programs can now deal with command lines up to 1024 characters long (subject to support by the operating system) (4) AUTOMAKE now recognises lines of the form USE A ; USE B (5) A bug in Dynamic Analysis which was introduced at Version 6 has been fixed. The bug caused arrays output using implied DO to be checked with invalid array subscripts. ----------- Version 6.0 August 1997 ----------- Version 6 of plusFORT is fully described in Revision D of the plusFORT Reference Manual. Please call Polyhedron Software if you do not have a copy. The main new features in Version 6 are summarised below: * Automatic translation of COMMON blocks and INCLUDE files to Fortran 90 modules (see item 4 of the SPAG configuration file) * Automatic creation and use of Fortran 90 interface modules for all subprograms. * Automatic embedding of comments describing every subprogram's interface, including calls in and out, arguments, COMMON variables etc. * Translation between VAX structures and Fortran 90 derived types. * The Windows 95/NT version has a new interactive configuration editor and front-end. Just type "PFFE" at a Windows 95 or NT command prompt to activate this program. Usage is self-explanatory. * Year 2000 checks using static and dynamic analysis. * Many new formatting and Fortran 90 translation options.