ftnchek-3.3.1/README0000644000031000002260000000713410173011667014445 0ustar moniotstaff00000000000000 README file for ftnchek version 3.3 Author: Robert Moniot Fordham University New York, NY 10023 USA Telephone: (212) 636-6311 URL: http://www.dsm.fordham.edu/~moniot Date: November 3, 2004 Ftnchek (short for Fortran checker) is designed to detect certain errors in a Fortran program that a compiler usually does not. Ftnchek is not primarily intended to detect syntax errors. Its purpose is to assist the user in finding semantic errors. Semantic errors are legal in the Fortran language but are wasteful or may cause incorrect operation. For example, variables which are never used may indicate some omission in the program; uninitialized variables contain garbage which may cause incorrect results to be calculated; and variables which are not declared may not have the intended type. Ftnchek is written in C. To build ftnchek, you must have a C compiler for the machine on which you wish to build it. The URL for ftnchek's home page is http://www.dsm.fordham.edu/~ftnchek. Source code, binary executables for some platforms, and other information are available there. INSTALLING FTNCHEK ------------------ See the file INSTALL for detailed instructions on how to install ftnchek on your system. NEW FEATURES ------------ Here are the new features in version 3.3: 1. Front-end has been rewritten for unlimited lookahead, eliminating the longstanding bug that caused incorrect interpretation of statements whose ambiguity was not resolved in the first line. 2. The -mkhtml option is now available in the MS-DOS version. 3. Added support for Fortran 90 pointer related syntax: ALLOCATE, DEALLOCATE, and NULLIFY statements; the ALLOCATABLE, POINTER and TARGET attributes in type declarations; the pointer assigment operator => and intrinsic functions ALLOCATED and ASSOCIATED; and deferred-shape array declarations. At present these new syntax features are accepted but not properly checked. This feature was added by Robert Landrito. 4. The -f77 and -f90 pointer option controlling warnings about ''Cray pointers'' has been renamed to cray-pointer. The -f77=pointer option now instead controls warnings for code containing Fortran 90 pointer-related syntax. 5. Re-implemented -mkhtml processing so it is now much faster on source files containing many routines. 6. Changed the arrangement of the test directory so there is no longer any need to modify the distribution in order to run the test suite (check.bat) under MS-DOS. 7. Fixed bug in reading numeric settings on command line when setting name abbreviated to 3 characters. 8. Fixed bug causing spurious warning for a GOTO referring to a labeled END statement when the statement before END was a FORMAT. 9. New flag -f77=character to control warnings about extensions to the Fortran 77 character data type. Accompanying this new flag is support for Fortran 90 rules for character variable declarations that evaluate to zero or negative length, allowing them and treating negative length values as zero. 10. Fixed minor bug in printing of comments and blank lines following last END statement in -list mode. See the file PATCHES for further changes made after the initial release of this version. NOTE: For VMS, it is recommendend to obtain the file shell_mung.c. This file is not necessary to build ftnchek, but without it wildcards in file names on the command line will not be expanded. This file is no longer bundled with ftnchek, but is obtainable at the ftnchek home site and elsewhere. ftnchek-3.3.1/INSTALL0000644000031000002260000003556707756000106014630 0ustar moniotstaff00000000000000 INSTALLING FTNCHEK To build and install ftnchek, follow the instructions below for your operating system. (1) UNIX and UNIX-like systems Unpacking ftnchek: If the file you received is a UNIX compressed tar file, suffix .Z, you should first unzip it using the UNIX ``uncompress'' command, and then give it as input to ``tar'' to unpack the files. For example, assuming the file has been placed in the desired directory, and is named ftnchek.tar.Z, you would give the two UNIX commands uncompress ftnchek.tar.Z tar -xf ftnchek.tar If the suffix is .gz instead of .Z, use the program ``gunzip'' in place of ``uncompress''. The gunzip program is publicly available from the GNU project. The tar command creates a directory named ftnchek-3.1.1 containing the files of the distribution. You should change directory to this directory and follow the instructions below. Next, configure a Makefile for your system with the command: $ ./configure This uses the file Makefile.in as a template. If you want to change some options, edit the file Makefile.in, not Makefile, and re-run configure. Next, build ftnchek with the command: $ make To verify correct operation of the newly created ftnchek, you can now issue the command $ make check This will run ftnchek on the suite of test programs in the subdirectory ``test'' and report on any discrepancies. Note: if you have built and installed the ftnpp preprocessor (provided separately), it will be tested for correct interaction with ftnchek. Otherwise this test will be skipped. Similarly, if your system has gawk or nawk installed, the dcl2inc script will also be checked for correct operation. Failure of either of these tests usually does not indicate any problem with ftnchek itself. Once ftnchek is working properly, issue the command (usually requiring super-user authority): $ make install This will install the executable in /usr/local/bin and the manpage in /usr/local/man by default. (The dcl2inc program will also be installed.) There is also a small file, project.magic, which can be added to your system's magic file, so that the ``file'' program will recognize ftnchek project files for what they are. If emacs is installed on your system, the lisp file ftnchek.el will also be installed in the system site-lisp directory. The HTML documentation is not installed by ``make install''. See the section on Associated Files below for details on installing this component manually. If you see a warning about "catman": on IRIX the manpage gets specialized treatment, since man pages are pre-formatted and packed, and nroff is not bundled with the OS. If nroff is available, then it is used to create the formatted man pages, and all is well. Otherwise, the user should obtain the ftnchek "catman" file, distributed separately. (It is available from ftp.dsm.fordham.edu in the pub/ftnchek directory). Unpack this in the source directory and proceed with "make install". If the "catman" files are not found, a notice will be issued, and the flat ascii ("doc") versions will be used. The UNIX Makefile employs a private script, man2ps, for converting manual pages to PostScript (linked to names me2ps, mm2ps, and ms2ps, it will support the -me, -mm, and -ms formats as well). The script currently knows about GNU groff, Sun Solaris 2.x troff + dpost and psroff; it will use any of these, with groff preferred. For troff + dpost, if you get errors like this troff: Can't open /usr/lib/font/devpost/C.out; line 818, file you can repair them if you have appropriate privileges: % cd /usr/lib/font/devpost % ln CO C % ln CO.name C.name % ln CO.out C.out These commands simply create links between a Courier font that Sun named CO, and the one named C that is expected by ftnchek.man. If some troff expert knows a better way to handle this, please tell us. Additional alternatives in the man2ps script to support ditroff and other vendors' troff-to-PostScript solutions will also be welcome. (2) VMS Unpacking ftnchek: If the file you received is a VMS_SHAR.COM file, unpack it in an empty directory by executing it as a DCL command file. For instance, if the file is named FTNCHEK_VMS_SHAR.COM and located in the current directory, you would give the VMS command @FTNCHEK_VMS_SHAR.COM It is highly recommendend that VMS users also obtain the file SHELL_MUNG.C. This file is not necessary to build ftnchek, but without it wildcards in file names on the command line will not be expanded. This file is no longer bundled with ftnchek, but is obtainable at the ftnchek home site and elsewhere. You should copy SHELL_MUNG.C to the same directory as the ftnchek source before proceeding to build ftnchek. Rename the file "CONFIG-GENERIC.H" to "CONFIG.H". Next, follow the build instructions for Alpha or VAX. (2a) VMS on Alpha Give the command $ @BUILD After the program has been compiled, you must turn it into a so-called "DCL foreign command" so that it can be invoked by giving its name on a command line, instead of using the RUN command. Do this with the command $ FTNCHEK :== $disk:[directory]FTNCHEK where you substitute the disk and directory names where the file FTNCHEK.EXE resides. This command must be executed once per login. It is suggested you put this command into your LOGIN.COM file. The BUILD procedure also creates a VMS help library named FTNCHEK.HLB. To access it from the VMS HELP command, you must give the command $ DEFINE HLP$LIBRARY disk:[directory]FTNCHEK.HLB" Again, this command must be executed once per login to have effect. Note that BUILD.COM uses the files CC.COM and LINK.COM which are conditional compilation and link scripts that allow re-making ftnchek by compiling only what has changed. To verify correct operation of the newly created ftnchek, you can now issue the command $ @CHECK This will run ftnchek on the suite of test programs in the subdirectory [.TEST] and report on any discrepancies. Note: thanks to Bob Wells for yeoman service in providing CHECK.COM. (2b) VMS on DEC VAX Same as (2a) except use BUILD-VAX.COM instead. It has been found that some compilers require the /VAXC qualifier in order to compile this code properly. If this is the case with your compiler, edit CC.COM, changing cc to cc/vaxc at line 44. (3a) MS-DOS/Win with Borland BCC32 Edit CLIB in makefile.bcc32 (line 13) to reflect the location where the BCC32 library is installed on your machine. Rename the file "makefile.bcc32" to "makefile". Rename the file "config-win32.h" to "config.h". Then give the command: C> MAKE See Remark at (3c). (3b) MS-DOS/Win with Microsoft Visual C/C++ Open the workspace file ftnchek.dsw. Rename the file "config-win32.h" to "config.h". Build ftnchek.exe. See Remark at (3c). (3c) Other MS-DOS/Win See the instructions at (6) below. You should define the macro MSDOS manually, if your compiler does not automatically define one of the macros _WIN32, _MSDOS or __TURBOC__. (If it does define one of these, then MSDOS is defined automatically.) The macro MSDOS is needed in order to configure ftnchek's behavior to suit the DOS/Windows environment. Remark: You can verify correct operation of the MS-DOS/Win version of ftnchek as follows. Change directory to the TEST folder and execute the CHECK.BAT batch file, i.e. give the commmand CHECK. (This check is not as thorough as the one for Unix, due to some limitations of the MS-DOS environment. Note: Thanks to Gunnar Duus for providing makefile.bcc32 and the MSVC project files, as well as CHECK.BAT and its companion scripts. (4) Macintosh Programmer's Workshop (MPW) Rename the file "makefile.mpw" to "makefile". Edit the file, changing character '+' to CHAR(182), option-d on the Macintosh keyboard; and the character '/' to CHAR(196), option-f. Rename the file "config-generic.h" to "config.h". Then use the "make" command to create Ftnchek. (5) OS/2 with gcc If you have installed the GNU utility "sed", you can customize the makefile for your system. Give the command: configure_os2 This will create makefile.os2 with appropriate values for your system. You should rename it "makefile". Rename the file "config-generic.h" to "config.h". Then run make to build ftnchek. Configure_os2 also builds an OS/2 version of the dcl2inc script that is configured for your system. Many thanks to Jan Ftacnik, Stefan A. Deutscher and Christian Bartels for producing and improving this configuration script. (6a) Other systems having "make" utility Rename the file "makefile.generic" to "makefile", edit it appropriately for your system. Rename the file "config-generic.h" to "config.h", and edit it for your system. Then run make. (6b) Other systems not having "make" utility First rename the file "config-generic.h" to "config.h", and edit it for your system. Then it should suffice simply to compile all the ".c" files and link them. The main differences among the versions for different operating systems have to do with: -- the use of "/" vs. "-" as a command-line option prefix. Define the macro name OPTION_PREFIX_SLASH if "/" is to be accepted as an alternate to "-". (No particular value need be assigned to this macro, just define it.) The "-" prefix is always accepted. NOTE: do not define this macro if your system uses the "/" character as a separator in path names. Doing so will introduce ambiguities in the command-line arguments. -- the default filename extension ".for" vs. ".f". Define the macro name DEF_SRC_EXTENSION to the string value corresponding to Fortran source files on your system. -- the default home directory in which to search for .ftnchekrc or ftnchek.ini. Define SPECIAL_HOMEDIR to the string value appropriate for your system. -- the default systemwide directory in which to search for include-files. Define the macro DEFAULT_INCLUDE_DIR to the string value of this directory. These macros are all defined automatically to appropriate values for Unix, VMS, and MSDOS systems. You only need to define them by hand if compiling ftnchek on other systems. There are also some definitions in the file config.h that control the use of certain system header files and library functions. For Unix systems, this file is automatically created by the configure script. If you are unable to use the configure script, the generic version of config.h provided in the distribution will work for most systems, but you may need to edit config.h manually to reflect the situation on your own system. Once ftnchek is working, you can test it by giving the command: $ ftnchek -list -sym average Then compare the output against the file ``average.out''. A more thorough checkout is possible on Unix systems by giving the ``make check'' command described above. Associated files There are several auxiliary files included in the distribution. Most of them are automatically installed by ``make install'' on a Unix system. On non-Unix systems, you may not be able to use them. If you can use them, you will need to install them in an appropriate place manually. dcl2inc is a script to convert the .dcl files produced by ftnchek with the -makedcls option, into files suitable for inclusion in your source code. This script requires a modern version of awk. The dcl2inc script itself is a Bourne shell script that simply invokes awk with suitable arguments. On Unix systems, the dcl2inc script is generated from dcl2inc.in by the configure script, which substitutes apropriate values for the library where dcl2inc.awk is installed and for the local version of awk (e.g. gawk or nawk). If you wish to use this script on a non-Unix system, you can make the substitutions by hand, since they are few and obvious (assuming you have a suitable awk available). ftnchek.el is an Emacs lisp package that provides an ftnchek mode. Using ``make install'' installs this in the system site-lisp directory if there is one. Read the comments at the head of the file for details. Each user should add a line like: (add-hook 'fortran-mode-hook (require 'ftnchek-mode "ftnchek")) to his or her personal .emacs file. The author has said that this package is still undergoing improvements, so the version included in this distribution may well be out of date by now. The most recent version of ftnchek.el can be found at the URL given in that file. ftnchek.1 and dcl2inc.1 are Unix man pages. They are automatically installed in the man directory by ``make install.'' They are not much use on non-Unix systems. ftnchek.hlp is a VMS help document. It is automatically converted to a help library by BUILD.COM. That script gives instructions for making the help library available to VMS HELP. You may wish to install this in a suitable system-wide help directory. html is a directory containing a hypertext version of the documentation. This is NOT installed automatically by ``make install.'' If you wish to make this documentation available on your local system, install these files someplace where a browser can access them. A typical way to do this would be to create a directory named "ftnchek" in a suitable place in the web server directory, then copy all the files from the html directory to that directory. The file index.html is the top-level HTML file. Note that the HTML documents contain some URLs pointing to other man pages. If your system has HTML man pages, or a cgi program that converts man pages to HTML on the fly, you may want to edit these links so they will work correctly. As distributed, the html files contain URLs of the form: "http://localhost/cgi-bin/man/man2html?n+prog" for a reference to program prog in manual section n. Notes The suffix .prj for project files is also used by the program revision control system prcs (see http://scam.xcf.berkeley.edu/~jmacd/prcs.html) so that conflicts might occur. Use the macro DEF_PROJ_EXTENSION to change the default suffix. For Unix systems, you can specify the alternative extension on the make command line. For example, to change the extension to .foo you would say: make OPTIONS='-DDEF_PROJ_EXTENSION=\".foo\"' Alternatively, edit the Makefile to set the OPTIONS variable as above, or edit the file ftnchek.h to change the definition of DEF_PROJ_EXTENSION to the desired string. ftnchek-3.3.1/LICENSE0000644000031000002260000000226007617167143014577 0ustar moniotstaff00000000000000 LICENSE ftnchek program checker Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." ftnchek-3.3.1/PATCHES0000644000031000002260000000217610202267561014577 0ustar moniotstaff00000000000000 Ftnchek Version 3.3 Patch Level 1 February, 2005 Changes made in Patch 1: 1. Fixed bug in parsing a declaration of the form DOUBLE PRECISION :: X 2. Fixed an inconsistency in checking for possible precision issues when the -portability or -truncation option is turned on. Previously, such warnings were reported for arithmetic expressions but not for relational expressions (arithmetic comparisons). Now they are reported for both, using the same criteria. Thus, comparing two operands will generate the warnings under the same conditions as adding them. For example, IF( D .gt. 0.3 ) where D is double precision, will generate a warning that the single-precision constant 0.3 is being promoted. 3. Increased the number of error messages suppressed by -nocheck to cover invalid type combinations in expressions. Normally these error messages should not be suppressed, but when using ftnchek to generate a call graph or other summary results on code containing unsupported syntax extensions, it may be reasonable to suppress them. ftnchek-3.3.1/FAQ0000644000031000002260000001712510144540470014115 0ustar moniotstaff00000000000000 ftnchek FAQ This is a very preliminary FAQ. Originally written February 28, 1999. Slightly updated September 22, 2000 and August 23, 2002. Q1) Where can I get the latest version of ftnchek? Q2) Are there any plans for ftnchek to support Fortran 90? Q3) What other Fortran syntax checkers are there? Q4) Why is ftnchek not spelled ftncheck? Q5) What are some sources of Fortran information? Q6) Is ftnchek Year-2000 compliant? Q7) Ftnchek ignores my "#include" file (or other preprocessor directives) Q8) Ftnchek's error messages aren't interpreted properly by Emacs (or other development tool) to allow it to jump automatically to the location of the error. Q9) Is the Mike Myers mentioned in the comment section of average.f the same as the Mike Myers who plays Austin Powers in the movies? ================================================================== Q1) Where can I get the latest version of ftnchek? A1) Many places. Probably the most reliable place to get it is Netlib, whose net address is netlib.org. The URL is ftp://netlib.org/fortran/ftnchek.tar.gz Unlike most software archives, the netlib maintainers keep naming the file ftnchek.tar.gz regardless of the version. But don't worry. I always make sure they have the newest version as soon as it is released. Ftnchek has its own home page. The URL is http://www.dsm.fordham.edu/~ftnchek This site has current information about the status of the ftnchek project, as well as links for downloading the software. This is always the very most up-to-date site, since it is the location where ftnchek is maintained. But the server is old and slow, so if you just want the software, you are better off finding a Netlib mirror near you. Ftnchek has also been placed onto many Linux software archives. For instance, it can be found in http://www.ibiblio.org/pub/Linux/devel/lang/fortran/ A Debian package is available at http://www.debian.org/Packages/unstable/devel/ftnchek.html The version available at these and other Linux sites is not always the very latest, however, since it takes some time for the new version to find its way there. Q2) Are there any plans for ftnchek to support Fortran 90? A2) Eventually, I hope so. But basically, I work on ftnchek in my spare time, of which I don't have much these days. At the present level of effort, progress is slow. I am trying to recruit volunteers to help get ftnchek to support more Fortran 90 features: see http://www.dsm.fordham.edu/~ftnchek/f90-project.html for more details if you are interested in volunteering. On the bright side, Fortran 90 itself has many features to help avoid the pitfalls that ftnchek was designed to catch. Also, there are other static analyzer programs that do understand Fortran 90 (see Q3). Unfortunately they are not free, however. Q3) What other Fortran syntax checkers are there? A3) Here are a few I happen to have URL's for. None of them are free. They are listed in alphabetical order, with no ranking or endorsement implied. 1. forcheck: Forcheck group Leiden University P.O. Box 9604 2300 RC Leiden The Netherlands Fax: +31 71 527 6782 E-mail: info@forcheck.nl Website: http://www.forcheck.nl 2. FORTRAN-lint (flint and flint90) Cleanscape Software International 1530 Meridian Ave Ste. 200 San Jose, CA 95125-5318 Phone: (408) 978-7000 and (800) 944-5468. FAX: (650) 978-7002. URL: http://www.cleanscape.net/ 3. Forwarn Quibus Enterprises, Inc. 3340 Marble Terrace Colorado Springs, CO 80906 USA +1-719-527-1384 URL: http://kumo.swcp.com/fortran/quibus_forwarn.html 4. OpenVMS Source Code Analyzer SCA Available from Digital (now a division of Compaq). URL: http://www.digital.com Note: forcheck and flint90 support Fortran 90. SCA supports multiple languages including Fortran 90. Q4) Why is ftnchek not spelled ftncheck? A4) Originally, ftnchek was named forchek, which seemed like a spiffy name at the time. However, the Forcheck people (See Q3) objected (rightly) that the two names were sufficiently similar to cause confusion. Since their program was first on the scene, mine had to be renamed. So I changed "for" to "ftn," and continued leaving the "c" out of the name so as to increase the difference between it and Forcheck. By the way, you may pronounce the name any way you like. Personal- ly, I usually pronounce it "Eff-Tee-En-Chek." Q5) What are some sources of Fortran information? A5) The Fortran-FAQ, posted occasionally to comp.lang.fortran, is full of useful information. The Fortran Company has links to many sources of information on the World-Wide-Web. Its URL is http://www.fortran.com/ Q6) Is ftnchek Year-2000 compliant? A6) Yes, ftnchek is safe for the Year 2000. It cannot suffer from the Millenium Bug any more than a bald man can have dandruff. Since ftnchek is a very simple application, and does not make any use of date or time functions, it is immune to the Y2K problem. Of course, ftnchek relies on the underlying operating system on which it runs. If the operating system fails due to a Y2K problem, then ftnchek, like all other software on that system, may become unavailable. Q7) Ftnchek ignores my "#include" file (or other preprocessor directives) and gives all sorts of bogus errors as a result. A7) Ftnchek does not process any "#" directives except for "# line". If you want to use "#include" or "#define" in your program, then you must run it through the preprocessor before giving it to ftnchek. Since ftnchek does process the "# line" directives generated by the preprocessor, the error messages will have the correct file names and line numbers. Consult your compiler manual for how to make it run the preprocessor only. There is a program named ftnpp for use as a preprocessor with more Fortran-awareness than cpp. (The advantage of ftnpp over cpp is that replacements and conditional compilation extend into files included using the Fortran-standard INCLUDE statement.) The ftnpp program is available by anonymous ftp from ftp.dsm.fordham.edu. At this writing, ftnpp has only been tested on a few platforms. Fixes for operation on other platforms are requested. Note that ftnchek does process INCLUDE statements, which are part of Fortran 90 (unlike #include). These have a completely different syntax. If you replace the "#include" statements by INCLUDE statements, your program will be more portable. Q8) Ftnchek's error messages aren't interpreted properly by Emacs (or other development tool) to allow it to jump automatically to the location of the error. A8) Use the -nonovice flag. This changes the format of the error messages to one that is more similar to the messages generated by typical compilers. I designed ftnchek to give friendlier output for novices by default, since novices by definition don't know how to change the defaults. Advanced users who need this feature know how to read the docs to find the options they need. Q9) Is the Mike Myers mentioned in the comment section of average.f the same as the Mike Myers who plays Austin Powers in the movies? A9) No. ================================================================== Bob Moniot Fordham University Fordham College at Lincoln Center New York, NY 10023 (212) 636-6311 Email: moniot@fordham.bogus.edu (remove the .bogus of course) URL: http://www.dsm.fordham.edu/~moniot/ ftnchek-3.3.1/ToDo0000644000031000002260000000231110147004153014336 0ustar moniotstaff00000000000000 To-Do List FTNCHEK 3.3 November, 2004 Below is a small list of features that could be added to ftnchek relatively easily, and ought to be implemented as soon as possible, in order to support a larger number of Fortran 90 features. They are more or less in order of increasing effort required. Volunteers to work on implementing any of these items are welcomed, and should contact moniot@fordham.edu for advice and assistance. 1. Fortran 90 intrinsics, especially the kind functions, which will be needed for implementing kind types. 2. Check attribute-based declarations for violating various simple constraints, e.g. more than one LEN or KIND keyword in a specifier list. 3. Array sections. 4. Catch use of unassigned pointers. 5. Catch use of non-allocated arrays. 6. INTENT and OPTIONAL statements and attributes. Use these to adjust checking of agreement of subprogram arguments. 7. Array constructors. 8. Check formats for legality, and for agreement with their I/O lists. 9. Kind types. Kind parameters on constants. Catch disagreement between kinds. (Parsing of KIND specifiers in type declarations is already implemented; the big task is to interpret them.) ftnchek-3.3.1/project.magic0000644000031000002260000000027107617175043016240 0ustar moniotstaff00000000000000# Magic strings for ftnchek project files. 0 string FTNCHEK_\ P project file for ftnchek >10 string 1 version 2.7 >10 string 2 version 2.8 to 2.10 >10 string 3 version 2.11 or later ftnchek-3.3.1/average.f0000644000031000002260000000226107617172110015342 0ustar moniotstaff00000000000000C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,J,SCORE(5) DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = SUM/COUNT END PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C PARAMETER(MAXNOS=5) INTEGER I, COUNT REAL NUMS(MAXNOS), AVG COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) END ftnchek-3.3.1/average.out0000644000031000002260000000626610201516560015727 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File average.f: 1 C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO 30 I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 30 CONTINUE 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20: integer quotient expr SUM/COUNT converted to real 17 END Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV: Variables declared but never referenced: J declared at line 11 Warning in module COMPAV: Variables may be used before set: SUM used at line 14 SUM set at line 14 Statement labels defined: Label Line StmtType <30> 15 exec 18 19 20 PROGRAM AVENUM 21 C 22 C MAIN PROGRAM 23 C 24 C AUTHOR: LOIS BIGBIE 25 C DATE: MAY 15, 1990 26 C 27 C Variables: 28 C MAXNOS -> maximum number of input values 29 C NUMS -> an array of numbers 30 C COUNT -> exact number of input values 31 C AVG -> average returned by COMPAV 32 C I -> loop counter 33 C 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO 80 I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) 41 COUNT = COUNT + 1 42 80 CONTINUE 43 100 AVG = COMPAV(NUMS, COUNT) 44 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM: Variables set but never used: AVG set at line 43 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42 exec <100> 43 exec 0 syntax errors detected in file average.f 6 warnings issued in file average.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f is type intg Actual arg NUMS in module AVENUM line 43 file average.f is type real ftnchek-3.3.1/correct.f0000644000031000002260000000244107617172110015371 0ustar moniotstaff00000000000000C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter C REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,I,SCORE(5) C SUM = 0 DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = FLOAT(SUM)/FLOAT(COUNT) END C C PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C C INTEGER MAXNOS PARAMETER(MAXNOS=5) INTEGER I, NUMS(MAXNOS), COUNT REAL AVG,COMPAV COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) WRITE(6,*) 'AVERAGE =',AVG END ftnchek-3.3.1/blurb.txt0000644000031000002260000004632410202535152015431 0ustar moniotstaff00000000000000FTNCHEK 3.3(1L) FTNCHEK 3.3(1L) NAME ftnchek - Fortran 77 program checker SYNOPSIS ftnchek [ -arguments[=list] ] [ -array[=list] ] [ -[no]brief ] [ -calltree[=list] ] [ -[no]check ] [ -columns[=num] ] [ -common[=list] ] [ -[no]crossref[=list] ] [ -[no]declare ] [ -[no]division ] [ -errors[=num] ] [ -[no]extern ] [ -[no]f77[=list] ] [ -[no]f90[=list] ] [ -[no]f95[=list] ] [ -[no]help ] [ -[no]identifier-chars[=list] ] [ -include=str ] [ -intrinsic[=list] ] [ -[no]library ] [ -[no]list ] [ -makedcls[=list] ] [ -mkhtml[=list] ] [ -[no]novice ] [ -output=str ] [ -pointersize[=num] ] [ -[no]portability[=list] ] [ -[no]pretty[=list] ] [ -project[=list] ] [ -[no]pure ] [ -[no]quiet ] [ -[no]reference ] [ -[no]resources ] [ -[no]sixchar ] [ -[no]sort ] [ -source[=list] ] [ -style[=list] ] [ -[no]symtab ] [ -[no]truncation[=list] ] [ -usage[=list] ] [ -[no]vcg ] [ -[no]version ] [ -[no]volatile ] [ -wordsize[=num] ] [ -wrap[=num] ] [ files ... ] DESCRIPTION ftnchek (short for Fortran checker) is designed to detect certain errors in a Fortran program that a compiler usually does not. ftnchek is not primarily intended to detect syntax errors. Its purpose is to assist the user in finding semantic errors. Semantic errors are legal in the Fortran language but are wasteful or may cause incorrect opera- tion. For example, variables which are never used may indicate some omission in the program; uninitialized variables contain garbage which may cause incorrect results to be calculated; and variables which are not declared may not have the intended type. ftnchek is intended to assist users in the debugging of their Fortran program. It is not intended to catch all syntax errors. This is the function of the com- piler. Prior to using ftnchek, the user should verify that the program compiles correctly. INVOKING FTNCHEK ftnchek is invoked through a command of the form: $ ftnchek [-option -option ...] filename [filename ...] The brackets indicate something which is optional. The brackets them- selves are not actually typed. Here options are command-line switches or settings, which control the operation of the program and the amount of information that will be printed out. If no option is specified, the default action is to print error messages, warnings, and informa- tional messages, but not the program listing or symbol tables. Each option begins with the '-' character. (On VAX/VMS or MS-DOS sys- tems you may use either '/' or '-'.) For the sake of conformity with an increasingly common convention, options can also begin with '--'. The options are described at greater length in the next section. ftnchek options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch is prefixed by 'no' or 'no-' to turn it off: e.g. -nopure would turn off the warnings about impure functions. The 'no' prefix can also be used with numeric settings, having the effect of turning off the corresponding warnings. Settings that control lists of warnings have a special syntax discussed below. Only the first 3 char- acters of an option name (not counting the '-') need be provided. A colon may be used in place of an equals sign for numeric or string set- ting assignments; however, we show only the equals sign form below. The switches and settings which ftnchek currently recognizes are listed below. For each option, the default is the value used if the option is not explicitly specified, while the turn-on is the value used if the option is given without assigning it a value. -arguments=list Control warnings about subprogram type and argument mismatches. Default = turn-on = all. -array=list Control warnings in checking array arguments of subprograms. Default = turn-on = all. -brief Use shorter format for some error messages. Default = no. -calltree=list Produce subprogram call hierarchy in one of 3 formats: text call-tree, who-calls-who and VCG. Default = none, turn-on = tree,prune,sort. If the -mkhtml option is invoked and tree is the applied call- tree option, a file named CallTree.html, will be produced depicting the tree in HTML format. -check Perform checking. Default = yes. -columns=num Set maximum line length to num columns. (Beyond this is ignored.) Turn-on = max = 132. Default = 72. -common=list Set degree of strictness in checking COMMON blocks. Default = turn-on = all. -crossref=list Print cross-reference list of subprogram calls, label usage, and/or COMMON block use. Default = none. -declare Print a list of all identifiers whose datatype is not explicitly declared. Default = no. -division Warn wherever division is done (except division by a constant). Default = no. -errors=num Set the maximum number of error messages per cascade. Default = turn-on = 3. -extern Warn if external subprograms which are invoked are never defined. Default = yes. -f77=list Control specific warnings about supported extensions to the For- tran 77 Standard. Default = none, turn-on = all. -f90=list Control specific warnings about supported extensions to the For- tran 77 Standard that were not adopted as part of the Fortran 90 Standard. Default = none, turn-on = all. -f95=list Control specific warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Default = none, turn-on = all. -help Print command summary. Default = no. -identifier-chars=list Define non-alphanumeric characters that may be used in identi- fiers. Default = turn-on = dollar sign and underscore. -include=path Define a directory to search for INCLUDE files before searching in the system-wide directory. Cumulative. Default = turn-on = none. -intrinsic=list Control treatment of nonstandard intrinsic functions. Default = all except vms for Unix version, all except unix for VMS ver- sion, all except unix and vms for other versions. Turn-on = all. -library Begin library mode: do not warn about subprograms in file that are defined but never used. Default = no. -list Print source listing of program. Default = no. -makedcls=list Prepare a file of declarations. The list specifies options for the format of this file. Default = none, turn-on = declara- tions. -mkhtml=list Create individual HTML document files from ftnchek analysis and code comments. Usually you will also want to specify -call=tree to create the root HTML file CallTree.html. Default = none, turn-on = documents. -novice Give output suitable for novice users. Default = yes. -output=filename Send output to the given file. Default and turn-on sends output to the screen. (Default filename extension is .lis). -pointersize=num Set the size of ''Cray pointer'' variables to num bytes. Min = 1, max = 16. Default = turn-on = 4 -portability=list Warn about non-portable usages. Default = none, turn-on = all. -pretty=list Give warnings for possibly misleading appearance of source code. Default = turn-on = all. -project=list Create project file (see explanation below). Default = no. -pure Assume functions are pure, i.e. have no side effects. Default = yes. -quiet Produce less verbose output. Default = no. -reference Print table of subprograms referenced by each subprogram. Default = no. -resources Print amount of resources used in analyzing the program. Default = no. -sixchar List any variable names which clash at 6 characters length. Default = no. -sort Print list of subprograms sorted in prerequisite order. Default = no. -source=list Select source formatting options: fixed or free form, DEC For- tran tab-formatted lines, VMS-style INCLUDE statement, UNIX- style backslash escape sequences, and implicit typing of parame- ters. Default = none, turn-on = all. -style=list Produce extra-picky warnings about obsolescent or old-fashioned programming constructions. Default = none, turn-on = all. -symtab Print symbol table and label table for each subprogram. Default = no. -truncation=list Check for possible loss of accuracy by truncation. Default = turn-on = all. -usage=list Control warnings about unused or uninitialized variables, common blocks, etc. Default = turn-on = all. -vcg Produce VCG format of call graph. -version Print version number. Default = no. -volatile Assume COMMON blocks lose definition between activations. Default = no. (Obsolete. Use -common=volatile instead.) -wordsize=num Set the default word size for numeric quantities to num bytes. Default = turn-on = 4 bytes. -wrap=num Set output column at which to wrap long error messages and warn- ings to the next line. If set to 0, turn off wrapping. Default = turn-on = 79. When more than one option is used, they should be separated by a blank space, except on systems such as VMS where options begin with slash ( / ). No blank spaces may be placed around the equals sign ( = ) in a setting. ftnchek "?" will produce a command summary listing all options and settings. For settings that take a list of keywords, namely -arguments, -array, -calltree, -common, -crossref, -f77, -f90, -f95, -intrinsic, -makedcls, -mkhtml, -portability, -pretty, -project, -source, -style, -truncation, and -usage, the list consists of keywords separated by commas or colons. If the list of keywords is omitted, the effect is to set the option to its turn-on value (same as ''all'' in most cases). Also, if the list is omitted, the setting name can be prefixed with no or no- to turn off all the options it controls. For example, -f77 turns on all warnings about nonstandard constructions, while -nof77 turns them all off. Three special keywords are: help Print out all the option keywords controlled by the setting, with a brief explanation of their meanings. This keyword cannot be given in a list with other keywords. all Set all options. This turns on all options controlled by the setting. none Clear all options. This turns off all options controlled by the setting. These three special keywords must be given in full. For all other key- words, only as many letters of the keyword as are necessary to identify it unambiguously need be given, or a wildcard pattern may be used. Including a keyword in the list turns the corresponding option on. For example, -f77=intrinsic would turn on only the warnings about use of nonstandard intrinsic functions. Prefixing a keyword by no- turns its option off. For example, -pretty=no-long-line turns off warnings about lines exceeding 72 columns in length while leaving all other warnings about misleading appearance in effect. If a setting has default none, you can turn on all options except one or two by using all first. For example, -f77=all,no-include enables warnings about all nonstandard extensions except INCLUDE statements. If a setting has default all, you can turn off all warnings except one or two by using none first. For example, -truncation=none,demotion would turn off all precision related warnings except about demotions. Wildcard patterns contain an asterisk to stand for any string of characters. If a wildcard pattern is used, all the warnings that match it are affected. If no- is pre- fixed to the pattern, all the matching warnings are turned off, other- wise they are all turned on. The minimum unambiguous length rule does not apply to wildcard matching. For example, use -usage=no-*var* to turn off all warnings relating to variable usage (both local and com- mon). (Unix users may need to quote any options containing wildcards in order to prevent the shell from attempting to expand them.) Wild- cards are recognized only in lists of warning keywords, not in the top- level options themselves. When ftnchek starts up, it looks for environment variables and also for a preferences file. Any options defined in the environment or in the preferences file are used as defaults in place of the built-in defaults. They are over-ridden by any command line options. See the section on changing the defaults for details about the environment options and the preferences file. When giving a name of an input file, the extension is optional. If no extension is given, ftnchek will first look for a project file with extension .prj, and will use that if it exists. If not, then ftnchek will look for a Fortran source file with the extension .for for VMS systems, .f for UNIX systems. More than one file name can be given to ftnchek, and it will process the modules in all files as if they were in a single file. Wildcards are allowed in the specification of filenames on the command line for the VMS and MS-DOS versions, as also of course under UNIX and any other system that performs wildcard expansion in the command pro- cessor. If no filename is given, ftnchek will read input from the standard input. NEW FEATURES Here are the changes from Version 3.2 to Version 3.3: 1. Front-end has been rewritten for unlimited lookahead, eliminating the longstanding bug that caused incorrect interpretation of state- ments whose ambiguity was not resolved in the first line. 2. The -mkhtml option is now available in the MS-DOS version. 3. Added support for Fortran 90 pointer related syntax: ALLOCATE, DEALLOCATE, and NULLIFY statements; the ALLOCATABLE, POINTER and TARGET attributes in type declarations; the pointer assigment oper- ator => and intrinsic functions ALLOCATED and ASSOCIATED; and deferred-shape array declarations. At present these new syntax features are accepted but not properly checked. This feature was added by Robert Landrito. 4. The -f77 and -f90 pointer option controlling warnings about ''Cray pointers'' has been renamed to cray-pointer. The -f77=pointer option now instead controls warnings for code containing Fortran 90 pointer-related syntax. 5. Re-implemented -mkhtml processing so it is now much faster on source files containing many routines. 6. Changed the arrangement of the test directory so there is no longer any need to modify the distribution in order to run the test suite (check.bat) under MS-DOS. 7. Fixed bug in reading numeric settings on command line when setting name abbreviated to 3 characters. 8. Fixed bug causing spurious warning for a GOTO referring to a labeled END statement when the statement before END was a FORMAT. 9. New flag -f77=character to control warnings about extensions to the Fortran 77 character data type. Accompanying this new flag is sup- port for Fortran 90 rules for character variable declarations that evaluate to zero or negative length, allowing them and treating negative length values as zero. 10. Fixed minor bug in printing of comments and blank lines following last END statement in -list mode. INSTALLATION AND SUPPORT The ftnchek program is free software. It can be obtained by anonymous ftp from many software servers, including ftp://netlib.org/fortran . Note that on Netlib the distribution is named ftnchek.tar.gz whereas on most other servers the file name includes the version number, e.g. ftnchek-3.3.0.tar.gz. If the file extension is .Z, uncompress with the Unix uncompress(1) utility. If the file extension is .gz, uncompress with the GNU gunzip(1L) program. Then use tar(1) to unpack the files into a subdirectory. Installation requires a C compiler for your computer. See the INSTALL file provided with the distribution for instructions on installing ftnchek on your system. Executable binary for particular systems such as IBM PC or Macintosh, as available, can be obtained by anonymous ftp from ftp://ftp.dsm.fordham.edu/pub/ftnchek . Assistance in preparing such executable binary forms is welcome. Information about the latest version and the status of the project can be obtained by visiting ftnchek's home page, http://www.dsm.ford- ham.edu/~ftnchek . For further information and to report bugs, you may contact Dr. Robert Moniot, whose contact information can be found by a Web search for his name and Fordham University. (E-mail address is not provided here because it attracts unsolicited commercial e-mail, but it is easily constructed by combining his last name with the name of the university and the edu domain.) November 2004 FTNCHEK 3.3(1L) ftnchek-3.3.1/dcl2inc.doc0000644000031000002260000000726607636462155015614 0ustar moniotstaff00000000000000DCL2INC(1) DCL2INC(1) NAME dcl2inc - postprocess ftnchek .dcl files to create separate INCLUDE files SYNOPSIS dcl2inc *.dcl DESCRIPTION dcl2inc postprocessing declaration files output by ftnchek(1), replac- ing unique COMMON block definitions by Fortran INCLUDE statements. For each input .dcl file, a modified output .dcn file is produced, together with include files named by the COMMON block name, with filename exten- sion .inc. In addition, dcl2inc produces on stdout a list of Makefile dependencies for the UNIX make(1) utility. These can be appended to the project Makefile to ensure that any subsequent changes to .inc files provoke recompilation of source files that include them. dcl2inc warns about COMMONs which differ from their first occurrence, and simply copies them to the output .dcn file, instead of replacing them with an INCLUDE statement. Thus, any COMMON statements that are found in the output .dcn files should be examined carefully to deter- mine why they differ: they may well be in error. Replication of identical data, and bugs arising from subsequent modifi- cation of only part of it, is a significant reason why Fortran program- ming projects should require that COMMON declarations occur in separate include files, so that there is only a single point of definition of any global object. Even though the Fortran INCLUDE statement was tragically omitted from the 1977 Standard, it has long been implemented by virtually all com- piler vendors, and is part of the 1990 Standard. In practice, there is therefore no portability problem associated with use of INCLUDE state- ments, provided that one avoids nonportable file names. As long as the code obeys Fortran's limit of six-character alphanumeric names, the filenames generated by dcl2inc will be acceptable on all current popu- lar operating systems. Fortran's default, or IMPLICIT, variable typing is deprecated in modern programming languages, because it encourages sloppy documentation, and worse, bugs due to misspelled variables, or variables that have been truncated because they extend past column 72. If all variables used are explicitly typed, and a compiler option is used to reject all pro- gram units with untyped variables, variable spelling and truncation errors can be eliminated. Variable declarations that have been produced automatically by a tool like ftnchek(1) or pfort(1) have a consistent format that facilitates application of stream editors (e.g. to change array dimensions or rename variables), and simple floating-point precision conversion tools like d2s(1), dtoq(1), dtos(1), qtod(1), s2d(1), and stod(1). CAVEAT The current version (2.9) of ftnchek(1) does not produce Fortran EQUIV- ALENCE statements in .dcl files, so you must be careful to preserve them when replacing original declarations with new ones from .dcl or .dcn files. SEE ALSO d2s(1), dtoq(1), dtos(1), ftnchek(1), make(1), pfort(1), qtod(1), s2d(1), stod(1). AUTHOR Nelson H. F. Beebe, Ph.D. Center for Scientific Computing Department of Mathematics University of Utah Salt Lake City, UT 84112 Tel: +1 801 581 5254 FAX: +1 801 581 4148 Email: Version 1.00 12 March 1995 DCL2INC(1) ftnchek-3.3.1/dcl2inc.man0000644000031000002260000001267407617175043015615 0ustar moniotstaff00000000000000.\" ==================================================================== .\" @Troff-man-file{ .\" author = "Nelson H. F. Beebe", .\" version = "1.00", .\" date = "12 March 1995", .\" time = "11:28:55 MST", .\" filename = "dcl2inc.man", .\" address = "Center for Scientific Computing .\" Department of Mathematics .\" University of Utah .\" Salt Lake City, UT 84112 .\" USA", .\" telephone = "+1 801 581 5254", .\" FAX = "+1 801 581 4148", .\" checksum = "46539 162 737 5565", .\" email = "beebe@math.utah.edu (Internet)", .\" codetable = "ISO/ASCII", .\" keywords = "Fortran, type declarations", .\" supported = "yes", .\" docstring = "This file contains the UNIX manual pages .\" for the dcl2inc utility, a program for .\" postprocessing ftnchek .dcl files to .\" extract COMMON blocks into separate include .\" files. .\" .\" The checksum field above contains a CRC-16 .\" checksum as the first value, followed by the .\" equivalent of the standard UNIX wc (word .\" count) utility output of lines, words, and .\" characters. This is produced by Robert .\" Solovay's checksum utility.", .\" } .\" ==================================================================== .TH DCL2INC 1 "12 March 1995" "Version 1.00" .\"====================================================================== .SH NAME dcl2inc \- postprocess ftnchek .dcl files to create separate INCLUDE files .\"====================================================================== .SH SYNOPSIS .B dcl2inc .I *.dcl .\"====================================================================== .SH DESCRIPTION .B dcl2inc postprocessing declaration files output by .BR ftnchek (1), replacing unique COMMON block definitions by Fortran .I INCLUDE statements. For each input .I .dcl file, a modified output .I .dcn file is produced, together with include files named by the COMMON block name, with filename extension .IR .inc . .PP In addition, .B dcl2inc produces on .I stdout a list of .I Makefile dependencies for the UNIX .BR make (1) utility. These can be appended to the project .I Makefile to ensure that any subsequent changes to .I .inc files provoke recompilation of source files that include them. .PP .B dcl2inc warns about COMMONs which differ from their first occurrence, and simply copies them to the output .I .dcn file, instead of replacing them with an INCLUDE statement. Thus, any COMMON statements that are found in the output .I .dcn files should be examined carefully to determine why they differ: they may well be in error. .PP Replication of identical data, and bugs arising from subsequent modification of only part of it, is a significant reason why Fortran programming projects should .I require that COMMON declarations occur in separate include files, so that there is only a .I single point of definition of any global object. .PP Even though the Fortran .I INCLUDE statement was tragically omitted from the 1977 Standard, it has long been implemented by virtually all compiler vendors, and is part of the 1990 Standard. In practice, there is therefore no portability problem associated with use of INCLUDE statements, .I provided that one avoids nonportable file names. As long as the code obeys Fortran's limit of six-character alphanumeric names, the filenames generated by .B dcl2inc will be acceptable on all current popular operating systems. .PP Fortran's default, or IMPLICIT, variable typing is deprecated in modern programming languages, because it encourages sloppy documentation, and worse, bugs due to misspelled variables, or variables that have been truncated because they extend past column 72. If all variables used are explicitly typed, and a compiler option is used to reject all program units with untyped variables, variable spelling and truncation errors can be eliminated. .PP Variable declarations that have been produced automatically by a tool like .BR ftnchek (1) or .BR pfort (1) have a consistent format that facilitates application of stream editors (e.g. to change array dimensions or rename variables), and simple floating-point precision conversion tools like .BR d2s (1), .BR dtoq (1), .BR dtos (1), .BR qtod (1), .BR s2d (1), and .BR stod (1). .\"====================================================================== .SH CAVEAT The current version (2.9) of .BR ftnchek (1) does not produce Fortran EQUIVALENCE statements in .I .dcl files, so you must be careful to preserve them when replacing original declarations with new ones from .I .dcl or .I .dcn files. .\"====================================================================== .SH "SEE ALSO" .BR d2s (1), .BR dtoq (1), .BR dtos (1), .BR ftnchek (1), .BR make (1), .BR pfort (1), .BR qtod (1), .BR s2d (1), .BR stod (1). .\"====================================================================== .SH AUTHOR .nf Nelson H. F. Beebe, Ph.D. Center for Scientific Computing Department of Mathematics University of Utah Salt Lake City, UT 84112 Tel: +1 801 581 5254 FAX: +1 801 581 4148 Email: .fi .\"==============================[The End]============================== ftnchek-3.3.1/dcl2inc.ps0000644000031000002260000002651407636462155015466 0ustar moniotstaff00000000000000%!PS-Adobe-3.0 %%Creator: groff version 1.18 %%CreationDate: Thu Mar 20 20:01:33 2003 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%DocumentSuppliedResources: procset grops 1.18 0 %%Pages: 1 %%PageOrder: Ascend %%Orientation: Portrait %%EndComments %%BeginProlog %%BeginResource: procset grops 1.18 0 /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }bind def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /Fk{ setcmykcolor fill }bind def /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /Ck/setcmykcolor load def /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def }bind def /PEND{ clear countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron /Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE /Times-Roman@0 ENC0/Times-Roman RE %%EndProlog %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 357.74(DCL2INC\(1\) DCL2INC\(1\))72 48 R/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(dcl2inc \255 postpr\ ocess ftnchek .dcl \214les to create separate INCLUDE \214les)108 96 Q F1(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF(dcl2inc)108 124.8 Q/F3 10 /Times-Italic@0 SF(*.dcl)1.72 E F1(DESCRIPTION)72 141.6 Q F2(dcl2inc)108 153.6 Q F0 1.145(postprocessing declaration \214les output by)3.645 F F2 (ftnchek)3.645 E F0 1.144 (\(1\), replacing unique COMMON block de\214ni-)B 1.028(tions by F)108 165.6 R(ortran)-.15 E F3(INCLUDE)4.108 E F0 3.529(statements. F)4.258 F 1.029(or each input)-.15 F F3(.dcl)3.759 E F0 1.029 (\214le, a modi\214ed output)4.039 F F3(.dcn)3.759 E F0 1.029 (\214le is produced,)3.769 F(together with include \214les named by the\ COMMON block name, with \214lename e)108 177.6 Q(xtension)-.15 E F3 (.inc)2.5 E F0(.).31 E 1.68(In addition,)108 194.4 R F2(dcl2inc)4.18 E F0 1.68(produces on)4.18 F F3(stdout)4.52 E F0 4.179(al)4.859 G 1.679 (ist of)-4.179 F F3(Mak)4.859 E(e\214le)-.1 E F0 1.679 (dependencies for the UNIX)4.359 F F2(mak)4.179 E(e)-.1 E F0 1.679 (\(1\) utility)B(.)-.65 E .539(These can be appended to the project)108 206.4 R F3(Mak)3.719 E(e\214le)-.1 E F0 .539(to ensure that an)3.219 F 3.04(ys)-.15 G .54(ubsequent changes to)-3.04 F F3(.inc)3.27 E F0 .54 (\214les pro)3.35 F -.2(vo)-.15 G -.1(ke).2 G (recompilation of source \214les that include them.)108 218.4 Q F2 (dcl2inc)108 235.2 Q F0 -.1(wa)3.476 G .976(rns about COMMONs which dif) .1 F .975 (fer from their \214rst occurrence, and simply copies them to the)-.25 F (output)108 247.2 Q F3(.dcn)3.11 E F0 .381 (\214le, instead of replacing them with an INCLUDE statement.)3.12 F .381(Thus, an)5.381 F 2.881(yC)-.15 G .381(OMMON statements)-2.881 F .3 (that are found in the output)108 259.2 R F3(.dcn)3.03 E F0 .3 (\214les should be e)3.04 F .3(xamined carefully to determine wh)-.15 F 2.8(yt)-.05 G(he)-2.8 E 2.8(yd)-.15 G(if)-2.8 E .3(fer: the)-.25 F 2.8 (ym)-.15 G(ay)-2.8 E(well be in error)108 271.2 Q(.)-.55 E .539 (Replication of identical data, and b)108 288 R .54(ugs arising from su\ bsequent modi\214cation of only part of it, is a signi\214-)-.2 F .624 (cant reason wh)108 300 R 3.124(yF)-.05 G .624 (ortran programming projects should)-3.274 F F3 -.37(re)3.124 G(quir).37 E(e)-.37 E F0 .624(that COMMON declarations occur in sepa-)3.304 F (rate include \214les, so that there is only a)108 312 Q F3(single)2.84 E F0(point of de\214nition of an)2.68 E 2.5(yg)-.15 G(lobal object.)-2.5 E(Ev)108 328.8 Q .815(en though the F)-.15 F(ortran)-.15 E F3(INCLUDE) 3.895 E F0 .815(statement w)4.045 F .816 (as tragically omitted from the 1977 Standard, it has long)-.1 F .474 (been implemented by virtually all compiler v)108 340.8 R .473 (endors, and is part of the 1990 Standard.)-.15 F .473 (In practice, there is)5.473 F 1.315(therefore no portability problem a\ ssociated with use of INCLUDE statements,)108 352.8 R F3(pr)5.066 E -.1 (ov)-.45 G(ided).1 E F0 1.316(that one a)4.586 F -.2(vo)-.2 G(ids).2 E .158(nonportable \214le names.)108 364.8 R .158(As long as the code obe) 5.158 F .158(ys F)-.15 F(ortran')-.15 E 2.658(sl)-.55 G .158 (imit of six-character alphanumeric names, the)-2.658 F (\214lenames generated by)108 376.8 Q F2(dcl2inc)2.5 E F0 (will be acceptable on all current popular operating systems.)2.5 E -.15 (Fo)108 393.6 S(rtran').15 E 3.17(sd)-.55 G(ef)-3.17 E .67 (ault, or IMPLICIT)-.1 F 3.17(,v)-.74 G .67 (ariable typing is deprecated in modern programming languages, because) -3.42 F 1.249(it encourages slopp)108 405.6 R 3.749(yd)-.1 G 1.249 (ocumentation, and w)-3.749 F 1.249(orse, b)-.1 F 1.249 (ugs due to misspelled v)-.2 F 1.248(ariables, or v)-.25 F 1.248 (ariables that ha)-.25 F -.15(ve)-.2 G .72(been truncated because the) 108 417.6 R 3.22(ye)-.15 G .72(xtend past column 72.)-3.37 F .72 (If all v)5.72 F .72(ariables used are e)-.25 F .72 (xplicitly typed, and a com-)-.15 F 1.688 (piler option is used to reject all program units with untyped v)108 429.6 R 1.688(ariables, v)-.25 F 1.688(ariable spelling and truncation) -.25 F(errors can be eliminated.)108 441.6 Q -1.11(Va)108 458.4 S 1.043 (riable declarations that ha)1.11 F 1.343 -.15(ve b)-.2 H 1.043 (een produced automatically by a tool lik).15 F(e)-.1 E F2(ftnchek)3.544 E F0 1.044(\(1\) or)B F2(pf)3.544 E(ort)-.25 E F0 1.044(\(1\) ha)B 1.344 -.15(ve a)-.2 H .87(consistent format that f)108 470.4 R .87(acilitates\ application of stream editors \(e.g. to change array dimensions or ren\ ame)-.1 F -.25(va)108 482.4 S 2.286 (riables\), and simple \215oating-point precision con).25 F -.15(ve)-.4 G 2.286(rsion tools lik).15 F(e)-.1 E F2(d2s)4.787 E F0(\(1\),)A F2 (dtoq)4.787 E F0(\(1\),)A F2(dtos)4.787 E F0(\(1\),)A F2(qtod)4.787 E F0 (\(1\),)A F2(s2d)108 494.4 Q F0(\(1\), and)A F2(stod)2.5 E F0(\(1\).)A F1(CA)72 511.2 Q(VEA)-1.588 E(T)-1.04 E F0 .439(The current v)108 523.2 R .439(ersion \(2.9\) of)-.15 F F2(ftnchek)2.939 E F0 .439 (\(1\) does not produce F)B .438(ortran EQ)-.15 F(UIV)-.1 E .438 (ALENCE statements in)-1.35 F F3(.dcl)3.168 E F0(\214les,)3.448 E .788 (so you must be careful to preserv)108 535.2 R 3.289(et)-.15 G .789 (hem when replacing original declarations with ne)-3.289 F 3.289(wo)-.25 G .789(nes from)-3.289 F F3(.dcl)3.519 E F0(or)3.799 E F3(.dcn)108.23 547.2 Q F0(\214les.)2.74 E F1(SEE ALSO)72 564 Q F2(d2s)108 576 Q F0 (\(1\),)A F2(dtoq)2.5 E F0(\(1\),)A F2(dtos)2.5 E F0(\(1\),)A F2 (ftnchek)2.5 E F0(\(1\),)A F2(mak)2.5 E(e)-.1 E F0(\(1\),)A F2(pf)2.5 E (ort)-.25 E F0(\(1\),)A F2(qtod)2.5 E F0(\(1\),)A F2(s2d)2.5 E F0 (\(1\),)A F2(stod)2.5 E F0(\(1\).)A F1 -.548(AU)72 592.8 S(THOR).548 E F0(Nelson H. F)108 604.8 Q 2.5(.B)-.8 G(eebe, Ph.D.)-2.5 E (Center for Scienti\214c Computing)108 616.8 Q (Department of Mathematics)108 628.8 Q(Uni)108 640.8 Q -.15(ve)-.25 G (rsity of Utah).15 E(Salt Lak)108 652.8 Q 2.5(eC)-.1 G(ity)-2.5 E 2.5 (,U)-.65 G 2.5(T8)-2.5 G(4112)-2.5 E -.7(Te)108 664.8 S (l: +1 801 581 5254).7 E -.74(FA)108 676.8 S(X: +1 801 581 4148).74 E (Email: )108 688.8 Q -1.11(Ve)72 768 S(rsion 1.00) 1.11 E(12 March 1995)152.9 E(1)198.45 E 0 Cg EP %%Trailer end %%EOF ftnchek-3.3.1/ftnchek.doc0000644000031000002260000067021310202535153015674 0ustar moniotstaff00000000000000FTNCHEK 3.3(1L) FTNCHEK 3.3(1L) NAME ftnchek - Fortran 77 program checker SYNOPSIS ftnchek [ -arguments[=list] ] [ -array[=list] ] [ -[no]brief ] [ -calltree[=list] ] [ -[no]check ] [ -columns[=num] ] [ -common[=list] ] [ -[no]crossref[=list] ] [ -[no]declare ] [ -[no]division ] [ -errors[=num] ] [ -[no]extern ] [ -[no]f77[=list] ] [ -[no]f90[=list] ] [ -[no]f95[=list] ] [ -[no]help ] [ -[no]identifier-chars[=list] ] [ -include=str ] [ -intrinsic[=list] ] [ -[no]library ] [ -[no]list ] [ -makedcls[=list] ] [ -mkhtml[=list] ] [ -[no]novice ] [ -output=str ] [ -pointersize[=num] ] [ -[no]portability[=list] ] [ -[no]pretty[=list] ] [ -project[=list] ] [ -[no]pure ] [ -[no]quiet ] [ -[no]reference ] [ -[no]resources ] [ -[no]sixchar ] [ -[no]sort ] [ -source[=list] ] [ -style[=list] ] [ -[no]symtab ] [ -[no]truncation[=list] ] [ -usage[=list] ] [ -[no]vcg ] [ -[no]version ] [ -[no]volatile ] [ -wordsize[=num] ] [ -wrap[=num] ] [ files ... ] DESCRIPTION ftnchek (short for Fortran checker) is designed to detect certain errors in a Fortran program that a compiler usually does not. ftnchek is not primarily intended to detect syntax errors. Its purpose is to assist the user in finding semantic errors. Semantic errors are legal in the Fortran language but are wasteful or may cause incorrect opera- tion. For example, variables which are never used may indicate some omission in the program; uninitialized variables contain garbage which may cause incorrect results to be calculated; and variables which are not declared may not have the intended type. ftnchek is intended to assist users in the debugging of their Fortran program. It is not intended to catch all syntax errors. This is the function of the com- piler. Prior to using ftnchek, the user should verify that the program compiles correctly. This document first summarizes how to invoke ftnchek. That section should be read before beginning to use ftnchek. Later sections describe ftnchek's options in more detail, give an example of its use, and explain how to interpret the output. The final sections mention the limitations and known bugs in ftnchek. INVOKING FTNCHEK ftnchek is invoked through a command of the form: $ ftnchek [-option -option ...] filename [filename ...] The brackets indicate something which is optional. The brackets them- selves are not actually typed. Here options are command-line switches or settings, which control the operation of the program and the amount of information that will be printed out. If no option is specified, the default action is to print error messages, warnings, and informa- tional messages, but not the program listing or symbol tables. Each option begins with the '-' character. (On VAX/VMS or MS-DOS sys- tems you may use either '/' or '-'.) For the sake of conformity with an increasingly common convention, options can also begin with '--'. The options are described at greater length in the next section. ftnchek options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch is prefixed by 'no' or 'no-' to turn it off: e.g. -nopure would turn off the warnings about impure functions. The 'no' prefix can also be used with numeric settings, having the effect of turning off the corresponding warnings. Settings that control lists of warnings have a special syntax discussed below. Only the first 3 char- acters of an option name (not counting the '-') need be provided. A colon may be used in place of an equals sign for numeric or string set- ting assignments; however, we show only the equals sign form below. The switches and settings which ftnchek currently recognizes are listed below. For each option, the default is the value used if the option is not explicitly specified, while the turn-on is the value used if the option is given without assigning it a value. -arguments=list Control warnings about subprogram type and argument mismatches. Default = turn-on = all. -array=list Control warnings in checking array arguments of subprograms. Default = turn-on = all. -brief Use shorter format for some error messages. Default = no. -calltree=list Produce subprogram call hierarchy in one of 3 formats: text call-tree, who-calls-who and VCG. Default = none, turn-on = tree,prune,sort. If the -mkhtml option is invoked and tree is the applied call- tree option, a file named CallTree.html, will be produced depicting the tree in HTML format. -check Perform checking. Default = yes. -columns=num Set maximum line length to num columns. (Beyond this is ignored.) Turn-on = max = 132. Default = 72. -common=list Set degree of strictness in checking COMMON blocks. Default = turn-on = all. -crossref=list Print cross-reference list of subprogram calls, label usage, and/or COMMON block use. Default = none. -declare Print a list of all identifiers whose datatype is not explicitly declared. Default = no. -division Warn wherever division is done (except division by a constant). Default = no. -errors=num Set the maximum number of error messages per cascade. Default = turn-on = 3. -extern Warn if external subprograms which are invoked are never defined. Default = yes. -f77=list Control specific warnings about supported extensions to the For- tran 77 Standard. Default = none, turn-on = all. -f90=list Control specific warnings about supported extensions to the For- tran 77 Standard that were not adopted as part of the Fortran 90 Standard. Default = none, turn-on = all. -f95=list Control specific warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Default = none, turn-on = all. -help Print command summary. Default = no. -identifier-chars=list Define non-alphanumeric characters that may be used in identi- fiers. Default = turn-on = dollar sign and underscore. -include=path Define a directory to search for INCLUDE files before searching in the system-wide directory. Cumulative. Default = turn-on = none. -intrinsic=list Control treatment of nonstandard intrinsic functions. Default = all except vms for Unix version, all except unix for VMS ver- sion, all except unix and vms for other versions. Turn-on = all. -library Begin library mode: do not warn about subprograms in file that are defined but never used. Default = no. -list Print source listing of program. Default = no. -makedcls=list Prepare a file of declarations. The list specifies options for the format of this file. Default = none, turn-on = declara- tions. -mkhtml=list Create individual HTML document files from ftnchek analysis and code comments. Usually you will also want to specify -call=tree to create the root HTML file CallTree.html. Default = none, turn-on = documents. -novice Give output suitable for novice users. Default = yes. -output=filename Send output to the given file. Default and turn-on sends output to the screen. (Default filename extension is .lis). -pointersize=num Set the size of ''Cray pointer'' variables to num bytes. Min = 1, max = 16. Default = turn-on = 4 -portability=list Warn about non-portable usages. Default = none, turn-on = all. -pretty=list Give warnings for possibly misleading appearance of source code. Default = turn-on = all. -project=list Create project file (see explanation below). Default = no. -pure Assume functions are pure, i.e. have no side effects. Default = yes. -quiet Produce less verbose output. Default = no. -reference Print table of subprograms referenced by each subprogram. Default = no. -resources Print amount of resources used in analyzing the program. Default = no. -sixchar List any variable names which clash at 6 characters length. Default = no. -sort Print list of subprograms sorted in prerequisite order. Default = no. -source=list Select source formatting options: fixed or free form, DEC For- tran tab-formatted lines, VMS-style INCLUDE statement, UNIX- style backslash escape sequences, and implicit typing of parame- ters. Default = none, turn-on = all. -style=list Produce extra-picky warnings about obsolescent or old-fashioned programming constructions. Default = none, turn-on = all. -symtab Print symbol table and label table for each subprogram. Default = no. -truncation=list Check for possible loss of accuracy by truncation. Default = turn-on = all. -usage=list Control warnings about unused or uninitialized variables, common blocks, etc. Default = turn-on = all. -vcg Produce VCG format of call graph. -version Print version number. Default = no. -volatile Assume COMMON blocks lose definition between activations. Default = no. (Obsolete. Use -common=volatile instead.) -wordsize=num Set the default word size for numeric quantities to num bytes. Default = turn-on = 4 bytes. -wrap=num Set output column at which to wrap long error messages and warn- ings to the next line. If set to 0, turn off wrapping. Default = turn-on = 79. When more than one option is used, they should be separated by a blank space, except on systems such as VMS where options begin with slash ( / ). No blank spaces may be placed around the equals sign ( = ) in a setting. ftnchek "?" will produce a command summary listing all options and settings. For settings that take a list of keywords, namely -arguments, -array, -calltree, -common, -crossref, -f77, -f90, -f95, -intrinsic, -makedcls, -mkhtml, -portability, -pretty, -project, -source, -style, -truncation, and -usage, the list consists of keywords separated by commas or colons. If the list of keywords is omitted, the effect is to set the option to its turn-on value (same as ''all'' in most cases). Also, if the list is omitted, the setting name can be prefixed with no or no- to turn off all the options it controls. For example, -f77 turns on all warnings about nonstandard constructions, while -nof77 turns them all off. Three special keywords are: help Print out all the option keywords controlled by the setting, with a brief explanation of their meanings. This keyword cannot be given in a list with other keywords. all Set all options. This turns on all options controlled by the setting. none Clear all options. This turns off all options controlled by the setting. These three special keywords must be given in full. For all other key- words, only as many letters of the keyword as are necessary to identify it unambiguously need be given, or a wildcard pattern may be used. Including a keyword in the list turns the corresponding option on. For example, -f77=intrinsic would turn on only the warnings about use of nonstandard intrinsic functions. Prefixing a keyword by no- turns its option off. For example, -pretty=no-long-line turns off warnings about lines exceeding 72 columns in length while leaving all other warnings about misleading appearance in effect. If a setting has default none, you can turn on all options except one or two by using all first. For example, -f77=all,no-include enables warnings about all nonstandard extensions except INCLUDE statements. If a setting has default all, you can turn off all warnings except one or two by using none first. For example, -truncation=none,demotion would turn off all precision related warnings except about demotions. Wildcard patterns contain an asterisk to stand for any string of characters. If a wildcard pattern is used, all the warnings that match it are affected. If no- is pre- fixed to the pattern, all the matching warnings are turned off, other- wise they are all turned on. The minimum unambiguous length rule does not apply to wildcard matching. For example, use -usage=no-*var* to turn off all warnings relating to variable usage (both local and com- mon). (Unix users may need to quote any options containing wildcards in order to prevent the shell from attempting to expand them.) Wild- cards are recognized only in lists of warning keywords, not in the top- level options themselves. When ftnchek starts up, it looks for environment variables and also for a preferences file. Any options defined in the environment or in the preferences file are used as defaults in place of the built-in defaults. They are over-ridden by any command line options. See the section on changing the defaults for details about the environment options and the preferences file. When giving a name of an input file, the extension is optional. If no extension is given, ftnchek will first look for a project file with extension .prj, and will use that if it exists. If not, then ftnchek will look for a Fortran source file with the extension .for for VMS systems, .f for UNIX systems. More than one file name can be given to ftnchek, and it will process the modules in all files as if they were in a single file. Wildcards are allowed in the specification of filenames on the command line for the VMS and MS-DOS versions, as also of course under UNIX and any other system that performs wildcard expansion in the command pro- cessor. If no filename is given, ftnchek will read input from the standard input. OPTIONS This section provides a more detailed discussion of ftnchek command- line options. Options and filenames may be interspersed on a command line. Most options are positional: each option remains in effect from the point it is encountered until it is overridden by a later change. Thus for example, the listing may be suppressed for some files and not for others. Exceptions are: the -intrinsic, -pointersize, and -word- size settings, which cannot be changed once processing of input files has started; the -arguments, -array, -calltree, -common, -crossref, -extern, -reference, -resources, -sort, -vcg, and -volatile options, where the action depends only on the value of the option after the pro- cessing of input files is finished; and the -include setting, which is cumulative. The option names in the following list are in alphabetical order. -arguments=list Controls warnings about mismatches between actual and dummy subprogram arguments, and also about mismatches between expected and actual subprogram type. (An actual argument is an argument passed to the subprogram by the caller; a dummy argument is an argument received by the subprogram.) By default, all warnings are turned on. The list consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings about arguments, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -arguments is equivalent to -arguments=all, and -noarguments is equivalent to -arguments=none. The warning key- words with their meanings are as follows: arrayness: warn about inconsistent use of arguments that are arrays. These warnings can be further controlled by the -array option. type: warn about dummy arguments of a different data type from the actual arguments. function-type: warn if the invocation assumes the function's return value is a different type than it actually is. Also warns if a function is called as a subroutine, or vice-versa. number: warn about invoking a subprogram with a different number of arguments than the subprogram expects. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only number, 2 turns on all except number, and 3 turns all the warnings on. This setting does not apply to checking invocations of intrinsic functions or statement functions, which can only be turned off by the -nocheck option. See also: -array, -library, -usage. -array=list Controls the degree of strictness in checking agreement between actual and dummy subprogram arguments that are arrays. The warnings controlled by this setting are for constructions that might legitimately be used by a knowledgeable programmer, but that often indicate programming errors. By default, all warn- ings are turned on. The list consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings about array arguments, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -array is equivalent to -array=all, and -noarray is equivalent to -array=none. The warning keywords with their meanings are as follows: dimensions: warn if the arguments differ in their number of dimensions, or if the actual argument is an array element while the dummy argument is a whole array. size: warn if both arguments are arrays, but they differ in number of elements. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only dimensions, 2 turns on only size, and 3 turns all the warnings on. Note: A warning is always given regardless of this setting if the actual argument is an array while the dummy argument is a scalar variable, or if the actual argument is a scalar variable or expression while the dummy argument is an array. These cases are seldom intentional. (To turn off even these warnings, use -arguments=no-arrayness.) No warning is ever given if the actual argument is an array element while the dummy argument is a scalar variable. Variable-dimensioned arrays and arrays dimensioned with 1 or asterisk match any number of array ele- ments. There is no check of whether multi-dimensional arrays agree in the size of each dimension separately. See also: -arguments, -library, -usage. -brief Selects a shorter format for some warning messages. At present, the only warnings controlled by this flag are those that are printed at the end of processing each subprogram. These include warnings about variables that are set but not used or used before set, variable names that do not conform to the Fortran 77 standard, etc. (These warnings may be suppressed entirely depending on other flags, such as the -usage or -f77 flags.) In the default format each variable is listed on a sep- arate line, along with the line number where the variable is declared, set or used, according to the nature of the warning. The briefer format simply lists all variables to which the warn- ing applies, with up to 4 variables per line. See also: -quiet. -calltree=list Causes ftnchek to print out the call structure of the complete program. The list consists of keywords separated by commas or colons. There are two special keywords: none to turn off all the options, and help to print the list of all the keywords with a brief explanation of each. (The keyword all turns on all the options, but should not normally be used since only one format should be specified.) If list is omitted, -calltree is equiva- lent to -calltree=tree, and -nocalltree is equivalent to -call- tree=none. By default no call graph is printed. If the -mkhtml option is invoked and tree is the applied call- tree option, a file named CallTree.html, will also be produced depicting the tree in HTML format. This file is useful as a starting point for browsing the HTML files describing each com- ponent of the program. The keywords which control which format is used are as follows: tree: produce the call graph in tree format. reference: produce the call graph in who-calls-who format (same as -reference switch). vcg: produce the call graph in VCG format (same as -vcg switch). Only one of the formats tree, reference, or vcg may be speci- fied. The following keywords control options affecting the output: prune: prune repeated subtrees (applicable only with tree). This the default. sort: sort children of each routine into alphabetical order. This is the default. See the discussion of the -reference and -vcg flags for details about these formats. For tree format, The call graph is printed out starting from the main program, which is listed on the first line at the left mar- gin. Then on the following lines, each routine called by the main program is listed, indented a few spaces, followed by the subtree starting at that routine. In the default mode, if a routine is called by more than one other routine, its call subtree is printed only the first time it is encountered Later calls give only the routine name and the notice ''(see above)''. To have the subtree printed for each occurrence of the routine, use option no-prune. Note that the call tree will be incomplete if any of the input files are project files containing more than one module that were created in -library mode. See the discussion of project files below. Technical points: Each list of routines called by a given rou- tine is printed in alphabetical order unless the no-sort option is given. If multiple main programs are found, the call tree of each is printed separately. If no main program is found, a report to that effect is printed out, and the call trees of any top-level non-library routines are printed. This flag only controls the printing of the call tree: ftnchek constructs the call tree in any case because it is used to determine which library modules will be cross-checked. See the discussion of the -library flag. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number from 0 to 15. This number is formed from 1 for tree for- mat, 2 for reference format, or 3 for vcg format, plus 4 for no-prune, and 8 for no-sort. See also: -crossref, -library, -reference, -sort, -symtab, -vcg. -check This switch is provided so that errors and warning messages can be turned off when ftnchek is used for purposes other than find- ing bugs, such as making declarations or printing the call tree. It is positional, so after turning all checks off, selected checks can be turned back on. The effect of -nocheck is to put all switches, numeric settings, and settings controlling lists of warnings to their turn-off values, as if they had all been specified with the -no prefix. Switches and settings that spec- ify options and modes of operation, rather than controlling warnings, are unaffected. These are -columns, -crossref, -include, -intrinsic, -library, -list, -makedcls, -novice, -out- put, -pointersize, -project, -quiet, -reference, -resources, -sort, -source, -symtab, -vcg, -version, -wordsize, and -wrap. Default = yes. Parse errors (syntax errors due to unrecognized or malformed statements) are not suppressed by this switch, since the results may be incorrect if ftnchek has not parsed the program cor- rectly. There are some miscellaneous errors and warning messages that are not controlled by any other switch, and so can be turned off only by this switch. Note that using -check following -nocheck only has the effect of turning these special warnings back on, and does not restore all the checks it turned off. These warn- ings are: o Module contains no executable statements. o In free source form, missing space where space is required (e.g. between a keyword and an identifier) or space present where none is allowed (e.g. within an identifier). o Zero or negative length specification in a data type decla- ration of the form type*len. o Invalid operand(s) in an expression. o Array assigned to scalar. o Type mismatch between DO index and bounds. o Undefined common block declared in SAVE statement. o Intrinsic function explicitly declared with an incompatible type. o Unknown intrinsic function explicitly declared in an INTRIN- SIC statement. o Intrinsic function passed as a subprogram argument is not declared in an INTRINSIC statement. o Intrinsic function or statement function invoked incor- rectly. o Function does not set return value prior to RETURN state- ment. o Parameter constant value not evaluated (this is ftnchek's fault, and it is just informing you of the fact). o Entry point of a subprogram is later used as a different subprogram's name. o Unknown keyword used in an I/O statement. o Illegal label reference (e.g. GOTO refers to a non-exe- cutable statement; I/O statement refers to a non-format statement). See also: -errors. -columns=num Set maximum statement length to num columns. (Beyond this is ignored.) This setting is provided to allow checking of pro- grams which may violate the Fortran standard limit of 72 columns for the length of a statement. According to the standard, all characters past column 72 are ignored. If this setting is used when the -f77=long-line option is in effect, a warning will be given for any lines in which characters past column 72 are pro- cessed. Turn-on = max = 132. Default = 72. This setting does not suppress warnings about the presence of characters beyond column 72. To process code with meaningful program text beyond column 72, use this setting and be sure the -f77 long-line option is off. To process code with sequence numbers in columns 73 to 80, leave the the columns setting at the default value and use the -pretty=no-long-line flag. See also: -f77, -pretty. -common=list This setting controls the strictness of checking of COMMON blocks. By default, all warnings except volatile are turned on. The list consists of keywords separated by commas or colons. Since most of these warnings are on by default, include a key- word prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -common is equivalent to -common=dimensions,exact,length,type, and -nocommon is equivalent to -common=none. The warning key- words with their meanings are as follows: dimensions: corresponding arrays in each declaration of a block must agree in size and number of dimensions. This option only has an effect when used together with exact. exact: the comparison of two blocks is done variable-by-variable rather than simply requiring agreement between corresponding storage locations. Use this if all declarations of a given COMMON block are supposed to be identical, which is a good programming practice. length: warn if different declarations of the same block are not equal in total length. The Fortran 77 Standard requires each named common block, but not blank common, to be the same length in all modules of the program. type: in each declaration of a given COMMON block, corresponding memory locations (words or bytes) must agree in data type. If used together with exact, this will require that corre- sponding variables agree in data type. volatile: Assume that COMMON blocks are volatile. Many Fortran programmers assume that variables, whether local or in COMMON, are static, i.e. that once assigned a value, they retain that value permanently until assigned a different value by the program. However, in fact the Fortran 77 Standard does not require this to be the case. Local variables may become undefined between activations of a module in which they are declared. Similarly, COMMON blocks may become undefined if no module in which they are declared is active. (The technical term for entities with this behavior is ''automatic'', but ftnchek uses the word ''volatile'' since it is clearer to the nonspecialist.) Only COMMON blocks declared in a SAVE state- ment, or declared in the main program or in a block data subpro- gram remain defined as long as the program is running. Vari- ables and COMMON blocks that can become undefined at some point are called volatile. If the -common=volatile flag is turned on, ftnchek will warn you if it finds a volatile COMMON block. If, at the same time, the -usage=com-block-volatile option is turned on (which is the default), ftnchek will try to check whether such a block can lose its defined status between activations of the modules where it is declared. ftnchek does not do a very good job of this: the rule used is to see whether the block is declared in two separated subtrees of the call tree. For instance, this would be the case if two modules, both called from the main program, shared a volatile COMMON block. A block can also become unde- fined between two successive calls of the same subprogram, but ftnchek is not smart enough to tell whether a subprogram can be called more than once, so this case is not checked for. The -common=volatile flag does not affect the way ftnchek checks the usage of local variables. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 or greater turns on type, 2 or greater turns on length, and 3 turns on dimensions and exact also. The numeric form cannot turn on the volatile option. See also: -library, -usage. -crossref=list Prints cross-reference tables. Default = none. The list consists of keywords separated by commas or colons. The keywords with their meanings are as follows: calls: table lists each subprogram followed by a list of routines that call it. This listing omits library modules that are not in the call tree of the main program. The list is alphabetized. common: table lists each COMMON block followed by a list of the routines that access it. These listed routines are those in which some variables in the COMMON block are accessed, not simply those routines that declare the block. (To find out what routines declare a COMMON block but do not use it, see the -usage flag.) labels: table lists each label followed by a list of all refer- ences to it. A label reference is denoted by the line number and statement type of the referring statement. The label list is in sequential order. The references are listed in the order they are encountered in the program. See also: -calltree, -reference, -sort, -symtab, -vcg. -declare If this flag is set, all identifiers whose datatype is not declared in each module will be listed. This flag is useful for helping to find misspelled variable names, etc. The same list- ing will be given if the module contains an IMPLICIT NONE state- ment. Default = no. See also: -sixchar, -usage. -division This switch is provided to help users spot potential division by zero problems. If this switch is selected, every division except by a constant will be flagged. (It is assumed that the user is intelligent enough not to divide by a constant which is equal to zero!) Default = no. See also: -portability, -truncation. -errors=num Set the maximum number of error messages in a ''cascade''. During checking of agreement of subprogram arguments, common block declarations, and so forth, sometimes a single case will generate a long string of warnings. Often this simply indicates some other cause than a genuine item-by-item mismatch, such as for example a varible missing from one list. So in such cases ftnchek stops printing the warnings after the cascade limit is reached, and the trailer ''etc...'' is printed to indicate that there were more errors not printed. If you think that these warnings are likely to be genuine, use this setting to see more of them. Turn-on = default = 3, max = 999. A value of 0 means no limit. This setting does not set an overall limit on the number of error messages printed, only the number printed in any one cas- cade. Most types of warnings and error messages are not subject to the cascade effect and so are not affected by this setting. To turn off warnings generally, use the individual warning con- trol options or the -nocheck option. See also: -check. -extern Causes ftnchek to report whether any subprograms invoked by the program are never defined. Ordinarily, if ftnchek is being run on a complete program, each subprogram other than the intrinsic functions should be defined somewhere. Turn off this switch if you just want to check a subset of files which form part of a larger complete program. Subprogram arguments will still be checked for correctness. Default = yes. The -extern flag is now superseded by the -usage=ext-undefined option. For the sake of convenience, the -extern flag is retained, so that -noextern is equivalent to -usage=no-ext-unde- fined option. The -extern switch may be retired eventually. See also: -library. -f77=list Use this setting to catch language extensions which violate the Fortran 77 Standard. Such extensions may cause your program not to be portable. Examples include the use of underscores in variable names; variable names longer than six characters; statement lines longer than 72 characters; and nonstandard statements such as the DO ... ENDDO structure. ftnchek does not report on the use of lowercase letters. By default, all warn- ings are turned off. This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard. (Further details about the extensions themselves are given below in the section on Extensions.) The list consists of keywords separated by commas or colons. There are three special key- words: all to turn on all the warnings about nonstandard exten- sions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -f77 is equivalent to -f77=all, and -nof77 is equiva- lent to -f77=none. The warning keywords with their meanings are as follows: accept-type: ACCEPT and TYPE I/O statements. array-bounds: Expressions defining array bounds that contain array ele- ments or function references. assignment-stmt: Assignment statements involving arrays. In Fortran 90, an array can be assigned to another array of compatible shape, or a scalar can be assigned to an array. Neither of these assignments is permitted in Fortran 77. A related warning occurs when an array is assigned to a scalar. Since this is illegal also in Fortran 90, it is always warned about regardless of the -f77 setting (unless all checking is turned off with the -nocheck flag). attribute-based-decl: Type declarations in the new Fortran 90 attribute-based style. This style of declaration is distinguished by the use of a double colon (::) between the list of attributes and the list of declared variables. This option also con- trols warnings for use of Fortran 90 length or kind speci- fiers in type declarations. (Although these specifiers can be used in non-attribute-based declarations, they are controlled by this option to avoid proliferation of -f77 options.) automatic-array: Local (not dummy) arrays which have variable size. These would correspond to arrays whose storage would have to be dynamically allocated at run time. backslash: Unix backslash escape in strings. This warning will be given only if the -source=unix-backslash setting is speci- fied to cause the escape interpretation of backslash.. byte: BYTE data type declaration. case-construct: The SELECT CASE construct. character: Extensions to the Fortran 77 standard regarding character data. At present, this only controls warnings about char- acter variables declared with zero or negative length. In Fortran 77, all character variables must be of positive length. In Fortran 90, they can be zero length, and dec- larations that specify negative lengths are permitted, turning into zero for the declared length. Note: because negative length specifiers may indicate a programming error, the warning about them is given even if this option is turned off, and is suppressed only by the -nocheck flag. common-subprog-name: Common block and subprogram having the same name. construct-name: Use of a construct-name to label a control statement. continuation: More than 19 successive continuation lines. cpp: Unix C preprocessor directives in the source code. cray-pointer: ''Cray pointer'' syntax. cycle-exit: The CYCLE and EXIT statements. d-comment: Debugging comments starting with D in the source code. dec-tab: DEC Fortran style tab-formatted source code. This warning will be given only if the -source=dec-tab setting is spec- ified to cause interpretation of tabs in this style. do-enddo: DO loop extensions: terminal statement label omitted, END DO, and WHILE. double-complex: Double precision complex datatype. format-dollarsign: Dollar sign control code in FORMAT statements. format-edit-descr: Nonstandard edit descriptors in FORMAT statements. function-noparen: Function definition without parentheses. implicit-none: IMPLICIT NONE statement. include: INCLUDE statement. inline-comment: Inline comments starting with an exclamation point. internal-list-io: List-directed I/O to or from an internal file. intrinsic: Nonstandard intrinsic functions. io-keywords Nonstandard keywords used in I/O statements. These fall into three groups. The first group includes keywords that are accepted in Fortran 90: ACTION PAD READWRITE ADVANCE POSITION SIZE DELIM READ WRITE EOR The second group comprises the following VMS Fortran key- words: BLOCKSIZE EXTENDSIZE READONLY BUFFERCOUNT INITIALSIZE RECORDSIZE CARRIAGECONTROL MAXREC RECORDTYPE DEFAULTFILE NAME (in OPEN) SHARED DISP NOSPANBLOCK TYPE DISPOSE ORGANIZATION (The keyword NAME is standard only in the INQUIRE state- ment.) The third group consists of the following IBM/MVS keyword: NUM This flag also controls a warning about use of ACCESS='APPEND', which is accepted by some compilers. The value of 'APPEND' is not valid for any I/O specifier in standard Fortran 77, and in Fortran 90 'APPEND' should be used as a value of the POSITION specifier, not ACCESS. long-line: Statements with meaningful code past 72 columns. This warning is given only if the -columns setting has been used to increase the statement field width. long-name: Identifiers over 6 characters long. mixed-common: Mixed character and noncharacter data in COMMON block. mixed-expr: Nonstandard type combinations in expressions, for example DOUBLE PRECISION with COMPLEX, assigning hollerith to integer, logical operations on integers. name-dollarsign: Dollar sign used as a character in identifiers. name-underscore: Underscore used as a character in identifiers. namelist: NAMELIST statement. param-implicit-type: Implicit typing of a parameter by the data type of the value assigned. This warning can only occur if implicit parameter typing has been turned on by the -source=param-implicit-type option, or if the PARAMETER statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs will be warned about. If you want to be warned only in those instances where the implicit data type differs from the default type, use -portability=param-implicit-type instead. According to the Fortran 77 standard, the data type of a parameter is given by the same rules as for a variable, and if neces- sary a type conversion is done when the value is assigned. param-intrinsic: Intrinsic function or exponentiation by a real used to define the value of a PARAMETER definition. param-noparen: PARAMETER statement without parentheses. The user should be aware that the semantics of this form of the statement differs from that of the standard form: in this form, the parameter takes its data type from the value assigned, rather than having its default data type based on the first letter of the parameter name. (This form of the PARAMETER statement was introduced by DEC before the For- tran 77 standard was defined, and should be avoided.) pointer: Fortran 90 standard pointer-related syntax, including POINTER, TARGET and ALLOCATABLE type declarations, ALLO- CATE, DEALLOCATE, and NULLIFY statements, and pointer assignment using =>. quad-constant: Quad precision real constants, e.g. of the form 1.23Q4. quotemark: Strings delimited by quote marks rather than apostrophes. relops: Relational (comparison) operators composed of punctuation, namely: < <= == /= > >=. semicolon: Semicolon used as statement separator. statement-order: Statements out of the sequence mandated by the Standard. The allowed sequence is illustrated in Table 1 in the sec- tion on Interpreting the Output. typeless-constant: Typeless constants, for example Z'19AF'. type-size: Type declarations specifying a size, for example REAL*8. variable-format: Variable repeat specification or field size in FORMAT. These are of the form < expr >. vms-io: Obsolete. Now has the same meaning as the io-keywords keyword. See also: -f90, -f95, -portability, -pretty, -style, -wordsize. -f90=list This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard that were not adopted as part of the Fortran 90 Standard. Note that ftnchek does not support the full Fortran 90 language. However, it does support some common extensions to Fortran 77 that were prevalent before Fortran 90 was defined. Some of these extensions became part of the Fortran 90 Standard, but others did not. The -f90 setting warns only about the latter. That is, this flag covers things that are neither legal Fortran 77 nor legal Fortran 90. Therefore, the warnings controlled by this flag are basically a subset of the warnings controlled by -f77. There are a few cases, described below, where the circumstances in which the warning is given are slightly different for the two flags. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the warn- ings about nonstandard extensions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -f90 is equivalent to -f90=all, and -nof90 is equivalent to -f90=none. The following keywords have identical meanings for -f90 as for -f77. The reader is referred to the explanations under -f77. accept-type double-complex param-noparen backslash format-dollarsign cray-pointer byte format-edit-descr quad-constant cpp function-noparen type-size d-comment name-dollarsign variable-format dec-tab param-implicit-type vms-io The keywords which differ somewhat from the corresponding -f77 keywords are as follows. continuation: The limit on the number of continuation lines for a state- ment in fixed source form is the same, namely 19, in For- tran 90 as in Fortran 77. For free source form the limit is 39 continuation lines, and a line containing a continu- ation mark cannot be otherwise empty or contain only a comment. intrinsic: This is the same as for -f77 except for the intrinsic functions defined in MIL-STD 1753, which are all included in Fortran 90, and so are not warned about. (See -intrin- sic for a list.) io-keywords: This is the same as for -f77 except that no warnings are given for the I/O keywords that are standard in Fortran 90. long-line: Although the Fortran 90 Standard allows lines longer than 72 characters in free source form, this restriction still applies to fixed source form. In free source form the line length limit is 132 characters, and unlike fixed form, ftnchek does not allow this limit to be increased. mixed-expr: This is the same as for -f77 except for expressions mixing extended precision real with complex data types, which are permitted in Fortran 90. statement-order: This is similar to the corresponding -f77 warning, but applies the somewhat looser restrictions on statement order of the Fortran 90 Standard. In particular, Fortran 90 allows DATA statements and statement-function defini- tions to be intermixed with specification statements. typeless-constant: In Fortran 90, binary, octal, and hexadecimal constants of the form B'ddd', O'ddd', and Z'ddd', respectively, are permitted. Here 'ddd' represents a string of digits. ftnchek recognizes these forms, as well as a variant of the form X'ddd' for a hexadecimal constant, and other variants in which the base indicator B, O, Z, or X follows the digit string. These variants were not adopted in For- tran 90, so only they are warned about when this flag is turned on. See also: -f77, -f95, -portability, -pretty, -style, -wordsize. -f95=list This setting provides detailed control over warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Unlike the -f77 and -f90 settings, these warnings apply to syntax which is legal Fortran 77. However, since these features have been deleted from the Standard, it is possible that programs containing them will be unacceptable to some newer compilers. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the warn- ings about nonstandard extensions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -f95 is equivalent to -f95=all, and -nof95 is equivalent to -f95=none. The warning keywords with their meanings are as follows. real-do: A DO variable of any real numeric type. pause: The PAUSE statement. assign: The ASSIGN statement, assigned GOTO, or assigned format. h-edit: The H edit descriptor in a format. There is one other Fortran 77 syntax feature that was deleted in Fortran 95, namely branching to an ENDIF from outside the IF block. However, ftnchek is unable to analyze program flow, and so it does not provide a warning for this. See also: -f77, -f90, -portability, -pretty, -style, -wordsize. -help Prints a list of all the command-line options with a short description of each along with its default value. This command is identical in function to the ''?'' argument, and is provided as a convenience for those systems in which the question mark has special meaning to the command interpreter. Default = no. The help listing also prints the version number and patch level of ftnchek and a copyright notice. Note: the ''default'' values printed in square brackets in the help listing are, strictly speaking, not the built-in defaults but the current values after any environment options and any command-line options preceding the -help option have been pro- cessed. See also: -novice, -version, and help option of all settings that take a list of keywords. -identifier-chars=list Define non-alphanumeric characters that may be used in identi- fiers. By default, ftnchek only accepts the dollar sign and underscore as non-alphanumeric characters in identifier names. The characters in the list replace whatever set of accepted non- alphanumeric characters was previously in effect. Thus, if dol- lar sign or underscore are not included in the list, they lose their status as acceptable characters. This option is provided to enable ftnchek to handle source files containing non-standard identifer names that may be needed, for example, to access certain operating system services. See the section on Limitations and Extensions for the treatment of identifiers containing these characters in implicit typing. Using -noidentifer-chars turns off acceptance of non-alphanu- meric characters entirely. See also: -source. -include=path Specifies a directory to be searched for files specified by INCLUDE statements. Unlike other command-line options, this setting is cumulative; that is, if it is given more than once on the command line, all the directories so specified are placed on a list that will be searched in the same order as they are given. The order in which ftnchek searches for a file to be included is: the current directory; the directory specified by environment variable FTNCHEK_INCLUDE if any; the directories specified by any -include options; the directory specified by environment variable INCLUDE; and finally in a standard system- wide directory (/usr/include for UNIX, SYS$LIBRARY for VMS, and \include for MSDOS). See also: -f77, -source. -intrinsic=list Controls whether ftnchek recognizes certain nonstandard intrin- sic functions as intrinsic. The list consists of keywords sepa- rated by commas or colons. Some of the keywords control whether to recognize certain groups of functions, and other keywords control the expected syntax for invoking some nonstandard intrinsics. Include a keyword to turn on recognition of the corresponding set of intrinsics or to allow the corresponding syntax. Include a keyword prefixed by no- to turn off that recognition. There are three special keywords: all turns on recognition of all the nonstandard intrinsics (listed below) and accepts either syntax for those that have variations. Use none to turn off recognition of all nonstandard intrinsics except those noted below. Use help to print the list of all the keywords with a brief explanation of each. If list is omitted, -intrinsic is equivalent to -intrinsic=all, and -nointrinsic is equivalent to -intrinsic=none. The nonstandard intrinsic functions needed to support the non- standard extended precision data types (double complex and quad precision) are always recognized. The intrinsics for the double complex data type are: CDABS CDSQRT DREAL ZLOG CDCOS DCMPLX IMAG ZSIN CDEXP DCONJG ZABS ZSQRT CDLOG DIMAG ZEXP ZCOS CDSIN The intrinsics for the quad precision and quad complex types are: CQABS QARCOS QEXT QNINT CQCOS QARSIN QEXTD QPROD CQEXP QATAN QFLOAT QREAL CQLOG QATAN2 QIMAG QSIGN CQSIN QCMPLX QINT QSIN CQSQRT QCONJG QLOG QSINH DBLEQ QCOS QLOG10 QSQRT IQINT QCOSH QMAX1 QTAN IQNINT QDIM QMIN1 QTANH QABS QEXP QMOD SNGLQ The keywords controlling recognition of other nonstandard intrinsic functions are as follows: extra: recognize the following commonly available nonstandard intrinsics (all except EXIT and LOC are defined in MIL-STD 1753): BTEST IBCLR IEOR ISHFTC EXIT IBITS IOR LOC IAND IBSET ISHFT NOT unix: recognize these common Unix-specific intrinsic functions: ABORT GMTIME LTIME SRAND AND IARGC OR SYSTEM GETARG IRAND RAND TIME GETENV LSHIFT RSHIFT XOR vms: recognize these common VMS-specific intrinsic functions: DATE IDATE SECNDS TIME ERRSNS RAN SIZEOF iargc-no-argument: specify that IARGC may be invoked with no arguments. iargc-one-argument: specify that IARGC may be invoked with one argument. rand-no-argument: specify that RAND and IRAND may be invoked with no argu- ments. rand-one-argument: specify that RAND and IRAND may be invoked with one argu- ment. The no-argument and one-argument keywords work as follows: turn- ing the option on causes ftnchek to accept the corresponding syntax for invocation of the function, without excluding the possibility of the alternative syntax. Turning the option off causes the corresponding syntax not to be accepted. If both options are turned on at once (the default), then either syntax is accepted. Turning both options off at once would not be meaningful. These options have no effect if recognition of Unix intrinsics has been turned off. Note that this setting does not control whether non-standard warnings are issued about these functions. It controls whether the functions are assumed to be intrinsic or not, which deter- mines how their usage is checked. When functions in any of these sets are included, their invocations will be checked according to the rules for the intrinsic functions; otherwise they will be checked as normal (user-written) external func- tions. The non-standard warnings are controlled by the -f77=intrinsic option. The default value of this setting is equivalent to -intrinsic=all followed by -intrinsic=no-vms for the Unix ver- sion, -intrinsic=no-unix for the VMS version, and -intrin- sic=no-unix,no-vms for other versions. Note: In versions of ftnchek prior to 2.10, the -intrinsic flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking ftnchek in this way, the numeric form is still accepted. The numeric form of the setting consists of three digits. The ones digit selects the set of intrinsic functions to be supported. The digit 0 selects only Fortran 77 standard intrinsics plus those needed to support the nonstandard extended precision data types. The digit 1 is equivalent to extra, 2 is equivalent to extra,unix, and 3 is equivalent to extra,vms. The tens digit of this set- ting controls the syntax of the RAND intrinsic function, and the hundreds digit controls the syntax of the IARGC function. For these digits, specify 0 to require invocation with no argument, 1 to require one argument, and 2 to allow either form. See also: -f77. -library This switch is used when a number of subprograms are contained in a file, but not all of them are used by the application. Normally, ftnchek warns you if any subprograms are defined but never used. This switch will suppress these warnings. Default = no. This switch also controls which subprogram calls and COMMON block declarations are checked. If a file is read with the -library flag in effect, the subprogram calls and COMMON decla- rations contained in a routine in that file will be checked only if that routine is in the main program's call tree. On the other hand, if the -library switch is turned off, then ftnchek checks the calls of every routine by every other routine, regardless of whether those routines could ever actually be invoked at run time, and likewise all COMMON block declarations are compared for agreement. The difference between this switch and the -usage=no-ext-unused option for subprograms is that the latter suppresses only the warning about routines being declared but not used. The -library switch goes further and excludes unused routines pro- cessed while it is in effect from all cross-checking of argu- ments and COMMON block declarations as well. (If there is no main program anywhere in the set of files that ftnchek has read, so that there is no call tree, then ftnchek will look for any non-library routines that are not called by any other routine, and use these as substitutes for the main program in constructing the call tree and deciding what to check. If no such top-level non-library routines are found, then all inter-module calls and all COMMON declarations will be checked.) See also: -arguments, -calltree, -common, -extern, -usage. -list Specifies that a listing of the Fortran program is to be printed out with line numbers. If ftnchek detects an error, the error message follows the program line with a caret ( ^ ) speci- fying the location of the error. If no source listing was requested, ftnchek will still print out any line containing an error, to aid the user in determining where the error occurred. Default = no. See also: -output, \fB-symtab, fB-quiet. -makedcls=list Prepare a neatly-formatted file of declarations of variables, common blocks, and namelist lists, for possible merging into the source code. The declarations are stored in a file of the same name as the source code, but with the extension changed to .dcl. If no declarations are written to the file, it is deleted to reduce clutter from empty files. If input comes from standard input, instead of a named file, then declarations are written to standard output. Variables are declared in alphabetical order within each decla- ration class and type, with integer variables first, because of their later possible use in array dimensions. PARAMETER statements are an exception to the alphabetical order rule, because the Fortran 77 Standard requires that the expres- sions defining parameter values refer only to constants and already-defined parameter names. This forces the original source file order of such statements to be preserved in the dec- laration files. Explicit declaration of all variables is considered good modern programming practice. By using compiler options to reject unde- clared variables, misspelled variable names (or names extending past column 72) can be caught at compile time. Explicit decla- rations also greatly facilitate changing floating-point preci- sion with filters such as dtoq(1L), dtos(1L), fd2s(1L), fs2d(1L), qtod(1L), and stod(1L). These programs are capable of changing types of explicit floating-point type declarations, intrinsic functions, and constants, but because they do not carry out rigorous lexical and grammatical analysis of the For- tran source code, they cannot provide modified type declarations for undeclared variables. Default setting = 0, turn-on = 1. Various options for the form of the declarations file are con- trolled by the list, which consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -makedcls is equivalent to -makedcls=decla- rations (i.e. produce the declarations file using the default options), and -nomakedcls is equivalent to -makedcls=none. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number which is the sum of the numbers in parentheses beside the keywords in the following list. The warning keywords with their meanings are as follows: declarations (1): Write a declaration file. (This is implied by any of the other options, and can be omitted if any other options are given.) undeclared-only (2): By default, all variables are included in the declaration file. With this option, include only undeclared vari- ables. This setting is useful if you want to check for undeclared variables, since Fortran source files with all variables properly declared will not result in a .dcl file. With this option, common blocks and namelist lists will not be included in the declaration file, since by their nature they cannot be undeclared. compact (4): The declarations are normally prettyprinted to line up neatly in common columns, as in the declaration files out- put by the Extended PFORT Verifier, pfort(1L). This option value selects instead compact output, without col- umn alignment. use-continuation-lines (8): Causes continuation lines to be used where permissible. The default is to begin a new declaration on each line. This option is appropriate to use together with compact. keywords-lowercase (16): Output Fortran keywords in lowercase, instead of the default uppercase. vars-and-consts-lowercase (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. exclude-sftran3 (64): Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, xsf3(1L), as part of the translation of structured Fortran statements to ordinary Fortran. These variables have six-character names of the form NPRddd, NXdddd, N2dddd, and N3dddd, where d is a dec- imal digit. Because they are invisible in the SFTRAN3 source code, and will change if the SFTRAN3 code is modi- fied, such variables should not be explicitly declared. Instead, they should just assume the default Fortran INTE- GER data type based on their initial letter, N. asterisk-comment (128): Use an asterisk as the comment character; the default is otherwise 'C'. comment-char-lowercase (256): Use 'c' instead of 'C' or '*' as the comment character. suppress-array-dimensions (512): Suppress dimensioning of arrays in the generated declara- tions. This option is for use with code lacking type dec- larations, to allow the declaration files to be inserted without change into the code. Since the code will have dimension statements already, dimensioning the array vari- ables in the type statements of the declaration file is redundant. This option should be used only in conjunction with option 2 = undeclared-only because otherwise any arrays that were dimensioned in a type statement will lose their dimensioning. free-form (1024): Produce declarations in free source form. This mode is automatically used if the input source is free form. Use this option to produce declarations in free form even if the input is in fixed form. Free form declarations are indented only 2 columns instead of 6, use the exclamation mark as the comment character, and indicate continuation lines by an ampersand at the end of the line to be contin- ued. The declaration files contain distinctive comments that mark the start and end of declarations for each program unit, to facili- tate using text editor macros for merging the declarations back into the source code. The ftnchek distribution includes a program, dcl2inc, which pro- cesses declaration files to produce files containing declara- tions of all COMMON blocks, in a form suitable for use as INCLUDE files. See the dcl2inc(1L) man page for the details of its use. See also: -mkhtml. -mkhtml=list Produce HTML documentation from source. Creates individual HTML files from ftnchek analysis and code comments. All comments immediately preceding and following the function or subroutine definition are captured to the HTML file. No reformatting of source comments is performed other than stripping of FORTRAN comment characters. In addition, the HTML file lists the local variables declared, common block variables used, functions and subroutines called, I/O unit usage, and other information about each subprogram. Usually you will also want to specify -call=tree to create the root HTML file CallTree.html. (Perhaps this file should be named index.html.) Various options for the form of the HTML files are controlled by the list, which consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -mkhtml is equivalent to -mkhtml=documents (i.e. produce the HTML document files using the default options), and -nomkhtmls is equivalent to -mkhtml=none. For the sake of simplicity, the options for -mkhtml are the same as those for -makedcls except for those that are inapplicable. Likewise, a numeric form of this setting can be used, formed as the sum of the numbers in parentheses in the list below. The warning keywords with their meanings are as follows: documents (1): Create the HTML documents. (This is implied by any of the other options, and can be omitted if any other options are given.) compact (4): The declarations are normally prettyprinted to line up neatly in common columns. This option value selects instead compact output, without column alignment. use-continuation-lines (8): Causes continuation lines to be used instead of beginning a new declaration on each line. This option is appropri- ate to use together with compact. keywords-lowercase (16): Output Fortran keywords in lowercase, instead of the default uppercase. vars-and-consts-lowercase (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. exclude-sftran3 (64): Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, xsf3(1L). (See -makedcls for discussion.) suppress-array-dimensions (512): Suppress dimensioning of arrays in the generated declara- tions. This is normally undesirable, but is available if for some reason you do not want the array dimensions to appear in the HTML. free-form (1024): Produce variable declarations in free source form. This mode is automatically used if the input source is free form. This mainly affects the form of continuation lines if they are used. See also: -calltree, -makedcls. -novice This flag is intended to provide more helpful output for begin- ners. It has two effects: (a) provides an extra message to the effect that a function that is used but not defined anywhere might be an array which the user forgot to declare in a DIMENSION statement (since the syntax of an array reference is the same as that of a func- tion reference). (b) modifies the form of the error messages and warnings. If the flag is turned off by -nonovice, these messages are printed in a style more resembling UNIX lint. Default = yes. -output=filename This setting is provided for convenience on systems which do not allow easy redirection of output from programs. When this setting is given, the output which normally appears on the screen will be sent instead to the named file. Note, however, that operational errors of ftnchek itself (e.g. out of space or cannot open file) will still be sent to the screen. The exten- sion for the filename is optional, and if no extension is given, the extension .lis will be used. -pointersize=num Specifies the size of a ''Cray pointer'' variable to be num bytes. Default = turn-on = 4 bytes. The pointer size is used to inform precision mismatch warnings involving pointer variables, for example when a pointer is assigned a value from an allocation routine, or passed as a sub- program parameter. See also: -f77, -portability, -truncation, -wordsize. -portability=list ftnchek will give warnings for a variety of non-portable usages. Examples include the use of tabs except in comments or inside strings, the use of Hollerith constants, and the equiva- lencing of variables of different data types. This option does not produce warnings for supported extensions to the Fortran 77 Standard, which may also cause portability problems. To catch those, use the -f77 setting. By default, all warnings are turned off. This setting provides detailed control over the warnings about possible portability problems. The list consists of keywords separated by commas or colons. There are three special key- words: all to turn on all the warnings about nonportable usages, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -portability is equivalent to -portability=all, and -noportabil- ity is equivalent to -portability=none. The warning keywords with their meanings are as follows: backslash: Backslash character in strings. Since some compilers treat the backslash as an escape character, its presence can cause problems even though it is used in a standard- conforming way. common-alignment: COMMON block variables not in descending order of storage size. Some compilers require this ordering because of storage alignment requirements. hollerith: Hollerith constants (other than within FORMAT specifica- tions). The Hollerith data type is a feature of Fortran IV that has been deleted in the Fortran 77 standard. It is superseded by the character data type. Storing Hol- lerith data in variables of a numeric or logical data type is nonportable due to differing word sizes. long-string: String constants, variables, or expressions over 255 chars long. mixed-equivalence: Variables of different data types equivalenced. mixed-size: Variables declared with default precision used with vari- ables given explicit precision, in expressions, assign- ments, or as arguments. For example, if a variable declared as REAL*8 is treated as equivalent to DOUBLE PRE- CISION. real-do: Non-integer DO loop index and bounds. These can cause a program's results to depend on the hardware characteris- tics of the particular computer used. param-implicit-type: Implicit typing of a parameter by the data type of the value assigned, if it differs from the default type. This warning can only occur if implicit parameter typing has been turned on by the -source=param-implicit-type option, or if the PARAMETER statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs and where the implicit type is different from the default type based on the first letter of the parameter name, will be warned about. Implicit parameter typing can change the semantics of statements where the parameter is used, caus- ing portability problems. tab: Tabs in source code. Tabs are interpreted differently by different compilers. This warning will be given only once, at the end of the file. See also: -f77, -f90, -f95, -pretty, -style, -wordsize. -pretty=list Controls certain messages related to the appearance of the source code. These warn about things that might make a program less readable or be deceptive to the reader. By default, all warnings are turned on. This setting provides detailed control over the warnings about appearance. The list consists of keywords separated by commas or colons. Since all warnings are on by default, include a key- word prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings about misleading appearances, none to turn them all off, and help to print the list of all the keywords with a brief explana- tion of each. If list is omitted, -pretty is equivalent to -pretty=all, and -nopretty is equivalent to -pretty=none. The warning keywords with their meanings are as follows: alternate-return: A RETURN statement has a constant specifying an alternate return point that is not between 0 and the number of dummy arguments that are labels. This is legal, and has the same effect as a RETURN with no alternate return expres- sion, but suggests that the programmer intended to use an alternate return label that is not provided. embedded-space: Space embedded in variable names or in multi-character operators such as **. continuation: Continuation mark following a comment line. long-line: Lines (except comments) over 72 columns in width (beyond 72 is normally ignored by compiler). missing-space: Lack of space between variable and a preceding keyword. multiple-common: COMMON block declared in multiple statements. No warning is given if the statements are consecutive except for com- ment lines. multiple-namelist: NAMELIST declared in multiple statements. No warning is given if the statements are consecutive except for comment lines. parentheses: Parentheses around a variable by itself. As a subprogram argument, this makes the argument an expression, not modi- fiable by the subprogram. Note that in free source form, extra space and missing space are forbidden by the Fortran 90 Standard, and are not mere style violations. In this case the warnings are replaced by syntax error messages, and can be turned off only by using -nocheck. See also: -f77, -portability, -style. -project=list ftnchek will create a project file from each source file that is input while this option is turned on. The project file will be given the same name as the input file, but with the extension .f or .for replaced by .prj. (If input is from standard input, the project file is named ftnchek.prj.) Default = none. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -project is equivalent to -project=all, and -nopro- ject is equivalent to -project=none. The keywords with their meanings are as follows: create: Produce a project file. The default is not to produce a project file. If this option is not turned on, the other options have no effect. trim-calls: Trim the amount of information stored in the project file about subprogram declarations and calls. This is the default. Turn this option off only in rare situations. (See discussion below.) The amount of trimming varies depending on the -library flag. More information is trimmed if that flag is turned on. trim-common: Trim the number of common block declarations stored in the project file. This is the default. Turn this option off only in rare situations. (See discussion below.) This option has no effect if the -library flag is turned off: when not in library mode, no trimming of common block dec- larations is done regardless of this option. A project file contains a summary of information from the source file, for use in checking agreement among FUNCTION, SUBROUTINE, and COMMON usages in other files. It allows incremental check- ing, which saves time whenever you have a large set of files containing shared subroutines, most of which seldom change. You can run ftnchek once on each file with the -project flag set, creating the project files. Usually you would also set the -library and -noextern flags at this time, to suppress messages relating to consistency with other files. Only error messages pertaining to each file by itself will be printed at this time. Thereafter, run ftnchek without these flags on all the project files together, to check consistency among the different files. All messages internal to the individual files will now be omit- ted. Only when a file is altered will a new project file need to be made for it. Naturally, when the -project option is turned on, ftnchek will not read project files as input. Ordinarily, the trim options should be left on when you intend to create project files for future input to ftnchek. Since trimming is on by default, this means that simply giving the command -project with no option list is the recommended mode. The trim options are provided only as a convenience for those who want to make use of project files for purposes other than checking the program with ftnchek. To use project files for their intended purpose, the trim options should not be turned off. Project files contain only information needed for checking agreement between files. This means that a project file is of no use if all modules of the complete program are contained in a single file. A more detailed discussion is given in the section on Using Project Files. -pure Assume functions are ''pure'', i.e., they will not have side effects by modifying their arguments or variables in a COMMON block. When this flag is in effect, ftnchek will base its determination of set and used status of the actual arguments on the assumption that arguments passed to a function are not altered. It will also issue a warning if a function is found to modify any of its arguments or any COMMON variables. Default = yes. When this flag is turned off, actual arguments passed to func- tions will be handled the same way as actual arguments passed to subroutines. This means that ftnchek will assume that arguments may be modified by the functions. No warnings will be given if a function is found to have side effects. Because stricter checking is possible if functions are assumed to be pure, you should turn this flag off only if your program actually uses functions with side effects. -quiet This option reduces the amount of output relating to normal operation, so that error messages are more apparent. This option is provided for the convenience of users who are checking large suites of files. The eliminated output includes the names of project files, and the message reporting that no syntax errors were found. It also eliminates some blank lines that are ordinarily included for clarity. (Some of this output is turned back on by the -list and -symtab options.) Default = no. Note: the way to remember the difference between the -quiet and -brief is that -quiet doesn't suppress any warning-related information, whereas -brief does. See also: -brief. -reference Specifies that a who-calls-who table be printed. This table lists each subprogram followed by a list of the routines it calls. This switch is equivalent to -calltree=reference. Default = no. The reference list omits routines called by unused library mod- ules. Thus it contains the same information as for the call- tree format, namely the hierarchy of subprogram calls, but printed in a different way. This prints out a breadth-first traversal of the call tree whereas -calltree=tree prints out a depth-first traversal. See also: -calltree, -crossref, -library, -sort, -symtab, -vcg. -resources Prints the amount of resources used by ftnchek in processing the program. This listing may be useful in analyzing the size and complexity of a program. It can also help in choosing larger sizes for ftnchek's internal tables if they are too small to analyze a particular program. Default = no. In this listing, the term ''chunk size'' is the size of the blocks of memory allocated to store the item in question, in units of the size of one item, not necessarily in bytes. When the initially allocated space is filled up, more memory is allo- cated in chunks of this size. The following is an explanation of the items printed: Source lines processed: Total number of lines of code, with separate totals for statement lines and comment lines. Comment lines include lines with 'C' or '*' in column 1 as well as blank lines and lines containing only an inline comment. Statement lines are all other lines, including lines that have an inline comment following some code. Continuation lines are counted as separate lines. Lines in include files are counted each time the file is included. Total executable statements: Number of statements in the program, other than specifica- tion, data, statement-function, FORMAT, ENTRY, and END statements. Total number of modules: A module is any external subprogram, including the main pro- gram, subroutines, functions, and block data units. This count is of modules defined within the source, not modules referenced. Statement functions are not included. A sub- program with multiple entry points is only counted once. Total statement labels defined Number of labels attached to statements (often called state- ment numbers). The total label count for the entire program is given, as well as the maximum number in any single sub- program. Max identifier name chars: Number of characters used for storing identifier names. An identifier is a variable, subprogram, or common block name. Local names are those of local variables in a subprogram, whereas global names refer to subprogram and common block names, as well as dummy argument names and common variable names. Actual argument text (up to 15 characters for each argument) is also included here. The space used for local names is not recovered at the end of each module, so this number, like global space, grows until the whole program is analyzed. Unfortunately, this figure may include some text stored more than once, although a heuristic is used that will avoid duplicates in many cases. Max token text chars: A token is the smallest syntactic unit of the FORTRAN lan- guage above the level of individual characters. For instance a token can be a variable name, a numerical constant, a quoted text string, or a punctuation character. Token text is stored while a module is being processed. For technical reasons, single-character tokens are not included in this total. Items that are not represented in the symbol table may be duplicated. The space for token text is recovered at the end of each module, so this figure represents the maxi- mum for any one module. Max local symbols: This is the largest number of entries in the local symbol table for any module. Local symbol table entries include all variables and parameters, common block names, statement functions, external subprograms and intrinsic functions referenced by the module. Literal constants are not stored in the local symbol table. Max global symbols: This is the number of entries in the global symbol table at the end of processing. Global symbol table entries include external subprogram and common block names. Intrinsic func- tions and statement functions are not included. Max number of tokenlists: A token list is a sequence of tokens representing the actual or dummy argument list of a subprogram, or the list of vari- ables in a common block or namelist. Therefore this number represents the largest sum of COMMON, CALL, NAMELIST and ENTRY statements and function invocations for any one mod- ule. The space is recovered at the end of each module. Max token list/tree space: This is the largest number of tokens in all the token lists and token trees of any one module. A token tree is formed when analyzing an expression: each operand is a leaf of the tree, and the operators are the nodes. Therefore this num- ber is a measure of the maximum complexity of an individual module. For instance a module with many long arithmetic expressions will have a high number. Note that unlike token text described above, the number of tokens is independent of the length of the variable names or literal constants in the expressions. Number of subprogram invocations: This is the sum over all modules of the number of CALL statements and function invocations (except intrinsic func- tions and statement functions). Number of common block decls: This is the sum over all modules of the number of common block declarations. That is, each declaration of a block in a different module is counted separately. (The standard allows multiple declarations of a block within the same mod- ule; these are counted as only one declaration since they are equivalent to a single long declaration.) Number of array dim & param ptrs: This is the sum over all modules of the number of array dimension and parameter definition text strings saved for use by the -makedcls option. The length of the text strings is not counted. Each dimension of a multidimensional array is counted separately. These numbers are obviously not the same when project files are used in place of the original source code. Even the numbers for global entities may be different, since some redundant informa- tion is eliminated in project files. -sixchar One of the goals of the ftnchek program is to help users to write portable Fortran programs. One potential source of non- portability is the use of variable names that are longer than six characters. Some compilers just ignore the extra charac- ters. This behavior could potentially lead to two different variables being considered as the same. For instance, variables named AVERAGECOST and AVERAGEPRICE are the same in the first six characters. If you wish to catch such possible conflicts, use this flag. Default = no. Use the -f77=long-names if you want to list all variables longer than six characters, not just those pairs that are the same in the first six. See also: -f77, -portability. -sort Specifies that a sorted list of all modules used in the program be printed. This list is in ''prerequisite'' order, i.e. each module is printed only after all the modules from which it is called have been printed. This is also called a ''topological sort'' of the call tree. Each module is listed only once. Rou- tines that are not in the call tree of the main program are omitted. If there are any cycles in the call graph (illegal in standard Fortran) they will be detected and diagnosed. Default = no. See also: -calltree, -crossref, -reference, -symtab, -vcg. -source=list This setting controls certain options about the form of the Fortran source code. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -source is equivalent to -source=all, and -nosource is equivalent to -source=none. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number which is the sum of the numbers in parentheses beside the keywords in the following list. (The fixed and free options do not have numeric values.) The warning keywords with their meanings are as follows: fixed: Interpret the source as fixed form (with supported exten- sions such as exclamation mark for comments). Statements must be in columns 7 to 72 (unless the -cols setting has been used to change this), and blanks are not significant outside character context (but warned about under the -pretty option). This is the default mode unless the source file extension is .f90 or .F90. this option cannot be given together with -source=free. free: Interpret the source as free form. Statements may be any- where in columns 1 to 132, comments can only begin with an exclamation mark, and blanks are required in some places such as between identifiers and keywords. This is the default mode if the source file extension is .f90 or .F90. This option cannot be given together with -source=fixed or -source=dec-tab dec-tab (1): Accept DEC-style tab-formatted source. A line beginning with an initial tab will be treated as a new statement line unless the character after the tab is a nonzero digit, in which case it is treated as a continuation line. The next column after the tab or continuation mark is taken as column 7. A warning will be given in the case where the line is a continuation, if -f77=dec-tab is in effect. vms-include (2): Accept VMS-style INCLUDE statements. These follow the normal syntax, but with the following additional features: (1) the file extension, if not given, defaults to the same as a normal source file extension; and (2) the option /LIST or /NOLIST can be appended to the include-file name, to control listing of its contents. unix-backslash (4): Handle UNIX-style backslash escapes in character strings. The escape sequence following the backslash will be evalu- ated according to the ANSI standard for strings in C: up to three digits signify an octal value, an x signifies the start of a hexadecimal constant, any of the letters a b f n r t signify special control codes, and any other charac- ter (including newline) signifies the character itself. When this source code option is in effect, a warning will be given if the -f77=backslash setting is specified. The default behavior is to treat the backslash like any other normal character, but a warning about portability will be generated if the -portability flag is set. Because of the fact that some compilers treat the back- slash in a nonstandard way, it is possible for standard- conforming programs to be non-portable if they use the backslash character in strings. Since ftnchek does not do much with the interpreted string, it is seldom necessary to use this option. It is needed in order to avoid spurious warnings only if (a) the program being checked uses backslash to embed an apostro- phe or quote mark in a string instead of using the stan- dard mechanism of doubling the delimiter; (b) the back- slash is used to escape the end-of-line in order to con- tinue a string across multiple source lines; or (c) a PARAMETER definition uses an intrinsic string function such as LEN with such a string as argument, and that value is later used to define array dimensions, etc. param-implicit-type (8): Implicit typing of a parameter by the data type of the value assigned. Some non-standard compilers may allow the data type of the value to override the Fortran 77 default type of a parameter that is based on the first letter of the parameter name. This option only applies to PARAMETER statements of the standard form which has parentheses. A parameter that has been explicitly declared in a type statement prior to the PARAMETER statement is not affected by this option. A warning will be given under the -f77=param-implicit-type or -portabil- ity=param-implicit-type option. Note that this implicit typing is treated as equivalent to an explicit type declaration for the parameter. There- fore, if you use -makedcls=undeclared-only to generate declarations only of undeclared variables, these parame- ters will not be included. dec-param-standard-type (16): Follow the Fortran 77 rule for data typing of DEC Fortran style parameters. These are declared using a nonstandard form of the PARAMETER statement which lacks parentheses. According to DEC Fortran, parameters defined by this form of the statement have their data type given by the data type of the value assigned. Use this option to tell ftnchek not to follow this rule but instead to use the same rule as for standard PARAMETER statements. This option does not apply to PARAMETER statements of the stan- dard form. By default, all these source code options are turned off, except for the vms-include option, which is on by default in the VMS version.. See also: -f77, -include, -portability. -style=list Provides extra-picky warnings about obsolescent or old-fash- ioned programming constructions. This option is helpful for efforts to follow a modern programming style. (Most of the things complained about under this option are forbidden in the F subset language.) By default, all warnings are turned off. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -style is equivalent to -style=all, and -nostyle is equivalent to -style=none. The warning keywords with their meanings are as follows: block-if: Complain about arithmetic IF statement. Accept block IF or logical IF (which controls a single statement). construct-name: Complain about unnamed block constructs: IF, DO, and SELECT CASE. Note that if a construct name is present on the opening statement of a construct, then it is required to be present on all other component statements (ELSE, END IF, etc.) of the construct. In that case a missing con- struct name on those statements generates a syntax error regardless of this option. The purpose of this option is to warn if the construct completely lacks the optional name. distinct-do: Complain if two DO loops share a common terminator state- ment. do-construct: Complain if terminator of a DO loop is anything other than an END DO or CONTINUE statement. This is the requirement in order for the loop to meet the Fortran 90 definition of a do-construct. do-enddo: Complain if terminator of a DO loop is anything other than an END DO statement. (This option overrides the do-con- struct option, being even stricter.) end-name: Complain about the absence of the subprogram name on structured END statements. format-stmt: Complain about the presence of FORMAT statements. Only the FORMAT statements themselves are flagged, not the ref- erences to them in I/O lists. goto: Complain about the presence of unconditional, computed or assigned GOTO statements. Also complain about alternate returns (but not about labels as subprogram arguments). labeled-stmt: Complain about the presence of labels (numbers) on state- ments other than FORMAT statements. (Since FORMAT state- ments are arguably convenient and not readily abused, com- plaints about them are controlled by the separate for- mat-stmt keyword.) program-stmt: Complain about the absence of a PROGRAM statement at the head of the main program. structured-end: Complain about the use of a plain END statement to end a subprogram, rather than a structured END statement (END PROGRAM, END SUBROUTINE, END FUNCTION, or END BLOCK DATA). See also: -f77, -f90, -f95, -pretty, -portability. -symtab A symbol table will be printed out for each module, listing all identifiers mentioned in the module. This table gives the name of each variable, its datatype, and the number of dimensions for arrays. An asterisk (*) indicates that the variable has been implicitly typed, rather than being named in an explicit type declaration statement. The table also lists all subprograms invoked by the module, all COMMON blocks declared, etc. Default = no. Also, for each module, a label table will be printed. The table lists each label defined in the module; the line on which said statement label is defined; and the statement type (executable, format, or specification). The labels are listed in sequential order. Also printed is a table describing the I/O units used by the module, together with information about how they are used: what operations are performed, whether the access is sequential or direct, and whether the I/O is formatted or unformatted. See also: -calltree, -crossref, -list, -reference, -sort, -vcg. -truncation=list Warn about possible truncation (or roundoff) errors. Most of these are related to integer arithmetic. By default, all warn- ings are turned on. This setting provides detailed control over the warnings about possible truncation errors. The list consists of keywords sepa- rated by commas or colons. Since all warnings are on by default, include a keyword prefixed by no- to turn off a partic- ular warning. There are three special keywords: all to turn on all the warnings about truncation, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -truncation is equiva- lent to -truncation=all, and -notruncation is equivalent to -truncation=none. The warning keywords with their meanings are as follows: int-div-exponent: use of the result of integer division as an exponent. This suggests that a real quotient is intended. An exam- ple would be writing X**(1/3) to evaluate the cube root of X. The correct expression is X**(1./3.). int-div-real: Conversion of an expression involving an integer division to real. This suggests that a real quotient is intended. int-div-zero: division in an integer constant expression that yields a result of zero. int-neg-power: exponentiation of an integer by a negative integer (which yields zero unless the base integer is 1 in magnitude). This suggests that a real base is intended. promotion: automatic conversion of a lower precision quantity to one of higher precision. The loss of accuracy for real vari- ables in this process is comparable to the corresponding demotion. No warning is given for promotion of integer quantities to real since this is ordinarily exact. real-do-index: use of a non-integer DO index in a loop with integer bounds. An integer DO index with real bounds is always warned about regardless of this setting. real-subscript: use of a non-integer array subscript. significant-figures: overspecifying a single precision constant. This may indicate that a double precision constant was intended. size-demotion: automatic conversion of a higher precision quantity to one of lower precision of the same type. This warning only occurs when an explicit size is used in declaring the type of one or both operands in an assignment. For example, a warning wil be issued where a REAL*8 variable is assigned to a REAL variable, if the default wordsize of 4 is in effect. A warning is also issued if a long integer is assigned to a shorter one, for example, if an INTEGER expression is assigned to an INTEGER*2 variable. There is one exception to this last case, namely if the right hand side of the assignment is a small literal constant (less than 128). type-demotion: automatic conversion of a higher precision quantity to one of lower precision of different type. This warning includes conversion of real quantities to integer, double precision to single preci- sion real, and assignment of a longer character string to a shorter one. The warnings about promotion and demotion also apply to complex constants, considering the precision to be that of the real or imaginary part. Warnings about promotions and demotions are given only when the conversion is done automatically, e.g. in expressions of mixed precision or in an assignment statement. If intrinsic functions such as INT are used to perform the con- version, no warning is given. See also: -portability, -wordsize. -usage=list Warn about unused or possible uninitialized variables, unused common blocks, undefined or unused statement labels, and unused or undefined subprograms. By default, all warnings are turned on. This setting provides detailed control over the warnings about possible usage errors. The list consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by no- to turn off a particular warn- ing. There are three special keywords: all to turn on all the warnings about usage, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, -usage is equivalent to -usage=all, and -nousage is equivalent to -usage=none. These warnings cover four main categories of objects: subprogram dummy arguments, common blocks and variables, subprograms and functions, and local variables. Warnings include undefined items, multiply defined items, unused items, etc. The warning keywords with their meanings are as follows: arg-alias: a scalar dummy argument is actually the same as another and is (or may be) modified. The Fortran 77 standard (section 15.9.3.6) prohibits modifying an argument that is aliased to another. arg-array-alias: a dummy argument which is an array or array element is in the same array as another and is modified. This flag is similar to arg-alias but provides separate control over array arguments. It is harder to tell if aliasing is occurring in the case of arrays, so if ftnchek gives too many false warnings, this flag allows the array-related ones to be turned off without suppressing the warnings for scalars. arg-common-alias: a scalar dummy argument is the same as a common variable in the subprogram, and either is modified. This is also prohibited by the Fortran 77 standard. If common checking is not exact (see the -common setting), it is harder to tell if aliasing is occurring, so the warning is given if the variable is anywhere in a common block that is declared by the subprogram. arg-common-array-alias: a dummy argument which is an array or array element is in the same array as a common variable, and either is modi- fied. If common checking is not exact, the variable can be anywhere in a common block that is declared by the sub- program. arg-const-modified: a subprogram modifies an argument which is a constant or an expression. Such an action could cause anomalous behavior of the program. arg-unused: a dummy argument is declared but never used. This is sim- ilar to the var-unused keyword described below, but applies only to arguments. com-block-unused: a common block is declared but none of the variables in it are used by any subprogram. This warning is suppressed if the common strictness setting is 0. com-block-volatile: a common block may lose the definition of its contents if common blocks are volatile. This option only has an effect if the -common=volatile flag is in effect. See the discussion of the -common setting above. com-var-set-unused: a common variable is assigned a value, but its value is not used by any subprogram. This warning is suppressed if the common strictness setting is 0. com-var-uninitialized: a common variable's value is used in some subprogram, but is not set anywhere. Unfortunately, ftnchek does not do a thorough enough analysis of the calling sequence to know which routines are called before others. So warnings about this type of error will only be given for cases in which a variable is used in some routine but not set in any other routine. Checking of individual COMMON vari- ables is done only if the -common setting is 3 (variable by variable agreement). This warning is suppressed if the common strictness setting is 0. com-var-unused: a common variable is declared but not used by any subpro- gram. This warning is suppressed if the common strictness setting is 0. do-index-modified: a variable that is the index of a DO loop is modified by some statement within the range of the loop. The Standard permits an active DO variable to be modified only by the incrementation mechanism of the DO statement. ext-multiply-defined: an external (a subroutine or function) is defined more than once. Definition of an external means providing the body of its source code. ext-declared-only: a name is declared in an EXTERNAL statement in some mod- ule, but is not defined or used anywhere. ext-undefined: an external is used (invoked) but not defined anywhere. This option is equivalent to the -external flag. If the subprogram is invoked more than once, those invocations will still be checked for consistency. ext-unused: an external is defined (its subprogram body is present) but it is not used. A subprogram is considered unused even if it is invoked by some other subprogram, if it can- not be called from any thread of execution starting with the main program. The agreement of the subprogram's argu- ments with its invocations is still checked even if this warning is turned off. If there is no main program, then this warning is issued only if the subprogram is not invoked anywhere. This warning is suppressed in library mode, but library mode has the additional effect of sup- pressing argument checking for unused routines. label-undefined: a statement refers to a label that has not been defined. label-unused: a statement label is defined, but never referred to. var-set-unused: a local variable is assigned a value, but that value is not used. var-uninitialized: a local variable's value may be used before it is assigned. Sometimes ftnchek makes a mistake in the warn- ings about local variable usage. Usually it errs on the side of giving a warning where no problem exists, but in rare cases it may fail to warn where the problem does exist. See the section on Bugs for examples. If vari- ables are equivalenced, the rule used by ftnchek is that a reference to any variable implies the same reference to all variables it is equivalenced to. For arrays, the rule is that a reference to any array element is treated as a reference to all elements of the array. var-unused: a local variable is declared (for instance, in a type dec- laration) but is not used in the module. Does not apply to dummy arguments: warnings about them are controlled by the keyword arg-unused described above. Note: In versions of ftnchek prior to 2.10, the -usage flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking ftnchek in this way, the numeric form is still accepted. The numeric setting is composed of three digits. The first digit (hundreds place) con- trols warnings about subprograms (functions and subroutines), the second digit (tens place) warnings about common blocks and common variables,, and the third digit (ones place) warnings about local variables. Each digit controls warnings according to the convention that a 1 means warn about undefined items and variables that are used before set, a 2 means warn about items that are unused, and a 3 means warn about both types. These numbers are now converted to the appropriate values for the above-listed keywords, except for com-block-volatile, which is not affected by the numeric argument. See also: -common, -declare, -extern, -library. -vcg Produce the call graph in the form of a VCG graph description. This description is written to a separate file, with the same stem as the file containing the main program, and suffix .vcg. This file is able to be given directly to xvcg(1L) to visualize the call graph. (If input is from the standard input, then the graph description is sent to standard output.) This switch is equivalent to -calltree=vcg. Default = no. The VCG description as created is more complex than it need be. VCG allows graphs and nested subgraphs: each subroutine is cre- ated as a subgraph nested inside its calling routines. This allows you to interactively display subgraphs or summarise them. The -vcg option for ftnchek was written by Dr. Philip Rubini of Cranfield University, UK. xvcg is a graph visualisation tool which runs under the X win- dows system. It is freely available from ftp.cs.uni-sb.de. It was written by G. Sander of the University of Saarland, Germany. See also: -calltree, -crossref, -reference, -sort. -version This option causes ftnchek to print a line giving the version number, release date, and patch level of the program. If no files are given, it then exits. If files are given, the effect of this option is to include the patch level (normally omitted) in the version information printed at the start of processing. Default = no. See also: -help. -volatile Assume that COMMON blocks are volatile. Default = no. This flag is superseded by -common=volatile, and should no longer be used. It may be eliminated in a future release of ftnchek. See also: -common, -usage. -wordsize=num Specifies the default word size to be num bytes. This is the size of logical and single-precision numeric variables that are not given explicit precisions. (Explicit precisions for non- character variables are an extension to the Fortran 77 Standard, and are given by type declarations such as REAL*8 X.) Double- precision and complex variables will be twice this value, and double complex variables four times. Quad-precision constants and intrinsic function results will be four times this value. Note that variables declared as REAL*16 will be regarded as quad precision only if the word size is 4 bytes. Default = turn-on = 4 bytes. The word size value does not matter for checking standard-con- forming programs that do not declare explicit precisions for non-character variables or store Hollerith data in variables. This setting also does not affect the default size of character variables, which is always 1 byte. Hollerith constants also are assumed to occupy 1 byte per character. The word size is used to determine whether truncation occurs in assignment statements, and to catch precision mismatches in sub- program argument lists and common block lists. The exact warn- ings that are issued will depend on the status of other flags. Under both the -portability=mixed-size and the -nowordsize flag, any mixing of explicit with default precision objects (character expressions not included) is warned about. This applies to arithmetic expressions containing both types of objects, and to subprogram arguments and COMMON variables. Under control of the -truncation=demotion and promotion options, a warning is given for assignment of an expression to a shorter variable of the same type, or for promotion of a lower precision value to higher precision in an arithmetic expression or an assignment state- ment. Giving a word size of 0, or equivalently, using -nowordsize means that no default value will be assumed. This is equivalent to specifying -portability=mixed-size. Use it to find cases of mixing default and explicit precision, for example to flag places where REAL*8 is treated as equivalent to DOUBLE PRECI- SION. See also: -pointersize, -portability, -truncation. -wrap=col Controls the wrapping of error messages. Long error messages that would run past the specified column will be broken up into separate lines between the words of the message for better read- ability. If turned off with -nowrap, each separate error mes- sage will be printed on one line, leaving it up to the display to wrap the message or truncate it. Default = turn-on = 79. CHANGING THE DEFAULTS ftnchek includes two mechanisms for changing the default values of all options: by defining environment variables or by creating a preferences file. When ftnchek starts up, it looks in its environment for any variables whose names are composed by prefixing the string FTNCHEK_ onto the uppercased version of the option name. If such a variable is found, its value is used to specify the default for the corresponding switch or setting. In the case of settings (for example, the -common strictness setting) the value of the environment variable is read as the default setting value. In the case of switches, the default switch will be taken as true or yes unless the environment variable has the value 0 or NO. Note that the environment variable name must be constructed with the full-length option name, which must be in uppercase. For example, to make ftnchek print a source listing by default, set the environment variable FTNCHEK_LIST to 1 or YES or anything other than 0 or NO. The names FTNCHEK_LIS (not the full option name) or ftnchek_list (lower case) would not be recognized. Here are some examples of how to set environment variables on various systems. For simplicity, all the examples set the default -list switch to YES. 1. UNIX, Bourne shell: $ FTNCHEK_LIST=YES $ export FTNCHEK_LIST 2. UNIX, C shell: % setenv FTNCHEK_LIST YES 3. VAX/VMS: $ DEFINE FTNCHEK_LIST YES 4. MSDOS: $ SET FTNCHEK_LIST=YES After processing any environment variables, ftnchek looks for a prefer- ences file containing options and settings. It will search in the fol- lowing order, using only the first file found: (1) .ftnchekrc in the current directory, (2) ftnchek.ini in the current directory, (3) .ftnchekrc in the user's home directory, (4) ftnchek.ini in the home directory. If such a file is found, the options defined in it are used as defaults in place of the built-in defaults and overriding any defaults set in the environment.. Each option or setting in the preferences file must be on a separate line. They are given in the same form as on the command line, except without the initial dash. The preferences file can contain blank lines and comments. Comments are introduced at any point in a line by a space character (blank or tab) or the '#' character, and are terminated by the end of the line. Command-line options override the defaults set in the environment or in the preferences file, in the same way as they override the built-in defaults. USING PROJECT FILES This section contains detailed information on how to use project files most effectively, and how to avoid some pitfalls. One can divide the checks ftnchek does into two categories, local and global. Local checking is restricted to within a single routine, and catches things like uninitialized variables, unintended loss of preci- sion in arithmetic expressions, etc. This sort of checking can be done on each subprogram independently. Furthermore, local checking of a subprogram does not need to be repeated when some other subprogram is changed. Global checking catches things like calling a subroutine with the wrong argument types, or disagreeing in common block declarations. It requires looking at the whole set of subprograms interacting with each other. The purpose of project files is to allow the local checking and global checking steps to be separated. Assuming that each subprogram is in its own source file, you can run ftnchek once on each one to do local checking while suppressing global checking. Then ftnchek can be run once on all the project files together to do the global checking. The sample makefile below shows how to automate this task. The ''.f.prj'' target updates a project file for a particular file any time the source file changes. The information needed for global checking is saved in the project file. The ''check'' target does the combined global check- ing. Typically ''make check'' would repeat the ''ftnchek -project'' step only on changed source files, then do the global check. This is obviously a big advantage for large programs, when many subprograms seldom if ever change. It is best when using project files to place each subprogram in a sepa- rate source file. If each source file may contain more than one sub- program, it complicates the definition of ''local'' and ''global'' checking because there is some inter-module checking that is contained within a file. ftnchek tries to do the right thing in this case, but there are some complications (described below) due to the trade-off between avoiding re-doing cross-checks and preserving information about the program's structure. Ordinarily, to do the least amount of re-checking, project files should be created with the -library flag in effect and trimming turned on. In this mode, the information saved in the project file consists of all subprogram declarations, all subprogram invocations not resolved by declarations in the same file, and one instance of each COMMON block declaration. This is the minimum amount of information needed to check agreement between files. If the source file contains more than one routine, there are some pos- sible problems that can arise from creating the project file in library mode, because the calling hierarchy among routines defined within the file is lost. Also, if the routines in the file make use of COMMON blocks that are shared with routines in other files, there will not be enough information saved for the correct checking of set and used status of COMMON blocks and COMMON variables according to the -usage setting. Therefore if you plan to use project files when -usage check- ing is turned on (which is the default situation), and if multiple rou- tines in one project file share COMMON blocks with routines in other files, the project files should be created with the -library flag turned off. In this mode, ftnchek saves, besides the information listed above, one invocation of each subprogram by any other subprogram in the same file, and all COMMON block declarations. This means that the project file will be larger than necessary, and that when it is read in, ftnchek may repeat some inter-module checks that it already did when the project file was created. If each project file contains only one module, there is no loss of information in creating the project files in library mode. Because of the possible loss of information entailed by creating a project file with the -library flag in effect, whenever that project file is read in later, it will be treated as a library file regardless of the current setting of the -library flag. On the other hand, a project file created with library mode turned off can be read in later in either mode. The foregoing discussion assumes that the trimming options of the -project setting are turned on when the project file is created. This is the normal situation. The no-trim options of the -project setting are provided in case one wants to use the project files for purposes other than checking the program with ftnchek. For instance, one could write a Perl script to analyze the project files for information about how the different subprograms are called. You should not use the no-trim options to deal with the issues of information loss discussed above, since they cause more information than necessary to be stored. This makes the project files bigger and causes ftnchek to do more work later when it reads them to check your complete program. Ordinarily, you should use the -library option to control how much information to store for later use by ftnchek in checking your program. Here is an example of how to use the UNIX make utility to automatically create a new project file each time the corresponding source file is altered, and to check the set of files for consistency. Add these lines to your makefile. The example assumes that a macro OBJS has been defined which lists all the names of object files to be linked together to form the complete executable program. (In this makefile, the indented lines should each begin with a tab, not blanks.) If any source file contains multiple routines that share common blocks among themselves, then the no-com-\* option should be removed from NOGLOBAL, and/or drop the -library flag. # tell make what a project file suffix is .SUFFIXES: .prj # these options suppress global checks. NOGLOBAL=-usage=no-ext-undefined,no-com-\* # tell make how to create a .prj file from a .f file .f.prj: ftnchek -project $(NOGLOBAL) -library $< # set up macro PRJS containing project filenames PRJS= $(OBJS:.o=.prj) # "make check" will check everything that has been changed. check: $(PRJS) ftnchek $(PRJS) When a program uses many routines defined in a large number of differ- ent source files in different directories, it can be cumbersome to specify all the different project files needed to check the program properly. To deal with such cases, ftnchek allows project files to be concatenated into a single large file. This single file can then be given to ftnchek to provide the information for checking the use of any or all of the routines defined in the combined project files. When using such a ''library'' project file, you may want ftnchek's error reports to document precisely the name of the file where the specific function is defined. If the various source files are in several direc- tories, an error report that gives only the file name may be ambiguous, and rather should include the path to the file. The solution is to create each of the individual project files by giving the complete path to the source file. Then this complete path will appear in the error reports. For example, suppose that all of the library subprogram source files are in subdirectories of a directory named /util/lib. Then the individual project files could first be created by a command such as find /util/lib -name '*.f' -exec ftnchek -project '{}' ';' (Possibly other options would be provided to ftnchek as discussed above. Also, this step could be handled instead by a revised makefile rule that would provide the complete source file path instead of just the local name when invoking ftnchek.) Next, concatenate all of these project files manually. find /util/lib -name '*.prj' -exec cat '{}' ';' > ourlib.prj Then a program source file can be checked by using the command ftnchek prog.f ... -lib ourlib.prj and an error message related to any library routine will include the full path to the routine's source file. At present, there is no archive utility like ar to manage the contents of a concatenated project file like the one in the illustration above. If changes are made to one of the library routines, the only way to update the combined project file is to concatenate all the individual project files once again. Such a utility would be quite easy to write. Someone should do so and contribute it to the ftnchek effort. AN EXAMPLE The following simple Fortran program illustrates the messages given by ftnchek. The program is intended to accept an array of test scores and then compute the average for the series. C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,J,SCORE(5) DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = SUM/COUNT END PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C PARAMETER(MAXNOS=5) INTEGER I, COUNT REAL NUMS(MAXNOS), AVG COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) END The compiler gives no error messages when this program is compiled. Yet here is what happens when it is run: $ run average 70 90 85 $ What happened? Why didn't the program do anything? The following is the output from ftnchek when it is used to debug the above program: $ ftnchek -list -symtab average FTNCHEK Version 3.3 November 2004 File average.f: 1 C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO 30 I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 30 CONTINUE 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20: integer quotient expr SUM/COUNT converted to real 17 END Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV: Variables declared but never referenced: J declared at line 11 Warning in module COMPAV: Variables may be used before set: SUM used at line 14 SUM set at line 14 Statement labels defined: Label Line StmtType <30> 15 exec 18 19 20 PROGRAM AVENUM 21 C 22 C MAIN PROGRAM 23 C 24 C AUTHOR: LOIS BIGBIE 25 C DATE: MAY 15, 1990 26 C 27 C Variables: 28 C MAXNOS -> maximum number of input values 29 C NUMS -> an array of numbers 30 C COUNT -> exact number of input values 31 C AVG -> average returned by COMPAV 32 C I -> loop counter 33 C 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO 80 I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) 41 COUNT = COUNT + 1 42 80 CONTINUE 43 100 AVG = COMPAV(NUMS, COUNT) 44 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM: Variables set but never used: AVG set at line 43 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42 exec <100> 43 exec 0 syntax errors detected in file average.f 6 warnings issued in file average.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f is type intg Actual arg NUMS in module AVENUM line 43 file average.f is type real According to ftnchek, the program contains variables which may be used before they are assigned an initial value, and variables which are not needed. ftnchek also warns the user that an integer quotient has been converted to a real. This may assist the user in catching an unintended roundoff error. Since the -symtab flag was given, ftnchek prints out a table containing identifiers from the local module and their corre- sponding datatype and number of dimensions. Finally, ftnchek warns that the function COMPAV is not used with the proper type of arguments. With ftnchek's help, we can debug the program. We can see that there were the following errors: 1. SUM and COUNT should have been converted to real before doing the division. 2. SUM should have been initialized to 0 before entering the loop. 3. AVG was never printed out after being calculated. 4. NUMS should have been declared INTEGER instead of REAL. We also see that I, not J, should have been declared INTEGER in func- tion COMPAV. Also, MAXNOS was not declared as INTEGER, nor COMPAV as REAL, in program AVENUM. These are not errors, but they may indicate carelessness. As it happened, the default type of these variables coincided with the intended type. Here is the corrected program, and its output when run: C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter C REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,I,SCORE(5) C SUM = 0 DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = FLOAT(SUM)/FLOAT(COUNT) END C C PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C C INTEGER MAXNOS PARAMETER(MAXNOS=5) INTEGER I, NUMS(MAXNOS), COUNT REAL AVG,COMPAV COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) WRITE(6,*) 'AVERAGE =',AVG END $ run average 70 90 85 AVERAGE = 81.66666 $ With ftnchek's help, our program is a success! INTERPRETING THE OUTPUT The messages given by ftnchek include not only syntax errors but also warnings and informational messages about things that are legal Fortran but that may indicate errors or carelessness. Most of these messages can be turned off by command-line options. Which option controls each message depends on the nature of the condition being warned about. See the descriptions of the command-line flags in the previous sections, and of individual messages below. Each message is prefixed with a word or phrase indicating the nature of the condition and its severity. ''Error'' means a syntax error. The simplest kind of syntax errors are typographical errors, for example unbalanced parentheses or misspelling of a keyword. This type of error is caught by the parser and appears with the description ''parse error'' or ''syntax error'' (depending on the version of the parser generator and whether it is GNU bison or UNIX yacc). This type of error message cannot be suppressed. Be aware that this type of error often means that ftnchek has not properly inter- preted the statement where the error occurs, so that its subsequent checking operations will be compromised. You should eliminate all syn- tax errors before proceeding to interpret the other messages ftnchek gives. ''Warning: Nonstandard syntax'' indicates an extension to Fortran that ftnchek supports but that is not according to the Fortran 77 Standard. The extensions that ftnchek accepts are described in the section on Extensions below. One example is the DO ... ENDDO construction. If a program uses these extensions, warnings will be given according to specifications under the -f77 setting. The default behavior is to give no warnings. ''Warning'' in other cases means a condition that is suspicious but that may or may not be a programming error. Frequently these condi- tions are legal under the standard. Some are illegal but do not fall under the heading of syntax errors. Usage errors are one example. These refer to the possibility that a variable may be used before it has been assigned a value (generally an error), or that a variable is declared but never used (harmless but may indicate carelessness). The amount of checking for usage errors is controlled by the -usage flag, which specifies the maximum amount of checking by default. Truncation warnings cover situations in which accuracy may be lost unintentionally, for example when a double precision value is assigned to a real variable. These warnings are controlled by the -truncation setting, which is on by default. ''Nonportable usage'' warns about some feature that may not be accepted by some compilers even though it is not contrary to the Fortran 77 Standard, or that may cause the program to perform differently on dif- ferent platforms. For example, equivalencing real and integer vari- ables is usually a non-portable practice. The use of extensions to the standard language is, of course, another source of non-portability, but this is handled as a separate case. To check a program for true porta- bility, both the -portability and the -f77 flags should be used. They are both turned off by default. The -wordsize setting is provided to check only those nonportable usages that depend on a particular machine wordsize. ''Possibly misleading appearance'' is used for legal constructions that may not mean what they appear to mean at first glance. For example, Fortran is insensitive to blank space, so extraneous space within vari- able names or the lack of space between a keyword and a variable can convey the wrong impression to the reader. These messages can be sup- pressed by turning off the -pretty flag, which is on by default. Other messages that are given after all the files are processed, and having to do with agreement between modules, do not use the word ''warning'' but generally fall into that category. Examples include type mismatches between corresponding variables in different COMMON block declarations, or between dummy and actual arguments of a subpro- gram. These warnings are controlled by the -common and -arguments set- tings respectively. By default both are set for maximum strictness of checking. Another group of warnings about conditions that are often harmless refer to cases where the array properties of a variable passed as a subprogram argument differ between the two routines. For instance, an array element might be passed to a subroutine that expects a whole array. This is a commonly-used technique for processing single rows or columns of two-dimensional arrays. However, it could also indicate a programming error. The -array setting allows the user to adjust the degree of strictness to be used in checking this kind of agreement between actual and dummy array arguments. By default the strictness is maximum. ''Oops'' indicates a technical problem, meaning either a bug in ftnchek or that its resources have been exceeded. The syntax error messages and warnings include the filename along with the line number and column number. ftnchek has two different options for the appearance of these error messages. If -novice is in effect, which is the default, the messages are in a style approximating normal English. (In default style, the filename is not printed in messages within the body of the program if -list is in effect.) The other style of error messages is selected by the -nonovice option. In this style, the appearance of the messages is similar to that of the UNIX lint pro- gram. ftnchek is still blind to some kinds of syntax errors. The two most important ones are detailed checking of FORMAT statements, and almost anything to do with control of execution flow by means of IF, DO, and GOTO statements: namely correct nesting of control structures, matching of opening statements such as IF ... THEN with closing statements such as ENDIF, and the proper use of statement labels (numbers). Most com- pilers will catch these errors. See the section on Limitations for a more detailed discussion. If ftnchek gives you a syntax error message when the compiler does not, it may be because your program contains an extension to standard For- tran which is accepted by the compiler but not by ftnchek. (See the section on Extensions.) On a VAX/VMS system, you can use the compiler option /STANDARD to cause the compiler to accept only standard Fortran. On most UNIX or UNIX-like systems, this can be accomplished by setting the flag -ansi. Many of the messages given by ftnchek are self-explanatory. Those that need some additional explanation are listed below in alphabetical order. Common block NAME: data type mismatch at position n The n-th variable in the COMMON block differs in data type in two different declarations of the COMMON block. By default (-common strictness level 3), ftnchek is very picky about COMMON blocks: the variables listed in them must match exactly by data type and array dimensions. That is, the legal pair of declara- tions in different modules: COMMON /COM1/ A,B and COMMON /COM1/ A(2) will cause ftnchek to give warnings at strictness level 3. These two declarations are legal in Fortran since they both declare two real variables. At strictness level 1 or 2, no warning would be given in this example, but the warning would be given if there were a data type mismatch, for instance, if B were declared INTEGER. Controlled by -common setting. Common block NAME has long data type following short data type Some compilers require alignment of multi-byte items so that each item begins at an address that is a multiple of the item size. Thus if a short (e.g. single-precision real) item is fol- lowed by a long (e.g. double precision real) item, the latter may not be aligned correctly. Controlled by -portability=com- mon-alignment option. Common block NAME has mixed character and non-character variables The ANSI standard requires that if any variable in a COMMON block is of type CHARACTER, then all other variables in the same COMMON block must also be of type CHARACTER. Controlled by -f77=mixed-common option. Common block NAME: varying length For -common setting level 2, this message means that a COMMON block is declared to have different numbers of words in two dif- ferent subprograms. A word is the amount of storage occupied by one integer or real variable. For -common setting level 3, it means that the two declarations have different numbers of vari- ables, where an array of any size is considered one variable. This is not necessarily an error, but it may indicate that a variable is missing from one of the lists. Note that according to the Fortran 77 Standard, it is an error for named COMMON blocks (but not blank COMMON) to differ in number of words in declarations in different modules. Given for -common setting 2 or 3. Error: Badly formed logical/relational operator or constant Error: Badly formed real constant The syntax analyzer has found the start of one of the special words that begin and end with a period (e.g. .EQ.), or the start of a numeric constant, but did not succeed in finding a complete item of that kind. Error: cannot be adjustable size in module NAME A character variable cannot be declared with a size that is an asterisk in parentheses unless it is a dummy argument, a parame- ter, or the name of the function defined in the module. Error: cannot be declared in SAVE statement in module NAME Only local variables and common blocks can be declared in a SAVE statement. Error: No path to this statement ftnchek will detect statements which are ignored or by-passed because there is no foreseeable route to the statement. For example, an unnumbered statement (a statement without a state- ment label), occurring immediately after a GOTO statement, can- not possibly be executed. Error: Parse error This means that the parser, which analyzes the Fortran program into expressions, statements, etc., has been unable to find a valid interpretation for some portion of a statement in the pro- gram. If your compiler does not report a syntax error at the same place, the most common explanations are: (1) use of an extension to ANSI standard Fortran that is not recognized by ftnchek, or (2) the statement requires more lookahead than ftnchek uses (see section on Bugs). NOTE: This message means that the affected statement is not interpreted. Therefore, it is possible that ftnchek's subse- quent processing will be in error, if it depends on any matters affected by this statement (type declarations, etc.). Error: Syntax error This is the same as ''Error: Parse error'' (see above). It is generated if your version of ftnchek was built using the UNIX yacc parser generator rather than GNU bison. Identifiers which are not unique in first six chars Warns that two identifiers which are longer than 6 characters do not differ in the first 6 characters. This is for portability: they may not be considered distinct by some compilers. Con- trolled by -sixchar option. Nonportable usage: argument precision may not be correct for intrinsic function The precision of an argument passed to an intrinsic function may be incorrect on some computers. Issued when a numeric variable declared with explicit precision (e.g. REAL*8 X) is passed to a specific intrinsic function (e.g. DSQRT(X)). Controlled by -portability=mixed-size and -wordsize. Nonportable usage: character constant/variable length exceeds 255 Some compilers do not support character strings more than 255 characters in length. Controlled by -portability=long-string. Nonportable usage: File contains tabs ftnchek expands tabs to be equivalent to spaces up to the next column which is a multiple of 8. Some compilers treat tabs dif- ferently, and also it is possible that files sent by electronic mail will have the tabs converted to blanks in some way. There- fore files containing tabs may not be compiled correctly after being transferred. ftnchek does not give this message if tabs only occur within comments or character constants. Controlled by -portability=tab. Nonportable usage: non-integer DO loop bounds This warning is only given when the DO index and bounds are non- integer. Use of non-integer quantities in a DO statement may cause unexpected errors, or different results on different machines, due to roundoff effects. Controlled by -portabil- ity=real-do. Possibly it is an array which was not declared This message is appended to warnings related to a function invo- cation or to an argument type mismatch, for which the possibil- ity exists that what appears to be a function is actually meant to be an array. If the programmer forgot to dimension an array, references to the array will be interpreted as function invoca- tions. This message will be suppressed if the name in question appears in an EXTERNAL or INTRINSIC statement. Controlled by the -novice option. Possibly misleading appearance: characters past 72 columns The program is being processed with the statement field width at its standard value of 72, and some nonblank characters have been found past column 72. In this case, ftnchek is not processing the characters past column 72, and is notifying the user that the statement may not have the meaning that it appears to have. These characters might be intended by the programmer to be sig- nificant, but they will be ignored by the compiler. Controlled by -pretty=long-line. Possibly misleading appearance: Common block declared in more than one statement Such multiple declarations are legal and have the same effect as a continuation of the original declaration of the block. This warning is only given if the two declarations are separated by one or more intervening statements. Controlled by -pretty=mul- tiple-common. Possibly misleading appearance: Continuation follows comment or blank line ftnchek issues this warning message to alert the user that a continuation of a statement is interspersed with comments, mak- ing it easy to overlook. Controlled by -pretty=continuation. Possibly misleading appearance: Extraneous parentheses Warns about parentheses surrounding a variable by itself in an expression. When a parenthesized variable is passed as an argu- ment to a subprogram, it is treated as an expression, not as a variable whose value can be modified by the called routine. Controlled by -pretty=parentheses. Subprogram NAME: argument data type mismatch at position n The subprogram's n-th actual argument (in the CALL or the usage of a function) differs in datatype or precision from the n-th dummy argument (in the SUBROUTINE or FUNCTION declaration). For instance, if the user defines a subprogram by SUBROUTINE SUBA(X) REAL X and elsewhere invokes SUBA by CALL SUBA(2) ftnchek will detect the error. The reason here is that the num- ber 2 is integer, not real. The user should have written CALL SUBA(2.0) When checking an argument which is a subprogram, ftnchek must be able to determine whether it is a function or a subroutine. The rules used by ftnchek to do this are as follows: If the subpro- gram, besides being passed as an actual argument, is also invoked directly elsewhere in the same module, then its type is determined by that usage. If not, then if the name of the sub- program does not appear in an explicit type declaration, it is assumed to be a subroutine; if it is explicitly typed it is taken as a function. Therefore, subroutines passed as actual arguments need only be declared by an EXTERNAL statement in the calling module, whereas functions must also be explicitly typed in order to avoid generating this error message. Controlled by -arguments setting. Subprogram NAME: argument arrayness mismatch at position n Similar to the preceding situation, but the subprogram dummy argument differs from the corresponding actual argument in its number of dimensions or number of elements. Controlled by -array together with -arguments settings. Subprogram NAME: argument mismatch at position n A character dummy argument is larger than the corresponding actual argument, or a Hollerith dummy argument is larger than the corresponding actual argument. Controlled by -arguments setting. Subprogram NAME: argument usage mismatch ftnchek detects a possible conflict between the way a subprogram uses an argument and the way in which the argument is supplied to the subprogram. The conflict can be one of two types, as outlined below. Dummy arg is modified, Actual arg is const or expr A dummy argument is an argument as named in a SUBROUTINE or FUNCTION statement and used within the subprogram. An actual argument is an argument as passed to a subroutine or function by the caller. ftnchek is saying that a dummy argument is modified by the subprogram, implying that its value is changed in the calling module. The corresponding actual argument should not be a constant or expression, but rather a variable or array element which can be legitimately assigned to. Controlled by the -usage=arg-const-modified option. Dummy arg used before set, Actual arg not set Here a dummy argument may be used in the subprogram before hav- ing a value assigned to it by the subprogram. The corresponding actual argument should have a value assigned to it by the caller prior to invoking the subprogram. Controlled by the -usage=var-uninitialized option. This warning is not affected by the -arguments setting. Subprogram NAME invoked inconsistently Here the mismatch is between the datatype of the subprogram itself as used and as defined. For instance, if the user declares INTEGER FUNCTION COUNT(A) and invokes COUNT in another module as N = COUNT(A) without declaring its datatype, it will default to real type, based on the first letter of its name. The calling module should have included the declaration INTEGER COUNT Given for -arguments setting 2 or 3. Subprogram NAME: varying length argument lists: An inconsistency has been found between the number of dummy arguments (parameters) a subprogram has and the number of actual arguments given it in an invocation. ftnchek keeps track of all invocations of subprograms (CALL statements and expressions using functions) and compares them with the definitions of the subprograms elsewhere in the source code. The Fortran compiler normally does not catch this type of error. Given for -argu- ments setting 1 or 3. Variable not declared. Type has been implicitly defined When printing the symbol table for a module, ftnchek will flag with an asterisk all identifiers that are not explicitly typed and will show the datatype that was assigned through implicit typing. This provides support for users who wish to declare all variables as is required in Pascal or some other languages. This message appears only when the -symtab option is in effect. Alternatively, use the -declare flag if you want to get a list of all undeclared variables. Variables declared but never referenced Detects any identifiers that were declared in your program but were never used, either to be assigned a value or to have their value accessed. Variables in COMMON are excluded. Controlled by the -usage=var-unused option. Variables set but never used ftnchek will notify the user when a variable has been assigned a value, but the variable is not otherwise used in the program. Usually this results from an oversight. Controlled by the -usage=var-set-unused option. Variables used before set This message indicates that an identifier is used to compute a value prior to its initialization. Such usage may lead to an incorrect value being computed, since its initial value is not controlled. Controlled by the -usage=var-uninitialized option. Variables may be used before set Similar to used before set except that ftnchek is not able to determine its status with certainty. ftnchek assumes a variable may be used before set if the first usage of the variable occurs prior in the program text to its assignment. Controlled by the -usage=var-uninitialized option. Warning: DO index is not integer This warning is only given when the DO bounds are integer, but the DO index is not. It may indicate a failure to declare the index to be an integer. Controlled by -truncation=real-do option. Warning: integer quotient expr ... converted to real The quotient of two integers results in an integer type result, in which the fractional part is dropped. If such an integer expression involving division is later converted to a real datatype, it may be that a real type division had been intended. Controlled by -truncation=int-div-real option. Warning: Integer quotient expr ... used in exponent The quotient of two integers results in an integer type result, in which the fractional part is dropped. If such an integer expression is used as an exponent, it is quite likely that a real type division was intended. Controlled by -trunca- tion=int-div-exponent option. Warning: NAME not set when RETURN encountered The way that functions in Fortran return a value is by assigning the value to the name of the function. This message indicates that the function was not assigned a value before the point where a RETURN statement was found. Therefore it is possible that the function could return an undefined value. Warning: Nonstandard syntax: adjustable size cannot be concatenated here The Fortran 77 Standard (sec. 6.2.2) forbids concatenating char- acter variables whose size is an asterisk in parentheses, except in an assignment statement. Controlled by -f77=mixed-expr. Warning: Nonstandard syntax : significant characters past 72 columns This warning is given under the -f77=long-line setting if the -columns setting has been used to increase the statement field width, and a statement has meaningful program text beyond column 72. Standard Fortran ignores all text in those columns, but some compilers do not. Thus the program may be treated differ- ently by different compilers. Warning: Nonstandard syntax : Statement out of order. ftnchek will detect statements that are out of the sequence specified for ANSI standard Fortran 77. Table 1 illustrates the allowed sequence of statements in the Fortran language. State- ments which are out of order are nonetheless interpreted by ftnchek, to prevent ''cascades'' of error messages. The sequence counter is also rolled back to prevent repetition of the error message for a block of similar statements. Controlled by the -f77=statement-order option. -------------------------------------------------------- | | implicit | parameter |--------------------- | | other specification format |---------------|--------------------- and | | statement-function entry | data |--------------------- | | executable -------------------------------------------------------- Table 1 Warning: Possible division by zero This message is printed out wherever division is done (except division by a constant). Use it to help locate a runtime divi- sion by zero problem. Controlled by -division option. Warning: real truncated to intg ftnchek has detected an assignment statement which has a real expression on the right, but an integer variable on the left. The fractional part of the real value will be lost. If you explicitly convert the real expression to integer using the INT or NINT intrinsic function, no warning will be printed. A simi- lar message is printed if a double precision expression is assigned to a single precision variable, etc. Controlled by -truncation=demotion option. Warning: subscript is not integer Since array subscripts are normally integer quantities, the use of a non-integer expression here may signal an error. Con- trolled by -truncation=real-subscript option. Warning: Unknown intrinsic function This message warns the user that a name declared in an INTRINSIC statement is unknown to ftnchek. Probably it is a nonstandard intrinsic function, and so the program will not be portable. The function will be treated by ftnchek as a user-defined func- tion. This warning is not suppressed by any option, since it affects ftnchek's analysis of the program. However, if the intrinsic function is in one of the supported sets of nonstan- dard intrinsics, you can use the -intrinsic setting to cause ftnchek to recognize it. LIMITATIONS AND EXTENSIONS ftnchek accepts ANSI standard Fortran-77 programs with some minor limi- tations and numerous common extensions. Limitations: The dummy arguments in statement functions are treated like ordinary variables of the program. That is, their scope is the entire subprogram, not just the statement function definition. The checking of FORMAT statements is lax, tolerating missing separators (comma, etc.) between format descriptors in places where the Standard requires them, and allowing .d fields on descriptors that should not have them. It does warn under -f77=format-edit-descr about nonstandard descriptor types (like O), and supported extensions. There are some syntactic extensions and Fortran 90 elements that ftnchek accepts but does very little checking. For instance, pointer usage (whether the nonstandard Cray syntax or the For- tran 90 syntax) is not checked other than for set and used sta- tus. It is hoped that some day more thorough checking will be implemented, but for now the user should regard the acceptance of these syntactic features simply as a convenience to enable checking of other aspects of code that contains them. See the section Extensions for specifics about what features are accepted but not fully checked. If a user-supplied subprogram has the same name as one of the nonstandard intrinsic functions recognized by ftnchek, it must be declared in an EXTERNAL statement in any routine that invokes it. Otherwise it will be subject to the checking normally given to the intrinsic function. Since the nonstandard intrinsics are not standard, this EXTERNAL statement is not required by the Fortran 77 Standard. Using the -intrinsic=none setting, recog- nition of most nonstandard intrinsics (excepting only those needed to support the double complex data type) can be turned off. See the lists of supported nonstandard intrinsic functions under the discussion of the -intrinsic setting above. Extensions: All of these extensions (except lower-case characters) will gen- erate warnings if the relevant -f77 option is set. Some of the extensions listed below are part of the Fortran-90 Standard. These are indicated by the notation (F90). Tabs are permitted, and translated into equivalent blanks which correspond to tab stops every 8 columns. The standard does not recognize tabs. Note that some compilers allow tabs, but treat them differently. The treatment defined for DEC FORTRAN can be achieved using the -source=dec-tab setting. Strings may be delimited by either quote marks or apostrophes. A sequence of two delimiter characters is interpreted as a sin- gle embedded delimiter character. (F90) Strings may contain UNIX-style backslash escape sequences. They will be interpreted as such if the -source=unix-backslash set- ting is given. Otherwise the backslash character will be treated as a normal printing character. Source code can be in either Fortran 90 free format or tradi- tional fixed format. (F90) A semicolon is allowed as a statement separator. (F90) Lower case characters are permitted, and are converted inter- nally to uppercase except in character strings. The standard specifies upper case only, except in comments and strings. (F90) Hollerith constants are permitted, in accordance with the For- tran 77 Standard, appendix C. They should not be used in expressions, or confused with datatype CHARACTER. The letter 'D' (upper or lower case) in column 1 is treated as the beginning of a comment. There is no option to treat such lines as statements instead of comments. Statements may be longer than 72 columns provided that the set- ting -columns was used to increase the limit. According to the standard, all text from columns 73 through 80 is ignored, and no line may be longer than 80 columns. Variable names may be longer than six characters. The standard specifies six as the maximum. ftnchek permits names up to 31 characters long (F90). Variable names may contain underscores and dollar signs (or other non-alphabetic characters as specified by the -identi- fier-chars option). These characters are are treated the same as alphabetic letters. The default type for variables beginning with these characters is REAL. In IMPLICIT type statements specifying a range of characters, the dollar sign follows Z and is followed by underscore. (Any other user-defined characters are treated the same as the dollar sign.) Fortran 90 permits underscores in variable names. The UNIX version tolerates the presence of preprocessor direc- tives, namely lines beginning with the pound sign (#). These are treated as comments, except for #line directives, which are interpreted, and are used to set the line number and source file name for warnings and error messages. Note that #include direc- tives are not processed by ftnchek. Programs that use them for including source files should be passed through the preprocessor before being input to ftnchek. As noted below, ftnchek does process INCLUDE statements, which have a different syntax. An optional program, ftnpp(1L) (available separately) provides preprocessing that properly handles INCLUDE files. The Fortran 90 DO ... ENDDO control structure is permitted. The CYCLE and EXIT statements are accepted. All of these may have an optional do-construct name, but construct names are not checked for consistency. (F90) The Fortran 90 SELECT CASE construct is accepted. (F90) Construct names are also accepted on IF, THEN, ELSE, ENDIF and SELECT CASE statements. (F90) The ACCEPT and TYPE statements (for terminal I/O) are permitted, with the same syntax as PRINT. The so-called ''Cray pointer'' syntax is tolerated. It is not the same as the Fortran 90 POINTER statement. There is no real checking of the statement other than basic syntax. The form of this statement is POINTER (pointer, pointee) [,(pointer, pointee)] The pointer variables are assigned a data type of INTEGER *4. Usage checking of the pointee variables is suppressed, since in practice they are accessed indirectly via the pointers. The following Fortran 90 pointer related syntaxes are accepted: ALLOCATABLE, POINTER, and TARGET statements and the same attributes in type declarations; ALLOCATE, DEALLOCATE, and NUL- LIFY executable statements; pointer assignment using => opera- tor; and the intrinsic functions ALLOCATED and ASSOCIATED. Lit- tle semantic checking of pointer variables and operations is done beyond basic set and used status. For instance, there is no checking for such errors as dangling pointers, or use of unallocated arrays. Statements may have any number of continuation lines. The For- tran 77 and Fortran 90 standards allow a maximum of 19 in fixed source form. The Fortran 90 standard allows a maximum of 39 in free source form. Relational (comparison) operators composed of punctuation, namely: < <= == /= > >= are allowed. (F90) Inline comments, beginning with an exclamation mark, are permit- ted. (F90) NAMELIST I/O is supported. The syntax is the same as in Fortran 90. FORMAT statements can contain a dollar sign to indicate suppres- sion of carriage-return. An integer expression enclosed in angle brackets can be used anywhere in a FORMAT statement where the Fortran 77 Standard allows an integer constant (except for the length of a Hollerith constant), to provide a run-time value for a repeat specification or field width. Nonstandard keywords are allowed in I/O statements, correspond- ing to those in VMS Fortran. The IMPLICIT NONE statement is supported. The meaning of this statement is that all variables must have their data types explicitly declared. Rather than flag the occurrences of such variables with syntax error messages, ftnchek waits till the end of the module, and then prints out a list of all undeclared variables, as it does for the -declare option. (F90) Data types INTEGER, REAL, COMPLEX, and LOGICAL are allowed to have an optional precision specification in type declarations. For instance, REAL*8 means an 8-byte floating point data type. The REAL*8 datatype is not necessarily considered equivalent to DOUBLE PRECISION, depending on the -wordsize setting. The For- tran 77 Standard allows a length specification only for CHARAC- TER data. ftnchek supports the DOUBLE COMPLEX type specification for a complex quantity whose real and imaginary parts are double pre- cision. Mixed-mode arithmetic involving single-precision com- plex with double-precision real data, prohibited under the Stan- dard, yields a double complex result. Combined type declarations and data-statement-like initializers are accepted. These have the form of a standard Fortran 77 type declaration, followed by a slash-delimited list of constants like that used in a DATA statement. An example of the syntax is INTEGER N / 100 / This bastard form of initializing declaration was not adopted in Fortran 90. Such declarations should be written using the stan- dard form described below, which is accepted by ftnchek. There is limited support for Fortran 90 attribute-based type declarations. This style of declaration is distinguished by the use of a double colon (::) between the list of attributes and the list of declared variables. The features supported may be adequate for novice programmers, but are not yet sufficient for professional-quality Fortran 90 programs. I hope to add support for more features in future releases. I invite volunteers to assist in this task. See the ToDo file in the source code dis- tribution for details. The attributes currently accepted, besides all the usual data types, are DIMENSION, EXTERNAL, INTRINSIC, PARAMETER, and SAVE. The new form of declaration also allows assignment of values to the variables declared. At present, the (LEN=value) form of specifying character lengths is also accepted. Kind specifications, using (KIND=value) are parsed but are not processed: all kinds are treated as default kind. Also, there is little checking of these declarations beyond basic syntax. Many commonly found nonstandard intrinsic functions are pro- vided. See the discussion of -intrinsic for a list of functions and how to control which ones are recognized. Argument checking is not tight for those nonstandard intrinsics that take arrays or mixed argument types. ftnchek permits the INCLUDE statement, which causes inclusion of the text of the given file. The syntax is INCLUDE 'filename' This is compatible with Fortran 90. If the -source=vms-include option is given, ftnchek follows VMS conventions with respect to this statement: it assumes a default extension of .for if no filename extension is given, and allows the qualifier /[NO]LIST following the filename, to control the listing of the included file. There is no support for including VMS text modules. In diagnostic output relating to items contained in include files, the location of the error is specified by both its loca- tion in the include file and the location in the parent file where the file was included. ftnchek accepts PARAMETER statements which lack parentheses. These will be warned about if the -f77=param-noparen flag is given. ftnchek accepts PARAMETER definitions that involve intrinsic functions and exponentiation by a non-integer exponent. Both of these cases are prohibited by the Fortran 77 Standard, and will be warned about if the -f77=param-intrinsic flag is given. If an intrinsic function value is a compile-time integer constant, ftnchek will evaluate it. This allows better checking if the parameter is used in declaring array sizes. Fortran 90 allows intrinsic functions in PARAMETER definitions. The intrinsic functions that are evaluated are: ABS IABS DIM IDIM MAX MAX0 MIN MIN0 MOD SIGN ISIGN LEN ICHAR INDEX The functions of integer arguments are evaluated only if the arguments are integer constant expressions. (These may involve integer constants, parameters, and evaluated intrinsic func- tions.) The function LEN is evaluated if its argument is an expression involving only character constants and variables whose length is not adjustable. The functions ICHAR and INDEX are evaluated only if the arguments are character constants. ftnchek gives a warning if it needs the value of some intrinsic function that is not evaluated. NEW FEATURES Here are the changes from Version 3.2 to Version 3.3: 1. Front-end has been rewritten for unlimited lookahead, eliminating the longstanding bug that caused incorrect interpretation of state- ments whose ambiguity was not resolved in the first line. 2. The -mkhtml option is now available in the MS-DOS version. 3. Added support for Fortran 90 pointer related syntax: ALLOCATE, DEALLOCATE, and NULLIFY statements; the ALLOCATABLE, POINTER and TARGET attributes in type declarations; the pointer assigment oper- ator => and intrinsic functions ALLOCATED and ASSOCIATED; and deferred-shape array declarations. At present these new syntax features are accepted but not properly checked. This feature was added by Robert Landrito. 4. The -f77 and -f90 pointer option controlling warnings about ''Cray pointers'' has been renamed to cray-pointer. The -f77=pointer option now instead controls warnings for code containing Fortran 90 pointer-related syntax. 5. Re-implemented -mkhtml processing so it is now much faster on source files containing many routines. 6. Changed the arrangement of the test directory so there is no longer any need to modify the distribution in order to run the test suite (check.bat) under MS-DOS. 7. Fixed bug in reading numeric settings on command line when setting name abbreviated to 3 characters. 8. Fixed bug causing spurious warning for a GOTO referring to a labeled END statement when the statement before END was a FORMAT. 9. New flag -f77=character to control warnings about extensions to the Fortran 77 character data type. Accompanying this new flag is sup- port for Fortran 90 rules for character variable declarations that evaluate to zero or negative length, allowing them and treating negative length values as zero. 10. Fixed minor bug in printing of comments and blank lines following last END statement in -list mode. BUGS ftnchek still has much room for improvement. Your feedback is appreci- ated. We want to know about any bugs you notice. Bugs include not only cases in which ftnchek issues an error message where no error exists, but also if ftnchek fails to issue a warning when it ought to. Note, however, that ftnchek is not intended to catch all syntax errors (see section on Limitations). Also, it is not considered a bug for a variable to be reported as used before set, if the reason is that the usage of the variable occurs prior in the text to where the variable is set. For instance, this could occur when a GOTO causes execution to loop backward to some previously skipped statements. ftnchek does not analyze the program flow, but assumes that statements occurring earlier in the text are executed before the following ones. We especially want to know if ftnchek crashes for any reason. It is not supposed to crash, even on programs with syntax errors. Sugges- tions are welcomed for additional features which you would find useful. Tell us if any of ftnchek's messages are incomprehensible. Comments on the readability and accuracy of this document are also welcome. You may also suggest support for additional extensions to the Fortran language. These will be included only if it is felt that the exten- sions are sufficiently widely accepted by compilers. If you find a bug in ftnchek, first consult the list of known bugs below to see if it has already been reported. Also check the section entitled ''Limitations and Extensions'' above for restrictions that could be causing the problem. If you do not find the problem docu- mented in either place, then send a report including 1. The operating system and CPU type on which ftnchek is running. 2. The version of ftnchek and values of any environment options or settings defined in startup file. (Capturing the output of ftnchek -help is useful for this.) 3. A brief description of the bug. 4. If possible, a small sample program showing the bug. The report should be sent to Dr. Robert Moniot (see contact information in section entitled ''Installation and Support''). Highest priority will be given to bugs which cause ftnchek to crash. Certain problems that arise when checking large programs can be fixed by increasing the sizes of the data areas in ftnchek. (These problems are generally signaled by error messages beginning with ''Oops''.) The simplest way to increase the table sizes is by recompiling ftnchek with the LARGE_MACHINE macro name defined. Consult the makefile and README file for the method of doing this. The following is a list of known bugs. 1. Bug: Used-before-set message is suppressed for any variable which is used as the loop index in an implied-do loop, even if it was in fact used before being set in some earlier statement. For example, consider J in the statement WRITE(5,*) (A(J), J=1,10) Here ftnchek parses the I/O expression, A(J), where J is used, before it parses the implied loop where J is set. Normally this would cause ftnchek to report a spurious used-before-set warning for J. Since this report is usually in error and occurs fairly commonly, ftnchek suppresses the warning for J altogether. Prognosis: A future version of ftnchek is planned which will han- dle implied-do loops correctly. 2. Bug: Variables used (not as arguments) in statement-function sub- programs do not have their usage status updated when the statement function is invoked. Prognosis: To be fixed in a future version of ftnchek. 3. Bug: VAX version does not expand wildcards in filenames on the com- mand line if they are followed without space by an option, e.g. ftnchek *.f/calltree would not expand the *.f. This is because VMS-style options without intervening space are not supported by the GNU shell_mung routine that is used to expand wildcards. Prognosis: unlikely to be fixed. 4. Bug: checking for nonstandard format edit descriptors is done only in FORMAT statements, not in character strings used as formats. Prognosis: may be fixed someday. ACKNOWLEDGEMENTS ftnchek was designed by Dr. Robert Moniot, professor at Fordham Univer- sity. During the academic year of 1988-1989, Michael Myers and Lucia Spagnuolo developed the program to perform the variable usage checks. During the following year it was augmented by Lois Bigbie to check sub- program arguments and COMMON block declarations. Brian Downing assisted with the implementation of the INCLUDE statement. John Quinn wrote the common block usage checks. Heba Elsayed wrote the label ta- ble printout and label usage checks. Nelson H. F. Beebe of the Univer- sity of Utah added most of the new code to implement the -makedcls fea- ture and wrote the dcl2inc script. The -mkhtml feature was contributed by Mark McVeigh of Framatome ANP, Inc. The -reference feature was con- tributed by Gerome Emmanuel, Ecole des mines, U. Nancy (slightly modi- fied). The -vcg option was contributed by Dr. Philip Rubini of Cran- field University, UK. The support for Cray pointer syntax was provided by John Dannenhoffer of United Technologies Research Center. John C. Bollinger of Indiana University added the parser syntax for the SELECT CASE construct. Robert Landrito added the parser syntax for F90 pointer-related features. Additional features will be added as time permits. As of Version 2.5, the name was changed from forchek to ftnchek, to avoid confusion with a similar program named forcheck, developed earlier at Leiden University. We would like to thank John Amor of the University of British Columbia, Reg Clemens of the Air Force Phillips Lab in Albuquerque, Markus Draxler of the University of Stuttgart, Victor Eijkhout of the Univer- sity of Tennessee at Knoxville, Greg Flint of Purdue University, Daniel P. Giesy of NASA Langley Research Center, Fritz Keinert of Iowa State University, Judah Milgram of the University of Maryland College Park, Hugh Nicholas of the Pittsburgh Supercomputing Center, Dan Severance of Yale University, Phil Sterne of Lawrence Livermore National Laboratory, Larry Weissman of the University of Washington, Warren J. Wiscombe of NASA Goddard, and Nelson H. F. Beebe of the University of Utah, for pointing out bugs and suggesting some improvements. Stefan A. Deutscher, Gunnar Duus, Clive Page of the University of Leicester, Stephan Wefing of Heidelberg University, and Bob Wells of Oxford Uni- versity were extremely helpful as alpha testers. We also thank Jack Dongarra for putting ftnchek into the netlib library of publicly avail- able software. INSTALLATION AND SUPPORT The ftnchek program is free software. It can be obtained by anonymous ftp from many software servers, including ftp://netlib.org/fortran . Note that on Netlib the distribution is named ftnchek.tar.gz whereas on most other servers the file name includes the version number, e.g. ftnchek-3.3.0.tar.gz. If the file extension is .Z, uncompress with the Unix uncompress(1) utility. If the file extension is .gz, uncompress with the GNU gunzip(1L) program. Then use tar(1) to unpack the files into a subdirectory. Installation requires a C compiler for your computer. See the INSTALL file provided with the distribution for instructions on installing ftnchek on your system. Executable binary for particular systems such as IBM PC or Macintosh, as available, can be obtained by anonymous ftp from ftp://ftp.dsm.fordham.edu/pub/ftnchek . Assistance in preparing such executable binary forms is welcome. The nroff version of this document is named ftnchek.man. On UNIX sys- tems, this file can be used as the man page, but actually it is a multi-purpose source file which is used to produce the other forms of the documentation. The cleaned-up man page document, created during installation of ftnchek, is named ftnchek.1. The distribution also includes a plain ASCII version named ftnchek.doc, a PostScript version named ftnchek.ps, an HTML version in directory html, and a VMS HELP version named ftnchek.hlp. Information about the latest version and the status of the project can be obtained by visiting ftnchek's home page, http://www.dsm.ford- ham.edu/~ftnchek . For further information and to report bugs, you may contact Dr. Robert Moniot, whose contact information can be found by a Web search for his name and Fordham University. (E-mail address is not provided here because it attracts unsolicited commercial e-mail, but it is easily constructed by combining his last name with the name of the university and the edu domain.) SEE ALSO dcl2inc(1L), dtoq(1L), dtos(1L), f77(1), fd2s(1L), fs2d(1L), ftnpp(1L), pfort(1L), qtod(1L), sf3(1L), stod(1L). xsf3(1L), xvcg(1L). November 2004 FTNCHEK 3.3(1L) ftnchek-3.3.1/ftnchek.hlp0000644000031000002260000034602510202535153015713 0ustar moniotstaff00000000000000 1 FTNCHEK ftnchek - Fortran 77 program checker 2 Introduction ftnchek (short for Fortran checker) is designed to detect cer- tain errors in a Fortran program that a compiler usually does not. ftnchek is not primarily intended to detect syntax errors. Its pur- pose is to assist the user in finding semantic errors. Semantic er- rors are legal in the Fortran language but are wasteful or may cause incorrect operation. For example, variables which are never used may indicate some omission in the program; uninitialized variables con- tain garbage which may cause incorrect results to be calculated; and variables which are not declared may not have the intended type. ft- nchek is intended to assist users in the debugging of their Fortran program. It is not intended to catch all syntax errors. This is the function of the compiler. Prior to using ftnchek, the user should verify that the program compiles correctly. For more detailed information, consult the printed documentation. 2 Invoking_Ftnchek ftnchek is invoked through a command of the form: $ ftnchek [/option /option ...] filename [filename ...] The brackets indicate something which is optional. The brackets themselves are not actually typed. Here options are command-line switches or settings, which control the operation of the program and the amount of information that will be printed out. If no option is specified, the default action is to print error messages, warnings, and informational messages, but not the program listing or symbol ta- bles. Each option begins with the '/' character. (ftnchek also allows the '-' character to be used.) ftnchek options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch is prefixed by 'no' or 'no-' to turn it off: e.g. /nopure would turn off the warnings about impure functions. The 'no' prefix can also be used with numeric settings, having the effect of turning off the corresponding warnings. Settings that con- trol lists of warnings have a special syntax discussed below. Only the first 3 characters of an option name (not counting the '/') need be provided. A colon may be used in place of an equals sign for nu- meric or string setting assignments; however, we show only the equals sign form below. When more than one option is used, they should be separated by a blank space. No blank spaces may be placed around the equals sign ( = ) in a setting. ftnchek "?" will produce a command summary list- ing all options and settings. For settings that take a list of keywords, namely /arguments, /array, /calltree, /common, /crossref, /f77, /f90, /f95, /intrinsic, /makedcls, /mkhtml, /portability, /pretty, /project, /source, /style, /truncation, and /usage, the list consists of keywords separated by commas or colons. If the list of keywords is omitted, the effect is to set the option to its turn-on value (same as ''all'' in most cas- es). Also, if the list is omitted, the setting name can be prefixed with no or no- to turn off all the options it controls. For example, /f77 turns on all warnings about nonstandard constructions, while /nof77 turns them all off. Three special keywords are: help Print out all the option keywords controlled by the setting, with a brief explanation of their meanings. This keyword can- not be given in a list with other keywords. all Set all options. This turns on all options controlled by the setting. none Clear all options. This turns off all options controlled by the setting. These three special keywords must be given in full. For all other keywords, only as many letters of the keyword as are necessary to identify it unambiguously need be given, or a wildcard pattern may be used. Including a keyword in the list turns the corresponding op- tion on. For example, /f77=intrinsic would turn on only the warnings about use of nonstandard intrinsic functions. Prefixing a keyword by no- turns its option off. For example, /pretty=no-long-line turns off warnings about lines exceeding 72 columns in length while leaving all other warnings about misleading appearance in effect. If a set- ting has default none, you can turn on all options except one or two by using all first. For example, /f77=all,no-include enables warn- ings about all nonstandard extensions except INCLUDE statements. If a setting has default all, you can turn off all warnings except one or two by using none first. For example, /truncation=none,demotion would turn off all precision related warnings except about demotions. Wildcard patterns contain an asterisk to stand for any string of characters. If a wildcard pattern is used, all the warnings that match it are affected. If no- is prefixed to the pattern, all the matching warnings are turned off, otherwise they are all turned on. The minimum unambiguous length rule does not apply to wildcard match- ing. For example, use /usage=no-*var* to turn off all warnings re- lating to variable usage (both local and common). (Unix users may need to quote any options containing wildcards in order to prevent the shell from attempting to expand them.) Wildcards are recognized only in lists of warning keywords, not in the top-level options them- selves. When ftnchek starts up, it looks for environment variables and also for a preferences file. Any options defined in the environment or in the preferences file are used as defaults in place of the built-in defaults. They are over-ridden by any command line options. See the section on changing the defaults for details about the envi- ronment options and the preferences file. 2 Files When giving a name of an input file, the extension is optional. If no extension is given, ftnchek will first look for a project file with extension .prj, and will use that if it exists. If not, then ftnchek will look for a Fortran source file with the extension .for. More than one file name can be given to ftnchek, and it will process the modules in all files as if they were in a single file. Wildcards are allowed in the specification of filenames on the command line. If no filename is given, ftnchek will read input from the stan- dard input. 2 Options ftnchek options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch or numeric setting can be preceded by 'no' to turn it off: e.g. /nocommon would turn off the warnings about common block inconsistencies. Only the first 3 characters of an op- tion name (not counting the '/') need be provided. Most options are positional: each option remains in effect from the point it is en- countered until it is overridden by a later change. 3 /arguments=list Controls warnings about mismatches between actual and dummy subprogram arguments, and also about mismatches between expected and actual subprogram type. (An actual argument is an argument passed to the subprogram by the caller; a dummy argument is an argument re- ceived by the subprogram.) By default, all warnings are turned on. The list consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword pre- fixed by no- to turn off a particular warning. There are three spe- cial keywords: all to turn on all the warnings about arguments, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /arguments is equivalent to /arguments=all, and /noarguments is equivalent to /ar- guments=none. The warning keywords with their meanings are as fol- lows: arrayness: warn about inconsistent use of arguments that are ar- rays. These warnings can be further controlled by the /array option. type: warn about dummy arguments of a different data type from the actual arguments. function-type: warn if the invocation assumes the function's re- turn value is a different type than it actually is. Also warns if a function is called as a subroutine, or vice-versa. number: warn about invoking a subprogram with a different number of arguments than the subprogram expects. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a num- ber from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only number, 2 turns on all except number, and 3 turns all the warn- ings on. This setting does not apply to checking invocations of intrinsic functions or statement functions, which can only be turned off by the /nocheck option. See also: /array, /library, /usage. 3 /array=list Controls the degree of strictness in checking agreement between actual and dummy subprogram arguments that are arrays. The warnings controlled by this setting are for constructions that might legiti- mately be used by a knowledgeable programmer, but that often indicate programming errors. By default, all warnings are turned on. The list consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword pre- fixed by no- to turn off a particular warning. There are three spe- cial keywords: all to turn on all the warnings about array arguments, none to turn them all off, and help to print the list of all the key- words with a brief explanation of each. If list is omitted, /array is equivalent to /array=all, and /noarray is equivalent to /ar- ray=none. The warning keywords with their meanings are as follows: dimensions: warn if the arguments differ in their number of dimen- sions, or if the actual argument is an array element while the dummy argument is a whole array. size: warn if both arguments are arrays, but they differ in number of elements. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a num- ber from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only dimensions, 2 turns on only size, and 3 turns all the warnings on. Note: A warning is always given regardless of this setting if the actual argument is an array while the dummy argument is a scalar variable, or if the actual argument is a scalar variable or expres- sion while the dummy argument is an array. These cases are seldom intentional. (To turn off even these warnings, use /arguments=no-ar- rayness.) No warning is ever given if the actual argument is an ar- ray element while the dummy argument is a scalar variable. Variable- dimensioned arrays and arrays dimensioned with 1 or asterisk match any number of array elements. There is no check of whether multi-di- mensional arrays agree in the size of each dimension separately. See also: /arguments, /library, /usage. 3 /brief Selects a shorter format for some warning messages. At present, the only warnings controlled by this flag are those that are printed at the end of processing each subprogram. These include warnings about variables that are set but not used or used before set, variable names that do not conform to the Fortran 77 standard, etc. (These warnings may be suppressed entirely depending on other flags, such as the /usage or /f77 flags.) In the default format each variable is listed on a separate line, along with the line number where the variable is declared, set or used, according to the nature of the warning. The briefer format simply lists all variables to which the warning applies, with up to 4 variables per line. See also: /quiet. 3 /calltree=list Causes ftnchek to print out the call structure of the complete program. The list consists of keywords separated by commas or colons. There are two special keywords: none to turn off all the options, and help to print the list of all the keywords with a brief explanation of each. (The keyword all turns on all the options, but should not normally be used since only one format should be specified.) If list is omitted, /calltree is equivalent to /calltree=tree, and /nocall- tree is equivalent to /calltree=none. By default no call graph is printed. If the /mkhtml option is invoked and tree is the applied call- tree option, a file named CallTree.html, will also be produced de- picting the tree in HTML format. This file is useful as a starting point for browsing the HTML files describing each component of the program. The keywords which control which format is used are as follows: tree: produce the call graph in tree format. reference: produce the call graph in who-calls-who format (same as /reference switch). vcg: produce the call graph in VCG format (same as /vcg switch). Only one of the formats tree, reference, or vcg may be speci- fied. The following keywords control options affecting the output: prune: prune repeated subtrees (applicable only with tree). This the default. sort: sort children of each routine into alphabetical order. This is the default. See the discussion of the /reference and /vcg flags for details about these formats. For tree format, The call graph is printed out starting from the main program, which is listed on the first line at the left margin. Then on the following lines, each routine called by the main program is listed, indented a few spaces, followed by the subtree starting at that routine. In the default mode, if a routine is called by more than one other routine, its call subtree is printed only the first time it is encountered Later calls give only the routine name and the notice ''(see above)''. To have the subtree printed for each occurrence of the routine, use option no-prune. Note that the call tree will be incomplete if any of the input files are project files containing more than one module that were created in /library mode. See the discussion of project files below. Technical points: Each list of routines called by a given rou- tine is printed in alphabetical order unless the no-sort option is given. If multiple main programs are found, the call tree of each is printed separately. If no main program is found, a report to that effect is printed out, and the call trees of any top-level non-li- brary routines are printed. This flag only controls the printing of the call tree: ftnchek constructs the call tree in any case because it is used to determine which library modules will be cross-checked. See the discussion of the /library flag. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a num- ber from 0 to 15. This number is formed from 1 for tree format, 2 for reference format, or 3 for vcg format, plus 4 for no-prune, and 8 for no-sort. See also: /crossref, /library, /reference, /sort, /symtab, /vcg. 3 /check This switch is provided so that errors and warning messages can be turned off when ftnchek is used for purposes other than finding bugs, such as making declarations or printing the call tree. It is positional, so after turning all checks off, selected checks can be turned back on. The effect of /nocheck is to put all switches, nu- meric settings, and settings controlling lists of warnings to their turn-off values, as if they had all been specified with the /no pre- fix. Switches and settings that specify options and modes of opera- tion, rather than controlling warnings, are unaffected. These are /columns, /crossref, /include, /intrinsic, /library, /list, /maked- cls, /novice, /output, /pointersize, /project, /quiet, /reference, /resources, /sort, /source, /symtab, /vcg, /version, /wordsize, and /wrap. Default = yes. Parse errors (syntax errors due to unrecognized or malformed statements) are not suppressed by this switch, since the results may be incorrect if ftnchek has not parsed the program correctly. There are some miscellaneous errors and warning messages that are not controlled by any other switch, and so can be turned off only by this switch. Note that using /check following /nocheck only has the effect of turning these special warnings back on, and does not restore all the checks it turned off. These warnings are: o Module contains no executable statements. o In free source form, missing space where space is required (e.g. between a keyword and an identifier) or space present where none is allowed (e.g. within an identifier). o Zero or negative length specification in a data type declaration of the form type*len. o Invalid operand(s) in an expression. o Array assigned to scalar. o Type mismatch between DO index and bounds. o Undefined common block declared in SAVE statement. o Intrinsic function explicitly declared with an incompatible type. o Unknown intrinsic function explicitly declared in an INTRINSIC statement. o Intrinsic function passed as a subprogram argument is not de- clared in an INTRINSIC statement. o Intrinsic function or statement function invoked incorrectly. o Function does not set return value prior to RETURN statement. o Parameter constant value not evaluated (this is ftnchek's fault, and it is just informing you of the fact). o Entry point of a subprogram is later used as a different subpro- gram's name. o Unknown keyword used in an I/O statement. o Illegal label reference (e.g. GOTO refers to a non-executable statement; I/O statement refers to a non-format statement). See also: /errors. 3 /columns=num Set maximum statement length to num columns. (Beyond this is ignored.) This setting is provided to allow checking of programs which may violate the Fortran standard limit of 72 columns for the length of a statement. According to the standard, all characters past column 72 are ignored. If this setting is used when the /f77=long-line option is in effect, a warning will be given for any lines in which characters past column 72 are processed. Turn-on = max = 132. Default = 72. This setting does not suppress warnings about the presence of characters beyond column 72. To process code with meaningful program text beyond column 72, use this setting and be sure the /f77 long-line option is off. To process code with sequence numbers in columns 73 to 80, leave the the columns setting at the default value and use the /pretty=no-long-line flag. See also: /f77, /pretty. 3 /common=list This setting controls the strictness of checking of COMMON blocks. By default, all warnings except volatile are turned on. The list consists of keywords separated by commas or colons. Since most of these warnings are on by default, include a keyword prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /common is equivalent to /common=dimensions,exact,length,type, and /nocommon is equivalent to /common=none. The warning keywords with their meanings are as fol- lows: dimensions: corresponding arrays in each declaration of a block must agree in size and number of dimensions. This option only has an effect when used together with exact. exact: the comparison of two blocks is done variable-by-variable rather than simply requiring agreement between corresponding storage locations. Use this if all declarations of a given COMMON block are supposed to be identical, which is a good programming practice. length: warn if different declarations of the same block are not equal in total length. The Fortran 77 Standard requires each named common block, but not blank common, to be the same length in all modules of the program. type: in each declaration of a given COMMON block, corresponding memory locations (words or bytes) must agree in data type. If used together with exact, this will require that corresponding variables agree in data type. volatile: Assume that COMMON blocks are volatile. Many Fortran programmers assume that variables, whether local or in COMMON, are static, i.e. that once assigned a value, they retain that value permanently until assigned a different value by the pro- gram. However, in fact the Fortran 77 Standard does not require this to be the case. Local variables may become undefined between activa- tions of a module in which they are declared. Similarly, COMMON blocks may become undefined if no module in which they are declared is active. (The technical term for entities with this behavior is ''automatic'', but ftnchek uses the word ''volatile'' since it is clearer to the nonspecialist.) Only COMMON blocks declared in a SAVE statement, or declared in the main program or in a block data subpro- gram remain defined as long as the program is running. Variables and COMMON blocks that can become undefined at some point are called volatile. If the /common=volatile flag is turned on, ftnchek will warn you if it finds a volatile COMMON block. If, at the same time, the /us- age=com-block-volatile option is turned on (which is the default), ftnchek will try to check whether such a block can lose its defined status between activations of the modules where it is declared. ft- nchek does not do a very good job of this: the rule used is to see whether the block is declared in two separated subtrees of the call tree. For instance, this would be the case if two modules, both called from the main program, shared a volatile COMMON block. A block can also become undefined between two successive calls of the same subprogram, but ftnchek is not smart enough to tell whether a subprogram can be called more than once, so this case is not checked for. The /common=volatile flag does not affect the way ftnchek checks the usage of local variables. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a num- ber from 0 to 3. A value of 0 turns all the warnings off, 1 or greater turns on type, 2 or greater turns on length, and 3 turns on dimensions and exact also. The numeric form cannot turn on the volatile option. See also: /library, /usage. 3 /crossref=list Prints cross-reference tables. Default = none. The list consists of keywords separated by commas or colons. The keywords with their meanings are as follows: calls: table lists each subprogram followed by a list of routines that call it. This listing omits library modules that are not in the call tree of the main program. The list is alphabet- ized. common: table lists each COMMON block followed by a list of the routines that access it. These listed routines are those in which some variables in the COMMON block are accessed, not simply those routines that declare the block. (To find out what routines declare a COMMON block but do not use it, see the /usage flag.) labels: table lists each label followed by a list of all refer- ences to it. A label reference is denoted by the line number and statement type of the referring statement. The label list is in sequential order. The references are listed in the order they are encountered in the program. See also: /calltree, /reference, /sort, /symtab, /vcg. 3 /declare If this flag is set, all identifiers whose datatype is not de- clared in each module will be listed. This flag is useful for help- ing to find misspelled variable names, etc. The same listing will be given if the module contains an IMPLICIT NONE statement. Default = no. See also: /sixchar, /usage. 3 /division This switch is provided to help users spot potential division by zero problems. If this switch is selected, every division except by a constant will be flagged. (It is assumed that the user is in- telligent enough not to divide by a constant which is equal to zero!) Default = no. See also: /portability, /truncation. 3 /errors=num Set the maximum number of error messages in a ''cascade''. During checking of agreement of subprogram arguments, common block declarations, and so forth, sometimes a single case will generate a long string of warnings. Often this simply indicates some other cause than a genuine item-by-item mismatch, such as for example a varible missing from one list. So in such cases ftnchek stops print- ing the warnings after the cascade limit is reached, and the trailer ''etc...'' is printed to indicate that there were more errors not printed. If you think that these warnings are likely to be genuine, use this setting to see more of them. Turn-on = default = 3, max = 999. A value of 0 means no limit. This setting does not set an overall limit on the number of er- ror messages printed, only the number printed in any one cascade. Most types of warnings and error messages are not subject to the cas- cade effect and so are not affected by this setting. To turn off warnings generally, use the individual warning control options or the /nocheck option. See also: /check. 3 /extern Causes ftnchek to report whether any subprograms invoked by the program are never defined. Ordinarily, if ftnchek is being run on a complete program, each subprogram other than the intrinsic functions should be defined somewhere. Turn off this switch if you just want to check a subset of files which form part of a larger complete pro- gram. Subprogram arguments will still be checked for correctness. Default = yes. The /extern flag is now superseded by the /usage=ext-undefined option. For the sake of convenience, the /extern flag is retained, so that /noextern is equivalent to /usage=no-ext-undefined option. The /extern switch may be retired eventually. See also: /library. 3 /f77=list Use this setting to catch language extensions which violate the Fortran 77 Standard. Such extensions may cause your program not to be portable. Examples include the use of underscores in variable names; variable names longer than six characters; statement lines longer than 72 characters; and nonstandard statements such as the DO ... ENDDO structure. ftnchek does not report on the use of lowercase letters. By default, all warnings are turned off. This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the warnings about nonstandard exten- sions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /f77 is equivalent to /f77=all, and /nof77 is equivalent to /f77=none. The warning keywords with their meanings are as follows: accept-type: ACCEPT and TYPE I/O statements. array-bounds: Expressions defining array bounds that contain array elements or function references. assignment-stmt: Assignment statements involving arrays. In For- tran 90, an array can be assigned to another array of compati- ble shape, or a scalar can be assigned to an array. Neither of these assignments is permitted in Fortran 77. A related warning occurs when an array is assigned to a scalar. Since this is illegal also in Fortran 90, it is always warned about regardless of the /f77 setting (unless all checking is turned off with the /nocheck flag). attribute-based-decl: Type declarations in the new Fortran 90 at- tribute-based style. This style of declaration is distin- guished by the use of a double colon (::) between the list of attributes and the list of declared variables. This option also controls warnings for use of Fortran 90 length or kind specifiers in type declarations. (Although these specifiers can be used in non-attribute-based declarations, they are con- trolled by this option to avoid proliferation of /f77 op- tions.) automatic-array: Local (not dummy) arrays which have variable size. These would correspond to arrays whose storage would have to be dynamically allocated at run time. backslash: Unix backslash escape in strings. This warning will be given only if the /source=unix-backslash setting is specified to cause the escape interpretation of backslash.. byte: BYTE data type declaration. case-construct: The SELECT CASE construct. character: Extensions to the Fortran 77 standard regarding charac- ter data. At present, this only controls warnings about char- acter variables declared with zero or negative length. In Fortran 77, all character variables must be of positive length. In Fortran 90, they can be zero length, and declara- tions that specify negative lengths are permitted, turning in- to zero for the declared length. Note: because negative length specifiers may indicate a programming error, the warn- ing about them is given even if this option is turned off, and is suppressed only by the /nocheck flag. common-subprog-name: Common block and subprogram having the same name. construct-name: Use of a construct-name to label a control state- ment. continuation: More than 19 successive continuation lines. cpp: Unix C preprocessor directives in the source code. cray-pointer: ''Cray pointer'' syntax. cycle-exit: The CYCLE and EXIT statements. d-comment: Debugging comments starting with D in the source code. dec-tab: DEC Fortran style tab-formatted source code. This warn- ing will be given only if the /source=dec-tab setting is spec- ified to cause interpretation of tabs in this style. do-enddo: DO loop extensions: terminal statement label omitted, END DO, and WHILE. double-complex: Double precision complex datatype. format-dollarsign: Dollar sign control code in FORMAT statements. format-edit-descr: Nonstandard edit descriptors in FORMAT state- ments. function-noparen: Function definition without parentheses. implicit-none: IMPLICIT NONE statement. include: INCLUDE statement. inline-comment: Inline comments starting with an exclamation point. internal-list-io: List-directed I/O to or from an internal file. intrinsic: Nonstandard intrinsic functions. io-keywords Nonstandard keywords used in I/O statements. These fall into three groups. The first group includes keywords that are accepted in Fortran 90: ACTION PAD READWRITE ADVANCE POSITION SIZE DELIM READ WRITE EOR The second group comprises the following VMS Fortran keywords: BLOCKSIZE EXTENDSIZE READONLY BUFFERCOUNT INITIALSIZE RECORDSIZE CARRIAGECONTROL MAXREC RECORDTYPE DEFAULTFILE NAME (in OPEN) SHARED DISP NOSPANBLOCK TYPE DISPOSE ORGANIZATION (The keyword NAME is standard only in the INQUIRE statement.) The third group consists of the following IBM/MVS keyword: NUM This flag also controls a warning about use of ACCESS='AP- PEND', which is accepted by some compilers. The value of 'AP- PEND' is not valid for any I/O specifier in standard Fortran 77, and in Fortran 90 'APPEND' should be used as a value of the POSITION specifier, not ACCESS. long-line: Statements with meaningful code past 72 columns. This warning is given only if the /columns setting has been used to increase the statement field width. long-name: Identifiers over 6 characters long. mixed-common: Mixed character and noncharacter data in COMMON block. mixed-expr: Nonstandard type combinations in expressions, for ex- ample DOUBLE PRECISION with COMPLEX, assigning hollerith to integer, logical operations on integers. name-dollarsign: Dollar sign used as a character in identifiers. name-underscore: Underscore used as a character in identifiers. namelist: NAMELIST statement. param-implicit-type: Implicit typing of a parameter by the data type of the value assigned. This warning can only occur if implicit parameter typing has been turned on by the /source=param-implicit-type option, or if the PARAMETER state- ment is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parame- ter typing occurs will be warned about. If you want to be warned only in those instances where the implicit data type differs from the default type, use /portability=param-implic- it-type instead. According to the Fortran 77 standard, the data type of a parameter is given by the same rules as for a variable, and if necessary a type conversion is done when the value is assigned. param-intrinsic: Intrinsic function or exponentiation by a real used to define the value of a PARAMETER definition. param-noparen: PARAMETER statement without parentheses. The user should be aware that the semantics of this form of the state- ment differs from that of the standard form: in this form, the parameter takes its data type from the value assigned, rather than having its default data type based on the first letter of the parameter name. (This form of the PARAMETER statement was introduced by DEC before the Fortran 77 standard was defined, and should be avoided.) pointer: Fortran 90 standard pointer-related syntax, including POINTER, TARGET and ALLOCATABLE type declarations, ALLOCATE, DEALLOCATE, and NULLIFY statements, and pointer assignment us- ing =>. quad-constant: Quad precision real constants, e.g. of the form 1.23Q4. quotemark: Strings delimited by quote marks rather than apostro- phes. relops: Relational (comparison) operators composed of punctuation, namely: < <= == /= > >=. semicolon: Semicolon used as statement separator. statement-order: Statements out of the sequence mandated by the Standard. The allowed sequence is illustrated in Table 1 in the section on Interpreting the Output. typeless-constant: Typeless constants, for example Z'19AF'. type-size: Type declarations specifying a size, for example RE- AL*8. variable-format: Variable repeat specification or field size in FORMAT. These are of the form < expr >. vms-io: Obsolete. Now has the same meaning as the io-keywords keyword. See also: /f90, /f95, /portability, /pretty, /style, /wordsize. 3 /f90=list This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard that were not adopted as part of the Fortran 90 Standard. Note that ftnchek does not sup- port the full Fortran 90 language. However, it does support some common extensions to Fortran 77 that were prevalent before Fortran 90 was defined. Some of these extensions became part of the Fortran 90 Standard, but others did not. The /f90 setting warns only about the latter. That is, this flag covers things that are neither legal For- tran 77 nor legal Fortran 90. Therefore, the warnings controlled by this flag are basically a subset of the warnings controlled by /f77. There are a few cases, described below, where the circumstances in which the warning is given are slightly different for the two flags. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the warnings about nonstandard extensions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /f90 is equivalent to /f90=all, and /nof90 is equivalent to /f90=none. The following keywords have identical meanings for /f90 as for /f77. The reader is referred to the explanations under /f77. accept-type double-complex param-noparen backslash format-dollarsign cray-pointer byte format-edit-descr quad-constant cpp function-noparen type-size d-comment name-dollarsign variable-format dec-tab param-implicit-type vms-io The keywords which differ somewhat from the corresponding /f77 keywords are as follows. continuation: The limit on the number of continuation lines for a statement in fixed source form is the same, namely 19, in For- tran 90 as in Fortran 77. For free source form the limit is 39 continuation lines, and a line containing a continuation mark cannot be otherwise empty or contain only a comment. intrinsic: This is the same as for /f77 except for the intrinsic functions defined in MIL-STD 1753, which are all included in Fortran 90, and so are not warned about. (See /intrinsic for a list.) io-keywords: This is the same as for /f77 except that no warnings are given for the I/O keywords that are standard in Fortran 90. long-line: Although the Fortran 90 Standard allows lines longer than 72 characters in free source form, this restriction still applies to fixed source form. In free source form the line length limit is 132 characters, and unlike fixed form, ftnchek does not allow this limit to be increased. mixed-expr: This is the same as for /f77 except for expressions mixing extended precision real with complex data types, which are permitted in Fortran 90. statement-order: This is similar to the corresponding /f77 warn- ing, but applies the somewhat looser restrictions on statement order of the Fortran 90 Standard. In particular, Fortran 90 allows DATA statements and statement-function definitions to be intermixed with specification statements. typeless-constant: In Fortran 90, binary, octal, and hexadecimal constants of the form B'ddd', O'ddd', and Z'ddd', respective- ly, are permitted. Here 'ddd' represents a string of digits. ftnchek recognizes these forms, as well as a variant of the form X'ddd' for a hexadecimal constant, and other variants in which the base indicator B, O, Z, or X follows the digit string. These variants were not adopted in Fortran 90, so on- ly they are warned about when this flag is turned on. See also: /f77, /f95, /portability, /pretty, /style, /wordsize. 3 /f95=list This setting provides detailed control over warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Unlike the /f77 and /f90 settings, these warnings apply to syntax which is legal Fortran 77. However, since these features have been deleted from the Standard, it is possible that programs contain- ing them will be unacceptable to some newer compilers. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the warnings about nonstandard extensions, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /f95 is equivalent to /f95=all, and /nof95 is equivalent to /f95=none. The warning keywords with their meanings are as follows. real-do: A DO variable of any real numeric type. pause: The PAUSE statement. assign: The ASSIGN statement, assigned GOTO, or assigned format. h-edit: The H edit descriptor in a format. There is one other Fortran 77 syntax feature that was deleted in Fortran 95, namely branching to an ENDIF from outside the IF block. However, ftnchek is unable to analyze program flow, and so it does not provide a warning for this. See also: /f77, /f90, /portability, /pretty, /style, /wordsize. 3 /help Prints a list of all the command-line options with a short de- scription of each along with its default value. This command is identical in function to the ''?'' argument, and is provided as a convenience for those systems in which the question mark has special meaning to the command interpreter. Default = no. The help listing also prints the version number and patch level of ftnchek and a copyright notice. Note: the ''default'' values printed in square brackets in the help listing are, strictly speaking, not the built-in defaults but the current values after any environment options and any command-line options preceding the /help option have been processed. See also: /novice, /version, and help option of all settings that take a list of keywords. 3 /identifier-chars=list Define non-alphanumeric characters that may be used in identi- fiers. By default, ftnchek only accepts the dollar sign and under- score as non-alphanumeric characters in identifier names. The char- acters in the list replace whatever set of accepted non-alphanumeric characters was previously in effect. Thus, if dollar sign or under- score are not included in the list, they lose their status as accept- able characters. This option is provided to enable ftnchek to handle source files containing non-standard identifer names that may be needed, for exam- ple, to access certain operating system services. See the section on Limitations and Extensions for the treatment of identifiers contain- ing these characters in implicit typing. Using /noidentifer-chars turns off acceptance of non-alphanumer- ic characters entirely. See also: /source. 3 /include=path Specifies a directory to be searched for files specified by IN- CLUDE statements. Unlike other command-line options, this setting is cumulative; that is, if it is given more than once on the command line, all the directories so specified are placed on a list that will be searched in the same order as they are given. The order in which ftnchek searches for a file to be included is: the current directory; the directory specified by environment variable FTNCHEK_INCLUDE if any; the directories specified by any /include options; the directory specified by environment variable INCLUDE; and finally in a standard system-wide directory (/usr/include for UNIX, SYS$LIBRARY for VMS, and \include for MSDOS). See also: /f77, /source. 3 /intrinsic=list Controls whether ftnchek recognizes certain nonstandard intrin- sic functions as intrinsic. The list consists of keywords separated by commas or colons. Some of the keywords control whether to recog- nize certain groups of functions, and other keywords control the ex- pected syntax for invoking some nonstandard intrinsics. Include a keyword to turn on recognition of the corresponding set of intrinsics or to allow the corresponding syntax. Include a keyword prefixed by no- to turn off that recognition. There are three special keywords: all turns on recognition of all the nonstandard intrinsics (listed below) and accepts either syn- tax for those that have variations. Use none to turn off recognition of all nonstandard intrinsics except those noted below. Use help to print the list of all the keywords with a brief explanation of each. If list is omitted, /intrinsic is equivalent to /intrinsic=all, and /nointrinsic is equivalent to /intrinsic=none. The nonstandard intrinsic functions needed to support the non- standard extended precision data types (double complex and quad pre- cision) are always recognized. The intrinsics for the double complex data type are: CDABS CDSQRT DREAL ZLOG CDCOS DCMPLX IMAG ZSIN CDEXP DCONJG ZABS ZSQRT CDLOG DIMAG ZEXP ZCOS CDSIN The intrinsics for the quad precision and quad complex types are: CQABS QARCOS QEXT QNINT CQCOS QARSIN QEXTD QPROD CQEXP QATAN QFLOAT QREAL CQLOG QATAN2 QIMAG QSIGN CQSIN QCMPLX QINT QSIN CQSQRT QCONJG QLOG QSINH DBLEQ QCOS QLOG10 QSQRT IQINT QCOSH QMAX1 QTAN IQNINT QDIM QMIN1 QTANH QABS QEXP QMOD SNGLQ The keywords controlling recognition of other nonstandard intrinsic functions are as follows: extra: recognize the following commonly available nonstandard in- trinsics (all except EXIT and LOC are defined in MIL-STD 1753): BTEST IBCLR IEOR ISHFTC EXIT IBITS IOR LOC IAND IBSET ISHFT NOT unix: recognize these common Unix-specific intrinsic functions: ABORT GMTIME LTIME SRAND AND IARGC OR SYSTEM GETARG IRAND RAND TIME GETENV LSHIFT RSHIFT XOR vms: recognize these common VMS-specific intrinsic functions: DATE IDATE SECNDS TIME ERRSNS RAN SIZEOF iargc-no-argument: specify that IARGC may be invoked with no argu- ments. iargc-one-argument: specify that IARGC may be invoked with one ar- gument. rand-no-argument: specify that RAND and IRAND may be invoked with no arguments. rand-one-argument: specify that RAND and IRAND may be invoked with one argument. The no-argument and one-argument keywords work as follows: turn- ing the option on causes ftnchek to accept the corresponding syntax for invocation of the function, without excluding the possibility of the alternative syntax. Turning the option off causes the corre- sponding syntax not to be accepted. If both options are turned on at once (the default), then either syntax is accepted. Turning both op- tions off at once would not be meaningful. These options have no ef- fect if recognition of Unix intrinsics has been turned off. Note that this setting does not control whether non-standard warnings are issued about these functions. It controls whether the functions are assumed to be intrinsic or not, which determines how their usage is checked. When functions in any of these sets are in- cluded, their invocations will be checked according to the rules for the intrinsic functions; otherwise they will be checked as normal (user-written) external functions. The non-standard warnings are controlled by the /f77=intrinsic option. The default value of this setting is equivalent to /intrinsic=all,no-unix. Note: In versions of ftnchek prior to 2.10, the /intrinsic flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking ftnchek in this way, the numeric form is still accepted. The numeric form of the setting consists of three digits. The ones digit selects the set of intrin- sic functions to be supported. The digit 0 selects only Fortran 77 standard intrinsics plus those needed to support the nonstandard ex- tended precision data types. The digit 1 is equivalent to extra, 2 is equivalent to extra,unix, and 3 is equivalent to extra,vms. The tens digit of this setting controls the syntax of the RAND intrinsic function, and the hundreds digit controls the syntax of the IARGC function. For these digits, specify 0 to require invocation with no argument, 1 to require one argument, and 2 to allow either form. See also: /f77. 3 /library This switch is used when a number of subprograms are contained in a file, but not all of them are used by the application. Normal- ly, ftnchek warns you if any subprograms are defined but never used. This switch will suppress these warnings. Default = no. This switch also controls which subprogram calls and COMMON block declarations are checked. If a file is read with the /library flag in effect, the subprogram calls and COMMON declarations con- tained in a routine in that file will be checked only if that routine is in the main program's call tree. On the other hand, if the /li- brary switch is turned off, then ftnchek checks the calls of every routine by every other routine, regardless of whether those routines could ever actually be invoked at run time, and likewise all COMMON block declarations are compared for agreement. The difference between this switch and the /usage=no-ext-unused option for subprograms is that the latter suppresses only the warning about routines being declared but not used. The /library switch goes further and excludes unused routines processed while it is in effect from all cross-checking of arguments and COMMON block declarations as well. (If there is no main program anywhere in the set of files that ftnchek has read, so that there is no call tree, then ftnchek will look for any non-library routines that are not called by any other routine, and use these as substitutes for the main program in con- structing the call tree and deciding what to check. If no such top- level non-library routines are found, then all inter-module calls and all COMMON declarations will be checked.) See also: /arguments, /calltree, /common, /extern, /usage. 3 /list Specifies that a listing of the Fortran program is to be print- ed out with line numbers. If ftnchek detects an error, the error message follows the program line with a caret ( ^ ) specifying the location of the error. If no source listing was requested, ftnchek will still print out any line containing an error, to aid the user in determining where the error occurred. Default = no. See also: /output, \fB-symtab, fB-quiet. 3 /makedcls=list Prepare a neatly-formatted file of declarations of variables, common blocks, and namelist lists, for possible merging into the source code. The declarations are stored in a file of the same name as the source code, but with the extension changed to If no declara- tions are written to the file, it is deleted to reduce clutter from empty files. If input comes from standard input, instead of a named file, then declarations are written to standard output. Variables are declared in alphabetical order within each decla- ration class and type, with integer variables first, because of their later possible use in array dimensions. PARAMETER statements are an exception to the alphabetical order rule, because the Fortran 77 Standard requires that the expressions defining parameter values refer only to constants and already-defined parameter names. This forces the original source file order of such statements to be preserved in the declaration files. Explicit declaration of variables is considered good modern pro- gramming practice. By using compiler options to reject undeclared variables, misspelled variable names (or names extending past column 72) can be caught at compile time. Explicit declarations also great- ly facilitate changing floating-point precision with filters such as and These programs are capable of changing types of explicit float- ing-point type declarations, intrinsic functions, and constants, but because they do not carry out rigorous lexical and grammatical analy- sis of the Fortran source code, they cannot provide modified type declarations for undeclared variables. Default setting = 0, turn-on = 1. Various options for the form of the declarations file are con- trolled by the list, which consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /makedcls is equivalent to /makedcls=declarations (i.e. produce the declarations file using the default options), and /nomakedcls is equivalent to /makedcls=none. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number which is the sum of the numbers in parentheses beside the key- words in the following list. The warning keywords with their mean- ings are as follows: declarations (1): Write a declaration file. (This is implied by any of the other options, and can be omitted if any other op- tions are given.) undeclared-only (2): By default, all variables are included in the declaration file. With this option, include only variables. This setting is useful if you want to check for undeclared variables, since Fortran source files with all variables prop- erly declared will not result in a file. With this option, common blocks and namelist lists will not be included in the declaration file, since by their nature they cannot be unde- clared. compact (4): The declarations are normally prettyprinted to line up neatly in common columns, as in the declaration files out- put by the Extended PFORT Verifier, This option value selects instead compact output, without column alignment. use-continuation-lines (8): Causes continuation lines to be used where permissible. The default is to begin a new declaration on each line. This option is appropriate to use together with compact. keywords-lowercase (16): Output Fortran keywords in lowercase, in- stead of the default uppercase. vars-and-consts-lowercase (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. exclude-sftran3 (64): Omit declarations of internal integer vari- ables produced by the SFTRAN3 preprocessor, as part of the translation of structured Fortran statements to ordinary For- tran. These variables have six-character names of the form and where is a decimal digit. Because they are invisible in the SFTRAN3 source code, and will change if the SFTRAN3 code is modified, such variables should not be explicitly declared. Instead, they should just assume the default Fortran INTEGER data type based on their initial letter, asterisk-comment (128): Use an asterisk as the comment character; the default is otherwise 'C'. comment-char-lowercase (256): Use 'c' instead of 'C' or '*' as the comment character. suppress-array-dimensions (512): Suppress dimensioning of arrays in the generated declarations. This option is for use with code lacking type declarations, to allow the declaration files to be inserted without change into the code. Since the code will have dimension statements already, dimensioning the array variables in the type statements of the declaration file is redundant. This option should be used only in conjunction with option 2 = undeclared-only because otherwise any arrays that were dimensioned in a type statement will lose their di- mensioning. free-form (1024): Produce declarations in free source form. This mode is automatically used if the input source is free form. Use this option to produce declarations in free form even if the input is in fixed form. Free form declarations are in- dented only 2 columns instead of 6, use the exclamation mark as the comment character, and indicate continuation lines by an ampersand at the end of the line to be continued. The declaration files contain distinctive comments that mark the start and end of declarations for each program unit, to facilitate using text editor macros for merging the declarations back into the source code. The ftnchek distribution includes a program, dcl2inc, which pro- cesses declaration files to produce files containing declarations of all COMMON blocks, in a form suitable for use as INCLUDE files. See the man page for the details of its use. See also: /mkhtml. 3 /mkhtml=list Produce HTML documentation from source. Creates individual HTML files from ftnchek analysis and code comments. All comments immedi- ately preceding and following the function or subroutine definition are captured to the HTML file. No reformatting of source comments is performed other than stripping of FORTRAN comment characters. In ad- dition, the HTML file lists the local variables declared, common block variables used, functions and subroutines called, I/O unit us- age, and other information about each subprogram. Usually you will also want to specify /call=tree to create the root HTML file Call- Tree.html. (Perhaps this file should be named index.html.) Various options for the form of the HTML files are controlled by the list, which consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the key- words with a brief explanation of each. If list is omitted, /mkhtml is equivalent to /mkhtml=documents (i.e. produce the HTML document files using the default options), and /nomkhtmls is equivalent to /mkhtml=none. For the sake of simplicity, the options for /mkhtml are the same as those for /makedcls except for those that are inapplicable. Like- wise, a numeric form of this setting can be used, formed as the sum of the numbers in parentheses in the list below. The warning key- words with their meanings are as follows: documents (1): Create the HTML documents. (This is implied by any of the other options, and can be omitted if any other options are given.) compact (4): The declarations are normally prettyprinted to line up neatly in common columns. This option value selects in- stead compact output, without column alignment. use-continuation-lines (8): Causes continuation lines to be used instead of beginning a new declaration on each line. This op- tion is appropriate to use together with compact. keywords-lowercase (16): Output Fortran keywords in lowercase, in- stead of the default uppercase. vars-and-consts-lowercase (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. exclude-sftran3 (64): Omit declarations of internal integer vari- ables produced by the SFTRAN3 preprocessor, (See /makedcls for discussion.) suppress-array-dimensions (512): Suppress dimensioning of arrays in the generated declarations. This is normally undesirable, but is available if for some reason you do not want the array dimensions to appear in the HTML. free-form (1024): Produce variable declarations in free source form. This mode is automatically used if the input source is free form. This mainly affects the form of continuation lines if they are used. See also: /calltree, /makedcls. 3 /novice This flag is intended to provide more helpful output for begin- ners. It has two effects: (a) provides an extra message to the effect that a function that is used but not defined anywhere might be an array which the user forgot to declare in a DIMENSION statement (since the syntax of an array reference is the same as that of a function reference). (b) modifies the form of the error messages and warnings. If the flag is turned off by /nonovice, these messages are printed in a style more resembling UNIX lint. Default = yes. 3 /output=filename This setting is provided for convenience on systems which do not allow easy redirection of output from programs. When this set- ting is given, the output which normally appears on the screen will be sent instead to the named file. Note, however, that operational errors of ftnchek itself (e.g. out of space or cannot open file) will still be sent to the screen. The extension for the filename is op- tional, and if no extension is given, the extension .lis will be used. 3 /pointersize=num Specifies the size of a ''Cray pointer'' variable to be num bytes. Default = turn-on = 4 bytes. The pointer size is used to inform precision mismatch warnings involving pointer variables, for example when a pointer is assigned a value from an allocation routine, or passed as a subprogram parame- ter. See also: /f77, /portability, /truncation, /wordsize. 3 /portability=list ftnchek will give warnings for a variety of non-portable us- ages. Examples include the use of tabs except in comments or inside strings, the use of Hollerith constants, and the equivalencing of variables of different data types. This option does not produce warnings for supported extensions to the Fortran 77 Standard, which may also cause portability problems. To catch those, use the /f77 setting. By default, all warnings are turned off. This setting provides detailed control over the warnings about possible portability problems. The list consists of keywords sepa- rated by commas or colons. There are three special keywords: all to turn on all the warnings about nonportable usages, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /portability is equivalent to /portability=all, and /noportability is equivalent to /portabili- ty=none. The warning keywords with their meanings are as follows: backslash: Backslash character in strings. Since some compilers treat the backslash as an escape character, its presence can cause problems even though it is used in a standard-conforming way. common-alignment: COMMON block variables not in descending order of storage size. Some compilers require this ordering because of storage alignment requirements. hollerith: Hollerith constants (other than within FORMAT specifi- cations). The Hollerith data type is a feature of Fortran IV that has been deleted in the Fortran 77 standard. It is su- perseded by the character data type. Storing Hollerith data in variables of a numeric or logical data type is nonportable due to differing word sizes. long-string: String constants, variables, or expressions over 255 chars long. mixed-equivalence: Variables of different data types equivalenced. mixed-size: Variables declared with default precision used with variables given explicit precision, in expressions, assign- ments, or as arguments. For example, if a variable declared as REAL*8 is treated as equivalent to DOUBLE PRECISION. real-do: Non-integer DO loop index and bounds. These can cause a program's results to depend on the hardware characteristics of the particular computer used. param-implicit-type: Implicit typing of a parameter by the data type of the value assigned, if it differs from the default type. This warning can only occur if implicit parameter typ- ing has been turned on by the /source=param-implicit-type op- tion, or if the PARAMETER statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs and where the implicit type is different from the default type based on the first letter of the parameter name, will be warned about. Im- plicit parameter typing can change the semantics of statements where the parameter is used, causing portability problems. tab: Tabs in source code. Tabs are interpreted differently by different compilers. This warning will be given only once, at the end of the file. See also: /f77, /f90, /f95, /pretty, /style, /wordsize. 3 /pretty=list Controls certain messages related to the appearance of the source code. These warn about things that might make a program less readable or be deceptive to the reader. By default, all warnings are turned on. This setting provides detailed control over the warnings about appearance. The list consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword pre- fixed by no- to turn off a particular warning. There are three spe- cial keywords: all to turn on all the warnings about misleading ap- pearances, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omit- ted, /pretty is equivalent to /pretty=all, and /nopretty is equiva- lent to /pretty=none. The warning keywords with their meanings are as follows: alternate-return: A RETURN statement has a constant specifying an alternate return point that is not between 0 and the number of dummy arguments that are labels. This is legal, and has the same effect as a RETURN with no alternate return expression, but suggests that the programmer intended to use an alternate return label that is not provided. embedded-space: Space embedded in variable names or in multi-char- acter operators such as **. continuation: Continuation mark following a comment line. long-line: Lines (except comments) over 72 columns in width (be- yond 72 is normally ignored by compiler). missing-space: Lack of space between variable and a preceding key- word. multiple-common: COMMON block declared in multiple statements. No warning is given if the statements are consecutive except for comment lines. multiple-namelist: NAMELIST declared in multiple statements. No warning is given if the statements are consecutive except for comment lines. parentheses: Parentheses around a variable by itself. As a sub- program argument, this makes the argument an expression, not modifiable by the subprogram. Note that in free source form, extra space and missing space are forbidden by the Fortran 90 Standard, and are not mere style viola- tions. In this case the warnings are replaced by syntax error mes- sages, and can be turned off only by using /nocheck. See also: /f77, /portability, /style. 3 /project=list ftnchek will create a project file from each source file that is input while this option is turned on. The project file will be given the same name as the input file, but with the extension .f or .for replaced by .prj. (If input is from standard input, the project file is named Default = none. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the key- words with a brief explanation of each. If list is omitted, /project is equivalent to /project=all, and /noproject is equivalent to /project=none. The keywords with their meanings are as follows: create: Produce a project file. The default is not to produce a project file. If this option is not turned on, the other op- tions have no effect. trim-calls: Trim the amount of information stored in the project file about subprogram declarations and calls. This is the de- fault. Turn this option off only in rare situations. (See discussion below.) The amount of trimming varies depending on the /library flag. More information is trimmed if that flag is turned on. trim-common: Trim the number of common block declarations stored in the project file. This is the default. Turn this option off only in rare situations. (See discussion below.) This option has no effect if the /library flag is turned off: when not in library mode, no trimming of common block declarations is done regardless of this option. A project file contains a summary of information from the source file, for use in checking agreement among FUNCTION, SUBROUTINE, and COMMON usages in other files. It allows incremental checking, which saves time whenever you have a large set of files containing shared subroutines, most of which seldom change. You can run ftnchek once on each file with the /project flag set, creating the project files. Usually you would also set the /library and /noextern flags at this time, to suppress messages relating to consistency with other files. Only error messages pertaining to each file by itself will be printed at this time. Thereafter, run ftnchek without these flags on all the project files together, to check consistency among the different files. All messages internal to the individual files will now be omitted. Only when a file is altered will a new project file need to be made for it. Naturally, when the /project option is turned on, ftnchek will not read project files as input. Ordinarily, the trim options should be left on when you intend to create project files for future input to ftnchek. Since trimming is on by default, this means that simply giving the command /project with no option list is the recommended mode. The trim options are provided only as a convenience for those who want to make use of project files for purposes other than checking the program with ft- nchek. To use project files for their intended purpose, the trim op- tions should not be turned off. Project files contain only information needed for checking agreement between files. This means that a project file is of no use if all modules of the complete program are contained in a single file. A more detailed discussion is given in the section on Using Project Files. 3 /pure Assume functions are ''pure'', i.e., they will not have side effects by modifying their arguments or variables in a COMMON block. When this flag is in effect, ftnchek will base its determination of set and used status of the actual arguments on the assumption that arguments passed to a function are not altered. It will also issue a warning if a function is found to modify any of its arguments or any COMMON variables. Default = yes. When this flag is turned off, actual arguments passed to func- tions will be handled the same way as actual arguments passed to sub- routines. This means that ftnchek will assume that arguments may be modified by the functions. No warnings will be given if a function is found to have side effects. Because stricter checking is possible if functions are assumed to be pure, you should turn this flag off only if your program actually uses functions with side effects. 3 /quiet This option reduces the amount of output relating to normal op- eration, so that error messages are more apparent. This option is provided for the convenience of users who are checking large suites of files. The eliminated output includes the names of project files, and the message reporting that no syntax errors were found. It also eliminates some blank lines that are ordinarily included for clarity. (Some of this output is turned back on by the /list and /symtab op- tions.) Default = no. Note: the way to remember the difference between the /quiet and /brief is that /quiet doesn't suppress any warning-related informa- tion, whereas /brief does. See also: /brief. 3 /reference Specifies that a who-calls-who table be printed. This table lists each subprogram followed by a list of the routines it calls. This switch is equivalent to /calltree=reference. Default = no. The reference list omits routines called by unused library mod- ules. Thus it contains the same information as for the call-tree format, namely the hierarchy of subprogram calls, but printed in a different way. This prints out a breadth-first traversal of the call tree whereas /calltree=tree prints out a depth-first traversal. See also: /calltree, /crossref, /library, /sort, /symtab, /vcg. 3 /resources Prints the amount of resources used by ftnchek in processing the program. This listing may be useful in analyzing the size and complexity of a program. It can also help in choosing larger sizes for ftnchek's internal tables if they are too small to analyze a par- ticular program. Default = no. In this listing, the term ''chunk size'' is the size of the blocks of memory allocated to store the item in question, in units of the size of one item, not necessarily in bytes. When the initially allocated space is filled up, more memory is allocated in chunks of this size. The following is an explanation of the items printed: Total number of lines of code, with separate totals for statement lines and comment lines. Comment lines include lines with 'C' or '*' in column 1 as well as blank lines and lines containing only an inline comment. Statement lines are all other lines, including lines that have an inline comment following some code. Continuation lines are counted as separate lines. Lines in include files are counted each time the file is in- cluded. Number of statements in the program, other than specification, da- ta, statement-function, FORMAT, ENTRY, and END statements. A module is any external subprogram, including the main program, subroutines, functions, and block data units. This count is of modules defined within the source, not modules referenced. Statement functions are not included. A subprogram with mul- tiple entry points is only counted once. Number of labels attached to statements (often called statement numbers). The total label count for the entire program is given, as well as the maximum number in any single subprogram. Number of characters used for storing identifier names. An iden- tifier is a variable, subprogram, or common block name. Local names are those of local variables in a subprogram, whereas global names refer to subprogram and common block names, as well as dummy argument names and common variable names. Actu- al argument text (up to 15 characters for each argument) is also included here. The space used for local names is not re- covered at the end of each module, so this number, like global space, grows until the whole program is analyzed. Unfortu- nately, this figure may include some text stored more than once, although a heuristic is used that will avoid duplicates in many cases. A token is the smallest syntactic unit of the FORTRAN language above the level of individual characters. For instance a token can be a variable name, a numerical constant, a quoted text string, or a punctuation character. Token text is stored while a module is being processed. For technical reasons, single-character tokens are not included in this total. Items that are not represented in the symbol table may be duplicat- ed. The space for token text is recovered at the end of each module, so this figure represents the maximum for any one mod- ule. This is the largest number of entries in the local symbol table for any module. Local symbol table entries include all vari- ables and parameters, common block names, statement functions, external subprograms and intrinsic functions referenced by the module. Literal constants are not stored in the local symbol table. This is the number of entries in the global symbol table at the end of processing. Global symbol table entries include exter- nal subprogram and common block names. Intrinsic functions and statement functions are not included. A token list is a sequence of tokens representing the actual or dummy argument list of a subprogram, or the list of variables in a common block or namelist. Therefore this number repre- sents the largest sum of COMMON, CALL, NAMELIST and ENTRY statements and function invocations for any one module. The space is recovered at the end of each module. This is the largest number of tokens in all the token lists and token trees of any one module. A token tree is formed when analyzing an expression: each operand is a leaf of the tree, and the operators are the nodes. Therefore this number is a measure of the maximum complexity of an individual module. For instance a module with many long arithmetic expressions will have a high number. Note that unlike token text de- scribed above, the number of tokens is independent of the length of the variable names or literal constants in the ex- pressions. This is the sum over all modules of the number of CALL statements and function invocations (except intrinsic functions and statement functions). This is the sum over all modules of the number of common block declarations. That is, each declaration of a block in a dif- ferent module is counted separately. (The standard allows multiple declarations of a block within the same module; these are counted as only one declaration since they are equivalent to a single long declaration.) This is the sum over all modules of the number of array dimension and parameter definition text strings saved for use by the /makedcls option. The length of the text strings is not counted. Each dimension of a multidimensional array is count- ed separately. These numbers are obviously not the same when project files are used in place of the original source code. Even the numbers for global entities may be different, since some redundant information is eliminated in project files. 3 /sixchar One of the goals of the ftnchek program is to help users to write portable Fortran programs. One potential source of nonporta- bility is the use of variable names that are longer than six charac- ters. Some compilers just ignore the extra characters. This behav- ior could potentially lead to two different variables being consid- ered as the same. For instance, variables named AVERAGECOST and AV- ERAGEPRICE are the same in the first six characters. If you wish to catch such possible conflicts, use this flag. Default = no. Use the /f77=long-names if you want to list all variables longer than six characters, not just those pairs that are the same in the first six. See also: /f77, /portability. 3 /sort Specifies that a sorted list of all modules used in the program be printed. This list is in ''prerequisite'' order, i.e. each module is printed only after all the modules from which it is called have been printed. This is also called a ''topological sort'' of the call tree. Each module is listed only once. Routines that are not in the call tree of the main program are omitted. If there are any cycles in the call graph (illegal in standard Fortran) they will be detected and diagnosed. Default = no. See also: /calltree, /crossref, /reference, /symtab, /vcg. 3 /source=list This setting controls certain options about the form of the Fortran source code. The list consists of keywords separated by com- mas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omit- ted, /source is equivalent to /source=all, and /nosource is equiva- lent to /source=none. For compatibility with previous versions of ftnchek, a numeric form of this setting is also accepted: the list is replaced by a number which is the sum of the numbers in parentheses beside the key- words in the following list. (The fixed and free options do not have numeric values.) The warning keywords with their meanings are as follows: fixed: Interpret the source as fixed form (with supported exten- sions such as exclamation mark for comments). Statements must be in columns 7 to 72 (unless the /cols setting has been used to change this), and blanks are not significant outside char- acter context (but warned about under the /pretty option). This is the default mode unless the source file extension is .f90 or .F90. this option cannot be given together with /source=free. free: Interpret the source as free form. Statements may be any- where in columns 1 to 132, comments can only begin with an ex- clamation mark, and blanks are required in some places such as between identifiers and keywords. This is the default mode if the source file extension is .f90 or .F90. This option cannot be given together with /source=fixed or /source=dec-tab dec-tab (1): Accept DEC-style tab-formatted source. A line begin- ning with an initial tab will be treated as a new statement line unless the character after the tab is a nonzero digit, in which case it is treated as a continuation line. The next column after the tab or continuation mark is taken as column 7. A warning will be given in the case where the line is a continuation, if /f77=dec-tab is in effect. vms-include (2): Accept VMS-style INCLUDE statements. These fol- low the normal syntax, but with the following additional fea- tures: (1) the file extension, if not given, defaults to the same as a normal source file extension; and (2) the option /LIST or /NOLIST can be appended to the include-file name, to control listing of its contents. unix-backslash (4): Handle UNIX-style backslash escapes in charac- ter strings. The escape sequence following the backslash will be evaluated according to the ANSI standard for strings in C: up to three digits signify an octal value, an x signifies the start of a hexadecimal constant, any of the letters a b f n r t signify special control codes, and any other character (in- cluding newline) signifies the character itself. When this source code option is in effect, a warning will be given if the /f77=backslash setting is specified. The default behavior is to treat the backslash like any other normal character, but a warning about portability will be generated if the /portability flag is set. Because of the fact that some com- pilers treat the backslash in a nonstandard way, it is possible for standard-conforming programs to be non-portable if they use the back- slash character in strings. Since ftnchek does not do much with the interpreted string, it is seldom necessary to use this option. It is needed in order to avoid spurious warnings only if (a) the program being checked uses back- slash to embed an apostrophe or quote mark in a string instead of us- ing the standard mechanism of doubling the delimiter; (b) the back- slash is used to escape the end-of-line in order to continue a string across multiple source lines; or (c) a PARAMETER definition uses an intrinsic string function such as LEN with such a string as argument, and that value is later used to define array dimensions, etc. param-implicit-type (8): Implicit typing of a parameter by the da- ta type of the value assigned. Some non-standard compilers may allow the data type of the value to override the Fortran 77 default type of a parameter that is based on the first let- ter of the parameter name. This option only applies to PARAM- ETER statements of the standard form which has parentheses. A parameter that has been explicitly declared in a type state- ment prior to the PARAMETER statement is not affected by this option. A warning will be given under the /f77=param-implic- it-type or /portability=param-implicit-type option. Note that this implicit typing is treated as equivalent to an ex- plicit type declaration for the parameter. Therefore, if you use /makedcls=undeclared-only to generate declarations only of undeclared variables, these parameters will not be included. dec-param-standard-type (16): Follow the Fortran 77 rule for data typing of DEC Fortran style parameters. These are declared using a nonstandard form of the PARAMETER statement which lacks parentheses. According to DEC Fortran, parameters de- fined by this form of the statement have their data type given by the data type of the value assigned. Use this option to tell ftnchek not to follow this rule but instead to use the same rule as for standard PARAMETER statements. This option does not apply to PARAMETER statements of the standard form. By default, all these source code options are turned off, except for the vms-include option, which is on by default in the VMS ver- sion.. See also: /f77, /include, /portability. 3 /style=list Provides extra-picky warnings about obsolescent or old-fash- ioned programming constructions. This option is helpful for efforts to follow a modern programming style. (Most of the things complained about under this option are forbidden in the F subset language.) By default, all warnings are turned off. The list consists of keywords separated by commas or colons. There are three special keywords: all to turn on all the options, none to turn them all off, and help to print the list of all the key- words with a brief explanation of each. If list is omitted, /style is equivalent to /style=all, and /nostyle is equivalent to /style=none. The warning keywords with their meanings are as fol- lows: block-if: Complain about arithmetic IF statement. Accept block IF or logical IF (which controls a single statement). construct-name: Complain about unnamed block constructs: IF, DO, and SELECT CASE. Note that if a construct name is present on the opening statement of a construct, then it is required to be present on all other component statements (ELSE, END IF, etc.) of the construct. In that case a missing construct name on those statements generates a syntax error regardless of this option. The purpose of this option is to warn if the construct completely lacks the optional name. distinct-do: Complain if two DO loops share a common terminator statement. do-construct: Complain if terminator of a DO loop is anything oth- er than an END DO or CONTINUE statement. This is the require- ment in order for the loop to meet the Fortran 90 definition of a do-construct. do-enddo: Complain if terminator of a DO loop is anything other than an END DO statement. (This option overrides the do-con- struct option, being even stricter.) end-name: Complain about the absence of the subprogram name on structured END statements. format-stmt: Complain about the presence of FORMAT statements. Only the FORMAT statements themselves are flagged, not the references to them in I/O lists. goto: Complain about the presence of unconditional, computed or assigned GOTO statements. Also complain about alternate re- turns (but not about labels as subprogram arguments). labeled-stmt: Complain about the presence of labels (numbers) on statements other than FORMAT statements. (Since FORMAT state- ments are arguably convenient and not readily abused, com- plaints about them are controlled by the separate format-stmt keyword.) program-stmt: Complain about the absence of a PROGRAM statement at the head of the main program. structured-end: Complain about the use of a plain END statement to end a subprogram, rather than a structured END statement (END PROGRAM, END SUBROUTINE, END FUNCTION, or END BLOCK DATA). See also: /f77, /f90, /f95, /pretty, /portability. 3 /symtab A symbol table will be printed out for each module, listing all identifiers mentioned in the module. This table gives the name of each variable, its datatype, and the number of dimensions for arrays. An asterisk (*) indicates that the variable has been implicitly typed, rather than being named in an explicit type declaration state- ment. The table also lists all subprograms invoked by the module, all COMMON blocks declared, etc. Default = no. Also, for each module, a label table will be printed. The table lists each label defined in the module; the line on which said state- ment label is defined; and the statement type (executable, format, or specification). The labels are listed in sequential order. Also printed is a table describing the I/O units used by the module, together with information about how they are used: what oper- ations are performed, whether the access is sequential or direct, and whether the I/O is formatted or unformatted. See also: /calltree, /crossref, /list, /reference, /sort, /vcg. 3 /truncation=list Warn about possible truncation (or roundoff) errors. Most of these are related to integer arithmetic. By default, all warnings are turned on. This setting provides detailed control over the warnings about possible truncation errors. The list consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings about trunca- tion, none to turn them all off, and help to print the list of all the keywords with a brief explanation of each. If list is omitted, /truncation is equivalent to /truncation=all, and /notruncation is equivalent to /truncation=none. The warning keywords with their meanings are as follows: int-div-exponent: use of the result of integer division as an ex- ponent. This suggests that a real quotient is intended. An example would be writing X**(1/3) to evaluate the cube root of X. The correct expression is X**(1./3.). int-div-real: Conversion of an expression involving an integer di- vision to real. This suggests that a real quotient is intend- ed. int-div-zero: division in an integer constant expression that yields a result of zero. int-neg-power: exponentiation of an integer by a negative integer (which yields zero unless the base integer is 1 in magnitude). This suggests that a real base is intended. promotion: automatic conversion of a lower precision quantity to one of higher precision. The loss of accuracy for real vari- ables in this process is comparable to the corresponding demo- tion. No warning is given for promotion of integer quantities to real since this is ordinarily exact. real-do-index: use of a non-integer DO index in a loop with inte- ger bounds. An integer DO index with real bounds is always warned about regardless of this setting. real-subscript: use of a non-integer array subscript. significant-figures: overspecifying a single precision constant. This may indicate that a double precision constant was intend- ed. size-demotion: automatic conversion of a higher precision quantity to one of lower precision of the same type. This warning only occurs when an explicit size is used in declaring the type of one or both operands in an assignment. For example, a warning wil be issued where a REAL*8 variable is assigned to a REAL variable, if the default wordsize of 4 is in effect. A warn- ing is also issued if a long integer is assigned to a shorter one, for example, if an INTEGER expression is assigned to an INTEGER*2 variable. There is one exception to this last case, namely if the right hand side of the assignment is a small literal constant (less than 128). type-demotion: automatic conversion of a higher precision quantity to one of lower pre- cision of different type. This warning includes conversion of real quantities to integer, double precision to single preci- sion real, and assignment of a longer character string to a shorter one. The warnings about promotion and demotion also apply to complex constants, considering the precision to be that of the real or imagi- nary part. Warnings about promotions and demotions are given only when the conversion is done automatically, e.g. in expressions of mixed precision or in an assignment statement. If intrinsic func- tions such as INT are used to perform the conversion, no warning is given. See also: /portability, /wordsize. 3 /usage=list Warn about unused or possible uninitialized variables, unused common blocks, undefined or unused statement labels, and unused or undefined subprograms. By default, all warnings are turned on. This setting provides detailed control over the warnings about possible usage errors. The list consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by no- to turn off a particular warning. There are three special keywords: all to turn on all the warnings about usage, none to turn them all off, and help to print the list of all the key- words with a brief explanation of each. If list is omitted, /usage is equivalent to /usage=all, and /nousage is equivalent to /us- age=none. These warnings cover four main categories of objects: sub- program dummy arguments, common blocks and variables, subprograms and functions, and local variables. Warnings include undefined items, multiply defined items, unused items, etc. The warning keywords with their meanings are as follows: arg-alias: a scalar dummy argument is actually the same as another and is (or may be) modified. The Fortran 77 standard (section 15.9.3.6) prohibits modifying an argument that is aliased to another. arg-array-alias: a dummy argument which is an array or array ele- ment is in the same array as another and is modified. This flag is similar to arg-alias but provides separate control over array arguments. It is harder to tell if aliasing is oc- curring in the case of arrays, so if ftnchek gives too many false warnings, this flag allows the array-related ones to be turned off without suppressing the warnings for scalars. arg-common-alias: a scalar dummy argument is the same as a common variable in the subprogram, and either is modified. This is also prohibited by the Fortran 77 standard. If common check- ing is not exact (see the /common setting), it is harder to tell if aliasing is occurring, so the warning is given if the variable is anywhere in a common block that is declared by the subprogram. arg-common-array-alias: a dummy argument which is an array or ar- ray element is in the same array as a common variable, and ei- ther is modified. If common checking is not exact, the vari- able can be anywhere in a common block that is declared by the subprogram. arg-const-modified: a subprogram modifies an argument which is a constant or an expression. Such an action could cause anoma- lous behavior of the program. arg-unused: a dummy argument is declared but never used. This is similar to the var-unused keyword described below, but applies only to arguments. com-block-unused: a common block is declared but none of the vari- ables in it are used by any subprogram. This warning is sup- pressed if the common strictness setting is 0. com-block-volatile: a common block may lose the definition of its contents if common blocks are volatile. This option only has an effect if the /common=volatile flag is in effect. See the discussion of the /common setting above. com-var-set-unused: a common variable is assigned a value, but its value is not used by any subprogram. This warning is sup- pressed if the common strictness setting is 0. com-var-uninitialized: a common variable's value is used in some subprogram, but is not set anywhere. Unfortunately, ftnchek does not do a thorough enough analysis of the calling sequence to know which routines are called before others. So warnings about this type of error will only be given for cases in which a variable is used in some routine but not set in any other routine. Checking of individual COMMON variables is done on- ly if the /common setting is 3 (variable by variable agree- ment). This warning is suppressed if the common strictness setting is 0. com-var-unused: a common variable is declared but not used by any subprogram. This warning is suppressed if the common strict- ness setting is 0. do-index-modified: a variable that is the index of a DO loop is modified by some statement within the range of the loop. The Standard permits an active DO variable to be modified only by the incrementation mechanism of the DO statement. ext-multiply-defined: an external (a subroutine or function) is defined more than once. Definition of an external means pro- viding the body of its source code. ext-declared-only: a name is declared in an EXTERNAL statement in some module, but is not defined or used anywhere. ext-undefined: an external is used (invoked) but not defined any- where. This option is equivalent to the /external flag. If the subprogram is invoked more than once, those invocations will still be checked for consistency. ext-unused: an external is defined (its subprogram body is present) but it is not used. A subprogram is considered un- used even if it is invoked by some other subprogram, if it cannot be called from any thread of execution starting with the main program. The agreement of the subprogram's arguments with its invocations is still checked even if this warning is turned off. If there is no main program, then this warning is issued only if the subprogram is not invoked anywhere. This warning is suppressed in library mode, but library mode has the additional effect of suppressing argument checking for un- used routines. label-undefined: a statement refers to a label that has not been defined. label-unused: a statement label is defined, but never referred to. var-set-unused: a local variable is assigned a value, but that value is not used. var-uninitialized: a local variable's value may be used before it is assigned. Sometimes ftnchek makes a mistake in the warn- ings about local variable usage. Usually it errs on the side of giving a warning where no problem exists, but in rare cases it may fail to warn where the problem does exist. See the section on Bugs for examples. If variables are equivalenced, the rule used by ftnchek is that a reference to any variable implies the same reference to all variables it is equivalenced to. For arrays, the rule is that a reference to any array el- ement is treated as a reference to all elements of the array. var-unused: a local variable is declared (for instance, in a type declaration) but is not used in the module. Does not apply to dummy arguments: warnings about them are controlled by the keyword arg-unused described above. Note: In versions of ftnchek prior to 2.10, the /usage flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking ftnchek in this way, the numeric form is still accepted. The numeric setting is composed of three digits. The first digit (hundreds place) controls warnings about subprograms (functions and subroutines), the second digit (tens place) warnings about common blocks and common variables,, and the third digit (ones place) warnings about local variables. Each digit controls warnings according to the convention that a 1 means warn about undefined items and variables that are used before set, a 2 means warn about items that are unused, and a 3 means warn about both types. These numbers are now converted to the appropriate values for the above-listed keywords, except for com-block-volatile, which is not affected by the numeric argument. See also: /common, /declare, /extern, /library. 3 /vcg Produce the call graph in the form of a VCG graph description. This description is written to a separate file, with the same stem as the file containing the main program, and suffix This file is able to be given directly to to visualize the call graph. (If input is from the standard input, then the graph description is sent to standard output.) This switch is equivalent to /calltree=vcg. Default = no. The VCG description as created is more complex than it need be. VCG allows graphs and nested subgraphs: each subroutine is created as a subgraph nested inside its calling routines. This allows you to interactively display subgraphs or summarise them. The option for was written by Dr. Philip Rubini of Cranfield University, UK. xvcg is a graph visualisation tool which runs under the X win- dows system. It is freely available from ftp.cs.uni-sb.de. It was written by G. Sander of the University of Saarland, Germany. See also: /calltree, /crossref, /reference, /sort. 3 /version This option causes ftnchek to print a line giving the version number, release date, and patch level of the program. If no files are given, it then exits. If files are given, the effect of this op- tion is to include the patch level (normally omitted) in the version information printed at the start of processing. Default = no. See also: /help. 3 /volatile Assume that COMMON blocks are volatile. Default = no. This flag is superseded by /common=volatile, and should no longer be used. It may be eliminated in a future release of ftnchek. See also: /common, /usage. 3 /wordsize=num Specifies the default word size to be num bytes. This is the size of logical and single-precision numeric variables that are not given explicit precisions. (Explicit precisions for non-character variables are an extension to the Fortran 77 Standard, and are given by type declarations such as REAL*8 X.) Double-precision and complex variables will be twice this value, and double complex variables four times. Quad-precision constants and intrinsic function results will be four times this value. Note that variables declared as REAL*16 will be regarded as quad precision only if the word size is 4 bytes. Default = turn-on = 4 bytes. The word size value does not matter for checking standard-con- forming programs that do not declare explicit precisions for non- character variables or store Hollerith data in variables. This set- ting also does not affect the default size of character variables, which is always 1 byte. Hollerith constants also are assumed to oc- cupy 1 byte per character. The word size is used to determine whether truncation occurs in assignment statements, and to catch precision mismatches in subpro- gram argument lists and common block lists. The exact warnings that are issued will depend on the status of other flags. Under both the /portability=mixed-size and the /nowordsize flag, any mixing of ex- plicit with default precision objects (character expressions not in- cluded) is warned about. This applies to arithmetic expressions con- taining both types of objects, and to subprogram arguments and COMMON variables. Under control of the /truncation=demotion and promotion options, a warning is given for assignment of an expression to a shorter variable of the same type, or for promotion of a lower preci- sion value to higher precision in an arithmetic expression or an as- signment statement. Giving a word size of 0, or equivalently, using /nowordsize means that no default value will be assumed. This is equivalent to specifying /portability=mixed-size. Use it to find cases of mixing default and explicit precision, for example to flag places where RE- AL*8 is treated as equivalent to DOUBLE PRECISION. See also: /pointersize, /portability, /truncation. 3 /wrap=col Controls the wrapping of error messages. Long error messages that would run past the specified column will be broken up into sepa- rate lines between the words of the message for better readability. If turned off with /nowrap, each separate error message will be printed on one line, leaving it up to the display to wrap the message or truncate it. Default = turn-on = 79. 2 Changing_the_defaults ftnchek includes two mechanisms for changing the default values of all options: by defining environment variables or by creating a preferences file. When ftnchek starts up, it looks in its environ- ment for any variables whose names are composed by prefixing the string FTNCHEK_ onto the uppercased version of the option name. If such a variable is found, its value is used to specify the default for the corresponding switch or setting. In the case of settings (for example, the /common strictness setting) the value of the envi- ronment variable is read as the default setting value. In the case of switches, the default switch will be taken as true or yes unless the environment variable has the value 0 or NO. Note that the environment variable name must be constructed with the full-length option name, which must be in uppercase. For exam- ple, to make ftnchek print a source listing by default, set the envi- ronment variable FTNCHEK_LIST to 1 or YES or anything other than 0 or NO. The names FTNCHEK_LIS (not the full option name) or ftnchek_list (lower case) would not be recognized. The way to set the environment variables on the VMS system is by us- ing the DEFINE command. For example, to set the default /list switch to YES, give the command $ DEFINE FTNCHEK_LIST 1 After processing any environment variables, ftnchek looks for a preferences file containing options and settings. It will search in the following order, using only the first file found: (1) .ftnchekrc in the current directory, (2) ftnchek.ini in the current directory, (3) .ftnchekrc in the user's home directory, (4) ftnchek.ini in the home directory. If such a file is found, the options defined in it are used as defaults in place of the built-in defaults and overriding any defaults set in the environment.. Each option or setting in the preferences file must be on a sep- arate line. They are given in the same form as on the command line, except without the initial slash. The preferences file can contain blank lines and comments. Comments are introduced at any point in a line by a space character (blank or tab) or the '#' character, and are terminated by the end of the line. Command-line options override the defaults set in the environ- ment or in the preferences file, in the same way as they override the built-in defaults. 2 Project_files This section contains detailed information on how to use project files most effectively, and how to avoid some pitfalls. One can divide the checks ftnchek does into two categories, lo- cal and global. Local checking is restricted to within a single rou- tine, and catches things like uninitialized variables, unintended loss of precision in arithmetic expressions, etc. This sort of checking can be done on each subprogram independently. Furthermore, local checking of a subprogram does not need to be repeated when some other subprogram is changed. Global checking catches things like calling a subroutine with the wrong argument types, or disagreeing in common block declarations. It requires looking at the whole set of subprograms interacting with each other. The purpose of project files is to allow the local checking and global checking steps to be separated. Assuming that each subprogram is in its own source file, you can run ftnchek once on each one to do local checking while suppressing global checking. Then ftnchek can be run once on all the project files together to do the global check- ing. The sample makefile below shows how to automate this task. The ''.f.prj'' target updates a project file for a particular file any time the source file changes. The information needed for global checking is saved in the project file. The ''check'' target does the combined global checking. Typically ''make check'' would repeat the ''ftnchek /project'' step only on changed source files, then do the global check. This is obviously a big advantage for large programs, when many subprograms seldom if ever change. It is best when using project files to place each subprogram in a separate source file. If each source file may contain more than one subprogram, it complicates the definition of ''local'' and ''global'' checking because there is some inter-module checking that is contained within a file. ftnchek tries to do the right thing in this case, but there are some complications (described below) due to the trade-off between avoiding re-doing cross-checks and preserving information about the program's structure. Ordinarily, to do the least amount of re-checking, project files should be created with the /library flag in effect and trimming turned on. In this mode, the information saved in the project file consists of all subprogram declarations, all subprogram invocations not resolved by declarations in the same file, and one instance of each COMMON block declaration. This is the minimum amount of infor- mation needed to check agreement between files. If the source file contains more than one routine, there are some possible problems that can arise from creating the project file in library mode, because the calling hierarchy among routines defined within the file is lost. Also, if the routines in the file make use of COMMON blocks that are shared with routines in other files, there will not be enough information saved for the correct checking of set and used status of COMMON blocks and COMMON variables according to the /usage setting. Therefore if you plan to use project files when /usage checking is turned on (which is the default situation), and if multiple routines in one project file share COMMON blocks with rou- tines in other files, the project files should be created with the /library flag turned off. In this mode, ftnchek saves, besides the information listed above, one invocation of each subprogram by any other subprogram in the same file, and all COMMON block declarations. This means that the project file will be larger than necessary, and that when it is read in, ftnchek may repeat some inter-module checks that it already did when the project file was created. If each project file contains only one module, there is no loss of informa- tion in creating the project files in library mode. Because of the possible loss of information entailed by creating a project file with the /library flag in effect, whenever that project file is read in later, it will be treated as a library file regardless of the current setting of the /library flag. On the other hand, a project file created with library mode turned off can be read in later in either mode. The foregoing discussion assumes that the trimming options of the /project setting are turned on when the project file is created. This is the normal situation. The no-trim options of the /project setting are provided in case one wants to use the project files for purposes other than checking the program with ftnchek. For instance, one could write a Perl script to analyze the project files for infor- mation about how the different subprograms are called. You should not use the no-trim options to deal with the issues of information loss discussed above, since they cause more information than neces- sary to be stored. This makes the project files bigger and causes ftnchek to do more work later when it reads them to check your com- plete program. Ordinarily, you should use the /library option to control how much information to store for later use by ftnchek in checking your program. ftnchek-3.3.1/ftnchek.man0000644000031000002260000056235310201524022015677 0ustar moniotstaff00000000000000.TH "FTNCHEK 3.3" 1L "November 2004" .\" ==================================================================== .\" @Troff-man-file{ .\" author = "Robert K. Moniot", .\" version = "3.3", .\" date = "10 Nov 2004" .\" time = "12:00:00 EST", .\" filename = "ftnchek.man", .\" address = "Fordham University .\" New York, NY 10023 .\" USA", .\" telephone = "+1 212 636 6302", .\" email = "moniot@fordham.edu", .\" codetable = "ISO/ASCII", .\" keywords = "Fortran 77, syntax check, type declarations", .\" supported = "yes", .\" docstring = "This file is the source for the UNIX manual .\" page document (ftnchek.1), and is also used to .\" generate the flat ASCII version of the .\" documentation (ftnchek.doc), the PostScript .\" version (ftnchek.ps), the HTML version, the blurb .\" used for informational mailings (blurb.txt), and .\" the VMS HELP document (ftnchek.hlp) used to make a .\" HELP library file. For the latter, define the .\" number register ``h'' to be nonzero (nroff -rh1), .\" and filter the output thru col (see the Makefile). .\" The blurb is created by setting number register .\" ``b'' nonzero (nroff -rb1). The different text .\" blocks for these variations are set off using .\" .if reg-name ... where reg-name is .\" \nb for the blurb and \nh for the HELP document. .\" The HTML version is produced using rman, whose .\" output is lightly edited (using patch) and then .\" split up and put into the html directory by .\" the shell script make_html.sh. .\" .\" If the next line after these comments is not .\" ``.ie \nh \{'' then the HELP and blurb .\" materials have been removed and this file is .\" ftnchek.1. You should edit only ftnchek.man .\" and remake ftnchek.1 et al from it." .\" .\" } .\" ==================================================================== .ie \nh \{ .po 0 .ll 70 .de PP .in 1 .ti +5 .. .de IP .in 1 .ti 5 .sp 1 .. .de TP .in 8 .ti -4 .. .de RE .in 1 .. .in 0 1 FTNCHEK .PP \} .el \{ .SH "NAME" \} ftnchek \- Fortran 77 program checker .if !\nh \{ .SH "SYNOPSIS" .B ftnchek [ .BR \-arguments [=\fIlist\fP] ] [ .BR \-array [=\fIlist\fP] ] .if n .ti +5 [ .BR \- [ no ] brief ] [ .BR \-calltree [=\fIlist\fP] ] [ .BR \- [ no ] check ] .if n .ti +5 .if t .ti +.5i [ .BR \-columns [=\fInum\fP] ] [ .BR \-common [=\fIlist\fP] ] .if n .ti +5 [ .BR \- [ no ] crossref [=\fIlist\fP] ] [ .BR \- [ no ] declare ] .if n .ti +5 .if t .ti +.5i [ .BR \- [ no ] division ] [ .BR \-errors [=\fInum\fP] ] [ .BR \- [ no ] extern ] .if n .ti +5 [ .BR \- [ no ] f77 [ = \fIlist\fP] ] [ .BR \- [ no ] f90 [ = \fIlist\fP] ] .if n .ti +5 .if t .ti +.5i [ .BR \- [ no ] f95 [ = \fIlist\fP] ] [ .BR \- [ no ] help ] .if n .ti +5 [ .BR \- [ no ] identifier\-chars [ = \fIlist\fP] ] [ .BI \-include= \fIstr\fP ] .if n .ti +5 .if t .ti +.5i [ .BR \-intrinsic [=\fIlist\fP] ] [ .BR \- [ no ] library ] [ .BR \- [ no ] list ] .if n .ti +5 [ .BR \-makedcls [=\fIlist\fP] ] [ .BR \-mkhtml [=\fIlist\fP] ] .if t .ti +.5i .if n .ti +5 [ .BR \- [ no ] novice ] [ .BI \-output= str ] .if n .ti +5 [ .BR \-pointersize [=\fInum\fP] ] [ .BR \- [ no ] portability [ = \fIlist\fP] ] .if t .ti +.5i .if n .ti +5 [ .BR \- [ no ] pretty [ = \fIlist\fP] ] [ .BR \-project [=\fIlist\fP] ] .if n .ti +5 [ .BR \- [ no ] pure ] [ .BR \- [ no ] quiet ] [ .BR \- [ no ] reference ] .if t .ti +.5i .if n .ti +5 [ .BR \- [ no ] resources ] [ .BR \- [ no ] sixchar ] [ .BR \- [ no ] sort ] .if n .ti +5 [ .BR \-source [=\fIlist\fP] ] [ .BR \-style [=\fIlist\fP] ] .if t .ti +.5i [ .BR \- [ no ] symtab ] .if n .ti +5 [ .BR \- [ no ] truncation [ = \fIlist\fP] ] [ .BR \-usage [=\fIlist\fP] ] .if n .ti +5 [ .BR \- [ no ] vcg ] [ .BR \- [ no ] version ] .if t .ti +.5i [ .BR \- [ no ] volatile ] .if n .ti +5 [ .BR \-wordsize [=\fInum\fP] ] [ .BR \-wrap [=\fInum\fP] ] [ .I files ... ] \} .ie \nh \{ .in 0 2 Introduction \} .el \{ .SH "DESCRIPTION" \} .PP \fBftnchek\fP (short for Fortran checker) is designed to detect certain errors in a Fortran program that a compiler usually does not. \fBftnchek\fP is not primarily intended to detect syntax errors. Its purpose is to assist the user in finding semantic errors. Semantic errors are legal in the Fortran language but are wasteful or may cause incorrect operation. For example, variables which are never used may indicate some omission in the program; uninitialized variables contain garbage which may cause incorrect results to be calculated; and variables which are not declared may not have the intended type. \fBftnchek\fP is intended to assist users in the debugging of their Fortran program. It is not intended to catch all syntax errors. This is the function of the compiler. Prior to using \fBftnchek\fP, the user should verify that the program compiles correctly. .ie \nh \{ For more detailed information, consult the printed documentation. \} .el \{ .\" Omit the following paragraph from the blurb .if !\nb \{ .PP This document first summarizes how to invoke \fBftnchek\fP. That section should be read before beginning to use \fBftnchek\fP. Later sections describe \fBftnchek\fP's options in more detail, give an example of its use, and explain how to interpret the output. The final sections mention the limitations and known bugs in \fBftnchek\fP. \} .\" End of paragraph omitted from the blurb .SH "INVOKING FTNCHEK" \} .if \nh \{ .in 0 2 Invoking_Ftnchek .PP \} \fBftnchek\fP is invoked through a command of the form: .sp 1 .ce 1 \fC$ ftnchek [-option -option ...] filename [filename ...]\fR .PP The brackets indicate something which is optional. The brackets themselves are not actually typed. Here options are command-line switches or settings, which control the operation of the program and the amount of information that will be printed out. If no option is specified, the default action is to print error messages, warnings, and informational messages, but not the program listing or symbol tables. .PP .ie \nh \{ Each option begins with the '/' character. (\fBftnchek\fP also allows the '-' character to be used.) \} .el \{ Each option begins with the '\-' character. (On VAX/VMS or MS-DOS systems you may use either '/' or '\-'.) For the sake of conformity with an increasingly common convention, options can also begin with '\-\-'. The options are described at greater length in the next section. \} .PP \fBftnchek\fP options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch is prefixed by 'no' or 'no-' to turn it off: e.g. \fB\-nopure\fP would turn off the warnings about impure functions. The 'no' prefix can also be used with numeric settings, having the effect of turning off the corresponding warnings. Settings that control lists of warnings have a special syntax discussed below. Only the first 3 characters of an option name (not counting .ie \nh the '/') .el the '\-') need be provided. A colon may be used in place of an equals sign for numeric or string setting assignments; however, we show only the equals sign form below. .if !\nh \{ .PP The switches and settings which \fBftnchek\fP currently recognizes are listed below. For each option, the default is the value used if the option is not explicitly specified, while the turn-on is the value used if the option is given without assigning it a value. .TP .BI \-arguments= list Control warnings about subprogram type and argument mismatches. Default = turn-on = all. .TP .BI \-array= list Control warnings in checking array arguments of subprograms. Default = turn-on = all. .TP .BI \-brief Use shorter format for some error messages. Default = no. .TP .BI \-calltree= list Produce subprogram call hierarchy in one of 3 formats: text call-tree, who-calls-who and VCG. Default = none, turn-on = tree,prune,sort. .sp 1 If the \fB\-mkhtml\fP option is invoked \fIand\fP tree is the applied calltree option, a file named \fCCallTree.html\fR, will be produced depicting the tree in HTML format. .TP .B \-check Perform checking. Default = yes. .TP .BI \-columns= num Set maximum line length to \fInum\fP columns. (Beyond this is ignored.) Turn-on = max = 132. Default = 72. .TP .BI \-common= list Set degree of strictness in checking COMMON blocks. Default = turn-on = all. .TP .BI \-crossref= list Print cross-reference list of subprogram calls, label usage, and/or COMMON block use. Default = none. .TP .B \-declare Print a list of all identifiers whose datatype is not explicitly declared. Default = no. .TP .B \-division Warn wherever division is done (except division by a constant). Default = no. .TP .BI \-errors= num Set the maximum number of error messages per cascade. Default = turn-on = 3. .TP .B \-extern Warn if external subprograms which are invoked are never defined. Default = yes. .TP .BI \-f77= list Control specific warnings about supported extensions to the Fortran 77 Standard. Default = none, turn-on = all. .TP .BI \-f90= list Control specific warnings about supported extensions to the Fortran 77 Standard that were not adopted as part of the Fortran 90 Standard. Default = none, turn-on = all. .TP .BI \-f95= list Control specific warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Default = none, turn-on = all. .TP .B \-help Print command summary. Default = no. .TP .BI \-identifier\-chars= list Define non-alphanumeric characters that may be used in identifiers. Default = turn-on = dollar sign and underscore. .TP .BI \-include= path Define a directory to search for INCLUDE files before searching in the system-wide directory. Cumulative. Default = turn-on = none. .TP .BI \-intrinsic= list Control treatment of nonstandard intrinsic functions. Default = all except \fBvms\fP for Unix version, all except \fBunix\fP for VMS version, all except \fBunix\fP and \fBvms\fP for other versions. Turn-on = all. .TP .B \-library Begin library mode: do not warn about subprograms in file that are defined but never used. Default = no. .TP .B \-list Print source listing of program. Default = no. .TP .BI \-makedcls= list Prepare a file of declarations. The \fIlist\fP specifies options for the format of this file. Default = none, turn-on = declarations. .TP .BI \-mkhtml= list Create individual HTML document files from ftnchek analysis and code comments. Usually you will also want to specify \fB\-call=tree\fP to create the root HTML file \fCCallTree.html\fR. Default = none, turn-on = documents. .TP .B \-novice Give output suitable for novice users. Default = yes. .TP .BI \-output= filename Send output to the given file. Default and turn-on sends output to the screen. (Default filename extension is \fI.\|lis\fP). .TP .BI \-pointersize= num Set the size of ``Cray pointer'' variables to \fInum\fP bytes. Min = 1, max = 16. Default = turn-on = 4 .TP .BI \-portability= list Warn about non-portable usages. Default = none, turn-on = all. .TP .BI \-pretty= list Give warnings for possibly misleading appearance of source code. Default = turn-on = all. .TP .BI \-project= list Create project file (see explanation below). Default = no. .TP .B \-pure Assume functions are pure, i.e. have no side effects. Default = yes. .TP .B \-quiet Produce less verbose output. Default = no. .TP .B \-reference Print table of subprograms referenced by each subprogram. Default = no. .TP .B \-resources Print amount of resources used in analyzing the program. Default = no. .TP .B \-sixchar List any variable names which clash at 6 characters length. Default = no. .TP .B \-sort Print list of subprograms sorted in prerequisite order. Default = no. .TP .BI \-source= list Select source formatting options: fixed or free form, DEC Fortran tab-formatted lines, VMS-style INCLUDE statement, UNIX-style backslash escape sequences, and implicit typing of parameters. Default = none, turn-on = all. .TP .BI \-style= list Produce extra-picky warnings about obsolescent or old-fashioned programming constructions. Default = none, turn-on = all. .TP .B \-symtab Print symbol table and label table for each subprogram. Default = no. .TP .BI \-truncation= list Check for possible loss of accuracy by truncation. Default = turn-on = all. .TP .BI \-usage= list Control warnings about unused or uninitialized variables, common blocks, etc. Default = turn-on = all. .TP .B \-vcg Produce VCG format of call graph. .TP .B \-version Print version number. Default = no. .TP .B \-volatile Assume COMMON blocks lose definition between activations. Default = no. (Obsolete. Use \fB\-common=volatile\fP instead.) .TP .BI \-wordsize= num Set the default word size for numeric quantities to \fInum\fP bytes. Default = turn-on = 4 bytes. .TP .BI \-wrap= num Set output column at which to wrap long error messages and warnings to the next line. If set to 0, turn off wrapping. Default = turn-on = 79. \} .PP .ie \nh \{ When more than one option is used, they should be separated by a blank space. \} .el \{ When more than one option is used, they should be separated by a blank space, except on systems such as VMS where options begin with slash ( / ). \} No blank spaces may be placed around the equals sign ( = ) in a setting. \fCftnchek "?"\fR will produce a command summary listing all options and settings. .PP For settings that take a list of keywords, namely \fB\-arguments\fP, \fB\-array\fP, \fB\-calltree\fP, \fB\-common\fP, \fB\-crossref\fP, \fB\-f77\fP, \fB\-f90\fP, \fB\-f95\fP, \fB\-intrinsic\fP, \fB\-makedcls\fP, \fB\-mkhtml\fP, \fB\-portability\fP, \fB\-pretty\fP, \fB\-project\fP, \fB\-source\fP, \fB\-style\fP, \fB\-truncation\fP, and \fB\-usage\fP, the list consists of keywords separated by commas or colons. If the list of keywords is omitted, the effect is to set the option to its turn-on value (same as ``all'' in most cases). Also, if the list is omitted, the setting name can be prefixed with \fBno\fP or \fBno\-\fP to turn off all the options it controls. For example, \fB\-f77\fP turns on all warnings about nonstandard constructions, while \fB\-nof77\fP turns them all off. Three special keywords are: .TP \fBhelp\fP Print out all the option keywords controlled by the setting, with a brief explanation of their meanings. This keyword cannot be given in a list with other keywords. .TP \fBall\fP Set all options. This turns on all options controlled by the setting. .TP \fBnone\fP Clear all options. This turns off all options controlled by the setting. .PP These three special keywords must be given in full. For all other keywords, only as many letters of the keyword as are necessary to identify it unambiguously need be given, or a wildcard pattern may be used. Including a keyword in the list turns the corresponding option on. For example, \fB\-f77=intrinsic\fP would turn on only the warnings about use of nonstandard intrinsic functions. Prefixing a keyword by \fBno\-\fP turns its option off. For example, \fB\-pretty=no\-long\-line\fP turns off warnings about lines exceeding 72 columns in length while leaving all other warnings about misleading appearance in effect. If a setting has default \fBnone\fP, you can turn on all options except one or two by using \fBall\fP first. For example, \fB\-f77=all,no\-include\fP enables warnings about all nonstandard extensions except INCLUDE statements. If a setting has default \fBall\fP, you can turn off all warnings except one or two by using \fBnone\fP first. For example, \fB\-truncation=none,demotion\fP would turn off all precision related warnings except about demotions. Wildcard patterns contain an asterisk to stand for any string of characters. If a wildcard pattern is used, all the warnings that match it are affected. If \fBno\-\fP is prefixed to the pattern, all the matching warnings are turned off, otherwise they are all turned on. The minimum unambiguous length rule does not apply to wildcard matching. For example, use \fB\-usage=no\-*var*\fP to turn off all warnings relating to variable usage (both local and common). (Unix users may need to quote any options containing wildcards in order to prevent the shell from attempting to expand them.) Wildcards are recognized only in lists of warning keywords, not in the top-level options themselves. .PP When \fBftnchek\fP starts up, it looks for environment variables and also for a preferences file. Any options defined in the environment or in the preferences file are used as defaults in place of the built-in defaults. They are over-ridden by any command line options. See the section on changing the defaults for details about the environment options and the preferences file. .PP .ie \nh \{ .in 0 2 Files .PP When giving a name of an input file, the extension is optional. If no extension is given, \fBftnchek\fP will first look for a project file with extension \fI.\|prj\fP, and will use that if it exists. If not, then \fBftnchek\fP will look for a Fortran source file with the extension \fI.\|for\fP. \} .el \{ When giving a name of an input file, the extension is optional. If no extension is given, \fBftnchek\fP will first look for a project file with extension \fI.\|prj\fP, and will use that if it exists. If not, then \fBftnchek\fP will look for a Fortran source file with the extension \fI.\|for\fP for VMS systems, \fI.\|f\fP for UNIX systems. \} More than one file name can be given to \fBftnchek\fP, and it will process the modules in all files as if they were in a single file. .PP .ie \nh \{ Wildcards are allowed in the specification of filenames on the command line. \} .el \{ Wildcards are allowed in the specification of filenames on the command line for the VMS and MS-DOS versions, as also of course under UNIX and any other system that performs wildcard expansion in the command processor. \} .PP If no filename is given, \fBftnchek\fP will read input from the standard input. .\" Omit sections "OPTIONS" thru "LIMITATIONS AND EXTENSIONS" from blurb .if !\nb \{ .ie \nh \{ .\" Begin HELP-only paragraph .in 0 2 Options .PP \fBftnchek\fP options fall into two categories: switches, which are either true or false, and settings, which have a numeric or string value. The name of a switch or numeric setting can be preceded by 'no' to turn it off: e.g. /nocommon would turn off the warnings about common block inconsistencies. Only the first 3 characters of an option name (not counting the '/') need be provided. Most options are positional: each option remains in effect from the point it is encountered until it is overridden by a later change. \} .\" End HELP-only paragraph. Begin non-HELP section .el \{ .SH "OPTIONS" This section provides a more detailed discussion of \fBftnchek\fP command-line options. Options and filenames may be interspersed on a command line. Most options are positional: each option remains in effect from the point it is encountered until it is overridden by a later change. Thus for example, the listing may be suppressed for some files and not for others. Exceptions are: the \fB\-intrinsic\fP, \fB\-pointersize\fP, and \fB\-wordsize\fP settings, which cannot be changed once processing of input files has started; the \fB\-arguments\fP, \fB\-array\fP, \fB\-calltree\fP, \fB\-common\fP, \fB\-crossref\fP, \fB\-extern\fP, \fB\-reference\fP, \fB\-resources\fP, \fB\-sort\fP, \fB\-vcg\fP, and \fB\-volatile\fP options, where the action depends only on the value of the option after the processing of input files is finished; and the \fB\-include\fP setting, which is cumulative. .PP The option names in the following list are in alphabetical order. \} .ie \nh \{ .in 0 3 /arguments=list .PP \} .el \{ .TP .BI \-arguments= list .RS \} Controls warnings about mismatches between actual and dummy subprogram arguments, and also about mismatches between expected and actual subprogram type. (An actual argument is an argument passed to the subprogram by the caller; a dummy argument is an argument received by the subprogram.) By default, all warnings are turned on. .PP The \fIlist\fP consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings about arguments, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-arguments\fP is equivalent to \fB\-arguments=all\fP, and \fB\-noarguments\fP is equivalent to \fB\-arguments=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBarrayness\fP: warn about inconsistent use of arguments that are arrays. These warnings can be further controlled by the \fB\-array\fP option. .TP \w'1.'u+2n \fBtype\fP: warn about dummy arguments of a different data type from the actual arguments. .TP \w'1.'u+2n \fBfunction\-type\fP: warn if the invocation assumes the function's return value is a different type than it actually is. Also warns if a function is called as a subroutine, or vice-versa. .TP \w'1.'u+2n \fBnumber\fP: warn about invoking a subprogram with a different number of arguments than the subprogram expects. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only \fBnumber\fP, 2 turns on all except \fBnumber\fP, and 3 turns all the warnings on. .PP This setting does not apply to checking invocations of intrinsic functions or statement functions, which can only be turned off by the \fB\-nocheck\fP option. .PP See also: \fB\-array\fP, \fB\-library\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /array=list .PP \} .el \{ .TP .BI \-array= list .RS \} Controls the degree of strictness in checking agreement between actual and dummy subprogram arguments that are arrays. The warnings controlled by this setting are for constructions that might legitimately be used by a knowledgeable programmer, but that often indicate programming errors. By default, all warnings are turned on. .PP The \fIlist\fP consists of keywords separated by commas or colons. Since all these warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings about array arguments, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-array\fP is equivalent to \fB\-array=all\fP, and \fB\-noarray\fP is equivalent to \fB\-array=none\fP. The warning keywords with their meanings are as follows: .TP \w'1.'u+2n \fBdimensions\fP: warn if the arguments differ in their number of dimensions, or if the actual argument is an array element while the dummy argument is a whole array. .TP \w'1.'u+2n \fBsize\fP: warn if both arguments are arrays, but they differ in number of elements. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 turns on only \fBdimensions\fP, 2 turns on only \fBsize\fP, and 3 turns all the warnings on. .PP Note: A warning is always given regardless of this setting if the actual argument is an array while the dummy argument is a scalar variable, or if the actual argument is a scalar variable or expression while the dummy argument is an array. These cases are seldom intentional. (To turn off even these warnings, use \fB\-arguments=no\-arrayness\fP.) No warning is ever given if the actual argument is an array element while the dummy argument is a scalar variable. Variable-dimensioned arrays and arrays dimensioned with 1 or asterisk match any number of array elements. There is no check of whether multi-dimensional arrays agree in the size of each dimension separately. .PP See also: \fB\-arguments\fP, \fB\-library\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /brief .PP \} .el \{ .TP .B \-brief .RS \} Selects a shorter format for some warning messages. At present, the only warnings controlled by this flag are those that are printed at the end of processing each subprogram. These include warnings about variables that are set but not used or used before set, variable names that do not conform to the Fortran 77 standard, etc. (These warnings may be suppressed entirely depending on other flags, such as the \fB\-usage\fP or \fB\-f77\fP flags.) In the default format each variable is listed on a separate line, along with the line number where the variable is declared, set or used, according to the nature of the warning. The briefer format simply lists all variables to which the warning applies, with up to 4 variables per line. .PP See also: \fB\-quiet\fP. .RE .ie \nh \{ .in 0 3 /calltree=list .PP \} .el \{ .TP .BI \-calltree= list .RS \} Causes \fBftnchek\fP to print out the call structure of the complete program. .PP The \fIlist\fP consists of keywords separated by commas or colons. There are two special keywords: \fBnone\fP to turn off all the options, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. (The keyword \fBall\fP turns on all the options, but should not normally be used since only one format should be specified.) If \fIlist\fP is omitted, \fB\-calltree\fP is equivalent to \fB\-calltree=tree\fP, and \fB\-nocalltree\fP is equivalent to \fB\-calltree=none\fP. By default no call graph is printed. .PP If the -mkhtml option is invoked \fIand\fP tree is the applied calltree option, a file named \fCCallTree.html\fR, will also be produced depicting the tree in HTML format. This file is useful as a starting point for browsing the HTML files describing each component of the program. .PP The keywords which control which format is used are as follows: .TP \w'1.'u+2n \fBtree\fP: produce the call graph in tree format. .TP \w'1.'u+2n \fBreference\fP: produce the call graph in who-calls-who format (same as \fB\-reference\fP switch). .TP \w'1.'u+2n \fBvcg\fP: produce the call graph in VCG format (same as \fB\-vcg\fP switch). .PP Only one of the formats \fBtree\fP, \fBreference\fP, or \fBvcg\fP may be specified. .PP The following keywords control options affecting the output: .TP \w'1.'u+2n \fBprune\fP: prune repeated subtrees (applicable only with \fBtree\fP). This the default. .TP \w'1.'u+2n \fBsort\fP: sort children of each routine into alphabetical order. This is the default. .PP See the discussion of the \fB\-reference\fP and \fB\-vcg\fP flags for details about these formats. .PP For \fBtree\fP format, The call graph is printed out starting from the main program, which is listed on the first line at the left margin. Then on the following lines, each routine called by the main program is listed, indented a few spaces, followed by the subtree starting at that routine. .PP In the default mode, if a routine is called by more than one other routine, its call subtree is printed only the first time it is encountered Later calls give only the routine name and the notice ``(see above)''. To have the subtree printed for each occurrence of the routine, use option \fBno\-prune\fP. .PP Note that the call tree will be incomplete if any of the input files are project files containing more than one module that were created in \fB\-library\fP mode. See the discussion of project files below. .PP Technical points: Each list of routines called by a given routine is printed in alphabetical order unless the \fBno\-sort\fP option is given. If multiple main programs are found, the call tree of each is printed separately. If no main program is found, a report to that effect is printed out, and the call trees of any top-level non-library routines are printed. This flag only controls the printing of the call tree: \fBftnchek\fP constructs the call tree in any case because it is used to determine which library modules will be cross-checked. See the discussion of the \fB\-library\fP flag. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number from 0 to 15. This number is formed from 1 for \fBtree\fP format, 2 for \fBreference\fP format, or 3 for \fBvcg\fP format, plus 4 for \fBno\-prune\fP, and 8 for \fBno\-sort\fP. .PP See also: \fB\-crossref\fP, \fB\-library\fP, \fB\-reference\fP, \fB\-sort\fP, \fB\-symtab\fP, \fB\-vcg\fP. .RE .ie \nh \{ .in 0 3 /check .PP \} .el \{ .TP .BI \-check .RS \} This switch is provided so that errors and warning messages can be turned off when \fBftnchek\fP is used for purposes other than finding bugs, such as making declarations or printing the call tree. It is positional, so after turning all checks off, selected checks can be turned back on. The effect of \fB\-nocheck\fP is to put all switches, numeric settings, and settings controlling lists of warnings to their turn-off values, as if they had all been specified with the \-no prefix. Switches and settings that specify options and modes of operation, rather than controlling warnings, are unaffected. These are \fB\-columns\fP, \fB\-crossref\fP, \fB\-include\fP, \fB\-intrinsic\fP, \fB\-library\fP, \fB\-list\fP, \fB\-makedcls\fP, \fB\-novice\fP, \fB\-output\fP, \fB\-pointersize\fP, \fB\-project\fP, \fB\-quiet\fP, \fB\-reference\fP, \fB\-resources\fP, \fB\-sort\fP, \fB\-source\fP, \fB\-symtab\fP, \fB\-vcg\fP, \fB\-version\fP, \fB\-wordsize\fP, and \fB\-wrap\fP. Default = yes. .PP Parse errors (syntax errors due to unrecognized or malformed statements) are not suppressed by this switch, since the results may be incorrect if \fBftnchek\fP has not parsed the program correctly. .PP There are some miscellaneous errors and warning messages that are not controlled by any other switch, and so can be turned off only by this switch. Note that using \fB\-check\fP following \fB\-nocheck\fP only has the effect of turning these special warnings back on, and does not restore all the checks it turned off. These warnings are: .TP \w'1.'u+2n o Module contains no executable statements. .TP o In free source form, missing space where space is required (e.g. between a keyword and an identifier) or space present where none is allowed (e.g. within an identifier). .TP o Zero or negative length specification in a data type declaration of the form type*len. .TP o Invalid operand(s) in an expression. .TP o Array assigned to scalar. .TP o Type mismatch between \fCDO\fR index and bounds. .TP o Undefined common block declared in \fCSAVE\fR statement. .TP o Intrinsic function explicitly declared with an incompatible type. .TP o Unknown intrinsic function explicitly declared in an \fCINTRINSIC\fR statement. .TP o Intrinsic function passed as a subprogram argument is not declared in an \fCINTRINSIC\fR statement. .TP o Intrinsic function or statement function invoked incorrectly. .TP o Function does not set return value prior to \fCRETURN\fR statement. .TP o Parameter constant value not evaluated (this is \fBftnchek\fP's fault, and it is just informing you of the fact). .TP o Entry point of a subprogram is later used as a different subprogram's name. .TP o Unknown keyword used in an I/O statement. .TP o Illegal label reference (e.g. GOTO refers to a non-executable statement; I/O statement refers to a non-format statement). .PP See also: \fB\-errors\fP. .RE .ie \nh \{ .in 0 3 /columns=num .PP \} .el \{ .TP .BI \-columns= num .RS \} Set maximum statement length to \fInum\fP columns. (Beyond this is ignored.) This setting is provided to allow checking of programs which may violate the Fortran standard limit of 72 columns for the length of a statement. According to the standard, all characters past column 72 are ignored. If this setting is used when the \fB\-f77=long\-line\fP option is in effect, a warning will be given for any lines in which characters past column 72 are processed. Turn-on = max = 132. Default = 72. .PP This setting does not suppress warnings about the presence of characters beyond column 72. To process code with meaningful program text beyond column 72, use this setting and be sure the \fB\-f77\fP \fBlong\-line\fP option is off. To process code with sequence numbers in columns 73 to 80, leave the the columns setting at the default value and use the \fB\-pretty=no\-long\-line\fP flag. .PP See also: \fB\-f77\fP, \fB\-pretty\fP. .RE .ie \nh \{ .in 0 3 /common=list .PP \} .el \{ .TP .BI \-common= list .RS \} This setting controls the strictness of checking of COMMON blocks. By default, all warnings except \fBvolatile\fP are turned on. .PP The \fIlist\fP consists of keywords separated by commas or colons. Since most of these warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-common\fP is equivalent to \fB\-common=dimensions,exact,length,type\fP, and \fB\-nocommon\fP is equivalent to \fB\-common=none\fP. The warning keywords with their meanings are as follows: .TP \w'1.'u+2n \fBdimensions\fP: corresponding arrays in each declaration of a block must agree in size and number of dimensions. This option only has an effect when used together with \fBexact\fP. .TP \w'1.'u+2n \fBexact\fP: the comparison of two blocks is done variable-by-variable rather than simply requiring agreement between corresponding storage locations. Use this if all declarations of a given COMMON block are supposed to be identical, which is a good programming practice. .TP \w'1.'u+2n \fBlength\fP: warn if different declarations of the same block are not equal in total length. The Fortran 77 Standard requires each named common block, but not blank common, to be the same length in all modules of the program. .TP \w'1.'u+2n \fBtype\fP: in each declaration of a given COMMON block, corresponding memory locations (words or bytes) must agree in data type. If used together with \fBexact\fP, this will require that corresponding variables agree in data type. .TP \w'1.'u+2n \fBvolatile\fP: Assume that COMMON blocks are volatile. .PP Many Fortran programmers assume that variables, whether local or in COMMON, are static, i.e. that once assigned a value, they retain that value permanently until assigned a different value by the program. However, in fact the Fortran 77 Standard does not require this to be the case. Local variables may become undefined between activations of a module in which they are declared. Similarly, COMMON blocks may become undefined if no module in which they are declared is active. (The technical term for entities with this behavior is ``automatic'', but \fBftnchek\fP uses the word ``volatile'' since it is clearer to the nonspecialist.) Only COMMON blocks declared in a SAVE statement, or declared in the main program or in a block data subprogram remain defined as long as the program is running. Variables and COMMON blocks that can become undefined at some point are called volatile. .PP If the \fB\-common=volatile\fP flag is turned on, \fBftnchek\fP will warn you if it finds a volatile COMMON block. If, at the same time, the \fB\-usage=com\-block\-volatile \fP option is turned on (which is the default), \fBftnchek\fP will try to check whether such a block can lose its defined status between activations of the modules where it is declared. \fBftnchek\fP does not do a very good job of this: the rule used is to see whether the block is declared in two separated subtrees of the call tree. For instance, this would be the case if two modules, both called from the main program, shared a volatile COMMON block. A block can also become undefined between two successive calls of the same subprogram, but \fBftnchek\fP is not smart enough to tell whether a subprogram can be called more than once, so this case is not checked for. .PP The \fB\-common=volatile\fP flag does not affect the way \fBftnchek\fP checks the usage of local variables. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number from 0 to 3. A value of 0 turns all the warnings off, 1 or greater turns on \fBtype\fP, 2 or greater turns on \fBlength\fP, and 3 turns on \fBdimensions\fP and \fBexact\fP also. The numeric form cannot turn on the \fBvolatile\fP option. .PP See also: \fB\-library\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /crossref=list .PP \} .el \{ .TP .BI \-crossref= list .RS \} Prints cross-reference tables. Default = none. .PP The \fIlist\fP consists of keywords separated by commas or colons. The keywords with their meanings are as follows: .TP \w'128:'u+2n \fBcalls\fP: table lists each subprogram followed by a list of routines that call it. This listing omits library modules that are not in the call tree of the main program. The list is alphabetized. .TP \fBcommon\fP: table lists each COMMON block followed by a list of the routines that access it. These listed routines are those in which some variables in the COMMON block are accessed, not simply those routines that declare the block. (To find out what routines declare a COMMON block but do not use it, see the \fB\-usage\fP flag.) .TP \fBlabels\fP: table lists each label followed by a list of all references to it. A label reference is denoted by the line number and statement type of the referring statement. The label list is in sequential order. The references are listed in the order they are encountered in the program. .PP See also: \fB\-calltree\fP, \fB\-reference\fP, \fB\-sort\fP, \fB\-symtab\fP, \fB\-vcg\fP. .RE .ie \nh \{ .in 0 3 /declare .PP \} .el \{ .TP .B \-declare .RS \} If this flag is set, all identifiers whose datatype is not declared in each module will be listed. This flag is useful for helping to find misspelled variable names, etc. The same listing will be given if the module contains an \fCIMPLICIT NONE\fR statement. Default = no. .PP See also: \fB\-sixchar\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /division .PP \} .el \{ .TP .B \-division .RS \} This switch is provided to help users spot potential division by zero problems. If this switch is selected, every division except by a constant will be flagged. (It is assumed that the user is intelligent enough not to divide by a constant which is equal to zero!) Default = no. .PP See also: \fB\-portability\fP, \fB\-truncation\fP. .RE .ie \nh \{ .in 0 3 /errors=num .PP \} .el \{ .TP .BI \-errors= num .RS \} Set the maximum number of error messages in a ``cascade''. During checking of agreement of subprogram arguments, common block declarations, and so forth, sometimes a single case will generate a long string of warnings. Often this simply indicates some other cause than a genuine item-by-item mismatch, such as for example a varible missing from one list. So in such cases \fBftnchek\fP stops printing the warnings after the cascade limit is reached, and the trailer ``\fCetc...\fR'' is printed to indicate that there were more errors not printed. If you think that these warnings are likely to be genuine, use this setting to see more of them. Turn-on = default = 3, max = 999. A value of 0 means no limit. .PP This setting does not set an overall limit on the number of error messages printed, only the number printed in any one cascade. Most types of warnings and error messages are not subject to the cascade effect and so are not affected by this setting. To turn off warnings generally, use the individual warning control options or the \fB\-nocheck\fP option. .PP See also: \fB\-check\fP. .RE .ie \nh \{ .in 0 3 /extern .PP \} .el \{ .TP .B \-extern .RS \} Causes \fBftnchek\fP to report whether any subprograms invoked by the program are never defined. Ordinarily, if \fBftnchek\fP is being run on a complete program, each subprogram other than the intrinsic functions should be defined somewhere. Turn off this switch if you just want to check a subset of files which form part of a larger complete program. Subprogram arguments will still be checked for correctness. Default = yes. .PP The \fB\-extern\fP flag is now superseded by the \fB\-usage=ext\-undefined\fP option. For the sake of convenience, the \fB\-extern\fP flag is retained, so that \fB\-noextern\fP is equivalent to \fB\-usage=no\-ext\-undefined\fP option. The \fB\-extern\fP switch may be retired eventually. .PP See also: \fB\-library\fP. .RE .ie \nh \{ .in 0 3 /f77=list .PP \} .el \{ .TP .BI \-f77= list .RS \} Use this setting to catch language extensions which violate the Fortran 77 Standard. Such extensions may cause your program not to be portable. Examples include the use of underscores in variable names; variable names longer than six characters; statement lines longer than 72 characters; and nonstandard statements such as the \fCDO\fR ... \fCENDDO\fR structure. \fBftnchek\fP does not report on the use of lowercase letters. By default, all warnings are turned off. .PP This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard. .if !\nh \{ (Further details about the extensions themselves are given below in the section on Extensions.) \} The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the warnings about nonstandard extensions, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-f77\fP is equivalent to \fB\-f77=all\fP, and \fB\-nof77\fP is equivalent to \fB\-f77=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBaccept\-type\fP: \fCACCEPT\fR and \fCTYPE\fR I/O statements. .TP \fBarray\-bounds\fP: Expressions defining array bounds that contain array elements or function references. .TP \fBassignment\-stmt\fP: Assignment statements involving arrays. In Fortran 90, an array can be assigned to another array of compatible shape, or a scalar can be assigned to an array. Neither of these assignments is permitted in Fortran 77. .IP A related warning occurs when an array is assigned to a scalar. Since this is illegal also in Fortran 90, it is always warned about regardless of the \fB\-f77\fP setting (unless all checking is turned off with the \fB\-nocheck\fP flag). .TP \fBattribute\-based\-decl\fP: Type declarations in the new Fortran 90 attribute-based style. This style of declaration is distinguished by the use of a double colon (::) between the list of attributes and the list of declared variables. This option also controls warnings for use of Fortran 90 length or kind specifiers in type declarations. (Although these specifiers can be used in non-attribute-based declarations, they are controlled by this option to avoid proliferation of \fB\-f77\fP options.) .TP \fBautomatic\-array\fP: Local (not dummy) arrays which have variable size. These would correspond to arrays whose storage would have to be dynamically allocated at run time. .TP \fBbackslash\fP: Unix backslash escape in strings. This warning will be given only if the \fB\-source=unix\-backslash\fP setting is specified to cause the escape interpretation of backslash.. .TP \fBbyte\fP: \fCBYTE\fR data type declaration. .TP \fBcase\-construct\fP: The \fCSELECT CASE\fR construct. .TP \fBcharacter\fP: Extensions to the Fortran 77 standard regarding character data. At present, this only controls warnings about character variables declared with zero or negative length. In Fortran 77, all character variables must be of positive length. In Fortran 90, they can be zero length, and declarations that specify negative lengths are permitted, turning into zero for the declared length. Note: because negative length specifiers may indicate a programming error, the warning about them is given even if this option is turned off, and is suppressed only by the \fB\-nocheck\fP flag. .TP \fBcommon\-subprog\-name\fP: Common block and subprogram having the same name. .TP \fBconstruct\-name\fP: Use of a construct-name to label a control statement. .TP \fBcontinuation\fP: More than 19 successive continuation lines. .TP \fBcpp\fP: Unix C preprocessor directives in the source code. .TP \fBcray\-pointer\fP: ``Cray pointer'' syntax. .TP \fBcycle\-exit\fP: The \fCCYCLE\fR and \fCEXIT\fR statements. .TP \fBd\-comment\fP: Debugging comments starting with \fCD\fR in the source code. .TP \fBdec\-tab\fP: DEC Fortran style tab-formatted source code. This warning will be given only if the \fB\-source=dec\-tab\fP setting is specified to cause interpretation of tabs in this style. .TP \fBdo\-enddo\fP: \fCDO\fR loop extensions: terminal statement label omitted, \fCEND DO\fR, and \fCWHILE\fR. .TP \fBdouble\-complex\fP: Double precision complex datatype. .TP \fBformat\-dollarsign\fP: Dollar sign control code in \fCFORMAT\fR statements. .TP \fBformat\-edit\-descr\fP: Nonstandard edit descriptors in \fCFORMAT\fR statements. .TP \fBfunction\-noparen\fP: Function definition without parentheses. .TP \fBimplicit\-none\fP: \fCIMPLICIT NONE\fR statement. .TP \fBinclude\fP: \fCINCLUDE\fR statement. .TP \fBinline\-comment\fP: Inline comments starting with an exclamation point. .TP \fBinternal\-list\-io\fP: List-directed I/O to or from an internal file. .TP \fBintrinsic\fP: Nonstandard intrinsic functions. .TP \fBio\-keywords\fP Nonstandard keywords used in I/O statements. These fall into three groups. The first group includes keywords that are accepted in Fortran 90: .TS center; l l l. \fCACTION\fR \fCPAD\fR \fCREADWRITE\fR \fCADVANCE\fR \fCPOSITION\fR \fCSIZE\fR \fCDELIM\fR \fCREAD\fR \fCWRITE\fR \fCEOR\fR .TE The second group comprises the following VMS Fortran keywords: .TS center; l l l. \fCBLOCKSIZE\fR \fCEXTENDSIZE\fR \fCREADONLY\fR \fCBUFFERCOUNT\fR \fCINITIALSIZE\fR \fCRECORDSIZE\fR \fCCARRIAGECONTROL\fR \fCMAXREC\fR \fCRECORDTYPE\fR \fCDEFAULTFILE\fR \fCNAME\fR (in \fCOPEN\fR) \fCSHARED\fR \fCDISP\fR \fCNOSPANBLOCK\fR \fCTYPE\fR \fCDISPOSE\fR \fCORGANIZATION\fR .TE (The keyword \fCNAME\fR is standard only in the \fCINQUIRE\fR statement.) The third group consists of the following IBM/MVS keyword: .TS center; l l l. \fCNUM\fR .TE This flag also controls a warning about use of \fCACCESS='APPEND'\fR, which is accepted by some compilers. The value of \fC'APPEND'\fR is not valid for any I/O specifier in standard Fortran 77, and in Fortran 90 \fC'APPEND'\fR should be used as a value of the \fCPOSITION\fR specifier, not \fCACCESS\fR. .TP \fBlong\-line\fP: Statements with meaningful code past 72 columns. This warning is given only if the \fB\-columns\fP setting has been used to increase the statement field width. .TP \fBlong\-name\fP: Identifiers over 6 characters long. .TP \fBmixed\-common\fP: Mixed character and noncharacter data in COMMON block. .TP \fBmixed\-expr\fP: Nonstandard type combinations in expressions, for example \fCDOUBLE PRECISION\fR with \fCCOMPLEX\fR, assigning hollerith to integer, logical operations on integers. .TP \fBname\-dollarsign\fP: Dollar sign used as a character in identifiers. .TP \fBname\-underscore\fP: Underscore used as a character in identifiers. .TP \fBnamelist\fP: \fCNAMELIST\fR statement. .TP \fBparam\-implicit\-type\fP: Implicit typing of a parameter by the data type of the value assigned. This warning can only occur if implicit parameter typing has been turned on by the \fB\-source=param\-implicit\-type\fP option, or if the \fCPARAMETER\fR statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs will be warned about. If you want to be warned only in those instances where the implicit data type differs from the default type, use \fB\-portability=param\-implicit\-type\fP instead. According to the Fortran 77 standard, the data type of a parameter is given by the same rules as for a variable, and if necessary a type conversion is done when the value is assigned. .TP \fBparam\-intrinsic\fP: Intrinsic function or exponentiation by a real used to define the value of a \fCPARAMETER\fR definition. .TP \fBparam\-noparen\fP: \fCPARAMETER\fR statement without parentheses. The user should be aware that the semantics of this form of the statement differs from that of the standard form: in this form, the parameter takes its data type from the value assigned, rather than having its default data type based on the first letter of the parameter name. (This form of the \fCPARAMETER\fR statement was introduced by DEC before the Fortran 77 standard was defined, and should be avoided.) .TP \fBpointer\fP: Fortran 90 standard pointer-related syntax, including \fCPOINTER\fR, \fCTARGET\fR and \fCALLOCATABLE\fR type declarations, \fCALLOCATE\fR, \fCDEALLOCATE\fR, and \fCNULLIFY\fR statements, and pointer assignment using \fC=>\fR. .TP \fBquad\-constant\fP: Quad precision real constants, e.g. of the form \fC1.23Q4\fR. .TP \fBquotemark\fP: Strings delimited by quote marks rather than apostrophes. .TP \fBrelops\fP: Relational (comparison) operators composed of punctuation, namely: < <= == /= > >=. .TP \fBsemicolon\fP: Semicolon used as statement separator. .TP \fBstatement\-order\fP: Statements out of the sequence mandated by the Standard. The allowed sequence is illustrated in Table 1 in the section on Interpreting the Output. .TP \fBtypeless\-constant\fP: Typeless constants, for example \fCZ'19AF'\fR. .TP \fBtype\-size\fP: Type declarations specifying a size, for example \fCREAL*8\fR. .TP \fBvariable\-format\fP: Variable repeat specification or field size in FORMAT. These are of the form \fC<\fR \fIexpr\fP \fC>\fR. .TP \fBvms\-io\fP: Obsolete. Now has the same meaning as the \fBio\-keywords\fP keyword. .PP See also: \fB\-f90\fP, \fB\-f95\fP, \fB\-portability\fP, \fB\-pretty\fP, \fB\-style\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /f90=list .PP \} .el \{ .TP .BI \-f90= list .RS \} This setting provides detailed control over the warnings about supported extensions to the Fortran 77 Standard that were not adopted as part of the Fortran 90 Standard. Note that \fBftnchek\fP does not support the full Fortran 90 language. However, it does support some common extensions to Fortran 77 that were prevalent before Fortran 90 was defined. Some of these extensions became part of the Fortran 90 Standard, but others did not. The \fB\-f90\fP setting warns only about the latter. That is, this flag covers things that are neither legal Fortran 77 nor legal Fortran 90. Therefore, the warnings controlled by this flag are basically a subset of the warnings controlled by \fB\-f77\fP. There are a few cases, described below, where the circumstances in which the warning is given are slightly different for the two flags. .PP The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the warnings about nonstandard extensions, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-f90\fP is equivalent to \fB\-f90=all\fP, and \fB\-nof90\fP is equivalent to \fB\-f90=none\fP. .PP The following keywords have identical meanings for \fB\-f90\fP as for \fB\-f77\fP. The reader is referred to the explanations under \fB\-f77\fP. .TS center; l l l. \fBaccept\-type\fP \fBdouble\-complex\fP \fBparam\-noparen\fP \fBbackslash\fP \fBformat\-dollarsign\fP \fBcray\-pointer\fP \fBbyte\fP \fBformat\-edit\-descr\fP \fBquad\-constant\fP \fBcpp\fP \fBfunction\-noparen\fP \fBtype\-size\fP \fBd\-comment\fP \fBname\-dollarsign\fP \fBvariable\-format\fP \fBdec\-tab\fP \fBparam\-implicit\-type\fP \fBvms\-io\fP .TE .PP The keywords which differ somewhat from the corresponding \fB\-f77\fP keywords are as follows. .TP \w'128:'u+2n \fBcontinuation\fP: The limit on the number of continuation lines for a statement in fixed source form is the same, namely 19, in Fortran 90 as in Fortran 77. For free source form the limit is 39 continuation lines, and a line containing a continuation mark cannot be otherwise empty or contain only a comment. .TP \fBintrinsic\fP: This is the same as for \fB\-f77\fP except for the intrinsic functions defined in MIL-STD 1753, which are all included in Fortran 90, and so are not warned about. (See \fB\-intrinsic\fP for a list.) .TP \fBio\-keywords\fP: This is the same as for \fB\-f77\fP except that no warnings are given for the I/O keywords that are standard in Fortran 90. .TP \fBlong\-line\fP: Although the Fortran 90 Standard allows lines longer than 72 characters in free source form, this restriction still applies to fixed source form. In free source form the line length limit is 132 characters, and unlike fixed form, \fBftnchek\fP does not allow this limit to be increased. .TP \fBmixed\-expr\fP: This is the same as for \fB\-f77\fP except for expressions mixing extended precision real with complex data types, which are permitted in Fortran 90. .TP \fBstatement\-order\fP: This is similar to the corresponding \fB\-f77\fP warning, but applies the somewhat looser restrictions on statement order of the Fortran 90 Standard. In particular, Fortran 90 allows \fCDATA\fR statements and statement-function definitions to be intermixed with specification statements. .TP \fBtypeless\-constant\fP: In Fortran 90, binary, octal, and hexadecimal constants of the form \fCB'ddd'\fR, \fCO'ddd'\fR, and \fCZ'ddd'\fR, respectively, are permitted. Here \fC'ddd'\fR represents a string of digits. \fBftnchek\fP recognizes these forms, as well as a variant of the form \fCX'ddd'\fR for a hexadecimal constant, and other variants in which the base indicator \fCB\fR, \fCO\fR, \fCZ\fR, or \fCX\fR follows the digit string. These variants were not adopted in Fortran 90, so only they are warned about when this flag is turned on. .PP See also: \fB\-f77\fP, \fB\-f95\fP, \fB\-portability\fP, \fB\-pretty\fP, \fB\-style\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /f95=list .PP \} .el \{ .TP .BI \-f95= list .RS \} This setting provides detailed control over warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Unlike the \fB\-f77\fP and \fB\-f90\fP settings, these warnings apply to syntax which is legal Fortran 77. However, since these features have been deleted from the Standard, it is possible that programs containing them will be unacceptable to some newer compilers. .PP The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the warnings about nonstandard extensions, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-f95\fP is equivalent to \fB\-f95=all\fP, and \fB\-nof95\fP is equivalent to \fB\-f95=none\fP. The warning keywords with their meanings are as follows. .TP \w'128:'u+2n \fBreal\-do\fP: A \fCDO\fR variable of any real numeric type. .TP \fBpause\fP: The \fCPAUSE\fR statement. .TP \fBassign\fP: The \fCASSIGN\fR statement, assigned \fCGOTO\fR, or assigned format. .TP \fBh\-edit\fP: The \fCH\fR edit descriptor in a format. .PP There is one other Fortran 77 syntax feature that was deleted in Fortran 95, namely branching to an \fCENDIF\fR from outside the \fCIF\fR block. However, \fBftnchek\fP is unable to analyze program flow, and so it does not provide a warning for this. .PP See also: \fB\-f77\fP, \fB\-f90\fP, \fB\-portability\fP, \fB\-pretty\fP, \fB\-style\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /help .PP \} .el \{ .TP .B \-help .RS \} Prints a list of all the command-line options with a short description of each along with its default value. This command is identical in function to the \fB``?''\fP argument, and is provided as a convenience for those systems in which the question mark has special meaning to the command interpreter. Default = no. .PP The help listing also prints the version number and patch level of \fBftnchek\fP and a copyright notice. .PP Note: the ``default'' values printed in square brackets in the help listing are, strictly speaking, not the built-in defaults but the current values after any environment options and any command-line options preceding the \fB\-help\fP option have been processed. .PP See also: \fB\-novice\fP, \fB\-version\fP, and \fBhelp\fP option of all settings that take a list of keywords. .RE .ie \nh \{ .in 0 3 /identifier-chars=list .PP \} .el \{ .TP .BI \-identifier\-chars= list .RS \} Define non-alphanumeric characters that may be used in identifiers. By default, \fBftnchek\fP only accepts the dollar sign and underscore as non-alphanumeric characters in identifier names. The characters in the \fIlist\fP replace whatever set of accepted non-alphanumeric characters was previously in effect. Thus, if dollar sign or underscore are not included in the list, they lose their status as acceptable characters. .PP This option is provided to enable \fBftnchek\fP to handle source files containing non-standard identifer names that may be needed, for example, to access certain operating system services. See the section on Limitations and Extensions for the treatment of identifiers containing these characters in implicit typing. .PP Using \fB\-noidentifer\-chars\fP turns off acceptance of non-alphanumeric characters entirely. .PP See also: \fB\-source\fP. .RE .ie \nh \{ .in 0 3 /include=path .PP \} .el \{ .TP .BI \-include= path .RS \} Specifies a directory to be searched for files specified by \fCINCLUDE\fR statements. Unlike other command-line options, this setting is cumulative; that is, if it is given more than once on the command line, all the directories so specified are placed on a list that will be searched in the same order as they are given. The order in which \fBftnchek\fP searches for a file to be included is: the current directory; the directory specified by environment variable \fCFTNCHEK_INCLUDE\fR if any; the directories specified by any \fB\-include\fP options; the directory specified by environment variable \fCINCLUDE\fR; and finally in a standard system-wide directory (\fC/usr/include\fR for UNIX, \fCSYS$LIBRARY\fR for VMS, and \fC\\include\fR for MSDOS). .PP See also: \fB\-f77\fP, \fB\-source\fP. .RE .ie \nh \{ .in 0 3 /intrinsic=list .PP \} .el \{ .TP .BI \-intrinsic= list .RS \} Controls whether \fBftnchek\fP recognizes certain nonstandard intrinsic functions as intrinsic. The \fIlist\fP consists of keywords separated by commas or colons. Some of the keywords control whether to recognize certain groups of functions, and other keywords control the expected syntax for invoking some nonstandard intrinsics. Include a keyword to turn on recognition of the corresponding set of intrinsics or to allow the corresponding syntax. Include a keyword prefixed by \fBno\-\fP to turn off that recognition. .PP There are three special keywords: \fBall\fP turns on recognition of all the nonstandard intrinsics (listed below) and accepts either syntax for those that have variations. Use \fBnone\fP to turn off recognition of all nonstandard intrinsics except those noted below. Use \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-intrinsic\fP is equivalent to \fB\-intrinsic=all\fP, and \fB\-nointrinsic\fP is equivalent to \fB\-intrinsic=none\fP. .PP The nonstandard intrinsic functions needed to support the nonstandard extended precision data types (double complex and quad precision) are always recognized. The intrinsics for the double complex data type are: \fC .TS center; l l l l. CDABS CDSQRT DREAL ZLOG CDCOS DCMPLX IMAG ZSIN CDEXP DCONJG ZABS ZSQRT CDLOG DIMAG ZEXP ZCOS CDSIN .TE \fR The intrinsics for the quad precision and quad complex types are: \fC .TS center; l l l l. CQABS QARCOS QEXT QNINT CQCOS QARSIN QEXTD QPROD CQEXP QATAN QFLOAT QREAL CQLOG QATAN2 QIMAG QSIGN CQSIN QCMPLX QINT QSIN CQSQRT QCONJG QLOG QSINH DBLEQ QCOS QLOG10 QSQRT IQINT QCOSH QMAX1 QTAN IQNINT QDIM QMIN1 QTANH QABS QEXP QMOD SNGLQ .TE \fR The keywords controlling recognition of other nonstandard intrinsic functions are as follows: .TP \w'128:'u+2n \fBextra\fP: recognize the following commonly available nonstandard intrinsics (all except \fCEXIT\fR and \fCLOC\fR are defined in MIL-STD 1753): \fC .TS center; l l l l. BTEST IBCLR IEOR ISHFTC EXIT IBITS IOR LOC IAND IBSET ISHFT NOT .TE \fR .TP \fBunix\fP: recognize these common Unix-specific intrinsic functions: \fC .TS center; l l l l. ABORT GMTIME LTIME SRAND AND IARGC OR SYSTEM GETARG IRAND RAND TIME GETENV LSHIFT RSHIFT XOR .TE \fR .TP \fBvms\fP: recognize these common VMS-specific intrinsic functions: \fC .TS center; l l l l. DATE IDATE SECNDS TIME ERRSNS RAN SIZEOF .TE \fR .TP \fBiargc\-no\-argument\fP: specify that \fCIARGC\fR may be invoked with no arguments. .TP \fBiargc\-one\-argument\fP: specify that \fCIARGC\fR may be invoked with one argument. .TP \fBrand\-no\-argument\fP: specify that \fCRAND\fR and \fCIRAND\fR may be invoked with no arguments. .TP \fBrand\-one\-argument\fP: specify that \fCRAND\fR and \fCIRAND\fR may be invoked with one argument. .PP The \fBno\-argument\fP and \fBone\-argument\fP keywords work as follows: turning the option on causes \fBftnchek\fP to accept the corresponding syntax for invocation of the function, without excluding the possibility of the alternative syntax. Turning the option off causes the corresponding syntax not to be accepted. If both options are turned on at once (the default), then either syntax is accepted. Turning both options off at once would not be meaningful. These options have no effect if recognition of Unix intrinsics has been turned off. .PP Note that this setting does not control whether non-standard warnings are issued about these functions. It controls whether the functions are assumed to be intrinsic or not, which determines how their usage is checked. When functions in any of these sets are included, their invocations will be checked according to the rules for the intrinsic functions; otherwise they will be checked as normal (user-written) external functions. The non-standard warnings are controlled by the \fB\-f77=intrinsic\fP option. .PP The default value of this setting is equivalent to .ie \nh \{ /intrinsic=all,no-unix. \} .el \{ \fB\-intrinsic=all\fP followed by \fB\-intrinsic=no\-vms\fP for the Unix version, \fB\-intrinsic=no\-unix\fP for the VMS version, and \fB\-intrinsic=no\-unix,no\-vms\fP for other versions. \} .PP Note: In versions of \fBftnchek\fP prior to 2.10, the \fB\-intrinsic\fP flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking \fBftnchek\fP in this way, the numeric form is still accepted. The numeric form of the setting consists of three digits. The ones digit selects the set of intrinsic functions to be supported. The digit 0 selects only Fortran 77 standard intrinsics plus those needed to support the nonstandard extended precision data types. The digit 1 is equivalent to \fBextra\fP, 2 is equivalent to \fBextra,unix\fP, and 3 is equivalent to \fBextra,vms\fP. The tens digit of this setting controls the syntax of the \fCRAND\fR intrinsic function, and the hundreds digit controls the syntax of the \fCIARGC\fR function. For these digits, specify 0 to require invocation with no argument, 1 to require one argument, and 2 to allow either form. .PP See also: \fB\-f77\fP. .RE .ie \nh \{ .in 0 3 /library .PP \} .el \{ .TP .B \-library .RS \} This switch is used when a number of subprograms are contained in a file, but not all of them are used by the application. Normally, \fBftnchek\fP warns you if any subprograms are defined but never used. This switch will suppress these warnings. Default = no. .PP This switch also controls which subprogram calls and COMMON block declarations are checked. If a file is read with the \fB\-library\fP flag in effect, the subprogram calls and COMMON declarations contained in a routine in that file will be checked only if that routine is in the main program's call tree. On the other hand, if the \fB\-library\fP switch is turned off, then \fBftnchek\fP checks the calls of every routine by every other routine, regardless of whether those routines could ever actually be invoked at run time, and likewise all COMMON block declarations are compared for agreement. .PP The difference between this switch and the \fB\-usage=no\-ext\-unused\fP option for subprograms is that the latter suppresses only the warning about routines being declared but not used. The \fB\-library\fP switch goes further and excludes unused routines processed while it is in effect from all cross-checking of arguments and COMMON block declarations as well. .PP (If there is no main program anywhere in the set of files that \fBftnchek\fP has read, so that there is no call tree, then \fBftnchek\fP will look for any non-library routines that are not called by any other routine, and use these as substitutes for the main program in constructing the call tree and deciding what to check. If no such top-level non-library routines are found, then all inter-module calls and all COMMON declarations will be checked.) .PP See also: \fB\-arguments\fP, \fB\-calltree\fP, \fB\-common\fP, \fB\-extern\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /list .PP \} .el \{ .TP .B \-list .RS \} Specifies that a listing of the Fortran program is to be printed out with line numbers. If \fBftnchek\fP detects an error, the error message follows the program line with a caret ( ^ ) specifying the location of the error. If no source listing was requested, \fBftnchek\fP will still print out any line containing an error, to aid the user in determining where the error occurred. Default = no. .PP See also: \fB\-output\fP, \\fB\-symtab\fP, fB\-quiet\fP. .RE .ie \nh \{ .in 0 3 /makedcls=list .PP \} .el \{ .TP .BI \-makedcls= list .RS \} Prepare a neatly-formatted file of declarations of variables, common blocks, and namelist lists, for possible merging into the source code. The declarations are stored in a file of the same name as the source code, but with the extension changed to .IR .dcl . If no declarations are written to the file, it is deleted to reduce clutter from empty files. .PP If input comes from standard input, instead of a named file, then declarations are written to standard output. .PP Variables are declared in alphabetical order within each declaration class and type, with integer variables first, because of their later possible use in array dimensions. .PP \fCPARAMETER\fR statements are an exception to the alphabetical order rule, because the Fortran 77 Standard requires that the expressions defining parameter values refer only to constants and already-defined parameter names. This forces the original source file order of such statements to be preserved in the declaration files. .PP Explicit declaration of .I all variables is considered good modern programming practice. By using compiler options to reject undeclared variables, misspelled variable names (or names extending past column 72) can be caught at compile time. Explicit declarations also greatly facilitate changing floating-point precision with filters such as .BR dtoq (1L), .BR dtos (1L), .BR fd2s (1L), .BR fs2d (1L), .BR qtod (1L), and .BR stod (1L). These programs are capable of changing types of explicit floating-point type declarations, intrinsic functions, and constants, but because they do not carry out rigorous lexical and grammatical analysis of the Fortran source code, they cannot provide modified type declarations for undeclared variables. Default setting = 0, turn-on = 1. .PP Various options for the form of the declarations file are controlled by the \fIlist\fP, which consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the options, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-makedcls\fP is equivalent to \fB\-makedcls=declarations\fP (i.e. produce the declarations file using the default options), and \fB\-nomakedcls\fP is equivalent to \fB\-makedcls=none\fP. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number which is the sum of the numbers in parentheses beside the keywords in the following list. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBdeclarations\fR (1): Write a declaration file. (This is implied by any of the other options, and can be omitted if any other options are given.) .TP \fBundeclared\-only\fR (2): By default, all variables are included in the declaration file. With this option, include only .I undeclared variables. This setting is useful if you want to check for undeclared variables, since Fortran source files with all variables properly declared will not result in a .I .dcl file. With this option, common blocks and namelist lists will not be included in the declaration file, since by their nature they cannot be undeclared. .TP \fBcompact\fR (4): The declarations are normally prettyprinted to line up neatly in common columns, as in the declaration files output by the Extended PFORT Verifier, .BR pfort (1L). This option value selects instead compact output, without column alignment. .TP \fBuse\-continuation\-lines\fR (8): Causes continuation lines to be used where permissible. The default is to begin a new declaration on each line. This option is appropriate to use together with \fBcompact\fR. .TP \fBkeywords\-lowercase\fR (16): Output Fortran keywords in lowercase, instead of the default uppercase. .TP \fBvars\-and\-consts\-lowercase\fR (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. .TP \fBexclude\-sftran3\fR (64): Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, .BR xsf3 (1L), as part of the translation of structured Fortran statements to ordinary Fortran. These variables have six-character names of the form .IR NPRddd , .IR NXdddd , .IR N2dddd , and .IR N3dddd , where .I d is a decimal digit. Because they are invisible in the SFTRAN3 source code, and will change if the SFTRAN3 code is modified, such variables should not be explicitly declared. Instead, they should just assume the default Fortran INTEGER data type based on their initial letter, .IR N . .TP \fBasterisk\-comment\fR (128): Use an asterisk as the comment character; the default is otherwise 'C'. .TP \fBcomment\-char\-lowercase\fR (256): Use 'c' instead of 'C' or '*' as the comment character. .TP \fBsuppress\-array\-dimensions\fR (512): Suppress dimensioning of arrays in the generated declarations. This option is for use with code lacking type declarations, to allow the declaration files to be inserted without change into the code. Since the code will have dimension statements already, dimensioning the array variables in the type statements of the declaration file is redundant. This option should be used only in conjunction with option 2 = undeclared-only because otherwise any arrays that were dimensioned in a type statement will lose their dimensioning. .TP \fBfree\-form\fR (1024): Produce declarations in free source form. This mode is automatically used if the input source is free form. Use this option to produce declarations in free form even if the input is in fixed form. Free form declarations are indented only 2 columns instead of 6, use the exclamation mark as the comment character, and indicate continuation lines by an ampersand at the end of the line to be continued. .PP The declaration files contain distinctive comments that mark the start and end of declarations for each program unit, to facilitate using text editor macros for merging the declarations back into the source code. .PP The \fBftnchek\fP distribution includes a program, \fBdcl2inc\fP, which processes declaration files to produce files containing declarations of all COMMON blocks, in a form suitable for use as INCLUDE files. See the .BR dcl2inc (1L) man page for the details of its use. .PP See also: \fB\-mkhtml\fP. .RE .ie \nh \{ .in 0 3 /mkhtml=list .PP \} .el \{ .TP .BI \-mkhtml= list .RS \} Produce HTML documentation from source. Creates individual HTML files from ftnchek analysis and code comments. All comments immediately preceding and following the function or subroutine definition are captured to the HTML file. No reformatting of source comments is performed other than stripping of FORTRAN comment characters. In addition, the HTML file lists the local variables declared, common block variables used, functions and subroutines called, I/O unit usage, and other information about each subprogram. Usually you will also want to specify \fB\-call=tree\fP to create the root HTML file \fCCallTree.html\fR. (Perhaps this file should be named \fCindex.html\fR.) .PP Various options for the form of the HTML files are controlled by the \fIlist\fP, which consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the options, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-mkhtml\fP is equivalent to \fB\-mkhtml=documents\fP (i.e. produce the HTML document files using the default options), and \fB\-nomkhtmls\fP is equivalent to \fB\-mkhtml=none\fP. .PP For the sake of simplicity, the options for \fB\-mkhtml\fP are the same as those for \fB\-makedcls\fP except for those that are inapplicable. Likewise, a numeric form of this setting can be used, formed as the sum of the numbers in parentheses in the list below. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBdocuments\fR (1): Create the HTML documents. (This is implied by any of the other options, and can be omitted if any other options are given.) .TP \fBcompact\fR (4): The declarations are normally prettyprinted to line up neatly in common columns. This option value selects instead compact output, without column alignment. .TP \fBuse\-continuation\-lines\fR (8): Causes continuation lines to be used instead of beginning a new declaration on each line. This option is appropriate to use together with \fBcompact\fR. .TP \fBkeywords\-lowercase\fR (16): Output Fortran keywords in lowercase, instead of the default uppercase. .TP \fBvars\-and\-consts\-lowercase\fR (32): Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option. .TP \fBexclude\-sftran3\fR (64): Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, .BR xsf3 (1L). (See \fB\-makedcls\fP for discussion.) .TP \fBsuppress\-array\-dimensions\fR (512): Suppress dimensioning of arrays in the generated declarations. This is normally undesirable, but is available if for some reason you do not want the array dimensions to appear in the HTML. .TP \fBfree\-form\fR (1024): Produce variable declarations in free source form. This mode is automatically used if the input source is free form. This mainly affects the form of continuation lines if they are used. .PP See also: \fB\-calltree\fP, \fB\-makedcls\fP. .RE .ie \nh \{ .in 0 3 /novice .PP \} .el \{ .TP .B \-novice .RS \} This flag is intended to provide more helpful output for beginners. It has two effects: .TP \w'1.'u+2n (a) provides an extra message to the effect that a function that is used but not defined anywhere might be an array which the user forgot to declare in a \fCDIMENSION\fR statement (since the syntax of an array reference is the same as that of a function reference). .TP \w'1.'u+2n (b) modifies the form of the error messages and warnings. If the flag is turned off by \fB\-nonovice\fP, these messages are printed in a style more resembling UNIX \fBlint\fP. .PP Default = yes. .RE .ie \nh \{ .in 0 3 /output=filename .PP \} .el \{ .TP .BI \-output= filename \} This setting is provided for convenience on systems which do not allow easy redirection of output from programs. When this setting is given, the output which normally appears on the screen will be sent instead to the named file. Note, however, that operational errors of \fBftnchek\fP itself (e.g. out of space or cannot open file) will still be sent to the screen. The extension for the filename is optional, and if no extension is given, the extension \fI.\|lis\fP will be used. .ie \nh \{ .in 0 3 /pointersize=num .PP \} .el \{ .TP .BI \-pointersize= num .RS \} Specifies the size of a ``Cray pointer'' variable to be \fInum\fP bytes. Default = turn-on = 4 bytes. .PP The pointer size is used to inform precision mismatch warnings involving pointer variables, for example when a pointer is assigned a value from an allocation routine, or passed as a subprogram parameter. .PP See also: \fB\-f77\fP, \fB\-portability\fP, \fB\-truncation\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /portability=list .PP \} .el \{ .TP .BI \-portability= list .RS \} \fBftnchek\fP will give warnings for a variety of non-portable usages. Examples include the use of tabs except in comments or inside strings, the use of Hollerith constants, and the equivalencing of variables of different data types. This option does not produce warnings for supported extensions to the Fortran 77 Standard, which may also cause portability problems. To catch those, use the \fB\-f77\fP setting. By default, all warnings are turned off. .PP This setting provides detailed control over the warnings about possible portability problems. The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the warnings about nonportable usages, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-portability\fP is equivalent to \fB\-portability=all\fP, and \fB\-noportability\fP is equivalent to \fB\-portability=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBbackslash\fP: Backslash character in strings. Since some compilers treat the backslash as an escape character, its presence can cause problems even though it is used in a standard-conforming way. .TP \fBcommon\-alignment\fP: COMMON block variables not in descending order of storage size. Some compilers require this ordering because of storage alignment requirements. .TP \fBhollerith\fP: Hollerith constants (other than within FORMAT specifications). The Hollerith data type is a feature of Fortran IV that has been deleted in the Fortran 77 standard. It is superseded by the character data type. Storing Hollerith data in variables of a numeric or logical data type is nonportable due to differing word sizes. .TP \fBlong\-string\fP: String constants, variables, or expressions over 255 chars long. .TP \fBmixed\-equivalence\fP: Variables of different data types equivalenced. .TP \fBmixed\-size\fP: Variables declared with default precision used with variables given explicit precision, in expressions, assignments, or as arguments. For example, if a variable declared as \fCREAL*8\fR is treated as equivalent to \fCDOUBLE PRECISION\fR. .TP \fBreal\-do\fP: Non-integer DO loop index and bounds. These can cause a program's results to depend on the hardware characteristics of the particular computer used. .TP \fBparam\-implicit\-type\fP: Implicit typing of a parameter by the data type of the value assigned, if it differs from the default type. This warning can only occur if implicit parameter typing has been turned on by the \fB\-source=param\-implicit\-type\fP option, or if the \fCPARAMETER\fR statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs and where the implicit type is different from the default type based on the first letter of the parameter name, will be warned about. Implicit parameter typing can change the semantics of statements where the parameter is used, causing portability problems. .TP \fBtab\fP: Tabs in source code. Tabs are interpreted differently by different compilers. This warning will be given only once, at the end of the file. .PP See also: \fB\-f77\fP, \fB\-f90\fP, \fB\-f95\fP, \fB\-pretty\fP, \fB\-style\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /pretty=list .PP \} .el \{ .TP .BI \-pretty= list .RS \} Controls certain messages related to the appearance of the source code. These warn about things that might make a program less readable or be deceptive to the reader. By default, all warnings are turned on. .PP This setting provides detailed control over the warnings about appearance. The \fIlist\fP consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings about misleading appearances, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-pretty\fP is equivalent to \fB\-pretty=all\fP, and \fB\-nopretty\fP is equivalent to \fB\-pretty=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBalternate\-return\fP: A RETURN statement has a constant specifying an alternate return point that is not between 0 and the number of dummy arguments that are labels. This is legal, and has the same effect as a RETURN with no alternate return expression, but suggests that the programmer intended to use an alternate return label that is not provided. .TP \fBembedded\-space\fP: Space embedded in variable names or in multi-character operators such as \fC**\fR. .TP \fBcontinuation\fP: Continuation mark following a comment line. .TP \fBlong\-line\fP: Lines (except comments) over 72 columns in width (beyond 72 is normally ignored by compiler). .TP \fBmissing\-space\fP: Lack of space between variable and a preceding keyword. .TP \fBmultiple\-common\fP: COMMON block declared in multiple statements. No warning is given if the statements are consecutive except for comment lines. .TP \fBmultiple\-namelist\fP: NAMELIST declared in multiple statements. No warning is given if the statements are consecutive except for comment lines. .TP \fBparentheses\fP: Parentheses around a variable by itself. As a subprogram argument, this makes the argument an expression, not modifiable by the subprogram. .PP Note that in free source form, extra space and missing space are forbidden by the Fortran 90 Standard, and are not mere style violations. In this case the warnings are replaced by syntax error messages, and can be turned off only by using \fB\-nocheck\fP. .PP See also: \fB\-f77\fP, \fB\-portability\fP, \fB\-style\fP. .RE .ie \nh \{ .in 0 3 /project=list .PP \} .el \{ .TP .BI \-project= list .RS \} \fBftnchek\fP will create a project file from each source file that is input while this option is turned on. The project file will be given the same name as the input file, but with the extension \fI.\|f\fP or \fI.\|for\fP replaced by \fI.\|prj\fP. (If input is from standard input, the project file is named .IR ftnchek.\|prj .) Default = none. .PP The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the options, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-project\fP is equivalent to \fB\-project=all\fP, and \fB\-noproject\fP is equivalent to \fB\-project=none\fP. The keywords with their meanings are as follows: .TP \w'128:'u+2n \fBcreate\fP: Produce a project file. The default is not to produce a project file. If this option is not turned on, the other options have no effect. .TP \fBtrim\-calls\fP: Trim the amount of information stored in the project file about subprogram declarations and calls. This is the default. Turn this option off only in rare situations. (See discussion below.) The amount of trimming varies depending on the \fB\-library\fP flag. More information is trimmed if that flag is turned on. .TP \fBtrim\-common\fP: Trim the number of common block declarations stored in the project file. This is the default. Turn this option off only in rare situations. (See discussion below.) This option has no effect if the \fB\-library\fP flag is turned off: when not in library mode, no trimming of common block declarations is done regardless of this option. .PP A project file contains a summary of information from the source file, for use in checking agreement among \fCFUNCTION\fR, \fCSUBROUTINE\fR, and \fCCOMMON\fR usages in other files. It allows incremental checking, which saves time whenever you have a large set of files containing shared subroutines, most of which seldom change. You can run \fBftnchek\fP once on each file with the \fB\-project\fP flag set, creating the project files. Usually you would also set the \fB\-library\fP and \fB\-noextern\fP flags at this time, to suppress messages relating to consistency with other files. Only error messages pertaining to each file by itself will be printed at this time. Thereafter, run \fBftnchek\fP without these flags on all the project files together, to check consistency among the different files. All messages internal to the individual files will now be omitted. Only when a file is altered will a new project file need to be made for it. .PP Naturally, when the \fB\-project\fP option is turned on, \fBftnchek\fP will not read project files as input. .PP Ordinarily, the trim options should be left on when you intend to create project files for future input to \fBftnchek\fP. Since trimming is on by default, this means that simply giving the command \fB\-project\fP with no option list is the recommended mode. The trim options are provided only as a convenience for those who want to make use of project files for purposes other than checking the program with \fBftnchek\fP. To use project files for their intended purpose, the trim options should not be turned off. .PP Project files contain only information needed for checking agreement between files. This means that a project file is of no use if all modules of the complete program are contained in a single file. .PP A more detailed discussion is given in the section on Using Project Files. .RE .ie \nh \{ .in 0 3 /pure .PP \} .el \{ .TP .B \-pure .RS \} Assume functions are ``pure'', i.e., they will not have side effects by modifying their arguments or variables in a COMMON block. When this flag is in effect, \fBftnchek\fP will base its determination of set and used status of the actual arguments on the assumption that arguments passed to a function are not altered. It will also issue a warning if a function is found to modify any of its arguments or any COMMON variables. Default = yes. .PP When this flag is turned off, actual arguments passed to functions will be handled the same way as actual arguments passed to subroutines. This means that \fBftnchek\fP will assume that arguments may be modified by the functions. No warnings will be given if a function is found to have side effects. Because stricter checking is possible if functions are assumed to be pure, you should turn this flag off only if your program actually uses functions with side effects. .RE .ie \nh \{ .in 0 3 /quiet .PP \} .el \{ .TP .B \-quiet .RS \} This option reduces the amount of output relating to normal operation, so that error messages are more apparent. This option is provided for the convenience of users who are checking large suites of files. The eliminated output includes the names of project files, and the message reporting that no syntax errors were found. It also eliminates some blank lines that are ordinarily included for clarity. (Some of this output is turned back on by the \fB\-list\fP and \fB\-symtab\fP options.) Default = no. .PP Note: the way to remember the difference between the \fB\-quiet\fP and \fB\-brief\fP is that \fB\-quiet\fP doesn't suppress any warning-related information, whereas \fB\-brief\fP does. .PP See also: \fB\-brief\fP. .RE .ie \nh \{ .in 0 3 /reference .PP \} .el \{ .TP .B \-reference .RS \} Specifies that a who-calls-who table be printed. This table lists each subprogram followed by a list of the routines it calls. This switch is equivalent to \fB\-calltree=reference\fP. Default = no. .PP The reference list omits routines called by unused library modules. Thus it contains the same information as for the call-tree format, namely the hierarchy of subprogram calls, but printed in a different way. This prints out a breadth-first traversal of the call tree whereas \fB\-calltree=tree\fP prints out a depth-first traversal. .PP See also: \fB\-calltree\fP, \fB\-crossref\fP, \fB\-library\fP, \fB\-sort\fP, \fB\-symtab\fP, \fB\-vcg\fP. .RE .ie \nh \{ .in 0 3 /resources .PP \} .el \{ .TP .B \-resources .RS \} Prints the amount of resources used by \fBftnchek\fP in processing the program. This listing may be useful in analyzing the size and complexity of a program. It can also help in choosing larger sizes for \fBftnchek\fP's internal tables if they are too small to analyze a particular program. Default = no. .PP In this listing, the term ``chunk size'' is the size of the blocks of memory allocated to store the item in question, in units of the size of one item, not necessarily in bytes. When the initially allocated space is filled up, more memory is allocated in chunks of this size. The following is an explanation of the items printed: .TP \w'1.'u+2n .I "Source lines processed:" Total number of lines of code, with separate totals for statement lines and comment lines. Comment lines include lines with 'C' or '*' in column 1 as well as blank lines and lines containing only an inline comment. Statement lines are all other lines, including lines that have an inline comment following some code. Continuation lines are counted as separate lines. Lines in include files are counted each time the file is included. .TP \w'1.'u+2n .I "Total executable statements:" Number of statements in the program, other than specification, data, statement-function, FORMAT, ENTRY, and END statements. .TP \w'1.'u+2n .I "Total number of modules:" A module is any external subprogram, including the main program, subroutines, functions, and block data units. This count is of modules defined within the source, not modules referenced. Statement functions are not included. A subprogram with multiple entry points is only counted once. .TP \w'1.'u+2n .I "Total statement labels defined" Number of labels attached to statements (often called statement numbers). The total label count for the entire program is given, as well as the maximum number in any single subprogram. .TP \w'1.'u+2n .I "Max identifier name chars:" Number of characters used for storing identifier names. An identifier is a variable, subprogram, or common block name. Local names are those of local variables in a subprogram, whereas global names refer to subprogram and common block names, as well as dummy argument names and common variable names. Actual argument text (up to 15 characters for each argument) is also included here. The space used for local names is not recovered at the end of each module, so this number, like global space, grows until the whole program is analyzed. Unfortunately, this figure may include some text stored more than once, although a heuristic is used that will avoid duplicates in many cases. .TP \w'1.'u+2n .I "Max token text chars:" A token is the smallest syntactic unit of the FORTRAN language above the level of individual characters. For instance a token can be a variable name, a numerical constant, a quoted text string, or a punctuation character. Token text is stored while a module is being processed. For technical reasons, single-character tokens are not included in this total. Items that are not represented in the symbol table may be duplicated. The space for token text is recovered at the end of each module, so this figure represents the maximum for any one module. .TP \w'1.'u+2n .I "Max local symbols:" This is the largest number of entries in the local symbol table for any module. Local symbol table entries include all variables and parameters, common block names, statement functions, external subprograms and intrinsic functions referenced by the module. Literal constants are not stored in the local symbol table. .TP \w'1.'u+2n .I "Max global symbols:" This is the number of entries in the global symbol table at the end of processing. Global symbol table entries include external subprogram and common block names. Intrinsic functions and statement functions are not included. .TP \w'1.'u+2n .I "Max number of tokenlists:" A token list is a sequence of tokens representing the actual or dummy argument list of a subprogram, or the list of variables in a common block or namelist. Therefore this number represents the largest sum of COMMON, CALL, NAMELIST and ENTRY statements and function invocations for any one module. The space is recovered at the end of each module. .TP \w'1.'u+2n .I "Max token list/tree space:" This is the largest number of tokens in all the token lists and token trees of any one module. A token tree is formed when analyzing an expression: each operand is a leaf of the tree, and the operators are the nodes. Therefore this number is a measure of the maximum complexity of an individual module. For instance a module with many long arithmetic expressions will have a high number. Note that unlike token text described above, the number of tokens is independent of the length of the variable names or literal constants in the expressions. .TP \w'1.'u+2n .I "Number of subprogram invocations:" This is the sum over all modules of the number of CALL statements and function invocations (except intrinsic functions and statement functions). .TP \w'1.'u+2n .I "Number of common block decls:" This is the sum over all modules of the number of common block declarations. That is, each declaration of a block in a different module is counted separately. (The standard allows multiple declarations of a block within the same module; these are counted as only one declaration since they are equivalent to a single long declaration.) .TP \w'1.'u+2n .I "Number of array dim & param ptrs:" This is the sum over all modules of the number of array dimension and parameter definition text strings saved for use by the \fB\-makedcls\fP option. The length of the text strings is not counted. Each dimension of a multidimensional array is counted separately. .PP These numbers are obviously not the same when project files are used in place of the original source code. Even the numbers for global entities may be different, since some redundant information is eliminated in project files. .RE .ie \nh \{ .in 0 3 /sixchar .PP \} .el \{ .TP .B \-sixchar .RS \} One of the goals of the \fBftnchek\fP program is to help users to write portable Fortran programs. One potential source of nonportability is the use of variable names that are longer than six characters. Some compilers just ignore the extra characters. This behavior could potentially lead to two different variables being considered as the same. For instance, variables named \fCAVERAGECOST\fR and \fCAVERAGEPRICE\fR are the same in the first six characters. If you wish to catch such possible conflicts, use this flag. Default = no. .PP Use the \fB\-f77=long\-names\fP if you want to list \fIall\fP variables longer than six characters, not just those pairs that are the same in the first six. .PP See also: \fB\-f77\fP, \fB\-portability\fP. .RE .ie \nh \{ .in 0 3 /sort .PP \} .el \{ .TP .B \-sort .RS \} Specifies that a sorted list of all modules used in the program be printed. This list is in ``prerequisite'' order, i.e. each module is printed only after all the modules from which it is called have been printed. This is also called a ``topological sort'' of the call tree. Each module is listed only once. Routines that are not in the call tree of the main program are omitted. If there are any cycles in the call graph (illegal in standard Fortran) they will be detected and diagnosed. Default = no. .PP See also: \fB\-calltree\fP, \fB\-crossref\fP, \fB\-reference\fP, \fB\-symtab\fP, \fB\-vcg\fP. .RE .ie \nh \{ .in 0 3 /source=list .PP \} .el \{ .TP .BI \-source= list .RS \} This setting controls certain options about the form of the Fortran source code. The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the options, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-source\fP is equivalent to \fB\-source=all\fP, and \fB\-nosource\fP is equivalent to \fB\-source=none\fP. .PP For compatibility with previous versions of \fBftnchek\fP, a numeric form of this setting is also accepted: the \fIlist\fP is replaced by a number which is the sum of the numbers in parentheses beside the keywords in the following list. (The \fBfixed\fP and \fBfree\fP options do not have numeric values.) The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBfixed\fP: Interpret the source as fixed form (with supported extensions such as exclamation mark for comments). Statements must be in columns 7 to 72 (unless the \fB\-cols\fP setting has been used to change this), and blanks are not significant outside character context (but warned about under the \fB\-pretty\fP option). This is the default mode unless the source file extension is \fI.\|f90\fP or \fI.\|F90\fP. this option cannot be given together with \fB\-source=free\fP. .TP \fBfree\fP: Interpret the source as free form. Statements may be anywhere in columns 1 to 132, comments can only begin with an exclamation mark, and blanks are required in some places such as between identifiers and keywords. This is the default mode if the source file extension is \fI.\|f90\fP or \fI.\|F90\fP. This option cannot be given together with \fB\-source=fixed\fP or \fB\-source=dec\-tab\fP .TP \fBdec\-tab\fP (1): Accept DEC-style tab-formatted source. A line beginning with an initial tab will be treated as a new statement line unless the character after the tab is a nonzero digit, in which case it is treated as a continuation line. The next column after the tab or continuation mark is taken as column 7. A warning will be given in the case where the line is a continuation, if \fB\-f77=dec\-tab\fP is in effect. .TP \fBvms\-include\fP (2): Accept VMS-style \fCINCLUDE\fR statements. These follow the normal syntax, but with the following additional features: (1) the file extension, if not given, defaults to the same as a normal source file extension; and (2) the option \fC/LIST\fR or \fC/NOLIST\fR can be appended to the include-file name, to control listing of its contents. .TP \fBunix\-backslash\fP (4): Handle UNIX-style backslash escapes in character strings. The escape sequence following the backslash will be evaluated according to the ANSI standard for strings in C: up to three digits signify an octal value, an x signifies the start of a hexadecimal constant, any of the letters a b f n r t signify special control codes, and any other character (including newline) signifies the character itself. When this source code option is in effect, a warning will be given if the \fB\-f77=backslash\fP setting is specified. .IP The default behavior is to treat the backslash like any other normal character, but a warning about portability will be generated if the \fB\-portability\fP flag is set. Because of the fact that some compilers treat the backslash in a nonstandard way, it is possible for standard-conforming programs to be non-portable if they use the backslash character in strings. .IP Since \fBftnchek\fP does not do much with the interpreted string, it is seldom necessary to use this option. It is needed in order to avoid spurious warnings only if (a) the program being checked uses backslash to embed an apostrophe or quote mark in a string instead of using the standard mechanism of doubling the delimiter; (b) the backslash is used to escape the end-of-line in order to continue a string across multiple source lines; or (c) a \fCPARAMETER\fR definition uses an intrinsic string function such as \fCLEN\fR with such a string as argument, and that value is later used to define array dimensions, etc. .TP \fBparam\-implicit\-type\fP (8): Implicit typing of a parameter by the data type of the value assigned. Some non-standard compilers may allow the data type of the value to override the Fortran 77 default type of a parameter that is based on the first letter of the parameter name. This option only applies to \fCPARAMETER\fR statements of the standard form which has parentheses. A parameter that has been explicitly declared in a type statement prior to the \fCPARAMETER\fR statement is not affected by this option. A warning will be given under the \fB\-f77=param\-implicit\-type\fP or \fB\-portability=param\-implicit\-type\fP option. .IP Note that this implicit typing is treated as equivalent to an explicit type declaration for the parameter. Therefore, if you use \fB\-makedcls=undeclared\-only\fP to generate declarations only of undeclared variables, these parameters will \fInot\fP be included. .TP \fBdec\-param\-standard\-type\fP (16): Follow the Fortran 77 rule for data typing of DEC Fortran style parameters. These are declared using a nonstandard form of the \fCPARAMETER\fR statement which lacks parentheses. According to DEC Fortran, parameters defined by this form of the statement have their data type given by the data type of the value assigned. Use this option to tell \fBftnchek\fP not to follow this rule but instead to use the same rule as for standard \fCPARAMETER\fR statements. This option does not apply to \fCPARAMETER\fR statements of the standard form. .PP By default, all these source code options are turned off, except for the \fBvms\-include\fP option, which is on by default in the VMS version.. .PP See also: \fB\-f77\fP, \fB\-include\fP, \fB\-portability\fP. .RE .ie \nh \{ .in 0 3 /style=list .PP \} .el \{ .TP .BI \-style= list .RS \} Provides extra-picky warnings about obsolescent or old-fashioned programming constructions. This option is helpful for efforts to follow a modern programming style. (Most of the things complained about under this option are forbidden in the \fBF\fC subset language.) By default, all warnings are turned off. .PP The \fIlist\fP consists of keywords separated by commas or colons. There are three special keywords: \fBall\fP to turn on all the options, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-style\fP is equivalent to \fB\-style=all\fP, and \fB\-nostyle\fP is equivalent to \fB\-style=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBblock\-if\fP: Complain about arithmetic IF statement. Accept block IF or logical IF (which controls a single statement). .TP \fBconstruct\-name\fP: Complain about unnamed block constructs: IF, DO, and SELECT CASE. Note that if a construct name is present on the opening statement of a construct, then it is required to be present on all other component statements (ELSE, END IF, etc.) of the construct. In that case a missing construct name on those statements generates a syntax error regardless of this option. The purpose of this option is to warn if the construct completely lacks the optional name. .TP \fBdistinct\-do\fP: Complain if two DO loops share a common terminator statement. .TP \fBdo\-construct\fP: Complain if terminator of a DO loop is anything other than an END DO or CONTINUE statement. This is the requirement in order for the loop to meet the Fortran 90 definition of a do-construct. .TP \fBdo\-enddo\fP: Complain if terminator of a DO loop is anything other than an END DO statement. (This option overrides the \fBdo\-construct\fP option, being even stricter.) .TP \fBend\-name\fP: Complain about the absence of the subprogram name on structured END statements. .TP \fBformat\-stmt\fP: Complain about the presence of FORMAT statements. Only the FORMAT statements themselves are flagged, not the references to them in I/O lists. .TP \fBgoto\fP: Complain about the presence of unconditional, computed or assigned GOTO statements. Also complain about alternate returns (but not about labels as subprogram arguments). .TP \fBlabeled\-stmt\fP: Complain about the presence of labels (numbers) on statements other than FORMAT statements. (Since FORMAT statements are arguably convenient and not readily abused, complaints about them are controlled by the separate \fBformat\-stmt\fP keyword.) .TP \fBprogram\-stmt\fP: Complain about the absence of a PROGRAM statement at the head of the main program. .TP \fBstructured\-end\fP: Complain about the use of a plain END statement to end a subprogram, rather than a structured END statement (END PROGRAM, END SUBROUTINE, END FUNCTION, or END BLOCK DATA). .PP See also: \fB\-f77\fP, \fB\-f90\fP, \fB\-f95\fP, \fB\-pretty\fP, \fB\-portability\fP. .RE .ie \nh \{ .in 0 3 /symtab .PP \} .el \{ .TP .B \-symtab .RS \} A symbol table will be printed out for each module, listing all identifiers mentioned in the module. This table gives the name of each variable, its datatype, and the number of dimensions for arrays. An asterisk (*) indicates that the variable has been implicitly typed, rather than being named in an explicit type declaration statement. The table also lists all subprograms invoked by the module, all COMMON blocks declared, etc. Default = no. .PP Also, for each module, a label table will be printed. The table lists each label defined in the module; the line on which said statement label is defined; and the statement type (executable, format, or specification). The labels are listed in sequential order. .PP Also printed is a table describing the I/O units used by the module, together with information about how they are used: what operations are performed, whether the access is sequential or direct, and whether the I/O is formatted or unformatted. .PP See also: \fB\-calltree\fP, \fB\-crossref\fP, \fB\-list\fP, \fB\-reference\fP, \fB\-sort\fP, \fB\-vcg\fP. .RE .ie \nh \{ .in 0 3 /truncation=list .PP \} .el \{ .TP .BI \-truncation= list .RS \} Warn about possible truncation (or roundoff) errors. Most of these are related to integer arithmetic. By default, all warnings are turned on. .PP This setting provides detailed control over the warnings about possible truncation errors. The \fIlist\fP consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings about truncation, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-truncation\fP is equivalent to \fB\-truncation=all\fP, and \fB\-notruncation\fP is equivalent to \fB\-truncation=none\fP. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBint\-div\-exponent\fP: use of the result of integer division as an exponent. This suggests that a real quotient is intended. An example would be writing \fCX**(1/3)\fR to evaluate the cube root of \fCX\fR. The correct expression is \fCX**(1./3.)\fR. .TP \fBint\-div\-real\fP: Conversion of an expression involving an integer division to real. This suggests that a real quotient is intended. .TP \fBint\-div\-zero\fP: division in an integer constant expression that yields a result of zero. .TP \fBint\-neg\-power\fP: exponentiation of an integer by a negative integer (which yields zero unless the base integer is 1 in magnitude). This suggests that a real base is intended. .TP \fBpromotion\fP: automatic conversion of a lower precision quantity to one of higher precision. The loss of accuracy for real variables in this process is comparable to the corresponding demotion. No warning is given for promotion of integer quantities to real since this is ordinarily exact. .TP \fBreal\-do\-index\fP: use of a non-integer DO index in a loop with integer bounds. An integer DO index with real bounds is always warned about regardless of this setting. .TP \fBreal\-subscript\fP: use of a non-integer array subscript. .TP \fBsignificant\-figures\fP: overspecifying a single precision constant. This may indicate that a double precision constant was intended. .TP \fBsize\-demotion\fP: automatic conversion of a higher precision quantity to one of lower precision of the same type. This warning only occurs when an explicit size is used in declaring the type of one or both operands in an assignment. For example, a warning wil be issued where a \fCREAL*8\fR variable is assigned to a \fCREAL\fR variable, if the default wordsize of 4 is in effect. A warning is also issued if a long integer is assigned to a shorter one, for example, if an \fCINTEGER\fR expression is assigned to an \fCINTEGER*2\fR variable. There is one exception to this last case, namely if the right hand side of the assignment is a small literal constant (less than 128). \fBtype\-demotion\fP: automatic conversion of a higher precision quantity to one of lower precision of different type. This warning includes conversion of real quantities to integer, double precision to single precision real, and assignment of a longer character string to a shorter one. .PP The warnings about promotion and demotion also apply to complex constants, considering the precision to be that of the real or imaginary part. Warnings about promotions and demotions are given only when the conversion is done automatically, e.g. in expressions of mixed precision or in an assignment statement. If intrinsic functions such as \fCINT\fR are used to perform the conversion, no warning is given. .PP See also: \fB\-portability\fP, \fB\-wordsize\fP. .RE .ie \nh \{ .in 0 3 /usage=list .PP \} .el \{ .TP .BI \-usage= list .RS \} Warn about unused or possible uninitialized variables, unused common blocks, undefined or unused statement labels, and unused or undefined subprograms. By default, all warnings are turned on. .PP This setting provides detailed control over the warnings about possible usage errors. The \fIlist\fP consists of keywords separated by commas or colons. Since all warnings are on by default, include a keyword prefixed by \fBno\-\fP to turn off a particular warning. There are three special keywords: \fBall\fP to turn on all the warnings about usage, \fBnone\fP to turn them all off, and \fBhelp\fP to print the list of all the keywords with a brief explanation of each. If \fIlist\fP is omitted, \fB\-usage\fP is equivalent to \fB\-usage=all\fP, and \fB\-nousage\fP is equivalent to \fB\-usage=none\fP. These warnings cover four main categories of objects: subprogram dummy arguments, common blocks and variables, subprograms and functions, and local variables. Warnings include undefined items, multiply defined items, unused items, etc. The warning keywords with their meanings are as follows: .TP \w'128:'u+2n \fBarg\-alias\fP: a scalar dummy argument is actually the same as another and is (or may be) modified. The Fortran 77 standard (section 15.9.3.6) prohibits modifying an argument that is aliased to another. .TP \fBarg\-array\-alias\fP: a dummy argument which is an array or array element is in the same array as another and is modified. This flag is similar to \fBarg\-alias\fP but provides separate control over array arguments. It is harder to tell if aliasing is occurring in the case of arrays, so if \fBftnchek\fP gives too many false warnings, this flag allows the array-related ones to be turned off without suppressing the warnings for scalars. .TP \fBarg\-common\-alias\fP: a scalar dummy argument is the same as a common variable in the subprogram, and either is modified. This is also prohibited by the Fortran 77 standard. If common checking is not exact (see the \fB\-common\fP setting), it is harder to tell if aliasing is occurring, so the warning is given if the variable is anywhere in a common block that is declared by the subprogram. .TP \fBarg\-common\-array\-alias\fP: a dummy argument which is an array or array element is in the same array as a common variable, and either is modified. If common checking is not exact, the variable can be anywhere in a common block that is declared by the subprogram. .TP \fBarg\-const\-modified\fP: a subprogram modifies an argument which is a constant or an expression. Such an action could cause anomalous behavior of the program. .TP \fBarg\-unused\fP: a dummy argument is declared but never used. This is similar to the \fBvar\-unused\fP keyword described below, but applies only to arguments. .TP \fBcom\-block\-unused\fP: a common block is declared but none of the variables in it are used by any subprogram. This warning is suppressed if the common strictness setting is 0. .TP \fBcom\-block\-volatile\fP: a common block may lose the definition of its contents if common blocks are volatile. This option only has an effect if the \fB\-common=volatile\fP flag is in effect. See the discussion of the \fB\-common\fP setting above. .TP \fBcom\-var\-set\-unused\fP: a common variable is assigned a value, but its value is not used by any subprogram. This warning is suppressed if the common strictness setting is 0. .TP \fBcom\-var\-uninitialized\fP: a common variable's value is used in some subprogram, but is not set anywhere. Unfortunately, \fBftnchek\fP does not do a thorough enough analysis of the calling sequence to know which routines are called before others. So warnings about this type of error will only be given for cases in which a variable is used in some routine but not set in any other routine. Checking of individual COMMON variables is done only if the \fB\-common\fP setting is 3 (variable by variable agreement). This warning is suppressed if the common strictness setting is 0. .TP \fBcom\-var\-unused\fP: a common variable is declared but not used by any subprogram. This warning is suppressed if the common strictness setting is 0. .TP \fBdo\-index\-modified\fP: a variable that is the index of a DO loop is modified by some statement within the range of the loop. The Standard permits an active DO variable to be modified only by the incrementation mechanism of the DO statement. .TP \fBext\-multiply\-defined\fP: an external (a subroutine or function) is defined more than once. Definition of an external means providing the body of its source code. .TP \fBext\-declared\-only\fP: a name is declared in an \fCEXTERNAL\fR statement in some module, but is not defined or used anywhere. .TP \fBext\-undefined\fP: an external is used (invoked) but not defined anywhere. This option is equivalent to the \fB\-external\fP flag. If the subprogram is invoked more than once, those invocations will still be checked for consistency. .TP \fBext\-unused\fP: an external is defined (its subprogram body is present) but it is not used. A subprogram is considered unused even if it is invoked by some other subprogram, if it cannot be called from any thread of execution starting with the main program. The agreement of the subprogram's arguments with its invocations is still checked even if this warning is turned off. If there is no main program, then this warning is issued only if the subprogram is not invoked anywhere. This warning is suppressed in library mode, but library mode has the additional effect of suppressing argument checking for unused routines. .TP \fBlabel\-undefined\fP: a statement refers to a label that has not been defined. .TP \fBlabel\-unused\fP: a statement label is defined, but never referred to. .TP \fBvar\-set\-unused\fP: a local variable is assigned a value, but that value is not used. .TP \fBvar\-uninitialized\fP: a local variable's value may be used before it is assigned. Sometimes \fBftnchek\fP makes a mistake in the warnings about local variable usage. Usually it errs on the side of giving a warning where no problem exists, but in rare cases it may fail to warn where the problem does exist. See the section on Bugs for examples. If variables are equivalenced, the rule used by \fBftnchek\fP is that a reference to any variable implies the same reference to all variables it is equivalenced to. For arrays, the rule is that a reference to any array element is treated as a reference to all elements of the array. .TP \fBvar\-unused\fP: a local variable is declared (for instance, in a type declaration) but is not used in the module. Does not apply to dummy arguments: warnings about them are controlled by the keyword \fBarg\-unused\fP described above. .PP Note: In versions of \fBftnchek\fP prior to 2.10, the \fB\-usage\fP flag took a numeric argument instead of a list of options. For the sake of users who may have written scripts invoking \fBftnchek\fP in this way, the numeric form is still accepted. The numeric setting is composed of three digits. The first digit (hundreds place) controls warnings about subprograms (functions and subroutines), the second digit (tens place) warnings about common blocks and common variables,, and the third digit (ones place) warnings about local variables. Each digit controls warnings according to the convention that a 1 means warn about undefined items and variables that are used before set, a 2 means warn about items that are unused, and a 3 means warn about both types. These numbers are now converted to the appropriate values for the above-listed keywords, except for \fBcom\-block\-volatile\fP, which is not affected by the numeric argument. .PP See also: \fB\-common\fP, \fB\-declare\fP, \fB\-extern\fP, \fB\-library\fP. .RE .ie \nh \{ .in 0 3 /vcg .PP \} .el \{ .TP .B \-vcg .RS \} Produce the call graph in the form of a VCG graph description. This description is written to a separate file, with the same stem as the file containing the main program, and suffix .IR .vcg . This file is able to be given directly to .BR xvcg (1L) to visualize the call graph. (If input is from the standard input, then the graph description is sent to standard output.) This switch is equivalent to \fB\-calltree=vcg\fP. Default = no. .PP The VCG description as created is more complex than it need be. VCG allows graphs and nested subgraphs: each subroutine is created as a subgraph nested inside its calling routines. This allows you to interactively display subgraphs or summarise them. .PP The .B \-vcg option for .B ftnchek was written by Dr. Philip Rubini of Cranfield University, UK. .PP \fBxvcg\fP is a graph visualisation tool which runs under the X windows system. It is freely available from ftp.cs.uni\-sb.de. It was written by G. Sander of the University of Saarland, Germany. .PP See also: \fB\-calltree\fP, \fB\-crossref\fP, \fB\-reference\fP, \fB\-sort\fP. .RE .ie \nh \{ .in 0 3 /version .PP \} .el \{ .TP .B \-version .RS \} This option causes \fBftnchek\fP to print a line giving the version number, release date, and patch level of the program. If no files are given, it then exits. If files are given, the effect of this option is to include the patch level (normally omitted) in the version information printed at the start of processing. Default = no. .PP See also: \fB\-help\fP. .RE .ie \nh \{ .in 0 3 /volatile .PP \} .el \{ .TP .B \-volatile .RS \} Assume that COMMON blocks are volatile. Default = no. .PP This flag is superseded by \fB\-common=volatile\fP, and should no longer be used. It may be eliminated in a future release of \fBftnchek\fP. .PP See also: \fB\-common\fP, \fB\-usage\fP. .RE .ie \nh \{ .in 0 3 /wordsize=num .PP \} .el \{ .TP .BI \-wordsize= num .RS \} Specifies the default word size to be \fInum\fP bytes. This is the size of logical and single-precision numeric variables that are not given explicit precisions. (Explicit precisions for non-character variables are an extension to the Fortran 77 Standard, and are given by type declarations such as \fCREAL*8 X\fR.) Double-precision and complex variables will be twice this value, and double complex variables four times. Quad-precision constants and intrinsic function results will be four times this value. Note that variables declared as \fCREAL*16\fR will be regarded as quad precision only if the word size is 4 bytes. Default = turn-on = 4 bytes. .PP The word size value does not matter for checking standard-conforming programs that do not declare explicit precisions for non-character variables or store Hollerith data in variables. This setting also does not affect the default size of character variables, which is always 1 byte. Hollerith constants also are assumed to occupy 1 byte per character. .PP The word size is used to determine whether truncation occurs in assignment statements, and to catch precision mismatches in subprogram argument lists and common block lists. The exact warnings that are issued will depend on the status of other flags. Under both the \fB\-portability=mixed\-size\fP and the \fB\-nowordsize\fP flag, any mixing of explicit with default precision objects (character expressions not included) is warned about. This applies to arithmetic expressions containing both types of objects, and to subprogram arguments and COMMON variables. Under control of the \fB\-truncation=demotion\fP and \fBpromotion\fP options, a warning is given for assignment of an expression to a shorter variable of the same type, or for promotion of a lower precision value to higher precision in an arithmetic expression or an assignment statement. .PP Giving a word size of 0, or equivalently, using \fB\-nowordsize\fP means that no default value will be assumed. This is equivalent to specifying \fB\-portability=mixed\-size\fP. Use it to find cases of mixing default and explicit precision, for example to flag places where \fCREAL*8\fR is treated as equivalent to \fCDOUBLE PRECISION\fR. .PP See also: \fB\-pointersize\fP, \fB\-portability\fP, \fB\-truncation\fP. .RE .ie \nh \{ .in 0 3 /wrap=col .PP \} .el \{ .TP .BI \-wrap= col \} Controls the wrapping of error messages. Long error messages that would run past the specified column will be broken up into separate lines between the words of the message for better readability. If turned off with \fB\-nowrap\fP, each separate error message will be printed on one line, leaving it up to the display to wrap the message or truncate it. Default = turn-on = 79. .ie \nh \{ .in 0 2 Changing_the_defaults .PP \} .el \{ .SH "CHANGING THE DEFAULTS" \} \fBftnchek\fP includes two mechanisms for changing the default values of all options: by defining environment variables or by creating a preferences file. When \fBftnchek\fP starts up, it looks in its environment for any variables whose names are composed by prefixing the string \fCFTNCHEK_\fR onto the uppercased version of the option name. If such a variable is found, its value is used to specify the default for the corresponding switch or setting. In the case of settings (for example, the \fB\-common\fP strictness setting) the value of the environment variable is read as the default setting value. In the case of switches, the default switch will be taken as true or yes unless the environment variable has the value \fC0\fR or \fCNO\fR. .PP Note that the environment variable name must be constructed with the full-length option name, which must be in uppercase. For example, to make \fBftnchek\fP print a source listing by default, set the environment variable \fCFTNCHEK_LIST\fR to \fC1\fR or \fCYES\fR or anything other than \fC0\fR or \fCNO\fR. The names \fCFTNCHEK_LIS\fR (not the full option name) or \fCftnchek_list\fR (lower case) would not be recognized. .ie \nh \{ The way to set the environment variables on the VMS system is by using the DEFINE command. For example, to set the default /list switch to YES, give the command .sp 1 .ti 5 $ DEFINE FTNCHEK_LIST 1 \} .el \{ .PP Here are some examples of how to set environment variables on various systems. For simplicity, all the examples set the default \fB\-list\fP switch to \fCYES\fR. .PP .\" groff gives bad alignment on case 1 and I haven't found a workaround .fc > @ .if n .ta 30 +30 .if t .ta 2i +3i >1. UNIX, Bourne shell: >\fC$ FTNCHEK_LIST=YES\fR .\" groff gives bad alignment here and I haven't found a workaround .br > >\fC$ export FTNCHEK_LIST\fR >2. UNIX, C shell: >\fC% setenv FTNCHEK_LIST YES\fR >3. VAX/VMS: >\fC$ DEFINE FTNCHEK_LIST YES\fR >4. MSDOS: >\fC$ SET FTNCHEK_LIST=YES\fR .fc \} .PP After processing any environment variables, ftnchek looks for a preferences file containing options and settings. It will search in the following order, using only the first file found: (1) \fI.\|ftnchekrc\fP in the current directory, (2) \fIftnchek.\|ini\fP in the current directory, (3) \fI.\|ftnchekrc\fP in the user's home directory, (4) \fIftnchek.\|ini\fP in the home directory. If such a file is found, the options defined in it are used as defaults in place of the built-in defaults and overriding any defaults set in the environment.. .PP Each option or setting in the preferences file must be on a separate line. They are given in the same form as on the command line, except without the initial .ie \nh slash. .el dash. The preferences file can contain blank lines and comments. Comments are introduced at any point in a line by a space character (blank or tab) or the '#' character, and are terminated by the end of the line. .PP Command-line options override the defaults set in the environment or in the preferences file, in the same way as they override the built-in defaults. .ie \nh \{ .in 0 2 Project_files .PP \} .el \{ .SH "USING PROJECT FILES" \} This section contains detailed information on how to use project files most effectively, and how to avoid some pitfalls. .PP One can divide the checks \fBftnchek\fP does into two categories, local and global. Local checking is restricted to within a single routine, and catches things like uninitialized variables, unintended loss of precision in arithmetic expressions, etc. This sort of checking can be done on each subprogram independently. Furthermore, local checking of a subprogram does not need to be repeated when some other subprogram is changed. Global checking catches things like calling a subroutine with the wrong argument types, or disagreeing in common block declarations. It requires looking at the whole set of subprograms interacting with each other. .PP The purpose of project files is to allow the local checking and global checking steps to be separated. Assuming that each subprogram is in its own source file, you can run \fBftnchek\fP once on each one to do local checking while suppressing global checking. Then \fBftnchek\fP can be run once on all the project files together to do the global checking. The sample makefile below shows how to automate this task. The ``\fC.f.prj\fR'' target updates a project file for a particular file any time the source file changes. The information needed for global checking is saved in the project file. The ``\fCcheck\fR'' target does the combined global checking. Typically ``\fCmake check\fR'' would repeat the ``\fCftnchek -project\fR'' step only on changed source files, then do the global check. This is obviously a big advantage for large programs, when many subprograms seldom if ever change. .PP It is best when using project files to place each subprogram in a separate source file. If each source file may contain more than one subprogram, it complicates the definition of ``local'' and ``global'' checking because there is some inter-module checking that is contained within a file. \fBftnchek\fP tries to do the right thing in this case, but there are some complications (described below) due to the trade-off between avoiding re-doing cross-checks and preserving information about the program's structure. .PP Ordinarily, to do the least amount of re-checking, project files should be created with the \fB\-library\fP flag in effect and trimming turned on. In this mode, the information saved in the project file consists of all subprogram declarations, all subprogram invocations not resolved by declarations in the same file, and one instance of each COMMON block declaration. This is the minimum amount of information needed to check agreement between files. .PP If the source file contains more than one routine, there are some possible problems that can arise from creating the project file in library mode, because the calling hierarchy among routines defined within the file is lost. Also, if the routines in the file make use of COMMON blocks that are shared with routines in other files, there will not be enough information saved for the correct checking of set and used status of COMMON blocks and COMMON variables according to the \fB\-usage\fP setting. Therefore if you plan to use project files when \fB\-usage\fP checking is turned on (which is the default situation), and if multiple routines in one project file share COMMON blocks with routines in other files, the project files should be created with the \fB\-library\fP flag turned off. In this mode, \fBftnchek\fP saves, besides the information listed above, one invocation of each subprogram by any other subprogram in the same file, and all COMMON block declarations. This means that the project file will be larger than necessary, and that when it is read in, \fBftnchek\fP may repeat some inter-module checks that it already did when the project file was created. If each project file contains only one module, there is no loss of information in creating the project files in library mode. .PP Because of the possible loss of information entailed by creating a project file with the \fB\-library\fP flag in effect, whenever that project file is read in later, it will be treated as a library file regardless of the current setting of the \fB\-library\fP flag. On the other hand, a project file created with library mode turned off can be read in later in either mode. .PP The foregoing discussion assumes that the trimming options of the \fB\-project\fP setting are turned on when the project file is created. This is the normal situation. The \fBno\-trim\fP options of the \fB\-project\fP setting are provided in case one wants to use the project files for purposes other than checking the program with \fBftnchek\fP. For instance, one could write a Perl script to analyze the project files for information about how the different subprograms are called. You should not use the \fBno\-trim\fP options to deal with the issues of information loss discussed above, since they cause more information than necessary to be stored. This makes the project files bigger and causes \fBftnchek\fP to do more work later when it reads them to check your complete program. Ordinarily, you should use the \fB\-library\fP option to control how much information to store for later use by \fBftnchek\fP in checking your program. .if !\nh \{ .PP Here is an example of how to use the UNIX \fBmake\fP utility to automatically create a new project file each time the corresponding source file is altered, and to check the set of files for consistency. Add these lines to your \fCmakefile\fR. The example assumes that a macro \fCOBJS\fR has been defined which lists all the names of object files to be linked together to form the complete executable program. (In this \fCmakefile\fR, the indented lines should each begin with a tab, not blanks.) If any source file contains multiple routines that share common blocks among themselves, then the \fCno-com-\\*\fR option should be removed from \fCNOGLOBAL\fR, and/or drop the \fC-library\fR flag. .nf \fC # tell make what a project file suffix is .SUFFIXES: .prj # these options suppress global checks. NOGLOBAL=-usage=no-ext-undefined,no-com-\\* # tell make how to create a .prj file from a .f file .f.prj: ftnchek -project $(NOGLOBAL) -library $< # set up macro PRJS containing project filenames PRJS= $(OBJS:.o=.prj) # "make check" will check everything that has been changed. check: $(PRJS) ftnchek $(PRJS) \fR .fi .PP When a program uses many routines defined in a large number of different source files in different directories, it can be cumbersome to specify all the different project files needed to check the program properly. To deal with such cases, \fBftnchek\fP allows project files to be concatenated into a single large file. This single file can then be given to \fBftnchek\fP to provide the information for checking the use of any or all of the routines defined in the combined project files. When using such a ``library'' project file, you may want \fBftnchek\fP's error reports to document precisely the name of the file where the specific function is defined. If the various source files are in several directories, an error report that gives only the file name may be ambiguous, and rather should include the path to the file. The solution is to create each of the individual project files by giving the complete path to the source file. Then this complete path will appear in the error reports. For example, suppose that all of the library subprogram source files are in subdirectories of a directory named \fC/util/lib\fR. Then the individual project files could first be created by a command such as .nf \fC find /util/lib -name '*.f' -exec ftnchek -project '{}' ';' \fR .fi (Possibly other options would be provided to \fBftnchek\fP as discussed above. Also, this step could be handled instead by a revised \fCmakefile\fR rule that would provide the complete source file path instead of just the local name when invoking \fBftnchek\fP.) Next, concatenate all of these project files manually. .nf \fC find /util/lib -name '*.prj' -exec cat '{}' ';' > ourlib.prj \fR .fi Then a program source file can be checked by using the command .nf \fC ftnchek prog.f ... -lib ourlib.prj \fR .fi and an error message related to any library routine will include the full path to the routine's source file. .PP At present, there is no archive utility like \fBar\fR to manage the contents of a concatenated project file like the one in the illustration above. If changes are made to one of the library routines, the only way to update the combined project file is to concatenate all the individual project files once again. Such a utility would be quite easy to write. Someone should do so and contribute it to the \fBftnchek\fP effort. \} .if \nh \{ .\" ---End of section used in VMS HELP documentation--- .ex \} .SH "AN EXAMPLE" The following simple Fortran program illustrates the messages given by \fBftnchek\fP. The program is intended to accept an array of test scores and then compute the average for the series. .PP .nf \fC .so average.f \fR .fi .PP The compiler gives no error messages when this program is compiled. Yet here is what happens when it is run: .PP .nf \fC $ run average 70 90 85 $ \fR .fi .PP What happened? Why didn't the program do anything? The following is the output from \fBftnchek\fP when it is used to debug the above program: .PP .nf \fC $ ftnchek -list -symtab average .so average.out \fR .fi .PP According to \fBftnchek\fP, the program contains variables which may be used before they are assigned an initial value, and variables which are not needed. \fBftnchek\fP also warns the user that an integer quotient has been converted to a real. This may assist the user in catching an unintended roundoff error. Since the \fB\-symtab\fP flag was given, \fBftnchek\fP prints out a table containing identifiers from the local module and their corresponding datatype and number of dimensions. Finally, \fBftnchek\fP warns that the function \fCCOMPAV\fR is not used with the proper type of arguments. .PP With \fBftnchek\fP's help, we can debug the program. We can see that there were the following errors: .TP \w'1.'u+2n 1. \fCSUM\fR and \fCCOUNT\fR should have been converted to real before doing the division. .TP \w'1.'u+2n 2. \fCSUM\fR should have been initialized to 0 before entering the loop. .TP \w'1.'u+2n 3. \fCAVG\fR was never printed out after being calculated. .TP \w'1.'u+2n 4. \fCNUMS\fR should have been declared \fCINTEGER\fR instead of \fCREAL\fR. .PP We also see that \fCI\fR, not \fCJ\fR, should have been declared \fCINTEGER\fR in function \fCCOMPAV\fR. Also, \fCMAXNOS\fR was not declared as \fCINTEGER\fR, nor \fCCOMPAV\fR as \fCREAL\fR, in program \fCAVENUM\fR. These are not errors, but they may indicate carelessness. As it happened, the default type of these variables coincided with the intended type. .PP Here is the corrected program, and its output when run: .PP .nf \fC .so correct.f $ run average 70 90 85 AVERAGE = 81.66666 $ \fR .fi .PP With \fBftnchek\fP's help, our program is a success! .SH "INTERPRETING THE OUTPUT" The messages given by \fBftnchek\fP include not only syntax errors but also warnings and informational messages about things that are legal Fortran but that may indicate errors or carelessness. Most of these messages can be turned off by command-line options. Which option controls each message depends on the nature of the condition being warned about. See the descriptions of the command-line flags in the previous sections, and of individual messages below. Each message is prefixed with a word or phrase indicating the nature of the condition and its severity. .PP ``Error'' means a syntax error. The simplest kind of syntax errors are typographical errors, for example unbalanced parentheses or misspelling of a keyword. This type of error is caught by the parser and appears with the description ``parse error'' or ``syntax error'' (depending on the version of the parser generator and whether it is GNU \fBbison\fP or UNIX \fByacc\fP). This type of error message cannot be suppressed. Be aware that this type of error often means that \fBftnchek\fP has not properly interpreted the statement where the error occurs, so that its subsequent checking operations will be compromised. You should eliminate all syntax errors before proceeding to interpret the other messages \fBftnchek\fP gives. .PP ``Warning: Nonstandard syntax'' indicates an extension to Fortran that \fBftnchek\fP supports but that is not according to the Fortran 77 Standard. The extensions that \fBftnchek\fP accepts are described in the section on Extensions below. One example is the \fCDO\fR ... \fCENDDO\fR construction. If a program uses these extensions, warnings will be given according to specifications under the \fB\-f77\fP setting. The default behavior is to give no warnings. .PP ``Warning'' in other cases means a condition that is suspicious but that may or may not be a programming error. Frequently these conditions are legal under the standard. Some are illegal but do not fall under the heading of syntax errors. Usage errors are one example. These refer to the possibility that a variable may be used before it has been assigned a value (generally an error), or that a variable is declared but never used (harmless but may indicate carelessness). The amount of checking for usage errors is controlled by the \fB\-usage\fP flag, which specifies the maximum amount of checking by default. .PP Truncation warnings cover situations in which accuracy may be lost unintentionally, for example when a double precision value is assigned to a real variable. These warnings are controlled by the \fB\-truncation\fP setting, which is on by default. .PP ``Nonportable usage'' warns about some feature that may not be accepted by some compilers even though it is not contrary to the Fortran 77 Standard, or that may cause the program to perform differently on different platforms. For example, equivalencing real and integer variables is usually a non-portable practice. The use of extensions to the standard language is, of course, another source of non-portability, but this is handled as a separate case. To check a program for true portability, both the \fB\-portability\fP and the \fB\-f77\fP flags should be used. They are both turned off by default. The \fB\-wordsize\fP setting is provided to check only those nonportable usages that depend on a particular machine wordsize. .PP ``Possibly misleading appearance'' is used for legal constructions that may not mean what they appear to mean at first glance. For example, Fortran is insensitive to blank space, so extraneous space within variable names or the lack of space between a keyword and a variable can convey the wrong impression to the reader. These messages can be suppressed by turning off the \fB\-pretty\fP flag, which is on by default. .PP Other messages that are given after all the files are processed, and having to do with agreement between modules, do not use the word ``warning'' but generally fall into that category. Examples include type mismatches between corresponding variables in different COMMON block declarations, or between dummy and actual arguments of a subprogram. These warnings are controlled by the \fB\-common\fP and \fB\-arguments\fP settings respectively. By default both are set for maximum strictness of checking. .PP Another group of warnings about conditions that are often harmless refer to cases where the array properties of a variable passed as a subprogram argument differ between the two routines. For instance, an array element might be passed to a subroutine that expects a whole array. This is a commonly-used technique for processing single rows or columns of two-dimensional arrays. However, it could also indicate a programming error. The \fB\-array\fP setting allows the user to adjust the degree of strictness to be used in checking this kind of agreement between actual and dummy array arguments. By default the strictness is maximum. .PP ``Oops'' indicates a technical problem, meaning either a bug in \fBftnchek\fP or that its resources have been exceeded. .PP The syntax error messages and warnings include the filename along with the line number and column number. \fBftnchek\fP has two different options for the appearance of these error messages. If \fB\-novice\fP is in effect, which is the default, the messages are in a style approximating normal English. (In default style, the filename is not printed in messages within the body of the program if \fB\-list\fP is in effect.) The other style of error messages is selected by the \fB\-nonovice\fP option. In this style, the appearance of the messages is similar to that of the UNIX \fBlint\fP program. .PP \fBftnchek\fP is still blind to some kinds of syntax errors. The two most important ones are detailed checking of \fCFORMAT\fR statements, and almost anything to do with control of execution flow by means of \fCIF\fR, \fCDO\fR, and \fCGOTO\fR statements: namely correct nesting of control structures, matching of opening statements such as \fCIF\fR ... \fCTHEN\fR with closing statements such as \fCENDIF\fR, and the proper use of statement labels (numbers). Most compilers will catch these errors. See the section on Limitations for a more detailed discussion. .PP If \fBftnchek\fP gives you a syntax error message when the compiler does not, it may be because your program contains an extension to standard Fortran which is accepted by the compiler but not by \fBftnchek\fP. (See the section on Extensions.) On a VAX/VMS system, you can use the compiler option \fC/STANDARD\fR to cause the compiler to accept only standard Fortran. On most UNIX or UNIX-like systems, this can be accomplished by setting the flag \fB\-ansi.\fP .PP Many of the messages given by \fBftnchek\fP are self-explanatory. Those that need some additional explanation are listed below in alphabetical order. .TP .I "Common block NAME: data type mismatch at position n" The \fIn\fP-th variable in the COMMON block differs in data type in two different declarations of the COMMON block. By default (\fB\-common\fP strictness level 3), \fBftnchek\fP is very picky about COMMON blocks: the variables listed in them must match exactly by data type and array dimensions. That is, the legal pair of declarations in different modules: .nf \fC COMMON /COM1/ A,B\fR and \fC COMMON /COM1/ A(2)\fR .fi .br will cause \fBftnchek\fP to give warnings at strictness level 3. These two declarations are legal in Fortran since they both declare two real variables. At strictness level 1 or 2, no warning would be given in this example, but the warning would be given if there were a data type mismatch, for instance, if \fCB\fR were declared \fCINTEGER\fR. Controlled by \fB\-common\fP setting. .TP .I "Common block NAME has long data type following short data type" Some compilers require alignment of multi-byte items so that each item begins at an address that is a multiple of the item size. Thus if a short (e.g. single-precision real) item is followed by a long (e.g. double precision real) item, the latter may not be aligned correctly. Controlled by \fB\-portability=common\-alignment\fP option. .TP .I "Common block NAME has mixed character and non-character variables" The ANSI standard requires that if any variable in a COMMON block is of type \fCCHARACTER\fR, then all other variables in the same COMMON block must also be of type \fCCHARACTER\fR. Controlled by \fB\-f77=mixed\-common\fP option. .TP .I "Common block NAME: varying length" For \fB\-common\fP setting level 2, this message means that a COMMON block is declared to have different numbers of words in two different subprograms. A word is the amount of storage occupied by one integer or real variable. For \fB\-common\fP setting level 3, it means that the two declarations have different numbers of variables, where an array of any size is considered one variable. This is not necessarily an error, but it may indicate that a variable is missing from one of the lists. Note that according to the Fortran 77 Standard, it is an error for named COMMON blocks (but not blank COMMON) to differ in number of words in declarations in different modules. Given for \fB\-common\fP setting 2 or 3. .TP .I "Error: Badly formed logical/relational operator or constant" .TP .I "Error: Badly formed real constant" The syntax analyzer has found the start of one of the special words that begin and end with a period (e.g. \fC.EQ.\fR), or the start of a numeric constant, but did not succeed in finding a complete item of that kind. .TP .I "Error: cannot be adjustable size in module NAME" A character variable cannot be declared with a size that is an asterisk in parentheses unless it is a dummy argument, a parameter, or the name of the function defined in the module. .TP .I "Error: cannot be declared in SAVE statement in module NAME" Only local variables and common blocks can be declared in a \fCSAVE\fR statement. .TP .I "Error: No path to this statement" \fBftnchek\fP will detect statements which are ignored or by-passed because there is no foreseeable route to the statement. For example, an unnumbered statement (a statement without a statement label), occurring immediately after a \fCGOTO\fR statement, cannot possibly be executed. .TP .I "Error: Parse error" This means that the parser, which analyzes the Fortran program into expressions, statements, etc., has been unable to find a valid interpretation for some portion of a statement in the program. If your compiler does not report a syntax error at the same place, the most common explanations are: (1) use of an extension to ANSI standard Fortran that is not recognized by \fBftnchek\fP, or (2) the statement requires more lookahead than \fBftnchek\fP uses (see section on Bugs). .IP NOTE: This message means that the affected statement is not interpreted. Therefore, it is possible that \fBftnchek\fP's subsequent processing will be in error, if it depends on any matters affected by this statement (type declarations, etc.). .TP .I "Error: Syntax error" This is the same as ``Error: Parse error'' (see above). It is generated if your version of \fBftnchek\fP was built using the UNIX \fByacc\fP parser generator rather than GNU \fBbison\fP. .TP .I "Identifiers which are not unique in first six chars" Warns that two identifiers which are longer than 6 characters do not differ in the first 6 characters. This is for portability: they may not be considered distinct by some compilers. Controlled by \fB\-sixchar\fP option. .TP .I "Nonportable usage: argument precision may not be correct for intrinsic function" The precision of an argument passed to an intrinsic function may be incorrect on some computers. Issued when a numeric variable declared with explicit precision (e.g. \fCREAL*8 X\fR) is passed to a specific intrinsic function (e.g. \fCDSQRT(X)\fR). Controlled by \fB\-portability=mixed\-size\fP and \fB\-wordsize\fP. .TP .I "Nonportable usage: character constant/variable length exceeds 255" Some compilers do not support character strings more than 255 characters in length. Controlled by \fB\-portability=long\-string\fP. .TP .I "Nonportable usage: File contains tabs" \fBftnchek\fP expands tabs to be equivalent to spaces up to the next column which is a multiple of 8. Some compilers treat tabs differently, and also it is possible that files sent by electronic mail will have the tabs converted to blanks in some way. Therefore files containing tabs may not be compiled correctly after being transferred. \fBftnchek\fP does not give this message if tabs only occur within comments or character constants. Controlled by \fB\-portability=tab\fP. .TP .I "Nonportable usage: non-integer DO loop bounds" This warning is only given when the \fCDO\fR index and bounds are non-integer. Use of non-integer quantities in a \fCDO\fR statement may cause unexpected errors, or different results on different machines, due to roundoff effects. Controlled by \fB\-portability=real\-do\fP. .TP .I "Possibly it is an array which was not declared" This message is appended to warnings related to a function invocation or to an argument type mismatch, for which the possibility exists that what appears to be a function is actually meant to be an array. If the programmer forgot to dimension an array, references to the array will be interpreted as function invocations. This message will be suppressed if the name in question appears in an \fCEXTERNAL\fR or \fCINTRINSIC\fR statement. Controlled by the \fB\-novice\fP option. .TP .I "Possibly misleading appearance: characters past 72 columns" The program is being processed with the statement field width at its standard value of 72, and some nonblank characters have been found past column 72. In this case, \fBftnchek\fP is not processing the characters past column 72, and is notifying the user that the statement may not have the meaning that it appears to have. These characters might be intended by the programmer to be significant, but they will be ignored by the compiler. Controlled by \fB\-pretty=long\-line\fP. .TP .I "Possibly misleading appearance: Common block declared in more than one statement" Such multiple declarations are legal and have the same effect as a continuation of the original declaration of the block. This warning is only given if the two declarations are separated by one or more intervening statements. Controlled by \fB\-pretty=multiple\-common\fP. .TP .I "Possibly misleading appearance: Continuation follows comment or blank line" \fBftnchek\fP issues this warning message to alert the user that a continuation of a statement is interspersed with comments, making it easy to overlook. Controlled by \fB\-pretty=continuation\fP. .TP .I "Possibly misleading appearance: Extraneous parentheses" Warns about parentheses surrounding a variable by itself in an expression. When a parenthesized variable is passed as an argument to a subprogram, it is treated as an expression, not as a variable whose value can be modified by the called routine. Controlled by \fB\-pretty=parentheses\fP. .TP .I "Subprogram NAME: argument data type mismatch at position n" The subprogram's \fIn\fP-th actual argument (in the \fCCALL\fR or the usage of a function) differs in datatype or precision from the \fIn\fP-th dummy argument (in the \fCSUBROUTINE\fR or \fCFUNCTION\fR declaration). For instance, if the user defines a subprogram by .nf \fC SUBROUTINE SUBA(X)\fR \fC REAL X\fR .fi and elsewhere invokes \fCSUBA\fR by .nf \fC CALL SUBA(2)\fR .fi .br \fBftnchek\fP will detect the error. The reason here is that the number 2 is integer, not real. The user should have written .nf \fC CALL SUBA(2.0)\fR .fi .IP When checking an argument which is a subprogram, \fBftnchek\fP must be able to determine whether it is a function or a subroutine. The rules used by \fBftnchek\fP to do this are as follows: If the subprogram, besides being passed as an actual argument, is also invoked directly elsewhere in the same module, then its type is determined by that usage. If not, then if the name of the subprogram does not appear in an explicit type declaration, it is assumed to be a subroutine; if it is explicitly typed it is taken as a function. Therefore, subroutines passed as actual arguments need only be declared by an \fCEXTERNAL\fR statement in the calling module, whereas functions must also be explicitly typed in order to avoid generating this error message. Controlled by \fB\-arguments\fP setting. .TP .I "Subprogram NAME: argument arrayness mismatch at position n" Similar to the preceding situation, but the subprogram dummy argument differs from the corresponding actual argument in its number of dimensions or number of elements. Controlled by \fB\-array\fP together with \fB\-arguments\fP settings. .TP .I "Subprogram NAME: argument mismatch at position n" A character dummy argument is larger than the corresponding actual argument, or a Hollerith dummy argument is larger than the corresponding actual argument. Controlled by \fB\-arguments\fP setting. .TP .I "Subprogram NAME: argument usage mismatch" \fBftnchek\fP detects a possible conflict between the way a subprogram uses an argument and the way in which the argument is supplied to the subprogram. The conflict can be one of two types, as outlined below. .TP .if n .ti +3 .if t .ti +.3i .I "Dummy arg is modified, Actual arg is const or expr" A dummy argument is an argument as named in a \fCSUBROUTINE\fR or \fCFUNCTION\fR statement and used within the subprogram. An actual argument is an argument as passed to a subroutine or function by the caller. \fBftnchek\fP is saying that a dummy argument is modified by the subprogram, implying that its value is changed in the calling module. The corresponding actual argument should not be a constant or expression, but rather a variable or array element which can be legitimately assigned to. Controlled by the \fB\-usage=arg\-const\-modified\fP option. .TP .if n .ti +3 .if t .ti +.3i .I "Dummy arg used before set, Actual arg not set" Here a dummy argument may be used in the subprogram before having a value assigned to it by the subprogram. The corresponding actual argument should have a value assigned to it by the caller prior to invoking the subprogram. Controlled by the \fB\-usage=var\-uninitialized\fP option. .IP This warning is not affected by the \fB\-arguments\fP setting. .TP .I "Subprogram NAME invoked inconsistently" Here the mismatch is between the datatype of the subprogram itself as used and as defined. For instance, if the user declares .nf \fC INTEGER FUNCTION COUNT(A)\fR .fi and invokes \fCCOUNT\fR in another module as .nf \fC N = COUNT(A)\fR .fi .br without declaring its datatype, it will default to real type, based on the first letter of its name. The calling module should have included the declaration .nf \fC INTEGER COUNT\fR .fi .IP Given for \fB\-arguments\fP setting 2 or 3. .TP .I "Subprogram NAME: varying length argument lists:" An inconsistency has been found between the number of dummy arguments (parameters) a subprogram has and the number of actual arguments given it in an invocation. \fBftnchek\fP keeps track of all invocations of subprograms (\fCCALL\fR statements and expressions using functions) and compares them with the definitions of the subprograms elsewhere in the source code. The Fortran compiler normally does not catch this type of error. Given for \fB\-arguments\fP setting 1 or 3. .TP .I "Variable not declared. Type has been implicitly defined" When printing the symbol table for a module, \fBftnchek\fP will flag with an asterisk all identifiers that are not explicitly typed and will show the datatype that was assigned through implicit typing. This provides support for users who wish to declare all variables as is required in Pascal or some other languages. This message appears only when the \fB\-symtab\fP option is in effect. Alternatively, use the \fB\-declare\fP flag if you want to get a list of all undeclared variables. .TP .I "Variables declared but never referenced" Detects any identifiers that were declared in your program but were never used, either to be assigned a value or to have their value accessed. Variables in COMMON are excluded. Controlled by the \fB\-usage=var\-unused\fP option. .TP .I "Variables set but never used" \fBftnchek\fP will notify the user when a variable has been assigned a value, but the variable is not otherwise used in the program. Usually this results from an oversight. Controlled by the \fB\-usage=var\-set\-unused\fP option. .TP .I "Variables used before set" This message indicates that an identifier is used to compute a value prior to its initialization. Such usage may lead to an incorrect value being computed, since its initial value is not controlled. Controlled by the \fB\-usage=var\-uninitialized\fP option. .TP .I "Variables may be used before set" Similar to used before set except that \fBftnchek\fP is not able to determine its status with certainty. \fBftnchek\fP assumes a variable may be used before set if the first usage of the variable occurs prior in the program text to its assignment. Controlled by the \fB\-usage=var\-uninitialized\fP option. .TP .I "Warning: DO index is not integer" This warning is only given when the \fCDO\fR bounds are integer, but the \fCDO\fR index is not. It may indicate a failure to declare the index to be an integer. Controlled by \fB\-truncation=real\-do\fP option. .TP .I "Warning: integer quotient expr ... converted to real" The quotient of two integers results in an integer type result, in which the fractional part is dropped. If such an integer expression involving division is later converted to a real datatype, it may be that a real type division had been intended. Controlled by \fB\-truncation=int\-div\-real\fP option. .TP .I "Warning: Integer quotient expr ... used in exponent" The quotient of two integers results in an integer type result, in which the fractional part is dropped. If such an integer expression is used as an exponent, it is quite likely that a real type division was intended. Controlled by \fB\-truncation=int\-div\-exponent\fP option. .TP .I "Warning: NAME not set when RETURN encountered" The way that functions in Fortran return a value is by assigning the value to the name of the function. This message indicates that the function was not assigned a value before the point where a \fCRETURN\fR statement was found. Therefore it is possible that the function could return an undefined value. .TP .I "Warning: Nonstandard syntax: adjustable size cannot be concatenated here" The Fortran 77 Standard (sec. 6.2.2) forbids concatenating character variables whose size is an asterisk in parentheses, except in an assignment statement. Controlled by \fB\-f77=mixed\-expr\fP. .TP .I "Warning: Nonstandard syntax : significant characters past 72 columns" This warning is given under the \fB\-f77=long\-line\fP setting if the \fB\-columns\fP setting has been used to increase the statement field width, and a statement has meaningful program text beyond column 72. Standard Fortran ignores all text in those columns, but some compilers do not. Thus the program may be treated differently by different compilers. .TP .I "Warning: Nonstandard syntax : Statement out of order." \fBftnchek\fP will detect statements that are out of the sequence specified for ANSI standard Fortran 77. Table 1 illustrates the allowed sequence of statements in the Fortran language. Statements which are out of order are nonetheless interpreted by \fBftnchek\fP, to prevent ``cascades'' of error messages. The sequence counter is also rolled back to prevent repetition of the error message for a block of similar statements. Controlled by the \fB\-f77=statement\-order\fP option. .IP .nf .if n .ne 11 .if t .ne 1.75i \fC -------------------------------------------------------- | | implicit | parameter |--------------------- | | other specification format |---------------|--------------------- and | | statement-function entry | data |--------------------- | | executable -------------------------------------------------------- \fRTable 1\fP \fR .fi .TP .I "Warning: Possible division by zero" This message is printed out wherever division is done (except division by a constant). Use it to help locate a runtime division by zero problem. Controlled by \fB\-division\fP option. .TP .I "Warning: real truncated to intg" \fBftnchek\fP has detected an assignment statement which has a real expression on the right, but an integer variable on the left. The fractional part of the real value will be lost. If you explicitly convert the real expression to integer using the \fCINT\fR or \fCNINT\fR intrinsic function, no warning will be printed. A similar message is printed if a double precision expression is assigned to a single precision variable, etc. Controlled by \fB\-truncation=demotion\fP option. .TP .I "Warning: subscript is not integer" Since array subscripts are normally integer quantities, the use of a non-integer expression here may signal an error. Controlled by \fB\-truncation=real\-subscript\fP option. .TP .I "Warning: Unknown intrinsic function" This message warns the user that a name declared in an \fCINTRINSIC\fR statement is unknown to \fBftnchek\fP. Probably it is a nonstandard intrinsic function, and so the program will not be portable. The function will be treated by \fBftnchek\fP as a user-defined function. This warning is not suppressed by any option, since it affects \fBftnchek\fP's analysis of the program. However, if the intrinsic function is in one of the supported sets of nonstandard intrinsics, you can use the \fB\-intrinsic\fP setting to cause \fBftnchek\fP to recognize it. .SH "LIMITATIONS AND EXTENSIONS" \fBftnchek\fP accepts ANSI standard Fortran-77 programs with some minor limitations and numerous common extensions. .TP .BR Limitations : .RS The dummy arguments in statement functions are treated like ordinary variables of the program. That is, their scope is the entire subprogram, not just the statement function definition. .PP The checking of FORMAT statements is lax, tolerating missing separators (comma, etc.) between format descriptors in places where the Standard requires them, and allowing \fI.\|d\fP fields on descriptors that should not have them. It does warn under \fB\-f77=format\-edit\-descr\fP about nonstandard descriptor types (like \fCO\fR), and supported extensions. .PP There are some syntactic extensions and Fortran 90 elements that \fBftnchek\fP accepts but does very little checking. For instance, pointer usage (whether the nonstandard Cray syntax or the Fortran 90 syntax) is not checked other than for set and used status. It is hoped that some day more thorough checking will be implemented, but for now the user should regard the acceptance of these syntactic features simply as a convenience to enable checking of other aspects of code that contains them. See the section Extensions for specifics about what features are accepted but not fully checked. .PP If a user-supplied subprogram has the same name as one of the nonstandard intrinsic functions recognized by \fBftnchek\fP, it must be declared in an \fCEXTERNAL\fR statement in any routine that invokes it. Otherwise it will be subject to the checking normally given to the intrinsic function. Since the nonstandard intrinsics are not standard, this \fCEXTERNAL\fR statement is not required by the Fortran 77 Standard. Using the \fB\-intrinsic=none\fP setting, recognition of most nonstandard intrinsics (excepting only those needed to support the double complex data type) can be turned off. See the lists of supported nonstandard intrinsic functions under the discussion of the \fB\-intrinsic\fP setting above. .RE .TP .BR Extensions : .RS All of these extensions (except lower-case characters) will generate warnings if the relevant \fB\-f77\fP option is set. Some of the extensions listed below are part of the Fortran-90 Standard. These are indicated by the notation (F90). .PP Tabs are permitted, and translated into equivalent blanks which correspond to tab stops every 8 columns. The standard does not recognize tabs. Note that some compilers allow tabs, but treat them differently. The treatment defined for DEC FORTRAN can be achieved using the \fB\-source=dec\-tab\fP setting. .PP Strings may be delimited by either quote marks or apostrophes. A sequence of two delimiter characters is interpreted as a single embedded delimiter character. (F90) .PP Strings may contain UNIX-style backslash escape sequences. They will be interpreted as such if the \fB\-source=unix\-backslash\fP setting is given. Otherwise the backslash character will be treated as a normal printing character. .PP Source code can be in either Fortran 90 free format or traditional fixed format. (F90) .PP A semicolon is allowed as a statement separator. (F90) .PP Lower case characters are permitted, and are converted internally to uppercase except in character strings. The standard specifies upper case only, except in comments and strings. (F90) .PP Hollerith constants are permitted, in accordance with the Fortran 77 Standard, appendix C. They should not be used in expressions, or confused with datatype CHARACTER. .PP The letter 'D' (upper or lower case) in column 1 is treated as the beginning of a comment. There is no option to treat such lines as statements instead of comments. .PP Statements may be longer than 72 columns provided that the setting \fB\-columns\fP was used to increase the limit. According to the standard, all text from columns 73 through 80 is ignored, and no line may be longer than 80 columns. .PP Variable names may be longer than six characters. The standard specifies six as the maximum. \fBftnchek\fP permits names up to 31 characters long (F90). .PP Variable names may contain underscores and dollar signs (or other non-alphabetic characters as specified by the \fB\-identifier\-chars\fP option). These characters are are treated the same as alphabetic letters. The default type for variables beginning with these characters is REAL. In IMPLICIT type statements specifying a range of characters, the dollar sign follows Z and is followed by underscore. (Any other user-defined characters are treated the same as the dollar sign.) Fortran 90 permits underscores in variable names. .PP The UNIX version tolerates the presence of preprocessor directives, namely lines beginning with the pound sign (#). These are treated as comments, except for \fC#line\fR directives, which are interpreted, and are used to set the line number and source file name for warnings and error messages. Note that \fC#include\fR directives are not processed by \fBftnchek\fP. Programs that use them for including source files should be passed through the preprocessor before being input to \fBftnchek\fP. As noted below, \fBftnchek\fP does process \fCINCLUDE\fR statements, which have a different syntax. An optional program, \fBftnpp\fP(1L) (available separately) provides preprocessing that properly handles \fCINCLUDE\fR files. .PP The Fortran 90 \fCDO\fR ... \fCENDDO\fR control structure is permitted. The \fCCYCLE\fR and \fCEXIT\fR statements are accepted. All of these may have an optional do-construct name, but construct names are not checked for consistency. (F90) .PP The Fortran 90 \fCSELECT CASE\fR construct is accepted. (F90) .PP Construct names are also accepted on \fCIF\fR, \fCTHEN\fR, \fCELSE\fR, \fCENDIF\fR and \fCSELECT CASE\fR statements. (F90) .PP The \fCACCEPT\fR and \fCTYPE\fR statements (for terminal I/O) are permitted, with the same syntax as \fCPRINT\fR. .PP The so-called ``Cray pointer'' syntax is tolerated. It is not the same as the Fortran 90 \fCPOINTER\fR statement. There is no real checking of the statement other than basic syntax. The form of this statement is .br .in +3 \fCPOINTER (\fR\fIpointer\fP\fC, \fR\fIpointee\fP\fC)\fR [\fC,(\fR\fIpointer\fP\fC, \fR\fIpointee\fP\fC)\fR] .in -3 .br The pointer variables are assigned a data type of \fCINTEGER *4\fR. Usage checking of the pointee variables is suppressed, since in practice they are accessed indirectly via the pointers. .PP The following Fortran 90 pointer related syntaxes are accepted: \fCALLOCATABLE\fR, \fCPOINTER\fR, and \fCTARGET\fR statements and the same attributes in type declarations; \fCALLOCATE\fR, \fCDEALLOCATE\fR, and \fCNULLIFY\fR executable statements; pointer assignment using \fC=>\fR operator; and the intrinsic functions \fCALLOCATED\fR and \fCASSOCIATED\fR. Little semantic checking of pointer variables and operations is done beyond basic set and used status. For instance, there is no checking for such errors as dangling pointers, or use of unallocated arrays. .PP Statements may have any number of continuation lines. The Fortran 77 and Fortran 90 standards allow a maximum of 19 in fixed source form. The Fortran 90 standard allows a maximum of 39 in free source form. .PP Relational (comparison) operators composed of punctuation, namely: < <= == /= > >= are allowed. (F90) .PP Inline comments, beginning with an exclamation mark, are permitted. (F90) .PP NAMELIST I/O is supported. The syntax is the same as in Fortran 90. .PP FORMAT statements can contain a dollar sign to indicate suppression of carriage-return. An integer expression enclosed in angle brackets can be used anywhere in a FORMAT statement where the Fortran 77 Standard allows an integer constant (except for the length of a Hollerith constant), to provide a run-time value for a repeat specification or field width. .PP Nonstandard keywords are allowed in I/O statements, corresponding to those in VMS Fortran. .PP The \fCIMPLICIT NONE\fR statement is supported. The meaning of this statement is that all variables must have their data types explicitly declared. Rather than flag the occurrences of such variables with syntax error messages, \fBftnchek\fP waits till the end of the module, and then prints out a list of all undeclared variables, as it does for the \fB\-declare\fP option. (F90) .PP Data types \fCINTEGER\fR, \fCREAL\fR, \fCCOMPLEX\fR, and \fCLOGICAL\fR are allowed to have an optional precision specification in type declarations. For instance, \fCREAL*8\fR means an 8-byte floating point data type. The \fCREAL*8\fR datatype is not necessarily considered equivalent to \fCDOUBLE PRECISION\fR, depending on the \fB\-wordsize\fP setting. The Fortran 77 Standard allows a length specification only for \fCCHARACTER\fR data. .PP \fBftnchek\fP supports the \fCDOUBLE\fR \fCCOMPLEX\fR type specification for a complex quantity whose real and imaginary parts are double precision. Mixed-mode arithmetic involving single-precision complex with double-precision real data, prohibited under the Standard, yields a double complex result. .PP Combined type declarations and data-statement-like initializers are accepted. These have the form of a standard Fortran 77 type declaration, followed by a slash-delimited list of constants like that used in a \fCDATA\fR statement. An example of the syntax is .br .in +5 \fCINTEGER N / 100 /\fR .in -5 .br This bastard form of initializing declaration was not adopted in Fortran 90. Such declarations should be written using the standard form described below, which is accepted by \fBftnchek\fP. .PP There is limited support for Fortran 90 attribute-based type declarations. This style of declaration is distinguished by the use of a double colon (::) between the list of attributes and the list of declared variables. The features supported may be adequate for novice programmers, but are not yet sufficient for professional-quality Fortran 90 programs. I hope to add support for more features in future releases. I invite volunteers to assist in this task. See the ToDo file in the source code distribution for details. The attributes currently accepted, besides all the usual data types, are \fCDIMENSION\fR, \fCEXTERNAL\fR, \fCINTRINSIC\fR, \fCPARAMETER\fR, and \fCSAVE\fR. The new form of declaration also allows assignment of values to the variables declared. At present, the \fC(LEN=\fIvalue\fC)\fR form of specifying character lengths is also accepted. Kind specifications, using \fC(KIND=\fIvalue\fC)\fR are parsed but are not processed: all kinds are treated as default kind. Also, there is little checking of these declarations beyond basic syntax. .PP Many commonly found nonstandard intrinsic functions are provided. See the discussion of \fB\-intrinsic\fP for a list of functions and how to control which ones are recognized. .PP Argument checking is not tight for those nonstandard intrinsics that take arrays or mixed argument types. .PP \fBftnchek\fP permits the \fCINCLUDE\fR statement, which causes inclusion of the text of the given file. The syntax is .br .in +5 \fCINCLUDE '\fR\fIfilename\fP\fC'\fR .in -5 .br This is compatible with Fortran 90. If the \fB\-source=vms\-include\fP option is given, \fBftnchek\fP follows VMS conventions with respect to this statement: it assumes a default extension of \fI.\|for\fP if no filename extension is given, and allows the qualifier \fC/[NO]LIST\fR following the filename, to control the listing of the included file. There is no support for including VMS text modules. .PP In diagnostic output relating to items contained in include files, the location of the error is specified by both its location in the include file and the location in the parent file where the file was included. .PP \fBftnchek\fP accepts \fCPARAMETER\fR statements which lack parentheses. These will be warned about if the \fB\-f77=param\-noparen\fP flag is given. .PP \fBftnchek\fP accepts \fCPARAMETER\fR definitions that involve intrinsic functions and exponentiation by a non-integer exponent. Both of these cases are prohibited by the Fortran 77 Standard, and will be warned about if the \fB\-f77=param\-intrinsic\fP flag is given. If an intrinsic function value is a compile-time integer constant, \fBftnchek\fP will evaluate it. This allows better checking if the parameter is used in declaring array sizes. Fortran 90 allows intrinsic functions in \fCPARAMETER\fR definitions. .PP The intrinsic functions that are evaluated are: \fC .TS center; l l l l l. ABS IABS DIM IDIM MAX MAX0 MIN MIN0 MOD SIGN ISIGN LEN ICHAR INDEX .TE \fR .br The functions of integer arguments are evaluated only if the arguments are integer constant expressions. (These may involve integer constants, parameters, and evaluated intrinsic functions.) The function \fCLEN\fR is evaluated if its argument is an expression involving only character constants and variables whose length is not adjustable. The functions \fCICHAR\fR and \fCINDEX\fR are evaluated only if the arguments are character constants. \fBftnchek\fP gives a warning if it needs the value of some intrinsic function that is not evaluated. .RE \} .\" The above brace is the end of the .if !\nb at section "OPTIONS" .\" The following section is included in the blurb. .SH "NEW FEATURES" Here are the changes from Version 3.2 to Version 3.3: .TP \w'1.'u+2n 1. Front-end has been rewritten for unlimited lookahead, eliminating the longstanding bug that caused incorrect interpretation of statements whose ambiguity was not resolved in the first line. .TP 2. The \fB\-mkhtml\fP option is now available in the MS-DOS version. .TP 3. Added support for Fortran 90 pointer related syntax: \fCALLOCATE\fR, \fCDEALLOCATE\fR, and \fCNULLIFY\fR statements; the \fCALLOCATABLE\fR, \fCPOINTER\fR and \fCTARGET\fR attributes in type declarations; the pointer assigment operator \fC=>\fR and intrinsic functions \fCALLOCATED\fR and \fCASSOCIATED\fR; and deferred-shape array declarations. At present these new syntax features are accepted but not properly checked. This feature was added by Robert Landrito. .TP 4. The \fB\-f77\fP and \fB\-f90\fP \fBpointer\fP option controlling warnings about ``Cray pointers'' has been renamed to \fBcray\-pointer\fP. The \fB\-f77=pointer\fR option now instead controls warnings for code containing Fortran 90 pointer-related syntax. .TP 5. Re-implemented \fB\-mkhtml\fP processing so it is now much faster on source files containing many routines. .TP 6. Changed the arrangement of the test directory so there is no longer any need to modify the distribution in order to run the test suite (\fIcheck.\|bat\fP) under MS-DOS. .TP 7. Fixed bug in reading numeric settings on command line when setting name abbreviated to 3 characters. .TP 8. Fixed bug causing spurious warning for a \fCGOTO\fR referring to a labeled \fCEND\fR statement when the statement before \fCEND\fR was a \fCFORMAT\fR. .TP 9. New flag \fB\-f77=character\fP to control warnings about extensions to the Fortran 77 character data type. Accompanying this new flag is support for Fortran 90 rules for character variable declarations that evaluate to zero or negative length, allowing them and treating negative length values as zero. .TP 10. Fixed minor bug in printing of comments and blank lines following last \fCEND\fR statement in \fB\-list\fP mode. .\" Omit sections "BUGS" and "ACKNOWLEDGEMENTS" from blurb .if !\nb \{ .SH "BUGS" \fBftnchek\fP still has much room for improvement. Your feedback is appreciated. We want to know about any bugs you notice. Bugs include not only cases in which \fBftnchek\fP issues an error message where no error exists, but also if \fBftnchek\fP fails to issue a warning when it ought to. Note, however, that \fBftnchek\fP is not intended to catch all syntax errors (see section on Limitations). Also, it is not considered a bug for a variable to be reported as used before set, if the reason is that the usage of the variable occurs prior in the text to where the variable is set. For instance, this could occur when a \fCGOTO\fR causes execution to loop backward to some previously skipped statements. \fBftnchek\fP does not analyze the program flow, but assumes that statements occurring earlier in the text are executed before the following ones. .PP We especially want to know if \fBftnchek\fP crashes for any reason. It is not supposed to crash, even on programs with syntax errors. Suggestions are welcomed for additional features which you would find useful. Tell us if any of \fBftnchek\fP's messages are incomprehensible. Comments on the readability and accuracy of this document are also welcome. .PP You may also suggest support for additional extensions to the Fortran language. These will be included only if it is felt that the extensions are sufficiently widely accepted by compilers. .PP If you find a bug in \fBftnchek\fP, first consult the list of known bugs below to see if it has already been reported. Also check the section entitled ``Limitations and Extensions'' above for restrictions that could be causing the problem. If you do not find the problem documented in either place, then send a report including .TP \w'1.'u+2n 1. The operating system and CPU type on which \fBftnchek\fP is running. .TP 2. The version of \fBftnchek\fP and values of any environment options or settings defined in startup file. (Capturing the output of \fCftnchek -help\fR is useful for this.) .TP 3. A brief description of the bug. .TP 4. If possible, a small sample program showing the bug. .PP .br The report should be sent to Dr. Robert Moniot (see contact information in section entitled ``Installation and Support''). .PP Highest priority will be given to bugs which cause \fBftnchek\fP to crash. .PP Certain problems that arise when checking large programs can be fixed by increasing the sizes of the data areas in \fBftnchek\fP. (These problems are generally signaled by error messages beginning with ``Oops''.) The simplest way to increase the table sizes is by recompiling \fBftnchek\fP with the \fCLARGE_MACHINE\fR macro name defined. Consult the \fCmakefile\fR and \fCREADME\fR file for the method of doing this. .PP The following is a list of known bugs. .TP \w'1.'u+2n 1. Bug: Used-before-set message is suppressed for any variable which is used as the loop index in an implied-do loop, even if it was in fact used before being set in some earlier statement. For example, consider \fCJ\fR in the statement .RS .PP .nf \fC WRITE(5,*) (A(J), J=1,10)\fR .fi .PP Here \fBftnchek\fP parses the I/O expression, \fCA(J)\fR, where \fCJ\fR is used, before it parses the implied loop where \fCJ\fR is set. Normally this would cause \fBftnchek\fP to report a spurious used-before-set warning for \fCJ\fR. Since this report is usually in error and occurs fairly commonly, \fBftnchek\fP suppresses the warning for \fCJ\fR altogether. .PP Prognosis: A future version of \fBftnchek\fP is planned which will handle implied-do loops correctly. .RE .TP 2. Bug: Variables used (not as arguments) in statement-function subprograms do not have their usage status updated when the statement function is invoked. .RS .PP Prognosis: To be fixed in a future version of \fBftnchek\fP. .RE .TP 3. Bug: VAX version does not expand wildcards in filenames on the command line if they are followed without space by an option, e.g. \fCftnchek *.f/calltree\fR would not expand the \fC*.f\fR. This is because VMS-style options without intervening space are not supported by the GNU \fCshell_mung\fR routine that is used to expand wildcards. .RS .PP Prognosis: unlikely to be fixed. .RE .TP 4. Bug: checking for nonstandard format edit descriptors is done only in \fCFORMAT\fR statements, not in character strings used as formats. .RS .PP Prognosis: may be fixed someday. .RE .SH "ACKNOWLEDGEMENTS" \fBftnchek\fP was designed by Dr. Robert Moniot, professor at Fordham University. During the academic year of 1988-1989, Michael Myers and Lucia Spagnuolo developed the program to perform the variable usage checks. During the following year it was augmented by Lois Bigbie to check subprogram arguments and COMMON block declarations. Brian Downing assisted with the implementation of the \fCINCLUDE\fR statement. John Quinn wrote the common block usage checks. Heba Elsayed wrote the label table printout and label usage checks. Nelson H. F. Beebe of the University of Utah added most of the new code to implement the \fB\-makedcls\fP feature and wrote the dcl2inc script. The \fB\-mkhtml\fP feature was contributed by Mark McVeigh of Framatome ANP, Inc. The \fB\-reference\fP feature was contributed by Gerome Emmanuel, Ecole des mines, U. Nancy (slightly modified). The \fB\-vcg\fP option was contributed by Dr. Philip Rubini of Cranfield University, UK. The support for Cray pointer syntax was provided by John Dannenhoffer of United Technologies Research Center. John C. Bollinger of Indiana University added the parser syntax for the \fCSELECT CASE\fR construct. Robert Landrito added the parser syntax for F90 pointer-related features. Additional features will be added as time permits. As of Version 2.5, the name was changed from \fBforchek\fP to \fBftnchek\fP, to avoid confusion with a similar program named \fBforcheck\fP, developed earlier at Leiden University. .PP We would like to thank John Amor of the University of British Columbia, Reg Clemens of the Air Force Phillips Lab in Albuquerque, Markus Draxler of the University of Stuttgart, Victor Eijkhout of the University of Tennessee at Knoxville, Greg Flint of Purdue University, Daniel P. Giesy of NASA Langley Research Center, Fritz Keinert of Iowa State University, Judah Milgram of the University of Maryland College Park, Hugh Nicholas of the Pittsburgh Supercomputing Center, Dan Severance of Yale University, Phil Sterne of Lawrence Livermore National Laboratory, Larry Weissman of the University of Washington, Warren J. Wiscombe of NASA Goddard, and Nelson H. F. Beebe of the University of Utah, for pointing out bugs and suggesting some improvements. Stefan A. Deutscher, Gunnar Duus, Clive Page of the University of Leicester, Stephan Wefing of Heidelberg University, and Bob Wells of Oxford University were extremely helpful as alpha testers. We also thank Jack Dongarra for putting \fBftnchek\fP into the \fCnetlib\fR library of publicly available software. \} .\" The above brace is the end of the .if !\nb at section "BUGS" .\" The following section is included in the blurb. .SH "INSTALLATION AND SUPPORT" The \fBftnchek\fP program is free software. It can be obtained by anonymous ftp from many software servers, including ftp://netlib.org/fortran . Note that on Netlib the distribution is named \fIftnchek\|.tar\|.gz\fP whereas on most other servers the file name includes the version number, e.g. \fIftnchek-3.3.0\|.tar\|.gz\fP. If the file extension is \fI.\|Z\fP, uncompress with the Unix .BR uncompress (1) utility. If the file extension is \fI.\|gz\fP, uncompress with the GNU .BR gunzip (1L) program. Then use .BR tar (1) to unpack the files into a subdirectory. .PP Installation requires a C compiler for your computer. See the \fCINSTALL\fR file provided with the distribution for instructions on installing \fBftnchek\fP on your system. Executable binary for particular systems such as IBM PC or Macintosh, as available, can be obtained by anonymous ftp from ftp://ftp.dsm.fordham.edu/pub/ftnchek . Assistance in preparing such executable binary forms is welcome. .\" Omit the following paragraph from the blurb .if !\nb \{ .PP The \fBnroff\fP version of this document is named .IR ftnchek.\|man . On UNIX systems, this file can be used as the man page, but actually it is a multi-purpose source file which is used to produce the other forms of the documentation. The cleaned-up man page document, created during installation of \fBftnchek\fP, is named .IR ftnchek.\|1 . The distribution also includes a plain ASCII version named .IR ftnchek.\|doc , a PostScript version named .IR ftnchek.\|ps , an HTML version in directory .IR html , and a VMS HELP version named .IR ftnchek.\|hlp . \} .\" End of paragraph omitted from the blurb .PP Information about the latest version and the status of the project can be obtained by visiting \fBftnchek\fP's home page, http://www.dsm.fordham.edu/~ftnchek . For further information and to report bugs, you may contact Dr. Robert Moniot, whose contact information can be found by a Web search for his name and Fordham University. (E-mail address is not provided here because it attracts unsolicited commercial e-mail, but it is easily constructed by combining his last name with the name of the university and the edu domain.) .\" Omit the following section from the blurb .if !\nb \{ .SH "SEE ALSO" .BR dcl2inc (1L), .BR dtoq (1L), .BR dtos (1L), .BR f77 (1), .BR fd2s (1L), .BR fs2d (1L), .BR ftnpp (1L), .BR pfort (1L), .BR qtod (1L), .BR sf3 (1L), .BR stod (1L). .BR xsf3 (1L), .BR xvcg (1L). \} .\" End of section omitted from the blurb .\" ==============================[The End]============================== ftnchek-3.3.1/ftnchek.ps0000644000031000002260000173413710202535157015564 0ustar moniotstaff00000000000000%!PS-Adobe-3.0 %%Creator: groff version 1.18.1.1 %%CreationDate: Wed Feb 9 20:35:43 2005 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%DocumentSuppliedResources: procset grops 1.18 1 %%Pages: 55 %%PageOrder: Ascend %%Orientation: Portrait %%EndComments %%BeginProlog %%BeginResource: procset grops 1.18 1 /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }bind def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /Fk{ setcmykcolor fill }bind def /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /Ck/setcmykcolor load def /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def }bind def /PEND{ clear countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic %%IncludeResource: font Courier grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron /Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE %%EndProlog %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10.95/Times-Bold@0 SF -.219 <4e41>72 84 S<4d45>.219 E F0<66746e6368656b20ad2046>108 96 Q <6f727472616e2037372070726f6772616d20636865636b>-.15 E<6572>-.1 E F1 <53594e4f50534953>72 112.8 Q/F2 10/Times-Bold@0 SF<66746e6368656b>108 124.8 Q F0<5b>2.5 E F22.5 E<67756d656e7473>-.1 E F0<5b3d>A/F3 10 /Times-Italic@0 SF<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b3d> A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <6272696566>A F0 2.5<5d5b>2.5 G F2A<6565>-.18 E F0<5b3d> A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <636865636b>A F0<5d>2.5 E<5b>144 136.8 Q F22.5 E F0 <5b3d>A F3<6e756d>A F0 2.5<5d5d5b>C F2A F0<5b3d>A F3 <6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2<6372>A <6f737372>-.18 E<6566>-.18 E F0<5b3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2 A F0<5b>A F2<6e6f>A F0<5d>A F2<6465636c6172>A<65>-.18 E F0<5d>2.5 E <5b>144 148.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2<6469>A <766973696f6e>-.1 E F0 2.5<5d5b>2.5 G F2A<6f7273>-.18 E F0 <5b3d>A F3<6e756d>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <6578746572>A<6e>-.15 E F0 2.5<5d5b>2.5 G F2A F0<5b>A F2<6e6f>A F0 <5d>A F2<663737>A F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2<663930>A F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d>C<5b>144 160.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2 <663935>A F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2<68656c70>A F0 2.5<5d5b>2.5 G F2A F0<5b>A F2 <6e6f>A F0<5d>A F2<6964656e74698c6572ad6368617273>A F0<5b>A F2<3d>A F3 <6c697374>A F0 2.5<5d5d5b>C F2A F3<737472>.34 E F0 <5d>2.5 E<5b>144 172.8 Q F22.5 E F0<5b3d>A F3 <6c697374>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <6c696272617279>A F0 2.5<5d5b>2.5 G F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <6c697374>A F0 2.5<5d5b>2.5 G F2A<6564636c73>-.1 E F0<5b3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b3d>A F3<6c697374> A F0 2.5<5d5d>C<5b>144 184.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2 <6e6f>A<76696365>-.1 E F0 2.5<5d5b>2.5 G F2A F3 <737472>.34 E F0 2.5<5d5b>2.5 G F2A F0<5b3d>A F3<6e756d>A F0 2.5<5d5d5b>C F2A F0<5b>A F2<6e6f>A F0<5d>A F2 <706f72746162696c697479>A F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d>C <5b>144 196.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2<7072>A <65747479>-.18 E F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2 A<6f6a656374>-.18 E F0<5b3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2 A F0<5b>A F2<6e6f>A F0<5d>A F2<707572>A<65>-.18 E F0 2.5<5d5b>2.5 G F2A F0<5b>A F2<6e6f>A F0<5d>A F2<7175696574>A F0 2.5<5d5b>2.5 G F2 A F0<5b>A F2<6e6f>A F0<5d>A F2 -.18<7265>C<666572>.18 E<656e6365> -.18 E F0<5d>2.5 E<5b>144 208.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2 -.18<7265>C<736f7572>.18 E<636573>-.18 E F0 2.5<5d5b>2.5 G F2A F0 <5b>A F2<6e6f>A F0<5d>A F2<73697863686172>A F0 2.5<5d5b>2.5 G F2A F0 <5b>A F2<6e6f>A F0<5d>A F2<736f7274>A F0 2.5<5d5b>2.5 G F2A <6365>-.18 E F0<5b3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b3d>A F3<6c697374>A F0 2.5<5d5d>C<5b>144 220.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2<73796d746162>A F0 2.5<5d5b>2.5 G F2A F0<5b>A F2 <6e6f>A F0<5d>A F2<7472756e636174696f6e>A F0<5b>A F2<3d>A F3<6c697374>A F0 2.5<5d5d5b>C F2A F0<5b3d>A F3<6c697374>A F0 2.5<5d5d5b> C F2A F0<5b>A F2<6e6f>A F0<5d>A F2<766367>A F0 2.5<5d5b>2.5 G F2 A F0<5b>A F2<6e6f>A F0<5d>A F2 -.1<7665>C<7273696f6e>.1 E F0<5d>2.5 E <5b>144 232.8 Q F22.5 E F0<5b>A F2<6e6f>A F0<5d>A F2 -.1<766f>C <6c6174696c65>.1 E F0 2.5<5d5b>2.5 G F2A<6f726473697a65>-.1 E F0 <5b3d>A F3<6e756d>A F0 2.5<5d5d5b>C F2A F0<5b3d>A F3<6e756d> A F0 2.5<5d5d5b>C F3<8c6c6573202e2e2e>1.91 E F0<5d>5 E F1 <4445534352495054494f4e>72 249.6 Q F2<66746e6368656b>108 261.6 Q F0 .229 <2873686f727420666f722046>2.729 F .229<6f727472616e20636865636b>-.15 F .229<6572292069732064657369676e656420746f20646574656374206365727461696e 206572726f727320696e20612046>-.1 F .228 <6f727472616e2070726f6772616d2074686174206120636f6d70696c6572>-.15 F .328<757375616c6c7920646f6573206e6f742e>108 273.6 R F2<66746e6368656b> 5.329 E F0 .329<6973206e6f74207072696d6172696c7920696e74656e64656420746f 206465746563742073796e746178206572726f72732e>2.829 F .329 <49747320707572706f736520697320746f20617373697374207468652075736572> 5.329 F .342<696e208c6e64696e672073656d616e746963206572726f72732e>108 285.6 R .341<53656d616e746963206572726f727320617265206c65>5.341 F -.05 <6761>-.15 G 2.841<6c69>.05 G 2.841<6e74>-2.841 G .341<68652046>-2.841 F .341<6f727472616e206c616e67756167652062>-.15 F .341<7574206172652077>-.2 F .341<6173746566756c206f72206d6179206361757365>-.1 F .72 <696e636f7272656374206f7065726174696f6e2e>108 297.6 R -.15<466f>5.72 G 3.22<7265>.15 G .72<78616d706c652c2076>-3.37 F .721 <61726961626c657320776869636820617265206e65>-.25 F -.15<7665>-.25 G 3.221<7275>.15 G .721<736564206d617920696e64696361746520736f6d65206f6d69 7373696f6e20696e207468652070726f2d>-3.221 F .547 <6772616d3b20756e696e697469616c697a65642076>108 309.6 R .547 <61726961626c657320636f6e7461696e2067>-.25 F .546<6172626167652077686963 68206d617920636175736520696e636f727265637420726573756c747320746f20626520 63616c63756c617465643b20616e642076>-.05 F<6172692d>-.25 E 1.245<61626c65 7320776869636820617265206e6f74206465636c61726564206d6179206e6f74206861> 108 321.6 R 1.545 -.15<76652074>-.2 H 1.245 <686520696e74656e64656420747970652e>.15 F F2<66746e6368656b>6.245 E F0 1.245 <697320696e74656e64656420746f2061737369737420757365727320696e20746865> 3.745 F<646562>108 333.6 Q .2<756767696e67206f662074686569722046>-.2 F .2<6f727472616e2070726f6772616d2e>-.15 F .2<4974206973206e6f7420696e7465 6e64656420746f20636174636820616c6c2073796e746178206572726f72732e>5.2 F .199<54686973206973207468652066756e6374696f6e206f6620746865>5.199 F <636f6d70696c6572>108 345.6 Q 5<2e50>-.55 G<72696f7220746f207573696e67> -5 E F2<66746e6368656b>2.5 E F0 2.5<2c74>C <686520757365722073686f756c642076>-2.5 E<657269667920746861742074686520 70726f6772616d20636f6d70696c657320636f72726563746c79>-.15 E<2e>-.65 E .82<5468697320646f63756d656e74208c7273742073756d6d6172697a657320686f>108 362.4 R 3.32<7774>-.25 G 3.321<6f69>-3.32 G -1.9 -.4<6e76206f>-3.321 H -.1<6b65>.4 G F2<66746e6368656b>3.421 E F0 5.821<2e54>C .821<6861742073 656374696f6e2073686f756c642062652072656164206265666f7265206265>-5.821 F .821<67696e6e696e6720746f>-.15 F<757365>108 374.4 Q F2<66746e6368656b> 4.087 E F0 6.587<2e4c>C 1.587 <617465722073656374696f6e73206465736372696265>-6.587 F F2 <66746e6368656b>4.086 E F0 2.686 -.55<2773206f>D 1.586 <7074696f6e7320696e206d6f72652064657461696c2c206769>.55 F 1.886 -.15 <76652061>-.25 H 4.086<6e65>.15 G 1.586 <78616d706c65206f6620697473207573652c20616e64>-4.236 F -.15<6578>108 386.4 S<706c61696e20686f>.15 E 2.5<7774>-.25 G 2.5<6f69>-2.5 G <6e7465727072657420746865206f75747075742e>-2.5 E<546865208c6e616c207365 6374696f6e73206d656e74696f6e20746865206c696d69746174696f6e7320616e64206b 6e6f>5 E<776e2062>-.25 E<75677320696e>-.2 E F2<66746e6368656b>2.5 E F0 <2e>A F1<494e56>72 403.2 Q<4f4b494e472046544e4348454b>-.493 E F2 <66746e6368656b>108 415.2 Q F0<697320696e>2.5 E -.2<766f>-.4 G -.1<6b65> .2 G 2.5<6474>.1 G <68726f756768206120636f6d6d616e64206f662074686520666f726d3a>-2.5 E/F4 10 /Courier@0 SF 6<2466>159 439.2 S<746e6368656b205b2d6f7074696f6e202d6f70 74696f6e202e2e2e5d2066696c656e616d65205b66696c656e616d65202e2e2e5d>-6 E F0 .689<54686520627261636b>108 456 R .689<65747320696e64696361746520736f 6d657468696e67207768696368206973206f7074696f6e616c2e>-.1 F .689 <54686520627261636b>5.689 F .689<657473207468656d73656c76>-.1 F .69 <657320617265206e6f742061637475616c6c792074797065642e>-.15 F<48657265> 5.69 E .359<6f7074696f6e732061726520636f6d6d616e642d6c696e65207377697463 686573206f722073657474696e67732c20776869636820636f6e74726f6c20746865206f 7065726174696f6e206f66207468652070726f6772616d20616e642074686520616d6f75 6e74>108 468 R 1.019<6f6620696e666f726d6174696f6e20746861742077696c6c20 6265207072696e746564206f75742e>108 480 R 1.019 <4966206e6f206f7074696f6e2069732073706563698c65642c2074686520646566> 6.019 F 1.019 <61756c7420616374696f6e20697320746f207072696e74206572726f72206d65732d> -.1 F<73616765732c2077>108 492 Q<61726e696e67732c20616e6420696e666f726d 6174696f6e616c206d657373616765732c2062>-.1 E<7574206e6f7420746865207072 6f6772616d206c697374696e67206f722073796d626f6c207461626c65732e>-.2 E .613<45616368206f7074696f6e206265>108 508.8 R .613 <67696e732077697468207468652027ad2720636861726163746572>-.15 F 5.613 <2e28>-.55 G .613<4f6e2056>-5.613 F .613<41582f564d53206f72204d532d444f 532073797374656d7320796f75206d6179207573652065697468657220272f27206f72> -1.35 F 3.879<27ad272e292046>108 520.8 R 1.379<6f72207468652073616b>-.15 F 3.879<656f>-.1 G 3.879<6663>-3.879 G 1.379<6f6e666f726d69747920776974 6820616e20696e6372656173696e676c7920636f6d6d6f6e20636f6e>-3.879 F -.15 <7665>-.4 G 1.38<6e74696f6e2c206f7074696f6e732063616e20616c736f206265> .15 F 1.38<67696e2077697468>-.15 F 2.5<27adad272e20546865>108 532.8 R<6f 7074696f6e7320617265206465736372696265642061742067726561746572206c656e67 746820696e20746865206e65>2.5 E<78742073656374696f6e2e>-.15 E F2 <66746e6368656b>108 549.6 Q F0 .267<6f7074696f6e732066>2.768 F .267 <616c6c20696e746f207477>-.1 F 2.767<6f63>-.1 G<617465>-2.767 E .267<676f 726965733a2073776974636865732c207768696368206172652065697468657220747275 65206f722066>-.15 F .267 <616c73652c20616e642073657474696e67732c207768696368206861>-.1 F .567 -.15<76652061>-.2 H 1.359<6e756d65726963206f7220737472696e672076>108 561.6 R 3.859<616c75652e20546865>-.25 F 1.359 <6e616d65206f66206120737769746368206973207072658c78>3.859 F 1.36 <656420627920276e6f27206f7220276e6f2d2720746f207475726e206974206f66>-.15 F 1.36<663a20652e672e>-.25 F F23.86 E<65>-.18 E F0 -.1 <776f>108 573.6 S .066<756c64207475726e206f66>.1 F 2.566<6674>-.25 G .066<68652077>-2.566 F .066<61726e696e67732061626f757420696d707572652066 756e6374696f6e732e2054686520276e6f27207072658c782063616e20616c736f206265 20757365642077697468206e756d657269632073657474696e67732c>-.1 F<6861>108 585.6 Q .693<76696e6720746865206566>-.2 F .693 <66656374206f66207475726e696e67206f66>-.25 F 3.193<6674>-.25 G .693 <686520636f72726573706f6e64696e672077>-3.193 F 3.193 <61726e696e67732e2053657474696e6773>-.1 F .693 <7468617420636f6e74726f6c206c69737473206f662077>3.193 F .694 <61726e696e6773206861>-.1 F .994 -.15<76652061>-.2 H .038 <7370656369616c2073796e746178206469736375737365642062656c6f>108 597.6 R 3.838 -.65<772e204f>-.25 H .037<6e6c7920746865208c7273742033206368617261 6374657273206f6620616e206f7074696f6e206e616d6520286e6f7420636f756e74696e 67207468652027ad2729206e656564206265>.65 F<70726f>108 609.6 Q 3.006 <76696465642e2041>-.15 F .507<636f6c6f6e206d6179206265207573656420696e20 706c616365206f6620616e20657175616c73207369676e20666f72206e756d6572696320 6f7220737472696e672073657474696e672061737369676e6d656e74733b20686f>3.006 F<772d>-.25 E -2.15 -.25<65762065>108 621.6 T .8 -.4<722c2077>.25 H 2.5 <6573>.4 G<686f>-2.5 E 2.5<776f>-.25 G <6e6c792074686520657175616c73207369676e20666f726d2062656c6f>-2.5 E -.65 <772e>-.25 G .104 <54686520737769746368657320616e642073657474696e6773207768696368>108 638.4 R F2<66746e6368656b>2.604 E F0 .104<63757272656e746c79207265636f67 6e697a657320617265206c69737465642062656c6f>2.604 F 3.904 -.65<772e2046> -.25 H .104<6f722065616368206f7074696f6e2c2074686520646566>.5 F <61756c74>-.1 E .418<6973207468652076>108 650.4 R .418 <616c7565207573656420696620746865206f7074696f6e206973206e6f742065>-.25 F .418<78706c696369746c792073706563698c65642c207768696c652074686520747572 6e2d6f6e206973207468652076>-.15 F .418 <616c7565207573656420696620746865206f7074696f6e206973>-.25 F<6769>108 662.4 Q -.15<7665>-.25 G 2.5<6e77>.15 G <6974686f75742061737369676e696e6720697420612076>-2.5 E<616c75652e>-.25 E F2108 679.2 Q<67756d656e74733d>-.1 E F3<6c697374>.09 E F0 <436f6e74726f6c2077>144 691.2 Q<61726e696e67732061626f75742073756270726f 6772616d207479706520616e64206172>-.1 E <67756d656e74206d69736d6174636865732e>-.18 E<446566>5 E <61756c74203d207475726e2d6f6e203d20616c6c2e>-.1 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<31>196.795 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 <436f6e74726f6c2077>144 96 Q <61726e696e677320696e20636865636b696e67206172726179206172>-.1 E <67756d656e7473206f662073756270726f6772616d732e>-.18 E<446566>5 E <61756c74203d207475726e2d6f6e203d20616c6c2e>-.1 E F1108 112.8 Q F0<5573652073686f7274657220666f726d617420666f7220736f6d65206572 726f72206d657373616765732e>9.75 E<446566>5 E<61756c74203d206e6f2e>-.1 E F1108 129.6 Q<65653d>-.18 E F2<6c697374>.09 E F0 1.103 <50726f647563652073756270726f6772616d2063616c6c206869657261726368>144 141.6 R 3.603<7969>-.05 G 3.603<6e6f>-3.603 G 1.103 <6e65206f66203320666f726d6174733a207465>-3.603 F 1.103<78742063616c6c2d 747265652c2077686f2d63616c6c732d77686f20616e64205643472e>-.15 F<446566> 144 153.6 Q<61756c74203d206e6f6e652c207475726e2d6f6e203d20747265652c7072 756e652c736f72742e>-.1 E 1.505<496620746865>144 177.6 R F1 4.005 E F0 1.505<6f7074696f6e20697320696e>4.005 F -.2 <766f>-.4 G -.1<6b65>.2 G<64>.1 E F2<616e64>4.005 E F0 1.506<7472656520 697320746865206170706c6965642063616c6c74726565206f7074696f6e2c2061208c6c 65206e616d6564>4.006 F/F3 10/Courier@0 SF<43616c6c2d>4.006 E <547265652e68746d6c>144 189.6 Q F0 2.5<2c77>C<696c6c2062652070726f647563 656420646570696374696e6720746865207472656520696e2048544d4c20666f726d6174 2e>-2.5 E F1108 206.4 Q F0 <506572666f726d20636865636b696e672e>5.86 E<446566>5 E <61756c74203d207965732e>-.1 E F1108 223.2 Q F2 <6e756d>.36 E F0 2.078 <536574206d6178696d756d206c696e65206c656e67746820746f>144 235.2 R F2 <6e756d>4.578 E F0 2.077<636f6c756d6e732e20284265>4.577 F 2.077 <796f6e6420746869732069732069676e6f7265642e29>-.15 F -.45<5475>7.077 G 2.077<726e2d6f6e203d206d6178203d203133322e>.45 F<446566>144 247.2 Q <61756c74203d2037322e>-.1 E F1108 264 Q F2<6c697374> .09 E F0<536574206465>144 276 Q<67726565206f66207374726963746e6573732069 6e20636865636b696e6720434f4d4d4f4e20626c6f636b732e>-.15 E<446566>5 E <61756c74203d207475726e2d6f6e203d20616c6c2e>-.1 E F1108 292.8 Q <6f737372>-.18 E<65663d>-.18 E F2<6c697374>.09 E F0 .105<5072696e742063 726f73732d7265666572656e6365206c697374206f662073756270726f6772616d206361 6c6c732c206c6162656c2075736167652c20616e642f6f7220434f4d4d4f4e20626c6f63 6b207573652e>144 304.8 R<446566>5.106 E .106<61756c74203d>-.1 F <6e6f6e652e>144 316.8 Q F1108 333.6 Q<65>-.18 E F0<5072 696e742061206c697374206f6620616c6c206964656e74698c6572732077686f73652064 61746174797065206973206e6f742065>144 345.6 Q <78706c696369746c79206465636c617265642e>-.15 E<446566>5 E <61756c74203d206e6f2e>-.1 E F1108 362.4 Q<766973696f6e>-.1 E F0 -.8<5761>144 374.4 S<726e207768657265>.8 E -.15<7665>-.25 G 2.5<7264>.15 G -.25<6976>-2.5 G<6973696f6e20697320646f6e65202865>.25 E <7863657074206469>-.15 E<766973696f6e206279206120636f6e7374616e74292e> -.25 E<446566>5 E<61756c74203d206e6f2e>-.1 E F1108 391.2 Q <6f72733d>-.18 E F2<6e756d>.36 E F0<53657420746865206d6178696d756d206e75 6d626572206f66206572726f72206d657373616765732070657220636173636164652e> 144 403.2 Q<446566>5 E<61756c74203d207475726e2d6f6e203d20332e>-.1 E F1 108 420 Q<6e>-.15 E F0 -.8<5761>144 432 S<726e2069662065> .8 E<787465726e616c2073756270726f6772616d732077686963682061726520696e> -.15 E -.2<766f>-.4 G -.1<6b65>.2 G 2.5<6461>.1 G<7265206e65>-2.5 E -.15 <7665>-.25 G 2.5<7264>.15 G 2.5<658c6e65642e20446566>-2.5 F <61756c74203d207965732e>-.1 E F1108 448.8 Q F2<6c697374>.09 E F0 .177<436f6e74726f6c2073706563698c632077>144 460.8 R .176 <61726e696e67732061626f757420737570706f727465642065>-.1 F .176 <7874656e73696f6e7320746f207468652046>-.15 F .176 <6f727472616e203737205374616e646172642e>-.15 F<446566>5.176 E 2.676 <61756c74203d>-.1 F<6e6f6e652c>2.676 E<7475726e2d6f6e203d20616c6c2e>144 472.8 Q F1108 489.6 Q F2<6c697374>.09 E F0 1.542 <436f6e74726f6c2073706563698c632077>144 501.6 R 1.542 <61726e696e67732061626f757420737570706f727465642065>-.1 F 1.542 <7874656e73696f6e7320746f207468652046>-.15 F 1.543 <6f727472616e203737205374616e6461726420746861742077657265206e6f74>-.15 F <61646f707465642061732070617274206f66207468652046>144 513.6 Q <6f727472616e203930205374616e646172642e>-.15 E<446566>5 E 2.5 <61756c74203d>-.1 F<6e6f6e652c207475726e2d6f6e203d20616c6c2e>2.5 E F1 108 530.4 Q F2<6c697374>.09 E F0 .145 <436f6e74726f6c2073706563698c632077>144 542.4 R .145 <61726e696e67732061626f7574207374616e646172642046>-.1 F .145<6f72747261 6e203737206665617475726573207468617420776572652064656c657465642066726f6d 207468652046>-.15 F .145<6f727472616e203935>-.15 F 2.5 <5374616e646172642e20446566>144 554.4 R 2.5<61756c74203d>-.1 F <6e6f6e652c207475726e2d6f6e203d20616c6c2e>2.5 E F1108 571.2 Q F0<5072696e7420636f6d6d616e642073756d6d617279>11.96 E 5<2e44>-.65 G <6566>-5 E<61756c74203d206e6f2e>-.1 E F1 108 588 Q F2<6c697374>.09 E F0 1.295 <44658c6e65206e6f6e2d616c7068616e756d6572696320636861726163746572732074 686174206d6179206265207573656420696e206964656e74698c6572732e>144 600 R <446566>6.296 E 1.296<61756c74203d207475726e2d6f6e203d20646f6c6c6172>-.1 F<7369676e20616e6420756e64657273636f72652e>144 612 Q F1 108 628.8 Q F2<70617468>1.25 E F0 1.416<44658c6e6520 61206469726563746f727920746f2073656172636820666f7220494e434c554445208c6c 6573206265666f726520736561726368696e6720696e207468652073797374656d2d7769 6465206469726563746f7279>144 640.8 R<2e>-.65 E<43756d756c617469>144 652.8 Q -.15<7665>-.25 G 5<2e44>.15 G<6566>-5 E <61756c74203d207475726e2d6f6e203d206e6f6e652e>-.1 E F1 108 669.6 Q F2<6c697374>.09 E F0 .831<436f6e7472 6f6c2074726561746d656e74206f66206e6f6e7374616e6461726420696e7472696e7369 632066756e6374696f6e732e>144 681.6 R<446566>5.831 E .832 <61756c74203d20616c6c2065>-.1 F<7863657074>-.15 E F1<766d73>3.332 E F0 .832<666f7220556e69782076>3.332 F<657273696f6e2c>-.15 E<616c6c2065>144 693.6 Q<7863657074>-.15 E F1<756e6978>2.5 E F0<666f7220564d532076>2.5 E <657273696f6e2c20616c6c2065>-.15 E<7863657074>-.15 E F1<756e6978>2.5 E F0<616e64>2.5 E F1<766d73>2.5 E F0<666f72206f746865722076>2.5 E 2.5 <657273696f6e732e2054>-.15 F<75726e2d6f6e203d20616c6c2e>-.45 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<32>196.795 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q F0<4265>144 96 Q 2.275 <67696e206c696272617279206d6f64653a20646f206e6f742077>-.15 F 2.275<6172 6e2061626f75742073756270726f6772616d7320696e208c6c6520746861742061726520 64658c6e65642062>-.1 F 2.274<7574206e65>-.2 F -.15<7665>-.25 G 4.774 <7275>.15 G<7365642e>-4.774 E<446566>144 108 Q<61756c74203d206e6f2e>-.1 E F1108 124.8 Q F0 <5072696e7420736f75726365206c697374696e67206f662070726f6772616d2e>17.52 E<446566>5 E<61756c74203d206e6f2e>-.1 E F1108 141.6 Q <6564636c733d>-.1 E/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 .226 <507265706172652061208c6c65206f66206465636c61726174696f6e732e>144 153.6 R<546865>5.226 E F2<6c697374>2.726 E F0 .227<73706563698c6573206f707469 6f6e7320666f722074686520666f726d6174206f662074686973208c6c652e>2.726 F <446566>5.227 E .227<61756c74203d206e6f6e652c>-.1 F <7475726e2d6f6e203d206465636c61726174696f6e732e>144 165.6 Q F1 108 182.4 Q F2<6c697374>.09 E F0 .664 <43726561746520696e6469>144 194.4 R .663<76696475616c2048544d4c20646f63 756d656e74208c6c65732066726f6d2066746e6368656b20616e616c7973697320616e64 20636f646520636f6d6d656e74732e>-.25 F .663<557375616c6c7920796f75>5.663 F .774<77696c6c20616c736f2077>144 206.4 R .774 <616e7420746f2073706563696679>-.1 F F13.274 E<6565> -.18 E F0 .774<746f206372656174652074686520726f6f742048544d4c208c6c65> 3.274 F/F3 10/Courier@0 SF<43616c6c547265652e68746d6c>3.275 E F0 5.775 <2e44>C<6566>-5.775 E .775<61756c74203d>-.1 F <6e6f6e652c207475726e2d6f6e203d20646f63756d656e74732e>144 218.4 Q F1 108 235.2 Q<76696365>-.1 E F0<4769>144 247.2 Q .3 -.15<7665206f> -.25 H<7574707574207375697461626c6520666f72206e6f>.15 E <766963652075736572732e>-.15 E<446566>5 E<61756c74203d207965732e>-.1 E F1108 264 Q F2<8c6c656e616d65>1.91 E F0 1.073 <53656e64206f757470757420746f20746865206769>144 276 R -.15<7665>-.25 G 3.573<6e8c>.15 G 3.573<6c652e20446566>-3.573 F 1.073<61756c7420616e6420 7475726e2d6f6e2073656e6473206f757470757420746f207468652073637265656e2e20 28446566>-.1 F 1.072<61756c74208c6c656e616d65>-.1 F -.15<6578>144 288 S <74656e73696f6e206973>.15 E F2 1.666<2e6c>2.5 G<6973>-1.666 E F0<292e>A F1108 304.8 Q F2<6e756d>.36 E F0 <536574207468652073697a65206f662060>144 316.8 Q <604372617920706f696e74657227>-.74 E 2.5<2776>-.74 G <61726961626c657320746f>-2.75 E F2<6e756d>2.5 E F0 2.5 <62797465732e204d696e>2.5 F 2.5<3d31>2.5 G 2.5<2c6d>-2.5 G <6178203d2031362e>-2.5 E<446566>5 E <61756c74203d207475726e2d6f6e203d2034>-.1 E F1 108 333.6 Q F2<6c697374>.09 E F0 -.8<5761> 144 345.6 S<726e2061626f7574206e6f6e2d706f727461626c65207573616765732e> .8 E<446566>5 E<61756c74203d206e6f6e652c207475726e2d6f6e203d20616c6c2e> -.1 E F1108 362.4 Q<657474793d>-.18 E F2<6c697374>.09 E F0<4769> 144 374.4 Q .3 -.15<76652077>-.25 H<61726e696e677320666f7220706f73736962 6c79206d69736c656164696e6720617070656172616e6365206f6620736f757263652063 6f64652e>.05 E<446566>10 E<61756c74203d207475726e2d6f6e203d20616c6c2e> -.1 E F1108 391.2 Q<6f6a6563743d>-.18 E F2<6c697374>.09 E F0 <4372656174652070726f6a656374208c6c6520287365652065>144 403.2 Q <78706c616e6174696f6e2062656c6f>-.15 E 2.5<77292e20446566>-.25 F <61756c74203d206e6f2e>-.1 E F1108 420 Q<65>-.18 E F0 <417373756d652066756e6374696f6e732061726520707572652c20692e652e206861> 10.48 E .3 -.15<7665206e>-.2 H 2.5<6f73>.15 G<696465206566>-2.5 E 2.5 <66656374732e20446566>-.25 F<61756c74203d207965732e>-.1 E F1 108 436.8 Q F0<50726f64756365206c6573732076>8.63 E <6572626f7365206f75747075742e>-.15 E<446566>5 E<61756c74203d206e6f2e>-.1 E F1108 453.6 Q<65666572>-.18 E<656e6365>-.18 E F0<5072696e742074 61626c65206f662073756270726f6772616d73207265666572656e636564206279206561 63682073756270726f6772616d2e>144 465.6 Q<446566>5 E <61756c74203d206e6f2e>-.1 E F1108 482.4 Q<65736f7572>-.18 E <636573>-.18 E F0<5072696e7420616d6f756e74206f66207265736f75726365732075 73656420696e20616e616c797a696e67207468652070726f6772616d2e>144 494.4 Q <446566>5 E<61756c74203d206e6f2e>-.1 E F1108 511.2 Q F0<4c69737420616e>144 523.2 Q 2.5<7976>-.15 G<61726961626c65206e616d6573 20776869636820636c61736820617420362063686172616374657273206c656e6774682e> -2.75 E<446566>5 E<61756c74203d206e6f2e>-.1 E F1108 540 Q F0 <5072696e74206c697374206f662073756270726f6772616d7320736f7274656420696e 20707265726571756973697465206f72646572>13.64 E 5<2e44>-.55 G<6566>-5 E <61756c74203d206e6f2e>-.1 E F1108 556.8 Q<63653d>-.18 E F2 <6c697374>.09 E F0 .529<53656c65637420736f7572636520666f726d617474696e67 206f7074696f6e733a208c78>144 568.8 R .529 <6564206f72206672656520666f726d2c204445432046>-.15 F .53<6f727472616e20 7461622d666f726d6174746564206c696e65732c20564d532d7374796c65>-.15 F .469 <494e434c5544452073746174656d656e742c20554e49582d7374796c65206261636b73 6c617368206573636170652073657175656e6365732c20616e6420696d706c6963697420 747970696e67206f6620706172616d65746572732e>144 580.8 R<446566>144 592.8 Q<61756c74203d206e6f6e652c207475726e2d6f6e203d20616c6c2e>-.1 E F1 108 609.6 Q F2<6c697374>.09 E F0 2.382 <50726f647563652065>144 621.6 R<787472612d7069636b>-.15 E 4.882<7977> -.15 G 2.382 <61726e696e67732061626f7574206f62736f6c657363656e74206f72206f6c642d66> -4.982 F 2.383 <617368696f6e65642070726f6772616d6d696e6720636f6e737472756374696f6e732e> -.1 F<446566>144 633.6 Q <61756c74203d206e6f6e652c207475726e2d6f6e203d20616c6c2e>-.1 E F1 108 650.4 Q F0<5072696e742073796d626f6c207461626c652061 6e64206c6162656c207461626c6520666f7220656163682073756270726f6772616d2e> 144 662.4 Q<446566>5 E<61756c74203d206e6f2e>-.1 E F1 108 679.2 Q F2<6c697374>.09 E F0 <436865636b20666f7220706f737369626c65206c6f7373206f662061636375726163> 144 691.2 Q 2.5<7962>-.15 G 2.5<7974>-2.5 G 2.5 <72756e636174696f6e2e20446566>-2.5 F <61756c74203d207475726e2d6f6e203d20616c6c2e>-.1 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<33>196.795 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 .535 <436f6e74726f6c2077>144 96 R .534<61726e696e67732061626f757420756e757365 64206f7220756e696e697469616c697a65642076>-.1 F .534 <61726961626c65732c20636f6d6d6f6e20626c6f636b732c206574632e>-.25 F <446566>5.534 E .534<61756c74203d207475726e2d6f6e>-.1 F 2.5<3d61>144 108 S<6c6c2e>-2.5 E F1108 124.8 Q F0 <50726f647563652056434720666f726d6174206f662063616c6c2067726170682e> 15.86 E F1108 141.6 Q<657273696f6e>-.1 E F0<5072696e742076>144 153.6 Q<657273696f6e206e756d626572>-.15 E 5<2e44>-.55 G<6566>-5 E <61756c74203d206e6f2e>-.1 E F1108 170.4 Q<6f6c6174696c65>-.1 E F0 1.909<417373756d6520434f4d4d4f4e20626c6f636b73206c6f73652064658c6e697469 6f6e206265747765656e2061637469>144 182.4 R -.25<7661>-.25 G 4.409 <74696f6e732e20446566>.25 F 1.909 <61756c74203d206e6f2e20284f62736f6c6574652e>-.1 F<557365>6.91 E F1 144 194.4 Q<6f6c6174696c65>-.1 E F0 <696e73746561642e29>2.5 E F1108 211.2 Q<6f726473697a653d>-.1 E F2 <6e756d>.36 E F0<5365742074686520646566>144 223.2 Q<61756c742077>-.1 E <6f72642073697a6520666f72206e756d65726963207175616e74697469657320746f> -.1 E F2<6e756d>2.5 E F0 2.5<62797465732e20446566>2.5 F <61756c74203d207475726e2d6f6e203d20342062797465732e>-.1 E F1 108 240 Q F2<6e756d>.36 E F0 .244<536574206f75747075742063 6f6c756d6e20617420776869636820746f2077726170206c6f6e67206572726f72206d65 73736167657320616e642077>144 252 R .244 <61726e696e677320746f20746865206e65>-.1 F .243<7874206c696e652e>-.15 F .243<49662073657420746f20302c>5.243 F<7475726e206f66>144 264 Q 2.5<6677> -.25 G 2.5<72617070696e672e20446566>-2.5 F <61756c74203d207475726e2d6f6e203d2037392e>-.1 E .461<5768656e206d6f7265 207468616e206f6e65206f7074696f6e20697320757365642c20746865>108 280.8 R 2.961<7973>-.15 G .461<686f756c6420626520736570617261746564206279206120 626c616e6b2073706163652c2065>-2.961 F .461 <7863657074206f6e2073797374656d732073756368206173>-.15 F .202 <564d53207768657265206f7074696f6e73206265>108 292.8 R .202 <67696e207769746820736c6173682028202f20292e>-.15 F .201<4e6f20626c616e6b 20737061636573206d617920626520706c616365642061726f756e642074686520657175 616c73207369676e2028203d202920696e2061>5.201 F<73657474696e672e>108 304.8 Q/F3 10/Courier@0 SF<66746e6368656b20223f22>5 E F0<77696c6c207072 6f64756365206120636f6d6d616e642073756d6d617279206c697374696e6720616c6c20 6f7074696f6e7320616e642073657474696e67732e>5 E -.15<466f>108 321.6 S 3.746<7273>.15 G 1.246<657474696e677320746861742074616b>-3.746 F 3.746 <65616c>-.1 G 1.246<697374206f66206b>-3.746 F -.15<6579>-.1 G -.1<776f> .15 G 1.246<7264732c206e616d656c79>.1 F F13.746 E <67756d656e7473>-.1 E F0<2c>A F13.746 E F0<2c>A F1 3.746 E<6565>-.18 E F0<2c>A F13.747 E F0 <2c>A F13.747 E<6f737372>-.18 E<6566>-.18 E F0<2c>A F1 108 333.6 Q F0<2c>A F14.359 E F0<2c>A F14.359 E F0 <2c>A F14.359 E F0<2c>A F14.359 E <6564636c73>-.1 E F0<2c>A F14.359 E F0<2c>A F1 4.359 E F0<2c>A F14.359 E<65747479> -.18 E F0<2c>A F14.359 E<6f6a656374>-.18 E F0<2c>A F1 4.359 E<6365>-.18 E F0<2c>A F14.359 E F0<2c>A F1108 345.6 Q F0 4.332<2c61>C<6e64>-4.332 E F1 4.332 E F0 4.332<2c74>C 1.832 <6865206c69737420636f6e7369737473206f66206b>-4.332 F -.15<6579>-.1 G -.1 <776f>.15 G 1.833 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F 1.833<496620746865206c697374206f66>6.833 F -.1<6b65>108 357.6 S<7977> -.05 E .275<6f726473206973206f6d69747465642c20746865206566>-.1 F .275<66 65637420697320746f2073657420746865206f7074696f6e20746f20697473207475726e 2d6f6e2076>-.25 F .274<616c7565202873616d652061732060>-.25 F<60616c6c27> -.74 E 2.774<2769>-.74 G 2.774<6e6d>-2.774 G .274 <6f7374206361736573292e>-2.774 F<416c736f2c>5.274 E .456<69662074686520 6c697374206973206f6d69747465642c207468652073657474696e67206e616d65206361 6e206265207072658c78>108 369.6 R .456<65642077697468>-.15 F F1<6e6f> 2.956 E F0<6f72>2.956 E F1<6e6fad>2.956 E F0 .457<746f207475726e206f66> 2.957 F 2.957<6661>-.25 G .457 <6c6c20746865206f7074696f6e7320697420636f6e74726f6c732e>-2.957 F -.15 <466f>108 381.6 S 2.92<7265>.15 G<78616d706c652c>-3.07 E F1 2.92 E F0 .42<7475726e73206f6e20616c6c2077>2.92 F .419<61726e696e677320 61626f7574206e6f6e7374616e6461726420636f6e737472756374696f6e732c20776869 6c65>-.1 F F12.919 E F0 .419 <7475726e73207468656d20616c6c206f66>2.919 F<662e>-.25 E <5468726565207370656369616c206b>108 393.6 Q -.15<6579>-.1 G -.1<776f>.15 G<726473206172653a>.1 E F1<68656c70>108 410.4 Q F0 .391 <5072696e74206f757420616c6c20746865206f7074696f6e206b>17.66 F -.15<6579> -.1 G -.1<776f>.15 G .391<72647320636f6e74726f6c6c6564206279207468652073 657474696e672c207769746820612062726965662065>.1 F .392 <78706c616e6174696f6e206f66207468656972206d65616e2d>-.15 F 2.5 <696e67732e2054686973>144 422.4 R -.1<6b65>2.5 G<7977>-.05 E <6f72642063616e6e6f74206265206769>-.1 E -.15<7665>-.25 G 2.5<6e69>.15 G 2.5<6e616c>-2.5 G<6973742077697468206f74686572206b>-2.5 E -.15<6579>-.1 G -.1<776f>.15 G<7264732e>.1 E F1<616c6c>108 439.2 Q F0<53657420616c6c20 6f7074696f6e732e2054686973207475726e73206f6e20616c6c206f7074696f6e732063 6f6e74726f6c6c6564206279207468652073657474696e672e>25.44 E F1<6e6f6e65> 108 456 Q F0<436c65617220616c6c206f7074696f6e732e>15.44 E <54686973207475726e73206f66>5 E 2.5<6661>-.25 G<6c6c206f7074696f6e732063 6f6e74726f6c6c6564206279207468652073657474696e672e>-2.5 E 1.165 <5468657365207468726565207370656369616c206b>108 472.8 R -.15<6579>-.1 G -.1<776f>.15 G 1.165<726473206d757374206265206769>.1 F -.15<7665>-.25 G 3.665<6e69>.15 G 3.665<6e66>-3.665 G 3.664<756c6c2e2046>-3.665 F 1.164 <6f7220616c6c206f74686572206b>-.15 F -.15<6579>-.1 G -.1<776f>.15 G 1.164<7264732c206f6e6c79206173206d616e>.1 F 3.664<796c>-.15 G 1.164 <657474657273206f6620746865>-3.664 F -.1<6b65>108 484.8 S<7977>-.05 E .804<6f726420617320617265206e656365737361727920746f206964656e7469667920 697420756e616d626967756f75736c79206e656564206265206769>-.1 F -.15<7665> -.25 G .804<6e2c206f7220612077696c6463617264207061747465726e206d61792062 6520757365642e>.15 F .24<496e636c7564696e672061206b>108 496.8 R -.15 <6579>-.1 G -.1<776f>.15 G .24<726420696e20746865206c697374207475726e73 2074686520636f72726573706f6e64696e67206f7074696f6e206f6e2e>.1 F -.15 <466f>5.24 G 2.74<7265>.15 G<78616d706c652c>-2.89 E F1 2.74 E F0 -.1<776f>2.74 G .24 <756c64207475726e>.1 F 1.013<6f6e206f6e6c79207468652077>108 508.8 R 1.014<61726e696e67732061626f757420757365206f66206e6f6e7374616e6461726420 696e7472696e7369632066756e6374696f6e732e>-.1 F 1.014 <5072658c78696e672061206b>6.014 F -.15<6579>-.1 G -.1<776f>.15 G 1.014 <7264206279>.1 F F1<6e6fad>3.514 E F0 1.014<7475726e7320697473>3.514 F 1.019<6f7074696f6e206f66>108 520.8 R 3.519<662e2046>-.25 F 1.019 <6f722065>-.15 F<78616d706c652c>-.15 E F13.519 E <657474793d6e6fad6c6f6e67ad6c696e65>-.18 E F0 1.019<7475726e73206f66> 3.519 F 3.518<6677>-.25 G 1.018 <61726e696e67732061626f7574206c696e65732065>-3.618 F 1.018 <7863656564696e6720373220636f6c756d6e7320696e>-.15 F .014 <6c656e677468207768696c65206c6561>108 532.8 R .014 <76696e6720616c6c206f746865722077>-.2 F .014<61726e696e67732061626f7574 206d69736c656164696e6720617070656172616e636520696e206566>-.1 F 2.515 <666563742e204966>-.25 F 2.515<6173>2.515 G .015 <657474696e672068617320646566>-2.515 F<61756c74>-.1 E F1<6e6f6e65>2.515 E F0<2c>A .207 <796f752063616e207475726e206f6e20616c6c206f7074696f6e732065>108 544.8 R .207<7863657074206f6e65206f72207477>-.15 F 2.707<6f62>-.1 G 2.707<7975> -2.707 G<73696e67>-2.707 E F1<616c6c>2.707 E F0 2.707<8c7273742e2046> 2.707 F .207<6f722065>-.15 F<78616d706c652c>-.15 E F1 2.707 E F0<656e61626c6573>2.707 E -.1<7761>108 556.8 S .956 <726e696e67732061626f757420616c6c206e6f6e7374616e646172642065>.1 F .956 <7874656e73696f6e732065>-.15 F .956 <786365707420494e434c5544452073746174656d656e74732e>-.15 F .957 <496620612073657474696e672068617320646566>5.956 F<61756c74>-.1 E F1 <616c6c>3.457 E F0 3.457<2c79>C<6f75>-3.457 E .047 <63616e207475726e206f66>108 568.8 R 2.547<6661>-.25 G .047<6c6c2077> -2.547 F .047<61726e696e67732065>-.1 F .047 <7863657074206f6e65206f72207477>-.15 F 2.547<6f62>-.1 G 2.547<7975> -2.547 G<73696e67>-2.547 E F1<6e6f6e65>2.546 E F0 2.546<8c7273742e2046> 2.546 F .046<6f722065>-.15 F<78616d706c652c>-.15 E F1 2.546 E F0 -.1<776f> 108 580.8 S .1<756c64207475726e206f66>.1 F 2.6<6661>-.25 G .101 <6c6c20707265636973696f6e2072656c617465642077>-2.6 F .101 <61726e696e67732065>-.1 F .101 <78636570742061626f75742064656d6f74696f6e732e>-.15 F -.4<5769>5.101 G .101 <6c6463617264207061747465726e7320636f6e7461696e20616e20617374657269736b> .4 F 1.878<746f207374616e6420666f7220616e>108 592.8 R 4.378<7973>-.15 G 1.878<7472696e67206f6620636861726163746572732e>-4.378 F 1.877<4966206120 77696c6463617264207061747465726e20697320757365642c20616c6c207468652077> 6.878 F 1.877<61726e696e67732074686174206d6174636820697420617265>-.1 F <6166>108 604.8 Q 3.152<6665637465642e204966>-.25 F F1<6e6fad>3.152 E F0 .652<6973207072658c78>3.152 F .652<656420746f20746865207061747465726e2c 20616c6c20746865206d61746368696e672077>-.15 F .652 <61726e696e677320617265207475726e6564206f66>-.1 F .653 <662c206f746865727769736520746865>-.25 F 3.153<7961>-.15 G .653 <726520616c6c>-3.153 F 1.02<7475726e6564206f6e2e>108 616.8 R 1.019<5468 65206d696e696d756d20756e616d626967756f7573206c656e6774682072756c6520646f 6573206e6f74206170706c7920746f2077696c6463617264206d61746368696e672e> 6.02 F -.15<466f>11.019 G 3.519<7265>.15 G<78616d706c652c>-3.669 E <757365>108 628.8 Q F13.08 E<61722a>-.1 E F0 .58<746f207475726e206f66>3.08 F 3.08<6661>-.25 G .581<6c6c2077>-3.08 F .581<61726e696e67732072656c6174696e6720746f2076>-.1 F .581<61726961626c 652075736167652028626f7468206c6f63616c20616e6420636f6d6d6f6e292e>-.25 F <28556e6978>5.581 E .627 <7573657273206d6179206e65656420746f2071756f746520616e>108 640.8 R 3.127 <796f>-.15 G .626<7074696f6e7320636f6e7461696e696e672077696c646361726473 20696e206f7264657220746f20707265>-3.127 F -.15<7665>-.25 G .626 <6e7420746865207368656c6c2066726f6d20617474656d7074696e6720746f>.15 F -.15<6578>108 652.8 S 1.304<70616e64207468656d2e29>.15 F -.4<5769>6.304 G 1.305<6c64636172647320617265207265636f676e697a6564206f6e6c7920696e206c 69737473206f662077>.4 F 1.305<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1 <776f>.15 G 1.305<7264732c206e6f7420696e2074686520746f702d6c65>.1 F -.15 <7665>-.25 G 3.805<6c6f>.15 G<7074696f6e73>-3.805 E<7468656d73656c76>108 664.8 Q<65732e>-.15 E<5768656e>108 681.6 Q F1<66746e6368656b>3.774 E F0 1.273<7374617274732075702c206974206c6f6f6b7320666f7220656e>3.774 F 1.273 <7669726f6e6d656e742076>-.4 F 1.273<61726961626c657320616e6420616c736f20 666f72206120707265666572656e636573208c6c652e>-.25 F<416e>6.273 E 3.773 <796f>-.15 G<7074696f6e73>-3.773 E .947 <64658c6e656420696e2074686520656e>108 693.6 R .947<7669726f6e6d656e7420 6f7220696e2074686520707265666572656e636573208c6c652061726520757365642061 7320646566>-.4 F .948<61756c747320696e20706c616365206f66207468652062>-.1 F .948<75696c742d696e20646566>-.2 F<61756c74732e>-.1 E<546865>108 705.6 Q 3.554<7961>-.15 G 1.054<7265206f>-3.554 F -.15<7665>-.15 G -.2<722d> .15 G 1.054<72696464656e20627920616e>.2 F 3.554<7963>-.15 G 1.054 <6f6d6d616e64206c696e65206f7074696f6e732e>-3.554 F 1.054 <536565207468652073656374696f6e206f6e206368616e67696e672074686520646566> 6.054 F 1.053<61756c747320666f722064657461696c73>-.1 F <61626f75742074686520656e>108 717.6 Q<7669726f6e6d656e74206f7074696f6e73 20616e642074686520707265666572656e636573208c6c652e>-.4 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<34>196.795 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .609<5768656e206769>108 84 R .609 <76696e672061206e616d65206f6620616e20696e707574208c6c652c207468652065> -.25 F .609<7874656e73696f6e206973206f7074696f6e616c2e>-.15 F .61 <4966206e6f2065>5.61 F .61<7874656e73696f6e206973206769>-.15 F -.15 <7665>-.25 G<6e2c>.15 E/F1 10/Times-Bold@0 SF<66746e6368656b>3.11 E F0 .61<77696c6c208c727374>3.11 F .447 <6c6f6f6b20666f7220612070726f6a656374208c6c6520776974682065>108 96 R <7874656e73696f6e>-.15 E/F2 10/Times-Italic@0 SF 1.666<2e70>2.947 G <726a>-1.666 E F0 2.947<2c61>C .447 <6e642077696c6c2075736520746861742069662069742065>-2.947 F 2.946 <78697374732e204966>-.15 F .446<6e6f742c207468656e>2.946 F F1 <66746e6368656b>2.946 E F0 .446<77696c6c206c6f6f6b20666f722061>2.946 F -.15<466f>108 108 S 1.379 <727472616e20736f75726365208c6c652077697468207468652065>.15 F <7874656e73696f6e>-.15 E F2 1.666<2e66>3.879 G<6f72>-1.666 E F0 1.379 <666f7220564d532073797374656d732c>3.879 F F2 1.666<2e66>3.879 G F0 1.379 <666f7220554e49582073797374656d732e>2.213 F 1.38 <4d6f7265207468616e206f6e65208c6c65>6.38 F<6e616d652063616e206265206769> 108 120 Q -.15<7665>-.25 G 2.5<6e74>.15 G<6f>-2.5 E F1<66746e6368656b> 2.5 E F0 2.5<2c61>C<6e642069742077696c6c2070726f6365737320746865206d6f64 756c657320696e20616c6c208c6c657320617320696620746865>-2.5 E 2.5<7977> -.15 G<65726520696e20612073696e676c65208c6c652e>-2.5 E -.4<5769>108 136.8 S 1.003<6c6463617264732061726520616c6c6f>.4 F 1.002<77656420696e20 7468652073706563698c636174696f6e206f66208c6c656e616d6573206f6e2074686520 636f6d6d616e64206c696e6520666f722074686520564d5320616e64204d532d444f53> -.25 F -.15<7665>108 148.8 S .181<7273696f6e732c20617320616c736f206f6620 636f7572736520756e64657220554e495820616e6420616e>.15 F 2.682<796f>-.15 G .182<746865722073797374656d207468617420706572666f726d732077696c64636172 642065>-2.682 F .182<7870616e73696f6e20696e2074686520636f6d2d>-.15 F <6d616e642070726f636573736f72>108 160.8 Q<2e>-.55 E <4966206e6f208c6c656e616d65206973206769>108 177.6 Q -.15<7665>-.25 G <6e2c>.15 E F1<66746e6368656b>2.5 E F0<77696c6c207265616420696e70757420 66726f6d20746865207374616e6461726420696e7075742e>2.5 E/F3 10.95 /Times-Bold@0 SF<4f5054494f4e53>72 194.4 Q F0 .275 <546869732073656374696f6e2070726f>108 206.4 R .275 <76696465732061206d6f72652064657461696c65642064697363757373696f6e206f66> -.15 F F1<66746e6368656b>2.775 E F0 .274 <636f6d6d616e642d6c696e65206f7074696f6e732e>2.774 F .274 <4f7074696f6e7320616e64208c6c656e616d6573>5.274 F .838<6d61792062652069 6e74657273706572736564206f6e206120636f6d6d616e64206c696e652e>108 218.4 R .839<4d6f7374206f7074696f6e732061726520706f736974696f6e616c3a2065616368 206f7074696f6e2072656d61696e7320696e206566>5.839 F .839 <666563742066726f6d>-.25 F<74686520706f696e7420697420697320656e636f756e 746572656420756e74696c206974206973206f>108 230.4 Q -.15<7665>-.15 G <7272696464656e2062792061206c61746572206368616e67652e>.15 E <5468757320666f722065>5 E <78616d706c652c20746865206c697374696e67206d6179206265207375702d>-.15 E .282<7072657373656420666f7220736f6d65208c6c657320616e64206e6f7420666f72 206f74686572732e>108 242.4 R .282 <457863657074696f6e73206172653a20746865>5.282 F F1 2.782 E F0<2c>A F12.782 E F0 2.782<2c61>C <6e64>-2.782 E F12.782 E<6f726473697a65>-.1 E F0<7365742d>2.782 E .449<74696e67732c2077686963682063616e6e6f74206265206368616e676564206f6e 63652070726f63657373696e67206f6620696e707574208c6c6573206861732073746172 7465643b20746865>108 254.4 R F12.948 E<67756d656e7473>-.1 E F0 <2c>A F12.948 E F0<2c>A F12.948 E<7472>108 266.4 Q<6565>-.18 E F0<2c>A F13.634 E F0<2c>A F1 3.634 E<6f737372>-.18 E<6566>-.18 E F0<2c>A F13.634 E<6e> -.15 E F0<2c>A F13.634 E<65666572>-.18 E<656e6365>-.18 E F0<2c>A F13.634 E<65736f7572>-.18 E<636573>-.18 E F0<2c>A F1 3.635 E F0<2c>A F13.635 E F0 3.635<2c61>C<6e64>-3.635 E F1 3.635 E<6f6c6174696c65>-.1 E F0 1.135 <6f7074696f6e732c207768657265>3.635 F 1.1 <74686520616374696f6e20646570656e6473206f6e6c79206f6e207468652076>108 278.4 R 1.1<616c7565206f6620746865206f7074696f6e206166746572207468652070 726f63657373696e67206f6620696e707574208c6c6573206973208c6e69736865643b20 616e6420746865>-.25 F F1108 290.4 Q F0 <73657474696e672c2077686963682069732063756d756c617469>2.5 E -.15<7665> -.25 G<2e>.15 E <546865206f7074696f6e206e616d657320696e2074686520666f6c6c6f>108 307.2 Q <77696e67206c6973742061726520696e20616c7068616265746963616c206f72646572> -.25 E<2e>-.55 E F1108 336 Q<67756d656e74733d>-.1 E F2<6c697374> .09 E F0 .322<436f6e74726f6c732077>144 348 R .323<61726e696e67732061626f 7574206d69736d617463686573206265747765656e2061637475616c20616e642064756d 6d792073756270726f6772616d206172>-.1 F .323 <67756d656e74732c20616e6420616c736f>-.18 F .23 <61626f7574206d69736d617463686573206265747765656e2065>144 360 R .23 <7870656374656420616e642061637475616c2073756270726f6772616d20747970652e> -.15 F .23<28416e2061637475616c206172>5.23 F .23 <67756d656e7420697320616e206172>-.18 F<67752d>-.18 E .774<6d656e74207061 7373656420746f207468652073756270726f6772616d206279207468652063616c6c6572 3b20612064756d6d79206172>144 372 R .774<67756d656e7420697320616e206172> -.18 F .774<67756d656e74207265636569>-.18 F -.15<7665>-.25 G 3.274<6462> .15 G 3.274<7974>-3.274 G<6865>-3.274 E 2.5 <73756270726f6772616d2e29204279>144 384 R<646566>2.5 E <61756c742c20616c6c2077>-.1 E <61726e696e677320617265207475726e6564206f6e2e>-.1 E<546865>144 400.8 Q F2<6c697374>2.977 E F0 .477<636f6e7369737473206f66206b>2.977 F -.15 <6579>-.1 G -.1<776f>.15 G .476 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .476<53696e636520616c6c2074686573652077>5.476 F .476 <61726e696e677320617265206f6e206279>-.1 F<646566>144 412.8 Q .657 <61756c742c20696e636c7564652061206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G .657<7264207072658c78>.1 F .657<6564206279>-.15 F F1<6e6fad>3.157 E F0 .657<746f207475726e206f66>3.157 F 3.158<666170>-.25 G .658 <6172746963756c61722077>-3.158 F 3.158<61726e696e672e205468657265>-.1 F .658<617265207468726565207370652d>3.158 F .26<6369616c206b>144 424.8 R -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.76 E F0 .26 <746f207475726e206f6e20616c6c207468652077>2.76 F .26 <61726e696e67732061626f7574206172>-.1 F<67756d656e74732c>-.18 E F1 <6e6f6e65>2.76 E F0 .26<746f207475726e207468656d20616c6c206f66>2.76 F .26<662c20616e64>-.25 F F1<68656c70>2.76 E F0 .098 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>144 436.8 R -.15<6579>-.1 G -.1<776f>.15 G .098 <726473207769746820612062726965662065>.1 F .098 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.099 E F2<6c697374> 2.599 E F0 .099<6973206f6d69747465642c>2.599 F F12.599 E <67756d656e7473>-.1 E F0 1.576<69732065717569>144 448.8 R -.25<7661>-.25 G 1.576<6c656e7420746f>.25 F F14.076 E<67756d656e74733d616c6c> -.1 E F0 4.076<2c61>C<6e64>-4.076 E F14.076 E <67756d656e7473>-.1 E F0 1.576<69732065717569>4.076 F -.25<7661>-.25 G 1.576<6c656e7420746f>.25 F F14.076 E<67756d656e74733d6e6f6e65> -.1 E F0 6.576<2e54>C<6865>-6.576 E -.1<7761>144 460.8 S<726e696e67206b> .1 E -.15<6579>-.1 G -.1<776f>.15 G<7264732077697468207468656972206d6561 6e696e67732061726520617320666f6c6c6f>.1 E<77733a>-.25 E F1 <61727261796e657373>144 477.6 Q F0<3a>A -.1<7761>171.78 489.6 S 1.16 <726e2061626f757420696e636f6e73697374656e7420757365206f66206172>.1 F 1.16<67756d656e7473207468617420617265206172726179732e>-.18 F 1.16 <54686573652077>6.16 F 1.16 <61726e696e67732063616e2062652066757274686572>-.1 F <636f6e74726f6c6c656420627920746865>171.78 501.6 Q F12.5 E F0<6f7074696f6e2e>2.5 E F1<74797065>144 518.4 Q F0<3a>A -.1<7761>161.5 530.4 S<726e2061626f75742064756d6d79206172>.1 E <67756d656e7473206f66206120646966>-.18 E <666572656e74206461746120747970652066726f6d207468652061637475616c206172> -.25 E<67756d656e74732e>-.18 E F1<66756e6374696f6ead74797065>144 547.2 Q F0<3a>A -.1<7761>161.5 559.2 S .107<726e2069662074686520696e>.1 F -.2 <766f>-.4 G .106 <636174696f6e20617373756d6573207468652066756e6374696f6e27>.2 F 2.606 <7372>-.55 G .106<657475726e2076>-2.606 F .106 <616c7565206973206120646966>-.25 F .106 <666572656e742074797065207468616e2069742061637475616c6c792069732e>-.25 F <416c736f2077>161.5 571.2 Q<61726e7320696620612066756e6374696f6e20697320 63616c6c6564206173206120737562726f7574696e652c206f7220766963652d76>-.1 E <657273612e>-.15 E F1<6e756d626572>144 588 Q F0<3a>A -.1<7761>161.5 600 S .211<726e2061626f757420696e>.1 F -.2<766f>-.4 G .211 <6b696e6720612073756270726f6772616d2077697468206120646966>.2 F .212 <666572656e74206e756d626572206f66206172>-.25 F .212 <67756d656e7473207468616e207468652073756270726f6772616d>-.18 F -.15 <6578>161.5 612 S<70656374732e>.15 E -.15<466f>144 628.8 S 4.953<7263> .15 G 2.453<6f6d7061746962696c697479207769746820707265>-4.953 F 2.453 <76696f75732076>-.25 F 2.453<657273696f6e73206f66>-.15 F F1 <66746e6368656b>4.953 E F0 7.453<2c61>C 2.453<6e756d6572696320666f726d20 6f6620746869732073657474696e6720697320616c736f>-2.5 F .661 <61636365707465643a20746865>144 640.8 R F2<6c697374>3.161 E F0 .661<6973 207265706c616365642062792061206e756d6265722066726f6d203020746f20332e> 3.161 F 3.162<4176>5.661 G .662 <616c7565206f662030207475726e7320616c6c207468652077>-3.412 F .662 <61726e696e6773206f66>-.1 F .662<662c2031>-.25 F <7475726e73206f6e206f6e6c79>144 652.8 Q F1<6e756d626572>2.5 E F0 2.5 <2c3274>C<75726e73206f6e20616c6c2065>-2.5 E<7863657074>-.15 E F1 <6e756d626572>2.5 E F0 2.5<2c61>C <6e642033207475726e7320616c6c207468652077>-2.5 E<61726e696e6773206f6e2e> -.1 E .894<546869732073657474696e6720646f6573206e6f74206170706c7920746f 20636865636b696e6720696e>144 669.6 R -.2<766f>-.4 G .894<636174696f6e73 206f6620696e7472696e7369632066756e6374696f6e73206f722073746174656d656e74 2066756e6374696f6e732c>.2 F <77686963682063616e206f6e6c79206265207475726e6564206f66>144 681.6 Q 2.5 <6662>-.25 G 2.5<7974>-2.5 G<6865>-2.5 E F12.5 E F0 <6f7074696f6e2e>2.5 E<53656520616c736f3a>144 698.4 Q F12.5 E F0<2c>A F12.5 E F0<2c>A F12.5 E F0<2e> A<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<35> 196.795 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 .981 <436f6e74726f6c7320746865206465>144 96 R .982<67726565206f66207374726963 746e65737320696e20636865636b696e672061677265656d656e74206265747765656e20 61637475616c20616e642064756d6d792073756270726f6772616d>-.15 F<6172>144 108 Q .255<67756d656e7473207468617420617265206172726179732e>-.18 F .254 <5468652077>5.255 F .254<61726e696e677320636f6e74726f6c6c65642062792074 6869732073657474696e672061726520666f7220636f6e737472756374696f6e73207468 6174206d69676874>-.1 F<6c65>144 120 Q .357 <676974696d6174656c7920626520757365642062792061206b6e6f>-.15 F .357 <776c6564676561626c652070726f6772616d6d6572>-.25 F 2.858<2c62>-.4 G .358 <75742074686174206f6674656e20696e6469636174652070726f6772616d6d696e6720 6572726f72732e>-3.058 F<427920646566>144 132 Q<61756c742c20616c6c2077> -.1 E<61726e696e677320617265207475726e6564206f6e2e>-.1 E<546865>144 148.8 Q F2<6c697374>2.977 E F0 .477<636f6e7369737473206f66206b>2.977 F -.15<6579>-.1 G -.1<776f>.15 G .476 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .476<53696e636520616c6c2074686573652077>5.476 F .476 <61726e696e677320617265206f6e206279>-.1 F<646566>144 160.8 Q .657 <61756c742c20696e636c7564652061206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G .657<7264207072658c78>.1 F .657<6564206279>-.15 F F1<6e6fad>3.157 E F0 .657<746f207475726e206f66>3.157 F 3.158<666170>-.25 G .658 <6172746963756c61722077>-3.158 F 3.158<61726e696e672e205468657265>-.1 F .658<617265207468726565207370652d>3.158 F .138<6369616c206b>144 172.8 R -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.638 E F0 .138 <746f207475726e206f6e20616c6c207468652077>2.638 F .138 <61726e696e67732061626f7574206172726179206172>-.1 F<67756d656e74732c> -.18 E F1<6e6f6e65>2.638 E F0 .137 <746f207475726e207468656d20616c6c206f66>2.638 F .137<662c20616e64>-.25 F F1<68656c70>144 184.8 Q F0 .131 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.631 F -.15<6579>-.1 G -.1<776f>.15 G .132 <726473207769746820612062726965662065>.1 F .132 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.132 E F2<6c697374> 2.632 E F0 .132<6973206f6d69747465642c>2.632 F F12.632 E F0 .356<69732065717569>144 196.8 R -.25<7661>-.25 G .356<6c656e7420746f> .25 F F12.856 E F0 2.856<2c61>C<6e64>-2.856 E F1 2.856 E F0 .356<69732065717569>2.856 F -.25<7661>-.25 G .356<6c656e7420746f>.25 F F12.856 E F0 5.356 <2e54>C .355<68652077>-5.356 F .355<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G<726473>.1 E <77697468207468656972206d65616e696e67732061726520617320666f6c6c6f>144 208.8 Q<77733a>-.25 E F1<64696d656e73696f6e73>144 225.6 Q F0<3a>A -.1 <7761>161.5 237.6 S 1.221<726e20696620746865206172>.1 F 1.222 <67756d656e747320646966>-.18 F 1.222<66657220696e207468656972206e756d62 6572206f662064696d656e73696f6e732c206f72206966207468652061637475616c2061 72>-.25 F 1.222<67756d656e7420697320616e>-.18 F <617272617920656c656d656e74207768696c65207468652064756d6d79206172>161.5 249.6 Q<67756d656e7420697320612077686f6c65206172726179>-.18 E<2e>-.65 E F1<73697a65>144 266.4 Q F0<3a>A -.1<7761>161.5 278.4 S <726e20696620626f7468206172>.1 E <67756d656e747320617265206172726179732c2062>-.18 E<757420746865>-.2 E 2.5<7964>-.15 G<6966>-2.5 E <66657220696e206e756d626572206f6620656c656d656e74732e>-.25 E -.15<466f> 144 295.2 S 4.953<7263>.15 G 2.453 <6f6d7061746962696c697479207769746820707265>-4.953 F 2.453 <76696f75732076>-.25 F 2.453<657273696f6e73206f66>-.15 F F1 <66746e6368656b>4.953 E F0 7.453<2c61>C 2.453<6e756d6572696320666f726d20 6f6620746869732073657474696e6720697320616c736f>-2.5 F .661 <61636365707465643a20746865>144 307.2 R F2<6c697374>3.161 E F0 .661<6973 207265706c616365642062792061206e756d6265722066726f6d203020746f20332e> 3.161 F 3.162<4176>5.661 G .662 <616c7565206f662030207475726e7320616c6c207468652077>-3.412 F .662 <61726e696e6773206f66>-.1 F .662<662c2031>-.25 F <7475726e73206f6e206f6e6c79>144 319.2 Q F1<64696d656e73696f6e73>2.5 E F0 2.5<2c3274>C<75726e73206f6e206f6e6c79>-2.5 E F1<73697a65>2.5 E F0 2.5 <2c61>C<6e642033207475726e7320616c6c207468652077>-2.5 E <61726e696e6773206f6e2e>-.1 E .405<4e6f74653a20412077>144 336 R .404 <61726e696e6720697320616c>-.1 F -.1<7761>-.1 G .404<7973206769>.1 F -.15 <7665>-.25 G 2.904<6e72>.15 G -2.25 -.15<65672061>-2.904 H .404<72646c65 7373206f6620746869732073657474696e67206966207468652061637475616c206172> .15 F .404<67756d656e7420697320616e206172726179207768696c65>-.18 F .712 <7468652064756d6d79206172>144 348 R .712 <67756d656e742069732061207363616c61722076>-.18 F .712 <61726961626c652c206f72206966207468652061637475616c206172>-.25 F .713 <67756d656e742069732061207363616c61722076>-.18 F .713 <61726961626c65206f722065>-.25 F<78707265732d>-.15 E .14 <73696f6e207768696c65207468652064756d6d79206172>144 360 R .14 <67756d656e7420697320616e206172726179>-.18 F 5.14<2e54>-.65 G .14 <68657365206361736573206172652073656c646f6d20696e74656e74696f6e616c2e> -5.14 F<2854>5.14 E 2.64<6f74>-.8 G .14<75726e206f66>-2.64 F 2.64<6665> -.25 G -.15<7665>-2.89 G<6e>.15 E 1.386<74686573652077>144 372 R 1.386 <61726e696e67732c20757365>-.1 F F13.886 E <67756d656e74733d6e6fad61727261796e657373>-.1 E F0 3.886<2e29204e6f>B -.1<7761>3.887 G 1.387<726e696e672069732065>.1 F -.15<7665>-.25 G 3.887 <7267>.15 G -2.15 -.25<69762065>-3.887 H 3.887<6e69>.25 G 3.887<6674> -3.887 G 1.387<68652061637475616c206172>-3.887 F<67752d>-.18 E 1.035<6d 656e7420697320616e20617272617920656c656d656e74207768696c6520746865206475 6d6d79206172>144 384 R 1.034<67756d656e742069732061207363616c61722076> -.18 F 3.534<61726961626c652e2056>-.25 F <61726961626c652d64696d656e73696f6e6564>-1.11 E .077<61727261797320616e 64206172726179732064696d656e73696f6e656420776974682031206f72206173746572 69736b206d6174636820616e>144 396 R 2.578<796e>-.15 G .078 <756d626572206f6620617272617920656c656d656e74732e>-2.578 F .078 <5468657265206973206e6f>5.078 F<636865636b206f662077686574686572206d756c 74692d64696d656e73696f6e616c2061727261797320616772656520696e207468652073 697a65206f6620656163682064696d656e73696f6e2073657061726174656c79>144 408 Q<2e>-.65 E<53656520616c736f3a>144 424.8 Q F12.5 E <67756d656e7473>-.1 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2e>A F1108 453.6 Q F0 .507 <53656c6563747320612073686f7274657220666f726d617420666f7220736f6d652077> 144 465.6 R .507<61726e696e67206d657373616765732e>-.1 F .507 <41742070726573656e742c20746865206f6e6c792077>5.507 F .507 <61726e696e677320636f6e74726f6c6c6564206279>-.1 F .317<74686973208d6167 206172652074686f7365207468617420617265207072696e746564206174207468652065 6e64206f662070726f63657373696e6720656163682073756270726f6772616d2e>144 477.6 R .318<546865736520696e636c7564652077>5.318 F<61726e2d>-.1 E .855 <696e67732061626f75742076>144 489.6 R .855 <61726961626c6573207468617420617265207365742062>-.25 F .854 <7574206e6f742075736564206f722075736564206265666f7265207365742c2076>-.2 F .854<61726961626c65206e616d6573207468617420646f206e6f7420636f6e2d>-.25 F .907<666f726d20746f207468652046>144 501.6 R .908 <6f727472616e203737207374616e646172642c206574632e>-.15 F .908 <2854686573652077>5.908 F .908<61726e696e6773206d6179206265207375707072 657373656420656e746972656c7920646570656e64696e67206f6e>-.1 F 1.004 <6f74686572208d6167732c207375636820617320746865>144 513.6 R F1 3.504 E F0<6f72>3.504 E F13.504 E F0 3.504 <8d6167732e2920496e>3.504 F 1.004<74686520646566>3.504 F 1.004 <61756c7420666f726d617420656163682076>-.1 F 1.004 <61726961626c65206973206c6973746564206f6e2061>-.25 F .552<73657061726174 65206c696e652c20616c6f6e67207769746820746865206c696e65206e756d6265722077 68657265207468652076>144 525.6 R .553<61726961626c65206973206465636c6172 65642c20736574206f7220757365642c206163636f7264696e6720746f>-.25 F 1.86 <746865206e6174757265206f66207468652077>144 537.6 R 4.36 <61726e696e672e20546865>-.1 F 1.86 <6272696566657220666f726d61742073696d706c79206c6973747320616c6c2076>4.36 F 1.86<61726961626c657320746f207768696368207468652077>-.25 F <61726e696e67>-.1 E<6170706c6965732c207769746820757020746f20342076>144 549.6 Q<61726961626c657320706572206c696e652e>-.25 E<53656520616c736f3a> 144 566.4 Q F12.5 E F0<2e>A F1108 595.2 Q <65653d>-.18 E F2<6c697374>.09 E F0<436175736573>144 607.2 Q F1 <66746e6368656b>2.5 E F0<746f207072696e74206f7574207468652063616c6c2073 7472756374757265206f662074686520636f6d706c6574652070726f6772616d2e>2.5 E <546865>144 624 Q F2<6c697374>3.546 E F0 1.046 <636f6e7369737473206f66206b>3.546 F -.15<6579>-.1 G -.1<776f>.15 G 1.046 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F 1.047<546865726520617265207477>6.047 F 3.547<6f73>-.1 G 1.047 <70656369616c206b>-3.547 F -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<6e6f6e65>144 636 Q F0 .381<746f207475726e206f66>2.881 F 2.881<6661> -.25 G .381<6c6c20746865206f7074696f6e732c20616e64>-2.881 F F1<68656c70> 2.881 E F0 .38 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.881 F -.15<6579>-.1 G -.1<776f>.15 G .38<726473207769746820612062726965662065> .1 F<78706c616e612d>-.15 E .072<74696f6e206f6620656163682e>144 648 R .072<28546865206b>5.072 F -.15<6579>-.1 G -.1<776f>.15 G<7264>.1 E F1 <616c6c>2.572 E F0 .072 <7475726e73206f6e20616c6c20746865206f7074696f6e732c2062>2.572 F .073<75 742073686f756c64206e6f74206e6f726d616c6c7920626520757365642073696e636520 6f6e6c79>-.2 F .874 <6f6e6520666f726d61742073686f756c642062652073706563698c65642e29>144 660 R<4966>5.874 E F2<6c697374>3.374 E F0 .874<6973206f6d69747465642c>3.374 F F13.373 E<6565>-.18 E F0 .873<69732065717569>3.373 F -.25<7661>-.25 G .873<6c656e7420746f>.25 F F13.373 E <65653d7472>-.18 E<6565>-.18 E F0 3.373<2c61>C<6e64>-3.373 E F1 144 672 Q<6565>-.18 E F0<69732065717569>2.5 E -.25 <7661>-.25 G<6c656e7420746f>.25 E F12.5 E <65653d6e6f6e65>-.18 E F0 5<2e42>C 2.5<7964>-5 G<6566>-2.5 E <61756c74206e6f2063616c6c206772617068206973207072696e7465642e>-.1 E 1.827<496620746865202d6d6b68746d6c206f7074696f6e20697320696e>144 688.8 R -.2<766f>-.4 G -.1<6b65>.2 G<64>.1 E F2<616e64>4.327 E F0 1.827<74726565 20697320746865206170706c6965642063616c6c74726565206f7074696f6e2c2061208c 6c65206e616d6564>4.327 F/F3 10/Courier@0 SF<43616c6c2d>4.327 E <547265652e68746d6c>144 700.8 Q F0 3.409<2c77>C .909<696c6c20616c736f20 62652070726f647563656420646570696374696e6720746865207472656520696e204854 4d4c20666f726d61742e>-3.409 F .908 <54686973208c6c652069732075736566756c2061732061>5.909 F <7374617274696e6720706f696e7420666f722062726f>144 712.8 Q<7773696e672074 68652048544d4c208c6c65732064657363726962696e67206561636820636f6d706f6e65 6e74206f66207468652070726f6772616d2e>-.25 E<546865206b>144 729.6 Q -.15 <6579>-.1 G -.1<776f>.15 G<72647320776869636820636f6e74726f6c2077686963 6820666f726d617420697320757365642061726520617320666f6c6c6f>.1 E<77733a> -.25 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<36> 196.795 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF<7472>144 84 Q<6565>-.18 E F0<3a>A<70726f64756365207468652063616c6c20677261706820 696e207472656520666f726d61742e>161.5 96 Q F1 -.18<7265>144 112.8 S <666572>.18 E<656e6365>-.18 E F0<3a>A<70726f64756365207468652063616c6c20 677261706820696e2077686f2d63616c6c732d77686f20666f726d6174202873616d6520 6173>161.5 124.8 Q F12.5 E<65666572>-.18 E<656e6365>-.18 E F0 <737769746368292e>2.5 E F1<766367>144 141.6 Q F0<3a>A<70726f647563652074 68652063616c6c20677261706820696e2056434720666f726d6174202873616d65206173> 161.5 153.6 Q F12.5 E F0<737769746368292e>2.5 E <4f6e6c79206f6e65206f662074686520666f726d617473>144 170.4 Q F1<7472>2.5 E<6565>-.18 E F0<2c>A F1 -.18<7265>2.5 G<666572>.18 E<656e6365>-.18 E F0 2.5<2c6f>C<72>-2.5 E F1<766367>2.5 E F0 <6d61792062652073706563698c65642e>2.5 E<54686520666f6c6c6f>144 187.2 Q <77696e67206b>-.25 E -.15<6579>-.1 G -.1<776f>.15 G <72647320636f6e74726f6c206f7074696f6e73206166>.1 E <66656374696e6720746865206f75747075743a>-.25 E F1<7072756e65>144 204 Q F0<3a>A<7072756e6520726570656174656420737562747265657320286170706c696361 626c65206f6e6c792077697468>161.5 216 Q F1<7472>2.5 E<6565>-.18 E F0 2.5 <292e2054686973>B<74686520646566>2.5 E<61756c742e>-.1 E F1<736f7274>144 232.8 Q F0<3a>A<736f7274206368696c6472656e206f66206561636820726f7574696e 6520696e746f20616c7068616265746963616c206f72646572>161.5 244.8 Q 5<2e54> -.55 G<6869732069732074686520646566>-5 E<61756c742e>-.1 E <536565207468652064697363757373696f6e206f6620746865>144 261.6 Q F1 2.5 E<65666572>-.18 E<656e6365>-.18 E F0<616e64>2.5 E F12.5 E F0<8d61677320666f722064657461696c732061626f757420746865736520666f726d61 74732e>2.5 E -.15<466f>144 278.4 S<72>.15 E F1<7472>3.251 E<6565>-.18 E F0 .751<666f726d61742c205468652063616c6c206772617068206973207072696e7465 64206f7574207374617274696e672066726f6d20746865206d61696e2070726f6772616d 2c207768696368206973206c6973746564206f6e>3.251 F .561 <746865208c727374206c696e6520617420746865206c656674206d6172>144 290.4 R 3.061<67696e2e205468656e>-.18 F .561<6f6e2074686520666f6c6c6f>3.061 F .56<77696e67206c696e65732c206561636820726f7574696e652063616c6c6564206279 20746865206d61696e2070726f2d>-.25 F <6772616d206973206c69737465642c20696e64656e7465642061206665>144 302.4 Q 2.5<7773>-.25 G<70616365732c20666f6c6c6f>-2.5 E<776564206279207468652073 756274726565207374617274696e67206174207468617420726f7574696e652e>-.25 E .251<496e2074686520646566>144 319.2 R .251<61756c74206d6f64652c20696620 6120726f7574696e652069732063616c6c6564206279206d6f7265207468616e206f6e65 206f7468657220726f7574696e652c206974732063616c6c207375627472656520697320 7072696e746564>-.1 F 1.159<6f6e6c7920746865208c7273742074696d6520697420 697320656e636f756e7465726564204c617465722063616c6c73206769>144 331.2 R 1.459 -.15<7665206f>-.25 H 1.159<6e6c792074686520726f7574696e65206e616d 6520616e6420746865206e6f746963652060>.15 F<6028736565>-.74 E<61626f>144 343.2 Q -.15<7665>-.15 G<2927>.15 E 2.5<272e2054>-.74 F 2.5<6f68>-.8 G -2.25 -.2<61762065>-2.5 H<7468652073756274726565207072696e74656420666f72 2065616368206f6363757272656e6365206f662074686520726f7574696e652c20757365 206f7074696f6e>2.7 E F1<6e6fad7072756e65>2.5 E F0<2e>A .437<4e6f74652074 686174207468652063616c6c20747265652077696c6c20626520696e636f6d706c657465 20696620616e>144 360 R 2.937<796f>-.15 G 2.937<6674>-2.937 G .438<686520 696e707574208c6c6573206172652070726f6a656374208c6c657320636f6e7461696e69 6e67206d6f7265>-2.937 F<7468616e206f6e65206d6f64756c65207468617420776572 65206372656174656420696e>144 372 Q F12.5 E F0 2.5 <6d6f64652e20536565>2.5 F <7468652064697363757373696f6e206f662070726f6a656374208c6c65732062656c6f> 2.5 E -.65<772e>-.25 G -.7<5465>144 388.8 S 1.274<63686e6963616c20706f69 6e74733a2045616368206c697374206f6620726f7574696e65732063616c6c6564206279 2061206769>.7 F -.15<7665>-.25 G 3.773<6e72>.15 G 1.273<6f7574696e652069 73207072696e74656420696e20616c7068616265746963616c206f72646572>-3.773 F .795<756e6c65737320746865>144 400.8 R F1<6e6fad736f7274>3.295 E F0 .796 <6f7074696f6e206973206769>3.296 F -.15<7665>-.25 G 3.296<6e2e204966>.15 F .796<6d756c7469706c65206d61696e2070726f6772616d732061726520666f756e64 2c207468652063616c6c2074726565206f662065616368206973>3.296 F .542 <7072696e7465642073657061726174656c79>144 412.8 R 5.542<2e49>-.65 G 3.042<666e>-5.542 G 3.042<6f6d>-3.042 G .542<61696e2070726f6772616d2069 7320666f756e642c2061207265706f727420746f2074686174206566>-3.042 F .541 <66656374206973207072696e746564206f75742c20616e64207468652063616c6c>-.25 F .792<7472656573206f6620616e>144 424.8 R 3.292<7974>-.15 G<6f702d6c65> -3.292 E -.15<7665>-.25 G 3.292<6c6e>.15 G .792 <6f6e2d6c69627261727920726f7574696e657320617265207072696e7465642e>-3.292 F .792<54686973208d6167206f6e6c7920636f6e74726f6c7320746865207072696e74 696e67206f6620746865>5.792 F .383<63616c6c20747265653a>144 436.8 R F1 <66746e6368656b>2.883 E F0 .383 <636f6e73747275637473207468652063616c6c207472656520696e20616e>2.883 F 2.883<7963>-.15 G .383<617365206265636175736520697420697320757365642074 6f2064657465726d696e65207768696368206c696272617279>-2.883 F <6d6f64756c65732077696c6c2062652063726f73732d636865636b>144 448.8 Q 2.5 <65642e20536565>-.1 F<7468652064697363757373696f6e206f6620746865>2.5 E F12.5 E F0<8d61672e>2.5 E -.15<466f>144 465.6 S 4.952 <7263>.15 G 2.452<6f6d7061746962696c697479207769746820707265>-4.952 F 2.453<76696f75732076>-.25 F 2.453<657273696f6e73206f66>-.15 F F1 <66746e6368656b>4.953 E F0 7.453<2c61>C 2.453<6e756d6572696320666f726d20 6f6620746869732073657474696e6720697320616c736f>-2.5 F .9 <61636365707465643a20746865>144 477.6 R/F2 10/Times-Italic@0 SF <6c697374>3.4 E F0 .9<6973207265706c616365642062792061206e756d6265722066 726f6d203020746f2031352e>3.4 F .899 <54686973206e756d62657220697320666f726d65642066726f6d203120666f72>5.899 F F1<7472>3.399 E<6565>-.18 E F0<666f726d61742c203220666f72>144 489.6 Q F1 -.18<7265>2.5 G<666572>.18 E<656e6365>-.18 E F0 <666f726d61742c206f72203320666f72>2.5 E F1<766367>2.5 E F0 <666f726d61742c20706c7573203420666f72>2.5 E F1<6e6fad7072756e65>2.5 E F0 2.5<2c61>C<6e64203820666f72>-2.5 E F1<6e6fad736f7274>2.5 E F0<2e>A <53656520616c736f3a>144 506.4 Q F12.5 E<6f737372>-.18 E<6566> -.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E<65666572> -.18 E<656e6365>-.18 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2e>A F1 108 535.2 Q F0 1.07<54686973207377697463682069732070726f>144 547.2 R 1.07<766964656420736f2074686174206572726f727320616e642077>-.15 F 1.07 <61726e696e67206d657373616765732063616e206265207475726e6564206f66>-.1 F 3.57<6677>-.25 G<68656e>-3.57 E F1<66746e6368656b>3.57 E F0<6973>3.57 E .339<7573656420666f7220707572706f736573206f74686572207468616e208c6e6469 6e672062>144 559.2 R .339<7567732c2073756368206173206d616b696e6720646563 6c61726174696f6e73206f72207072696e74696e67207468652063616c6c20747265652e> -.2 F<4974>5.338 E .535<697320706f736974696f6e616c2c20736f20616674657220 7475726e696e6720616c6c20636865636b73206f66>144 571.2 R .535<662c2073656c 656374656420636865636b732063616e206265207475726e6564206261636b206f6e2e> -.25 F .536<546865206566>5.536 F .536<66656374206f66>-.25 F F1 144 583.2 Q F0 .119<697320746f2070757420616c6c20737769 74636865732c206e756d657269632073657474696e67732c20616e642073657474696e67 7320636f6e74726f6c6c696e67206c69737473206f662077>2.62 F .119 <61726e696e677320746f207468656972>-.1 F<7475726e2d6f66>144 595.2 Q 3.555 <6676>-.25 G 1.055<616c7565732c20617320696620746865>-3.805 F 3.555<7968> -.15 G 1.056<616420616c6c206265656e2073706563698c6564207769746820746865 20ad6e6f207072658c782e>-3.555 F 1.056 <537769746368657320616e642073657474696e67732074686174>6.056 F .999<7370 6563696679206f7074696f6e7320616e64206d6f646573206f66206f7065726174696f6e 2c20726174686572207468616e20636f6e74726f6c6c696e672077>144 607.2 R .999 <61726e696e67732c2061726520756e6166>-.1 F 3.499 <6665637465642e205468657365>-.25 F<617265>144 619.2 Q F1 4.011 E F0<2c>A F14.011 E<6f737372>-.18 E <6566>-.18 E F0<2c>A F14.011 E F0<2c>A F1 4.011 E F0<2c>A F14.011 E F0<2c> A F14.011 E F0<2c>A F14.011 E<6564636c73>-.1 E F0 <2c>A F14.011 E<76696365>-.1 E F0<2c>A F14.012 E F0<2c>A F1144 631.2 Q F0<2c>A F13.498 E<6f6a656374>-.18 E F0<2c>A F13.498 E F0<2c>A F1 3.498 E<65666572>-.18 E<656e6365>-.18 E F0<2c>A F13.498 E <65736f7572>-.18 E<636573>-.18 E F0<2c>A F13.498 E F0<2c>A F13.498 E<6365>-.18 E F0<2c>A F13.498 E F0 <2c>A F13.497 E F0<2c>A F13.497 E<6572>-.1 E<2d>-.37 E <73696f6e>144 643.2 Q F0<2c>A F12.5 E<6f726473697a65>-.1 E F0 2.5 <2c61>C<6e64>-2.5 E F12.5 E F0 5<2e44>C<6566>-5 E <61756c74203d207965732e>-.1 E -.15<5061>144 660 S 1.015<727365206572726f 7273202873796e746178206572726f72732064756520746f20756e7265636f676e697a65 64206f72206d616c666f726d65642073746174656d656e74732920617265206e6f742073 757070726573736564206279>.15 F<74686973207377697463682c2073696e63652074 686520726573756c7473206d617920626520696e636f7272656374206966>144 672 Q F1<66746e6368656b>2.5 E F0<686173206e6f7420706172736564207468652070726f 6772616d20636f72726563746c79>2.5 E<2e>-.65 E 1.009<54686572652061726520 736f6d65206d697363656c6c616e656f7573206572726f727320616e642077>144 688.8 R 1.008<61726e696e67206d65737361676573207468617420617265206e6f7420636f6e 74726f6c6c656420627920616e>-.1 F 3.508<796f>-.15 G<74686572>-3.508 E .303<7377697463682c20616e6420736f2063616e206265207475726e6564206f66>144 700.8 R 2.803<666f>-.25 G .303<6e6c792062792074686973207377697463682e> -2.803 F .303<4e6f74652074686174207573696e67>5.303 F F1 2.803 E F0<666f6c6c6f>2.804 E<77696e67>-.25 E F12.804 E F0 .219<6f6e6c792068617320746865206566>144 712.8 R .219 <66656374206f66207475726e696e67207468657365207370656369616c2077>-.25 F .218<61726e696e6773206261636b206f6e2c20616e6420646f6573206e6f7420726573 746f726520616c6c2074686520636865636b73206974>-.1 F<7475726e6564206f66> 144 724.8 Q 2.5<662e205468657365>-.25 F -.1<7761>2.5 G <726e696e6773206172653a>.1 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<37>196.795 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E 12.5<6f4d>144 84 S <6f64756c6520636f6e7461696e73206e6f2065>-12.5 E -.15<7865>-.15 G <63757461626c652073746174656d656e74732e>.15 E 12.5<6f49>144 100.8 S 3.505<6e66>-12.5 G 1.005<72656520736f7572636520666f726d2c206d697373696e 672073706163652077686572652073706163652069732072657175697265642028652e67 2e206265747765656e2061206b>-3.505 F -.15<6579>-.1 G -.1<776f>.15 G 1.006 <726420616e6420616e>.1 F<6964656e74698c657229206f7220737061636520707265 73656e74207768657265206e6f6e6520697320616c6c6f>161.5 112.8 Q <7765642028652e672e2077697468696e20616e206964656e74698c6572292e>-.25 E 12.5<6f5a>144 129.6 S<65726f206f72206e65>-12.5 E -.05<6761>-.15 G<7469> .05 E .3 -.15<7665206c>-.25 H<656e6774682073706563698c636174696f6e20696e 206120646174612074797065206465636c61726174696f6e206f662074686520666f726d 20747970652a6c656e2e>.15 E 12.5<6f49>144 146.4 S -1.95 -.4<6e762061> -12.5 H<6c6964206f706572616e6428732920696e20616e2065>.4 E <787072657373696f6e2e>-.15 E 12.5<6f41>144 163.2 S <727261792061737369676e656420746f207363616c6172>-12.5 E<2e>-.55 E 12.5 <6f54>144 180 S<797065206d69736d61746368206265747765656e>-13.3 E/F1 10 /Courier@0 SF<444f>2.5 E F0<696e6465>2.5 E 2.5<7861>-.15 G <6e6420626f756e64732e>-2.5 E 12.5<6f55>144 196.8 S <6e64658c6e656420636f6d6d6f6e20626c6f636b206465636c6172656420696e>-12.5 E F1<53415645>2.5 E F0<73746174656d656e742e>2.5 E 12.5<6f49>144 213.6 S <6e7472696e7369632066756e6374696f6e2065>-12.5 E<78706c696369746c79206465 636c61726564207769746820616e20696e636f6d70617469626c6520747970652e>-.15 E 12.5<6f55>144 230.4 S<6e6b6e6f>-12.5 E <776e20696e7472696e7369632066756e6374696f6e2065>-.25 E <78706c696369746c79206465636c6172656420696e20616e>-.15 E F1 <494e5452494e534943>2.5 E F0<73746174656d656e742e>2.5 E 12.5<6f49>144 247.2 S .643<6e7472696e7369632066756e6374696f6e207061737365642061732061 2073756270726f6772616d206172>-12.5 F .642 <67756d656e74206973206e6f74206465636c6172656420696e20616e>-.18 F F1 <494e5452494e534943>3.142 E F0<73746174652d>3.142 E<6d656e742e>161.5 259.2 Q 12.5<6f49>144 276 S<6e7472696e7369632066756e6374696f6e206f722073 746174656d656e742066756e6374696f6e20696e>-12.5 E -.2<766f>-.4 G -.1 <6b65>.2 G 2.5<6469>.1 G<6e636f72726563746c79>-2.5 E<2e>-.65 E 12.5 <6f46>144 292.8 S <756e6374696f6e20646f6573206e6f74207365742072657475726e2076>-12.5 E <616c7565207072696f7220746f>-.25 E F1<52455455524e>2.5 E F0 <73746174656d656e742e>2.5 E 12.5<6f50>144 309.6 S .45 <6172616d6574657220636f6e7374616e742076>-12.65 F .45 <616c7565206e6f742065>-.25 F -.25<7661>-.25 G .45 <6c7561746564202874686973206973>.25 F/F2 10/Times-Bold@0 SF <66746e6368656b>2.95 E F0 1.55 -.55<27732066>D .45<61756c742c20616e6420 6974206973206a75737420696e666f726d696e6720796f75206f66>.45 F<7468652066> 161.5 321.6 Q<616374292e>-.1 E 12.5<6f45>144 338.4 S<6e74727920706f696e 74206f6620612073756270726f6772616d206973206c6174657220757365642061732061 20646966>-12.5 E<666572656e742073756270726f6772616d27>-.25 E 2.5<736e> -.55 G<616d652e>-2.5 E 12.5<6f55>144 355.2 S<6e6b6e6f>-12.5 E<776e206b> -.25 E -.15<6579>-.1 G -.1<776f>.15 G <7264207573656420696e20616e20492f4f2073746174656d656e742e>.1 E 12.5 <6f49>144 372 S<6c6c65>-12.5 E -.05<6761>-.15 G 3.355<6c6c>.05 G .855 <6162656c207265666572656e63652028652e672e20474f>-3.355 F 1.215 -.18 <544f2072>-.4 H .855<656665727320746f2061206e6f6e2d65>.18 F -.15<7865> -.15 G .855<63757461626c652073746174656d656e743b20492f4f2073746174656d65 6e7420726566657273>.15 F <746f2061206e6f6e2d666f726d61742073746174656d656e74292e>161.5 384 Q <53656520616c736f3a>144 400.8 Q F22.5 E<6f7273>-.18 E F0<2e>A F2108 441.6 Q/F3 10/Times-Italic@0 SF<6e756d>.36 E F0 1.312<536574206d6178696d756d2073746174656d656e74206c656e67746820746f> 144 453.6 R F3<6e756d>3.812 E F0 3.812<636f6c756d6e732e20284265>3.812 F 1.312<796f6e6420746869732069732069676e6f7265642e29>-.15 F 1.313 <546869732073657474696e672069732070726f2d>6.312 F .596 <766964656420746f20616c6c6f>144 465.6 R 3.096<7763>-.25 G .596<6865636b 696e67206f662070726f6772616d73207768696368206d61792076696f6c617465207468 652046>-3.096 F .596 <6f727472616e207374616e64617264206c696d6974206f6620373220636f6c756d6e73> -.15 F .033 <666f7220746865206c656e677468206f6620612073746174656d656e742e>144 477.6 R .033<4163636f7264696e6720746f20746865207374616e646172642c20616c6c2063 686172616374657273207061737420636f6c756d6e203732206172652069676e6f726564 2e>5.033 F .284 <496620746869732073657474696e672069732075736564207768656e20746865>144 489.6 R F22.784 E F0 .284 <6f7074696f6e20697320696e206566>2.784 F .284<666563742c20612077>-.25 F .284<61726e696e672077696c6c206265206769>-.1 F -.15<7665>-.25 G 2.783 <6e66>.15 G .283<6f7220616e>-2.783 F<79>-.15 E<6c696e657320696e20776869 63682063686172616374657273207061737420636f6c756d6e203732206172652070726f 6365737365642e>144 501.6 Q -.45<5475>5 G <726e2d6f6e203d206d6178203d203133322e>.45 E<446566>5 E <61756c74203d2037322e>-.1 E .825 <546869732073657474696e6720646f6573206e6f742073757070726573732077>144 518.4 R .826<61726e696e67732061626f7574207468652070726573656e6365206f66 2063686172616374657273206265>-.1 F .826<796f6e6420636f6c756d6e2037322e> -.15 F -.8<546f>5.826 G 1.238<70726f6365737320636f64652077697468206d6561 6e696e6766756c2070726f6772616d207465>144 530.4 R 1.238<7874206265>-.15 F 1.238<796f6e6420636f6c756d6e2037322c2075736520746869732073657474696e6720 616e64206265207375726520746865>-.15 F F2 .498 144 542.4 R F0 .498 <6f7074696f6e206973206f66>2.998 F 2.999<662e2054>-.25 F 2.999<6f70>-.8 G .499<726f6365737320636f646520776974682073657175656e6365206e756d62657273 20696e20636f6c756d6e7320373320746f2038302c206c6561>-2.999 F -.15<7665> -.2 G <7468652074686520636f6c756d6e732073657474696e672061742074686520646566> 144 554.4 Q<61756c742076>-.1 E<616c756520616e642075736520746865>-.25 E F22.5 E<657474793d6e6fad6c6f6e67ad6c696e65>-.18 E F0<8d61672e> 2.5 E<53656520616c736f3a>144 571.2 Q F22.5 E F0<2c>A F2 2.5 E<65747479>-.18 E F0<2e>A F2108 600 Q F3 <6c697374>.09 E F0 1.462<546869732073657474696e6720636f6e74726f6c732074 6865207374726963746e657373206f6620636865636b696e67206f6620434f4d4d4f4e20 626c6f636b732e>144 612 R 1.462<427920646566>6.462 F 1.462 <61756c742c20616c6c2077>-.1 F<61726e696e6773>-.1 E -.15<6578>144 624 S <63657074>.15 E F2 -.1<766f>2.5 G<6c6174696c65>.1 E F0 <617265207475726e6564206f6e2e>2.5 E<546865>144 640.8 Q F3<6c697374>3.322 E F0 .822<636f6e7369737473206f66206b>3.322 F -.15<6579>-.1 G -.1<776f> .15 G .823 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .823<53696e6365206d6f7374206f662074686573652077>5.823 F .823 <61726e696e677320617265>-.1 F .276<6f6e20627920646566>144 652.8 R .276 <61756c742c20696e636c7564652061206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G .275<7264207072658c78>.1 F .275<6564206279>-.15 F F2<6e6fad>2.775 E F0 .275<746f207475726e206f66>2.775 F 2.775<666170>-.25 G .275 <6172746963756c61722077>-2.775 F 2.775<61726e696e672e205468657265>-.1 F .275<617265207468726565>2.775 F .718<7370656369616c206b>144 664.8 R -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F2<616c6c>3.219 E F0 .719 <746f207475726e206f6e20616c6c207468652077>3.219 F<61726e696e67732c>-.1 E F2<6e6f6e65>3.219 E F0 .719<746f207475726e207468656d20616c6c206f66>3.219 F .719<662c20616e64>-.25 F F2<68656c70>3.219 E F0 .719 <746f207072696e7420746865>3.219 F .243 <6c697374206f6620616c6c20746865206b>144 676.8 R -.15<6579>-.1 G -.1 <776f>.15 G .243<726473207769746820612062726965662065>.1 F .242 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.242 E F3<6c697374> 2.742 E F0 .242<6973206f6d69747465642c>2.742 F F22.742 E F0 .242<69732065717569>2.742 F -.25<7661>-.25 G<6c656e74>.25 E<746f>144 688.8 Q F23.01 E F0 3.01<2c61>C<6e64>-3.01 E F2 3.01 E F0 .51<69732065717569>3.01 F -.25<7661>-.25 G .51<6c656e7420746f> .25 F F23.01 E F0<2e>A<5468652077>144 700.8 Q <61726e696e67206b>-.1 E -.15<6579>-.1 G -.1<776f>.15 G<7264732077697468 207468656972206d65616e696e67732061726520617320666f6c6c6f>.1 E<77733a> -.25 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<38> 196.795 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <64696d656e73696f6e73>144 84 Q F0<3a>A .517<636f72726573706f6e64696e6720 61727261797320696e2065616368206465636c61726174696f6e206f66206120626c6f63 6b206d75737420616772656520696e2073697a6520616e64206e756d626572206f662064 696d656e2d>161.5 96 R 2.5<73696f6e732e2054686973>161.5 108 R <6f7074696f6e206f6e6c792068617320616e206566>2.5 E <66656374207768656e207573656420746f6765746865722077697468>-.25 E F1 <6578616374>2.5 E F0<2e>A F1<6578616374>144 124.8 Q F0<3a>A .348 <74686520636f6d70617269736f6e206f66207477>161.5 136.8 R 2.848<6f62>-.1 G .348<6c6f636b7320697320646f6e652076>-2.848 F<61726961626c652d62792d76> -.25 E .349<61726961626c6520726174686572207468616e2073696d706c7920726571 756972696e672061677265652d>-.25 F .797<6d656e74206265747765656e20636f72 726573706f6e64696e672073746f72616765206c6f636174696f6e732e>161.5 148.8 R .796<557365207468697320696620616c6c206465636c61726174696f6e73206f662061 206769>5.796 F -.15<7665>-.25 G 3.296<6e43>.15 G<4f4d2d>-3.296 E<4d4f4e 20626c6f636b2061726520737570706f73656420746f206265206964656e746963616c2c 207768696368206973206120676f6f642070726f6772616d6d696e672070726163746963 652e>161.5 160.8 Q F1<6c656e677468>144 177.6 Q F0<3a>A -.1<7761>161.5 189.6 S .601<726e20696620646966>.1 F .602<666572656e74206465636c61726174 696f6e73206f66207468652073616d6520626c6f636b20617265206e6f7420657175616c 20696e20746f74616c206c656e6774682e>-.25 F .602<5468652046>5.602 F .602 <6f727472616e203737>-.15 F .046<5374616e64617264207265717569726573206561 6368206e616d656420636f6d6d6f6e20626c6f636b2c2062>161.5 201.6 R .046<7574 206e6f7420626c616e6b20636f6d6d6f6e2c20746f206265207468652073616d65206c65 6e67746820696e>-.2 F <616c6c206d6f64756c6573206f66207468652070726f6772616d2e>161.5 213.6 Q F1 <74797065>144 230.4 Q F0<3a>A .825 <696e2065616368206465636c61726174696f6e206f662061206769>161.5 242.4 R -.15<7665>-.25 G 3.325<6e43>.15 G .825<4f4d4d4f4e20626c6f636b2c20636f72 726573706f6e64696e67206d656d6f7279206c6f636174696f6e73202877>-3.325 F .825<6f726473206f72>-.1 F .498 <627974657329206d75737420616772656520696e206461746120747970652e>161.5 254.4 R .497<4966207573656420746f6765746865722077697468>5.497 F F1 <6578616374>2.997 E F0 2.997<2c74>C .497 <6869732077696c6c2072657175697265207468617420636f72726573706f6e642d> -2.997 F<696e672076>161.5 266.4 Q <61726961626c657320616772656520696e206461746120747970652e>-.25 E F1 -.1 <766f>144 283.2 S<6c6174696c65>.1 E F0<3a>A <417373756d65207468617420434f4d4d4f4e20626c6f636b73206172652076>161.5 295.2 Q<6f6c6174696c652e>-.2 E<4d616e>144 312 Q 3.308<7946>-.15 G .808 <6f727472616e2070726f6772616d6d65727320617373756d6520746861742076>-3.458 F .809<61726961626c65732c2077686574686572206c6f63616c206f7220696e20434f 4d4d4f4e2c20617265207374617469632c20692e652e>-.25 F .852 <74686174206f6e63652061737369676e656420612076>144 324 R .852 <616c75652c20746865>-.25 F 3.352<7972>-.15 G .852 <657461696e20746861742076>-3.352 F .852<616c7565207065726d616e656e746c79 20756e74696c2061737369676e6564206120646966>-.25 F .852<666572656e742076> -.25 F .852<616c7565206279>-.25 F .368<7468652070726f6772616d2e>144 336 R<486f>5.368 E<7765>-.25 E -.15<7665>-.25 G 1.168 -.4<722c2069>.15 H 2.869<6e66>.4 G .369<616374207468652046>-2.969 F .369<6f727472616e203737 205374616e6461726420646f6573206e6f742072657175697265207468697320746f2062 652074686520636173652e>-.15 F<4c6f63616c>5.369 E -.25<7661>144 348 S 1.777<726961626c6573206d6179206265636f6d6520756e64658c6e6564206265747765 656e2061637469>.25 F -.25<7661>-.25 G 1.777 <74696f6e73206f662061206d6f64756c6520696e20776869636820746865>.25 F 4.277<7961>-.15 G 1.776<7265206465636c617265642e>-4.277 F <53696d696c61726c79>144 360 Q 3.485<2c43>-.65 G .985<4f4d4d4f4e20626c6f 636b73206d6179206265636f6d6520756e64658c6e6564206966206e6f206d6f64756c65 20696e20776869636820746865>-3.485 F 3.485<7961>-.15 G .985 <7265206465636c61726564206973>-3.485 F<61637469>144 372 Q -.15<7665>-.25 G 6.211<2e28>.15 G 1.211<54686520746563686e6963616c207465726d20666f7220 656e746974696573207769746820746869732062656861>-6.211 F 1.211 <76696f722069732060>-.2 F<606175746f6d6174696327>-.74 E 1.21<272c2062> -.74 F<7574>-.2 E F1<66746e6368656b>3.71 E F0 1.21<7573657320746865>3.71 F -.1<776f>144 384 S 1.433<72642060>.1 F<6076>-.74 E<6f6c6174696c6527> -.2 E 3.933<2773>-.74 G 1.433<696e636520697420697320636c656172657220746f 20746865206e6f6e7370656369616c6973742e29>-3.933 F 1.434 <4f6e6c7920434f4d4d4f4e20626c6f636b73206465636c6172656420696e2061>6.434 F<5341>144 396 Q .099<56452073746174656d656e742c206f72206465636c61726564 20696e20746865206d61696e2070726f6772616d206f7220696e206120626c6f636b2064 6174612073756270726f6772616d2072656d61696e2064658c6e6564206173>-1.35 F 1.107<6c6f6e67206173207468652070726f6772616d2069732072756e6e696e672e>144 408 R -1.11<5661>6.107 G 1.107<726961626c657320616e6420434f4d4d4f4e2062 6c6f636b7320746861742063616e206265636f6d6520756e64658c6e6564206174>1.11 F<736f6d6520706f696e74206172652063616c6c65642076>144 420 Q <6f6c6174696c652e>-.2 E .262<496620746865>144 436.8 R F1 2.762 E<6f6c6174696c65>-.1 E F0 .262 <8d6167206973207475726e6564206f6e2c>2.762 F F1<66746e6368656b>2.762 E F0 .262<77696c6c2077>2.762 F .262 <61726e20796f75206966206974208c6e647320612076>-.1 F .261 <6f6c6174696c6520434f4d4d4f4e>-.2 F 3.67<626c6f636b2e2049662c>144 448.8 R 1.17<6174207468652073616d652074696d652c20746865>3.67 F F1 3.67 E<6f6c6174696c65>-.1 E F0 1.17<6f7074696f6e206973207475726e6564206f6e2028776869636820697320746865> 6.17 F<646566>144 460.8 Q<61756c74292c>-.1 E F1<66746e6368656b>3.285 E F0 .785<77696c6c2074727920746f20636865636b207768657468657220737563682061 20626c6f636b2063616e206c6f7365206974732064658c6e656420737461747573206265 747765656e20616374692d>3.285 F -.25<7661>144 472.8 S .441<74696f6e73206f 6620746865206d6f64756c6573207768657265206974206973206465636c617265642e> .25 F F1<66746e6368656b>5.441 E F0 .442<646f6573206e6f7420646f20612076> 2.942 F .442 <65727920676f6f64206a6f62206f6620746869733a207468652072756c65>-.15 F .059<7573656420697320746f2073656520776865746865722074686520626c6f636b20 6973206465636c6172656420696e207477>144 484.8 R 2.559<6f73>-.1 G .059 <6570617261746564207375627472656573206f66207468652063616c6c20747265652e> -2.559 F -.15<466f>5.058 G 2.558<7269>.15 G<6e7374616e63652c>-2.558 E .101<746869732077>144 496.8 R .101 <6f756c64206265207468652063617365206966207477>-.1 F 2.602<6f6d>-.1 G .102<6f64756c65732c20626f74682063616c6c65642066726f6d20746865206d61696e 2070726f6772616d2c2073686172656420612076>-2.602 F .102 <6f6c6174696c6520434f4d2d>-.2 F .754<4d4f4e20626c6f636b2e>144 508.8 R 3.254<4162>5.754 G .753<6c6f636b2063616e20616c736f206265636f6d6520756e64 658c6e6564206265747765656e207477>-3.254 F 3.253<6f73>-.1 G <75636365737369>-3.253 E 1.053 -.15<76652063>-.25 H .753 <616c6c73206f66207468652073616d65207375622d>.15 F .86 <70726f6772616d2c2062>144 520.8 R<7574>-.2 E F1<66746e6368656b>3.36 E F0 .86<6973206e6f7420736d61727420656e6f75676820746f2074656c6c20776865746865 7220612073756270726f6772616d2063616e2062652063616c6c6564206d6f7265207468 616e>3.36 F <6f6e63652c20736f20746869732063617365206973206e6f7420636865636b>144 532.8 Q<656420666f72>-.1 E<2e>-.55 E<546865>144 549.6 Q F1 2.5 E<6f6c6174696c65>-.1 E F0 <8d616720646f6573206e6f74206166>2.5 E<66656374207468652077>-.25 E<6179> -.1 E F1<66746e6368656b>2.5 E F0 <636865636b7320746865207573616765206f66206c6f63616c2076>2.5 E <61726961626c65732e>-.25 E -.15<466f>144 566.4 S 4.953<7263>.15 G 2.453 <6f6d7061746962696c697479207769746820707265>-4.953 F 2.453 <76696f75732076>-.25 F 2.453<657273696f6e73206f66>-.15 F F1 <66746e6368656b>4.953 E F0 7.453<2c61>C 2.453<6e756d6572696320666f726d20 6f6620746869732073657474696e6720697320616c736f>-2.5 F .139 <61636365707465643a20746865>144 578.4 R/F2 10/Times-Italic@0 SF <6c697374>2.639 E F0 .139<6973207265706c616365642062792061206e756d626572 2066726f6d203020746f20332e>2.639 F 2.639<4176>5.139 G .139 <616c7565206f662030207475726e7320616c6c207468652077>-2.889 F .139 <61726e696e6773206f66>-.1 F .14<662c2031206f72>-.25 F .09 <67726561746572207475726e73206f6e>144 590.4 R F1<74797065>2.59 E F0 2.59 <2c326f>C 2.59<7267>-2.59 G .09<726561746572207475726e73206f6e>-2.59 F F1<6c656e677468>2.589 E F0 2.589<2c61>C .089<6e642033207475726e73206f6e> -2.589 F F1<64696d656e73696f6e73>2.589 E F0<616e64>2.589 E F1 <6578616374>2.589 E F0 2.589<616c736f2e20546865>2.589 F <6e756d6572696320666f726d2063616e6e6f74207475726e206f6e20746865>144 602.4 Q F1 -.1<766f>2.5 G<6c6174696c65>.1 E F0<6f7074696f6e2e>2.5 E <53656520616c736f3a>144 619.2 Q F12.5 E F0<2c>A F1 2.5 E F0<2e>A F1108 648 Q<6f737372>-.18 E<65663d> -.18 E F2<6c697374>.09 E F0 <5072696e74732063726f73732d7265666572656e6365207461626c65732e>144 660 Q <446566>5 E<61756c74203d206e6f6e652e>-.1 E<546865>144 676.8 Q F2 <6c697374>2.902 E F0 .403<636f6e7369737473206f66206b>2.902 F -.15<6579> -.1 G -.1<776f>.15 G .403 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .403<546865206b>5.403 F -.15<6579>-.1 G -.1<776f>.15 G .403 <7264732077697468207468656972206d65616e696e6773>.1 F <61726520617320666f6c6c6f>144 688.8 Q<77733a>-.25 E F1<63616c6c73>144 705.6 Q F0 6.11<3a74>C 1.436 <61626c65206c6973747320656163682073756270726f6772616d20666f6c6c6f>-6.11 F 1.435<7765642062792061206c697374206f6620726f7574696e657320746861742063 616c6c2069742e>-.25 F 1.435<54686973206c697374696e67206f6d697473>6.435 F <6c696272617279206d6f64756c6573207468617420617265206e6f7420696e20746865 2063616c6c2074726565206f6620746865206d61696e2070726f6772616d2e>171.78 717.6 Q<546865206c69737420697320616c706861626574697a65642e>5 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<39>196.795 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <636f6d6d6f6e>144 84 Q F0<3a>A 1.252 <7461626c65206c69737473206561636820434f4d4d4f4e20626c6f636b20666f6c6c6f> 171.78 96 R 1.253<7765642062792061206c697374206f662074686520726f7574696e 65732074686174206163636573732069742e>-.25 F<5468657365>6.253 E .431<6c69 7374656420726f7574696e6573206172652074686f736520696e20776869636820736f6d 652076>171.78 108 R .43<61726961626c657320696e2074686520434f4d4d4f4e2062 6c6f636b206172652061636365737365642c206e6f74>-.25 F 1.163<73696d706c7920 74686f736520726f7574696e65732074686174206465636c6172652074686520626c6f63 6b2e>171.78 120 R<2854>6.164 E 3.664<6f8c>-.8 G 1.164 <6e64206f7574207768617420726f7574696e6573206465636c617265206120434f4d2d> -3.664 F<4d4f4e20626c6f636b2062>171.78 132 Q <757420646f206e6f74207573652069742c2073656520746865>-.2 E F1 2.5 E F0<8d61672e29>2.5 E F1<6c6162656c73>144 148.8 Q F0 <3a>A .618<7461626c65206c697374732065616368206c6162656c20666f6c6c6f> 171.78 160.8 R .618<7765642062792061206c697374206f6620616c6c207265666572 656e63657320746f2069742e>-.25 F 3.117<416c>5.617 G .617 <6162656c207265666572656e63652069732064656e6f746564>-3.117 F 1.995<6279 20746865206c696e65206e756d62657220616e642073746174656d656e74207479706520 6f662074686520726566657272696e672073746174656d656e742e>171.78 172.8 R 1.996<546865206c6162656c206c69737420697320696e>9.496 F .07 <73657175656e7469616c206f72646572>171.78 184.8 R 5.07<2e54>-.55 G .07<68 65207265666572656e63657320617265206c697374656420696e20746865206f72646572 20746865>-5.07 F 2.57<7961>-.15 G .07 <726520656e636f756e746572656420696e207468652070726f6772616d2e>-2.57 F <53656520616c736f3a>144 201.6 Q F12.5 E<6565>-.18 E F0 <2c>A F12.5 E<65666572>-.18 E<656e6365>-.18 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2e>A F1108 230.4 Q<65>-.18 E F0 .351<4966207468 6973208d6167206973207365742c20616c6c206964656e74698c6572732077686f736520 6461746174797065206973206e6f74206465636c6172656420696e2065616368206d6f64 756c652077696c6c206265206c69737465642e>144 242.4 R<54686973>5.351 E .524 <8d61672069732075736566756c20666f722068656c70696e6720746f208c6e64206d69 737370656c6c65642076>144 254.4 R .524 <61726961626c65206e616d65732c206574632e>-.25 F .523 <5468652073616d65206c697374696e672077696c6c206265206769>5.523 F -.15 <7665>-.25 G 3.023<6e69>.15 G<66>-3.023 E <746865206d6f64756c6520636f6e7461696e7320616e>144 266.4 Q/F2 10 /Courier@0 SF<494d504c49434954204e4f4e45>2.5 E F0 2.5 <73746174656d656e742e20446566>2.5 F<61756c74203d206e6f2e>-.1 E <53656520616c736f3a>144 283.2 Q F12.5 E F0<2c>A F1 2.5 E F0<2e>A F1108 312 Q<766973696f6e>-.1 E F0 1.095<54686973207377697463682069732070726f>144 324 R 1.095<766964656420 746f2068656c702075736572732073706f7420706f74656e7469616c206469>-.15 F 1.095<766973696f6e206279207a65726f2070726f626c656d732e>-.25 F 1.095 <4966207468697320737769746368206973>6.095 F .24<73656c65637465642c2065> 144 336 R -.15<7665>-.25 G .24<7279206469>.15 F .24<766973696f6e2065> -.25 F .24 <7863657074206279206120636f6e7374616e742077696c6c206265208d61676765642e> -.15 F .239<28497420697320617373756d656420746861742074686520757365722069 7320696e74656c6c692d>5.239 F<67656e7420656e6f756768206e6f7420746f206469> 144 348 Q<76696465206279206120636f6e7374616e7420776869636820697320657175 616c20746f207a65726f2129>-.25 E<446566>5 E<61756c74203d206e6f2e>-.1 E <53656520616c736f3a>144 364.8 Q F12.5 E F0<2c> A F12.5 E F0<2e>A F1108 393.6 Q <6f72733d>-.18 E/F3 10/Times-Italic@0 SF<6e756d>.36 E F0 1.176<53657420 746865206d6178696d756d206e756d626572206f66206572726f72206d65737361676573 20696e20612060>144 405.6 R<606361736361646527>-.74 E 3.677 <272e20447572696e67>-.74 F 1.177 <636865636b696e67206f662061677265656d656e74206f66>3.677 F 1.422 <73756270726f6772616d206172>144 417.6 R 1.422<67756d656e74732c20636f6d6d 6f6e20626c6f636b206465636c61726174696f6e732c20616e6420736f20666f7274682c 20736f6d6574696d657320612073696e676c6520636173652077696c6c>-.18 F .836 <67656e65726174652061206c6f6e6720737472696e67206f662077>144 429.6 R 3.337<61726e696e67732e204f6674656e>-.1 F .837<746869732073696d706c792069 6e6469636174657320736f6d65206f74686572206361757365207468616e20612067656e 75696e65>3.337 F 1.392<6974656d2d62792d6974656d206d69736d617463682c2073 75636820617320666f722065>144 441.6 R 1.392<78616d706c6520612076>-.15 F 1.392<617269626c65206d697373696e672066726f6d206f6e65206c6973742e>-.25 F 1.392<536f20696e2073756368206361736573>6.392 F F1<66746e6368656b>144 453.6 Q F0 .614<73746f7073207072696e74696e67207468652077>3.114 F .614<61 726e696e6773206166746572207468652063617363616465206c696d6974206973207265 61636865642c20616e642074686520747261696c65722060>-.1 F<60>-.74 E F2 <6574632e2e2e>A F0 -.74<2727>C .478<6973207072696e74656420746f20696e6469 6361746520746861742074686572652077657265206d6f7265206572726f7273206e6f74 207072696e7465642e>144 465.6 R .477 <496620796f75207468696e6b20746861742074686573652077>5.478 F .477 <61726e696e677320617265>-.1 F<6c696b>144 477.6 Q .71<656c7920746f206265 2067656e75696e652c2075736520746869732073657474696e6720746f20736565206d6f 7265206f66207468656d2e>-.1 F -.45<5475>5.711 G .711 <726e2d6f6e203d20646566>.45 F .711 <61756c74203d20332c206d6178203d203939392e>-.1 F<41>5.711 E -.25<7661>144 489.6 S<6c7565206f662030206d65616e73206e6f206c696d69742e>.25 E .079 <546869732073657474696e6720646f6573206e6f742073657420616e206f>144 506.4 R -.15<7665>-.15 G .079<72616c6c206c696d6974206f6e20746865206e756d626572 206f66206572726f72206d65737361676573207072696e7465642c206f6e6c7920746865 206e756d626572>.15 F .291<7072696e74656420696e20616e>144 518.4 R 2.791 <796f>-.15 G .291<6e6520636173636164652e>-2.791 F .291 <4d6f7374207479706573206f662077>5.291 F .291<61726e696e677320616e642065 72726f72206d6573736167657320617265206e6f74207375626a65637420746f20746865 206361732d>-.1 F .345<63616465206566>144 530.4 R .345 <6665637420616e6420736f20617265206e6f74206166>-.25 F .345 <66656374656420627920746869732073657474696e672e>-.25 F 1.945 -.8 <546f2074>5.345 H .345<75726e206f66>.8 F 2.844<6677>-.25 G .344 <61726e696e67732067656e6572616c6c79>-2.944 F 2.844<2c75>-.65 G .344 <73652074686520696e6469>-2.844 F<7669642d>-.25 E<75616c2077>144 542.4 Q <61726e696e6720636f6e74726f6c206f7074696f6e73206f7220746865>-.1 E F1 2.5 E F0<6f7074696f6e2e>2.5 E<53656520616c736f3a>144 559.2 Q F12.5 E F0<2e>A F1108 588 Q<6e>-.15 E F0<436175736573>144 600 Q F1<66746e6368656b>4.003 E F0 1.504 <746f207265706f7274207768657468657220616e>4.003 F 4.004<7973>-.15 G 1.504<756270726f6772616d7320696e>-4.004 F -.2<766f>-.4 G -.1<6b65>.2 G 4.004<6462>.1 G 4.004<7974>-4.004 G 1.504 <68652070726f6772616d20617265206e65>-4.004 F -.15<7665>-.25 G 4.004 <7264>.15 G<658c6e65642e>-4.004 E<4f7264696e6172696c79>144 612 Q 2.892 <2c69>-.65 G<66>-2.892 E F1<66746e6368656b>2.892 E F0 .392<697320626569 6e672072756e206f6e206120636f6d706c6574652070726f6772616d2c20656163682073 756270726f6772616d206f74686572207468616e2074686520696e7472696e2d>2.892 F .172 <7369632066756e6374696f6e732073686f756c642062652064658c6e656420736f6d65> 144 624 R 2.672<77686572652e2054>-.25 F .172<75726e206f66>-.45 F 2.672 <6674>-.25 G .172<6869732073776974636820696620796f75206a7573742077> -2.672 F .173<616e7420746f20636865636b206120737562736574>-.1 F 2.442 <6f66208c6c657320776869636820666f726d2070617274206f662061206c6172>144 636 R 2.442<67657220636f6d706c6574652070726f6772616d2e>-.18 F 2.442 <53756270726f6772616d206172>7.442 F 2.442 <67756d656e74732077696c6c207374696c6c206265>-.18 F<636865636b>144 648 Q <656420666f7220636f72726563746e6573732e>-.1 E<446566>5 E <61756c74203d207965732e>-.1 E<546865>144 664.8 Q F13.293 E <6e>-.15 E F0 .793<8d6167206973206e6f>3.293 F 3.293<7773>-.25 G .793 <75706572736564656420627920746865>-3.293 F F1 3.294 E F0 3.294 <6f7074696f6e2e2046>3.294 F .794<6f72207468652073616b>-.15 F 3.294<656f> -.1 G 3.294<6663>-3.294 G<6f6e2d>-3.294 E -.15<7665>144 676.8 S .789 <6e69656e63652c20746865>.15 F F13.289 E<6e>-.15 E F0 .788 <8d61672069732072657461696e65642c20736f2074686174>3.289 F F1 3.288 E<6e>-.15 E F0 .788<69732065717569>3.288 F -.25 <7661>-.25 G .788<6c656e7420746f>.25 F F1 3.288 E<8c6e6564>144 688.8 Q F0 2.5<6f7074696f6e2e20546865>2.5 F F12.5 E<6e>-.15 E F0 <737769746368206d617920626520726574697265642065>2.5 E -.15<7665>-.25 G <6e7475616c6c79>.15 E<2e>-.65 E<53656520616c736f3a>144 705.6 Q F1 2.5 E F0<2e>A<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3130>191.795 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 .623<5573 6520746869732073657474696e6720746f206361746368206c616e67756167652065>144 96 R .623<7874656e73696f6e732077686963682076696f6c617465207468652046> -.15 F .623<6f727472616e203737205374616e646172642e>-.15 F .623 <537563682065>5.623 F<7874656e2d>-.15 E 1.349<73696f6e73206d617920636175 736520796f75722070726f6772616d206e6f7420746f20626520706f727461626c652e> 144 108 R 1.348<4578616d706c657320696e636c7564652074686520757365206f6620 756e64657273636f72657320696e>6.349 F -.25<7661>144 120 S .656 <726961626c65206e616d65733b2076>.25 F .657<61726961626c65206e616d657320 6c6f6e676572207468616e2073697820636861726163746572733b2073746174656d656e 74206c696e6573206c6f6e676572207468616e203732206368617261632d>-.25 F .678 <746572733b20616e64206e6f6e7374616e646172642073746174656d656e7473207375 636820617320746865>144 132 R/F3 10/Courier@0 SF<444f>3.177 E F0<2e2e2e> 3.177 E F3<454e44444f>3.177 E F0<7374727563747572652e>3.177 E F1 <66746e6368656b>5.677 E F0 .677<646f6573206e6f74207265706f7274206f6e> 3.177 F<74686520757365206f66206c6f>144 144 Q <77657263617365206c6574746572732e>-.25 E<427920646566>5 E <61756c742c20616c6c2077>-.1 E <61726e696e677320617265207475726e6564206f66>-.1 E<662e>-.25 E .423 <546869732073657474696e672070726f>144 160.8 R .423 <76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 2.923<7274>.15 G .423<68652077>-2.923 F .423 <61726e696e67732061626f757420737570706f727465642065>-.1 F .423 <7874656e73696f6e7320746f207468652046>-.15 F<6f727472616e>-.15 E 1.016 <3737205374616e646172642e>144 172.8 R 1.016 <28467572746865722064657461696c732061626f7574207468652065>6.016 F 1.016 <7874656e73696f6e73207468656d73656c76>-.15 F 1.016<657320617265206769> -.15 F -.15<7665>-.25 G 3.516<6e62>.15 G<656c6f>-3.516 E 3.515<7769>-.25 G 3.515<6e74>-3.515 G 1.015<68652073656374696f6e206f6e>-3.515 F 3.197 <457874656e73696f6e732e2920546865>144 184.8 R F2<6c697374>3.197 E F0 .697<636f6e7369737473206f66206b>3.197 F -.15<6579>-.1 G -.1<776f>.15 G .697 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .698<546865726520617265207468726565207370652d>5.697 F .432 <6369616c206b>144 196.8 R -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.932 E F0 .431<746f207475726e206f6e20616c6c207468652077>2.932 F .431<61726e696e67732061626f7574206e6f6e7374616e646172642065>-.1 F <7874656e73696f6e732c>-.15 E F1<6e6f6e65>2.931 E F0 .431 <746f207475726e207468656d20616c6c>2.931 F<6f66>144 208.8 Q .061 <662c20616e64>-.25 F F1<68656c70>2.561 E F0 .061 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.561 F -.15<6579>-.1 G -.1<776f>.15 G .062 <726473207769746820612062726965662065>.1 F .062 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.062 E F2<6c697374> 2.562 E F0 .062<6973206f6d69747465642c>2.562 F F1144 220.8 Q F0 1.107<69732065717569>3.607 F -.25<7661>-.25 G 1.107<6c656e7420746f> .25 F F13.607 E F0 3.607<2c61>C<6e64>-3.607 E F1 3.607 E F0 1.107<69732065717569>3.607 F -.25<7661>-.25 G 1.107<6c656e7420746f>.25 F F13.607 E F0 6.107<2e54>C 1.107<68652077>-6.107 F 1.106<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1 <776f>.15 G<726473>.1 E <77697468207468656972206d65616e696e67732061726520617320666f6c6c6f>144 232.8 Q<77733a>-.25 E F1<616363657074ad74797065>144 249.6 Q F0<3a>A F3 <414343455054>171.78 261.6 Q F0<616e64>2.5 E F3<54595045>2.5 E F0 <492f4f2073746174656d656e74732e>2.5 E F1<6172726179ad626f756e6473>144 278.4 Q F0<3a>A<45787072657373696f6e732064658c6e696e6720617272617920626f 756e6473207468617420636f6e7461696e20617272617920656c656d656e7473206f7220 66756e6374696f6e207265666572656e6365732e>171.78 290.4 Q F1 <61737369676e6d656e74ad73746d74>144 307.2 Q F0<3a>A .224 <41737369676e6d656e742073746174656d656e747320696e>171.78 319.2 R -.2 <766f>-.4 G .224<6c76696e67206172726179732e>.2 F .224<496e2046>5.224 F .225<6f727472616e2039302c20616e2061727261792063616e2062652061737369676e 656420746f20616e6f74686572>-.15 F .405<6172726179206f6620636f6d70617469 626c652073686170652c206f722061207363616c61722063616e2062652061737369676e 656420746f20616e206172726179>171.78 331.2 R 5.405<2e4e>-.65 G .405 <656974686572206f662074686573652061737369676e2d>-5.405 F <6d656e7473206973207065726d697474656420696e2046>171.78 343.2 Q <6f727472616e2037372e>-.15 E 2.955<4172>171.78 360 S .455 <656c617465642077>-2.955 F .456<61726e696e67206f6363757273207768656e2061 6e2061727261792069732061737369676e656420746f2061207363616c6172>-.1 F 5.456<2e53>-.55 G .456<696e6365207468697320697320696c6c65>-5.456 F -.05 <6761>-.15 G 2.956<6c61>.05 G .456<6c736f20696e>-2.956 F -.15<466f> 171.78 372 S .66<727472616e2039302c20697420697320616c>.15 F -.1<7761>-.1 G .66<79732077>.1 F .659<61726e65642061626f7574207265>-.1 F -.05<6761> -.15 G .659<72646c657373206f6620746865>.05 F F13.159 E F0 .659 <73657474696e672028756e6c65737320616c6c20636865636b696e67206973>3.159 F <7475726e6564206f66>171.78 384 Q 2.5<6677>-.25 G<69746820746865>-2.5 E F12.5 E F0<8d6167292e>2.5 E F1<617474726962>144 400.8 Q<757465ad6261736564ad6465636c>-.2 E F0<3a>A -.8<5479>171.78 412.8 S .979<7065206465636c61726174696f6e7320696e20746865206e65>.8 F 3.479<7746> -.25 G .979<6f727472616e20393020617474726962>-3.629 F .979 <7574652d6261736564207374796c652e>-.2 F .98 <54686973207374796c65206f66206465636c61726174696f6e206973>5.979 F .71<64 697374696e677569736865642062792074686520757365206f66206120646f75626c6520 636f6c6f6e20283a3a29206265747765656e20746865206c697374206f66206174747269 62>171.78 424.8 R .709<7574657320616e6420746865206c697374206f66>-.2 F .467<6465636c617265642076>171.78 436.8 R 2.967 <61726961626c65732e2054686973>-.25 F .468 <6f7074696f6e20616c736f20636f6e74726f6c732077>2.968 F .468 <61726e696e677320666f7220757365206f662046>-.1 F .468 <6f727472616e203930206c656e677468206f72206b696e64>-.15 F 1.908 <73706563698c65727320696e2074797065206465636c61726174696f6e732e>171.78 448.8 R 1.907<28416c74686f7567682074686573652073706563698c6572732063616e 206265207573656420696e206e6f6e2d617474726962>6.907 F<7574652d>-.2 E .004 <6261736564206465636c61726174696f6e732c20746865>171.78 460.8 R 2.504 <7961>-.15 G .005 <726520636f6e74726f6c6c65642062792074686973206f7074696f6e20746f2061> -2.504 F -.2<766f>-.2 G .005<69642070726f6c696665726174696f6e206f66>.2 F F12.505 E F0<6f7074696f6e732e29>2.505 E F1 <6175746f6d61746963ad6172726179>144 477.6 Q F0<3a>A 1.677 <4c6f63616c20286e6f742064756d6d792920617272617973207768696368206861> 171.78 489.6 R 1.977 -.15<76652076>-.2 H 1.677 <61726961626c652073697a652e>-.1 F 1.676<54686573652077>6.677 F 1.676 <6f756c6420636f72726573706f6e6420746f20617272617973>-.1 F <77686f73652073746f726167652077>171.78 501.6 Q<6f756c64206861>-.1 E .3 -.15<76652074>-.2 H 2.5<6f62>.15 G 2.5<6564>-2.5 G <796e616d6963616c6c7920616c6c6f63617465642061742072756e2074696d652e>-2.5 E F1<6261636b736c617368>144 518.4 Q F0<3a>A 6.655 <556e6978206261636b736c6173682065736361706520696e20737472696e67732e> 171.78 530.4 R 6.655<546869732077>11.655 F 6.655 <61726e696e672077696c6c206265206769>-.1 F -.15<7665>-.25 G 9.155<6e6f> .15 G 6.655<6e6c7920696620746865>-9.155 F F1171.78 542.4 Q <63653d756e6978ad6261636b736c617368>-.18 E F0 1.578<73657474696e67206973 2073706563698c656420746f206361757365207468652065736361706520696e74657270 7265746174696f6e206f66206261636b2d>4.078 F<736c6173682e2e>171.78 554.4 Q F1<62797465>144 571.2 Q F0<3a>A F3<42595445>6.67 E F0 <646174612074797065206465636c61726174696f6e2e>2.5 E F1 <63617365ad636f6e737472756374>144 588 Q F0<3a>A<546865>171.78 600 Q F3 <53454c4543542043415345>2.5 E F0<636f6e7374727563742e>2.5 E F1 <636861726163746572>144 616.8 Q F0<3a>A .835 <457874656e73696f6e7320746f207468652046>171.78 628.8 R .835 <6f727472616e203737207374616e64617264207265>-.15 F -.05<6761>-.15 G .835 <7264696e672063686172616374657220646174612e>.05 F .836 <41742070726573656e742c2074686973206f6e6c7920636f6e2d>5.836 F .924 <74726f6c732077>171.78 640.8 R .924 <61726e696e67732061626f7574206368617261637465722076>-.1 F .923 <61726961626c6573206465636c617265642077697468207a65726f206f72206e65>-.25 F -.05<6761>-.15 G<7469>.05 E 1.223 -.15<7665206c>-.25 H 3.423 <656e6774682e20496e>.15 F -.15<466f>3.423 G<727472616e>.15 E 1.968 <37372c20616c6c206368617261637465722076>171.78 652.8 R 1.968 <61726961626c6573206d757374206265206f6620706f73697469>-.25 F 2.268 -.15 <7665206c>-.25 H 4.468<656e6774682e20496e>.15 F -.15<466f>4.468 G 1.968 <727472616e2039302c20746865>.15 F 4.468<7963>-.15 G 1.968 <616e206265207a65726f>-4.468 F .064<6c656e6774682c20616e64206465636c6172 6174696f6e7320746861742073706563696679206e65>171.78 664.8 R -.05<6761> -.15 G<7469>.05 E .364 -.15<7665206c>-.25 H .064<656e677468732061726520 7065726d69747465642c207475726e696e6720696e746f207a65726f20666f7220746865> .15 F 2.167<6465636c61726564206c656e6774682e>171.78 676.8 R 2.167 <4e6f74653a2062656361757365206e65>7.167 F -.05<6761>-.15 G<7469>.05 E 2.467 -.15<7665206c>-.25 H 2.167<656e6774682073706563698c657273206d6179 20696e64696361746520612070726f6772616d6d696e67>.15 F<6572726f72>171.78 688.8 Q 3.461<2c74>-.4 G .961<68652077>-3.461 F .961 <61726e696e672061626f7574207468656d206973206769>-.1 F -.15<7665>-.25 G 3.461<6e65>.15 G -.15<7665>-3.711 G 3.461<6e69>.15 G 3.461<6674>-3.461 G .96<686973206f7074696f6e206973207475726e6564206f66>-3.461 F .96 <662c20616e642069732073757070726573736564>-.25 F<6f6e6c7920627920746865> 171.78 700.8 Q F12.5 E F0<8d61672e>2.5 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3131>191.795 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <636f6d6d6f6ead7375627072>144 84 Q<6f67ad6e616d65>-.18 E F0<3a>A <436f6d6d6f6e20626c6f636b20616e642073756270726f6772616d206861>171.78 96 Q<76696e67207468652073616d65206e616d652e>-.2 E F1 <636f6e737472756374ad6e616d65>144 112.8 Q F0<3a>A<557365206f66206120636f 6e7374727563742d6e616d6520746f206c6162656c206120636f6e74726f6c2073746174 656d656e742e>171.78 124.8 Q F1<636f6e74696e756174696f6e>144 141.6 Q F0 <3a>A<4d6f7265207468616e203139207375636365737369>171.78 153.6 Q .3 -.15 <76652063>-.25 H<6f6e74696e756174696f6e206c696e65732e>.15 E F1<637070> 144 170.4 Q F0 9.44<3a55>C <6e697820432070726570726f636573736f722064697265637469>-9.44 E -.15<7665> -.25 G 2.5<7369>.15 G 2.5<6e74>-2.5 G<686520736f7572636520636f64652e> -2.5 E F1<63726179ad706f696e746572>144 187.2 Q F0<3a>A -.74<6060>171.78 199.2 S<4372617920706f696e74657227>.74 E 2.5<2773>-.74 G<796e7461782e> -2.5 E F1<6379636c65ad65786974>144 216 Q F0<3a>A<546865>171.78 228 Q/F2 10/Courier@0 SF<4359434c45>2.5 E F0<616e64>2.5 E F2<45584954>2.5 E F0 <73746174656d656e74732e>2.5 E F1<64ad636f6d6d656e74>144 244.8 Q F0<3a>A <446562>171.78 256.8 Q <756767696e6720636f6d6d656e7473207374617274696e672077697468>-.2 E F2<44> 2.5 E F0<696e2074686520736f7572636520636f64652e>2.5 E F1<646563ad746162> 144 273.6 Q F0<3a>A 2.288<4445432046>171.78 285.6 R 2.288<6f727472616e20 7374796c65207461622d666f726d617474656420736f7572636520636f64652e>-.15 F 2.288<546869732077>7.288 F 2.289<61726e696e672077696c6c206265206769>-.1 F -.15<7665>-.25 G 4.789<6e6f>.15 G 2.289<6e6c7920696620746865>-4.789 F F1171.78 297.6 Q<63653d646563ad746162>-.18 E F0<73657474696e 672069732073706563698c656420746f20636175736520696e746572707265746174696f 6e206f66207461627320696e2074686973207374796c652e>2.5 E F1 <646fad656e64646f>144 314.4 Q F0<3a>A F2<444f>171.78 326.4 Q F0 <6c6f6f702065>2.5 E<7874656e73696f6e733a207465726d696e616c2073746174656d 656e74206c6162656c206f6d69747465642c>-.15 E F2<454e4420444f>2.5 E F0 2.5 <2c61>C<6e64>-2.5 E F2<5748494c45>2.5 E F0<2e>A F1 <646f75626c65ad636f6d706c6578>144 343.2 Q F0<3a>A <446f75626c6520707265636973696f6e20636f6d706c65>171.78 355.2 Q 2.5<7864> -.15 G<617461747970652e>-2.5 E F1 -.25<666f>144 372 S <726d6174ad646f6c6c61727369676e>.25 E F0<3a>A <446f6c6c6172207369676e20636f6e74726f6c20636f646520696e>171.78 384 Q F2 <464f524d4154>2.5 E F0<73746174656d656e74732e>2.5 E F1 -.25<666f>144 400.8 S<726d6174ad65646974ad6465736372>.25 E F0<3a>A <4e6f6e7374616e6461726420656469742064657363726970746f727320696e>171.78 412.8 Q F2<464f524d4154>2.5 E F0<73746174656d656e74732e>2.5 E F1 <66756e6374696f6ead6e6f706172>144 429.6 Q<656e>-.18 E F0<3a>A<46756e6374 696f6e2064658c6e6974696f6e20776974686f757420706172656e7468657365732e> 171.78 441.6 Q F1<696d706c69636974ad6e6f6e65>144 458.4 Q F0<3a>A F2 <494d504c49434954204e4f4e45>171.78 470.4 Q F0<73746174656d656e742e>2.5 E F1<696e636c756465>144 487.2 Q F0<3a>A F2<494e434c554445>171.78 499.2 Q F0<73746174656d656e742e>2.5 E F1<696e6c696e65ad636f6d6d656e74>144 516 Q F0<3a>A <496e6c696e6520636f6d6d656e7473207374617274696e67207769746820616e2065> 171.78 528 Q<78636c616d6174696f6e20706f696e742e>-.15 E F1<696e746572>144 544.8 Q<6e616cad6c697374ad696f>-.15 E F0<3a>A<4c6973742d6469726563746564 20492f4f20746f206f722066726f6d20616e20696e7465726e616c208c6c652e>171.78 556.8 Q F1<696e7472696e736963>144 573.6 Q F0<3a>A <4e6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e732e>171.78 585.6 Q F1<696fad6b>144 602.4 Q<657977>-.1 E<6f726473>-.1 E F0 .009 <4e6f6e7374616e64617264206b>171.78 614.4 R -.15<6579>-.1 G -.1<776f>.15 G .009<726473207573656420696e20492f4f2073746174656d656e74732e>.1 F .008 <54686573652066>5.009 F .008 <616c6c20696e746f2074687265652067726f7570732e>-.1 F .008 <546865208c7273742067726f7570>5.008 F<696e636c75646573206b>171.78 626.4 Q -.15<6579>-.1 G -.1<776f>.15 G <72647320746861742061726520616363657074656420696e2046>.1 E <6f727472616e2039303a>-.15 E F2 15<414354494f4e20504144>268.89 643.2 R <524541445752495445>45 E 9<414456414e434520504f534954494f4e2053495a45> 268.89 655.2 R 21<44454c494d2052454144>268.89 667.2 R<5752495445>39 E <454f52>268.89 679.2 Q F0<546865207365636f6e642067726f757020636f6d707269 7365732074686520666f6c6c6f>171.78 691.2 Q<77696e6720564d532046>-.25 E <6f727472616e206b>-.15 E -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F2 45<424c4f434b53495a4520455854454e4453495a45>229.89 708 R <524541444f4e4c59>27 E F0<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3132>191.795 E 0 Cg EP %%Page: 13 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF 33 <425546464552434f554e5420494e495449414c53495a45>229.89 84 R <5245434f524453495a45>21 E 9 <4341525249414745434f4e54524f4c204d4158524543>229.89 96 R <5245434f524454595045>51 E 33<44454641554c5446494c45204e414d45>229.89 108 R F0<28696e>2.5 E F1<4f50454e>2.5 E F0<29>A F1<534841524544>19.56 E 75<44495350204e4f5350414e424c4f434b>229.89 120 R<54595045>21 E 57 <444953504f5345204f5247414e495a4154494f4e>229.89 132 R F0 .136 <28546865206b>171.78 144 R -.15<6579>-.1 G -.1<776f>.15 G<7264>.1 E F1 <4e414d45>2.636 E F0 .136 <6973207374616e64617264206f6e6c7920696e20746865>2.636 F F1 <494e5155495245>2.636 E F0 2.636<73746174656d656e742e2920546865>2.636 F .137<74686972642067726f757020636f6e7369737473>2.636 F <6f662074686520666f6c6c6f>171.78 156 Q<77696e672049424d2f4d5653206b>-.25 E -.15<6579>-.1 G -.1<776f>.15 G<72643a>.1 E F1<4e554d>331.889 172.8 Q F0 .387<54686973208d616720616c736f20636f6e74726f6c7320612077>171.78 184.8 R .387<61726e696e672061626f757420757365206f66>-.1 F F1 <4143434553533d27415050454e4427>2.887 E F0 2.887<2c77>C .387 <68696368206973206163636570746564206279>-2.887 F .066 <736f6d6520636f6d70696c6572732e>171.78 196.8 R .066<5468652076>5.066 F .066<616c7565206f66>-.25 F F1<27415050454e4427>2.566 E F0 .066 <6973206e6f742076>2.566 F .066<616c696420666f7220616e>-.25 F 2.566<7949> -.15 G .066<2f4f2073706563698c657220696e207374616e646172642046>-2.566 F <6f72>-.15 E<2d>-.2 E .601<7472616e2037372c20616e6420696e2046>171.78 208.8 R .601<6f727472616e203930>-.15 F F1<27415050454e4427>3.101 E F0 .601<73686f756c64206265207573656420617320612076>3.101 F .6 <616c7565206f6620746865>-.25 F F1<504f534954494f4e>3.1 E F0 <73706563692d>3.1 E<8c6572>171.78 220.8 Q 2.5<2c6e>-.4 G<6f74>-2.5 E F1 <414343455353>5 E F0<2e>A/F2 10/Times-Bold@0 SF<6c6f6e67ad6c696e65>144 237.6 Q F0<3a>A 2.274<53746174656d656e74732077697468206d65616e696e676675 6c20636f6465207061737420373220636f6c756d6e732e>171.78 249.6 R 2.275 <546869732077>7.275 F 2.275<61726e696e67206973206769>-.1 F -.15<7665> -.25 G 4.775<6e6f>.15 G 2.275<6e6c7920696620746865>-4.775 F F2 171.78 261.6 Q F0<73657474696e6720686173206265656e2075 73656420746f20696e637265617365207468652073746174656d656e74208c656c642077 696474682e>2.5 E F2<6c6f6e67ad6e616d65>144 278.4 Q F0<3a>A <4964656e74698c657273206f>171.78 290.4 Q -.15<7665>-.15 G 2.5<723663>.15 G<686172616374657273206c6f6e672e>-2.5 E F2<6d69786564ad636f6d6d6f6e>144 307.2 Q F0<3a>A<4d6978>171.78 319.2 Q<65642063686172616374657220616e6420 6e6f6e636861726163746572206461746120696e20434f4d4d4f4e20626c6f636b2e> -.15 E F2<6d69786564ad65787072>144 336 Q F0<3a>A 1.117 <4e6f6e7374616e64617264207479706520636f6d62696e6174696f6e7320696e2065> 171.78 348 R 1.117<787072657373696f6e732c20666f722065>-.15 F <78616d706c65>-.15 E F1 1.116<444f55424c4520505245434953494f4e>3.616 F F0<77697468>3.616 E F1<434f4d504c4558>171.78 360 Q F0 2.5<2c61>C <737369676e696e6720686f6c6c657269746820746f20696e7465>-2.5 E<676572>-.15 E 2.5<2c6c>-.4 G<6f676963616c206f7065726174696f6e73206f6e20696e7465>-2.5 E<676572732e>-.15 E F2<6e616d65ad646f6c6c61727369676e>144 376.8 Q F0<3a> A<446f6c6c6172207369676e207573656420617320612063686172616374657220696e20 6964656e74698c6572732e>171.78 388.8 Q F2<6e616d65ad756e64657273636f72> 144 405.6 Q<65>-.18 E F0<3a>A<556e64657273636f72652075736564206173206120 63686172616374657220696e206964656e74698c6572732e>171.78 417.6 Q F2 <6e616d656c697374>144 434.4 Q F0<3a>A F1<4e414d454c495354>171.78 446.4 Q F0<73746174656d656e742e>2.5 E F2<706172616dad696d706c69636974ad74797065> 144 463.2 Q F0<3a>A 1.261<496d706c6963697420747970696e67206f662061207061 72616d657465722062792074686520646174612074797065206f66207468652076> 171.78 475.2 R 1.261<616c75652061737369676e65642e>-.25 F 1.261 <546869732077>6.261 F 1.261<61726e696e672063616e>-.1 F 9.816<6f6e6c7920 6f6363757220696620696d706c6963697420706172616d6574657220747970696e672068 6173206265656e207475726e6564206f6e20627920746865>171.78 487.2 R F2 171.78 499.2 Q<63653d706172616dad696d706c69636974ad74797065> -.18 E F0 .468<6f7074696f6e2c206f7220696620746865>2.968 F F1 <504152414d45544552>2.968 E F0 .468 <73746174656d656e74206973206f6620746865206e6f6e7374616e2d>2.968 F 2.486 <6461726420666f726d20776974686f757420706172656e7468657365732e>171.78 511.2 R 2.485<49662074686973206f7074696f6e206973207475726e6564206f6e2c20 7468656e20616e>7.486 F 4.985<7969>-.15 G 2.485 <6e7374616e636573207768657265>-4.985 F .886<696d706c6963697420706172616d 6574657220747970696e67206f63637572732077696c6c2062652077>171.78 523.2 R .887<61726e65642061626f75742e>-.1 F .887<496620796f752077>5.887 F .887 <616e7420746f2062652077>-.1 F .887<61726e6564206f6e6c7920696e>-.1 F 1.123<74686f736520696e7374616e6365732077686572652074686520696d706c696369 742064617461207479706520646966>171.78 535.2 R 1.122 <666572732066726f6d2074686520646566>-.25 F 1.122 <61756c7420747970652c20757365>-.1 F F23.622 E <6974793d706172616dad696d706c69636974ad74797065>171.78 547.2 Q F0 2.54 <696e73746561642e204163636f7264696e67>2.54 F .041<746f207468652046>2.541 F .041<6f727472616e203737207374616e646172642c20746865206461746120747970 65206f662061>-.15 F .299<706172616d65746572206973206769>171.78 559.2 R -.15<7665>-.25 G 2.799<6e62>.15 G 2.799<7974>-2.799 G .298 <68652073616d652072756c657320617320666f7220612076>-2.799 F .298<61726961 626c652c20616e64206966206e65636573736172792061207479706520636f6e>-.25 F -.15<7665>-.4 G .298<7273696f6e206973>.15 F <646f6e65207768656e207468652076>171.78 571.2 Q <616c75652069732061737369676e65642e>-.25 E F2 <706172616dad696e7472696e736963>144 588 Q F0<3a>A 1.325 <496e7472696e7369632066756e6374696f6e206f722065>171.78 600 R 1.326<7870 6f6e656e74696174696f6e2062792061207265616c207573656420746f2064658c6e6520 7468652076>-.15 F 1.326<616c7565206f662061>-.25 F F1<504152414d45544552> 3.826 E F0<64658c6e6974696f6e2e>171.78 612 Q F2<706172616dad6e6f706172> 144 628.8 Q<656e>-.18 E F0<3a>A F1<504152414d45544552>171.78 640.8 Q F0 .689<73746174656d656e7420776974686f757420706172656e7468657365732e>3.19 F .689<54686520757365722073686f756c642062652061>5.689 F -.1<7761>-.15 G .689<72652074686174207468652073656d616e74696373>.1 F .174 <6f66207468697320666f726d206f66207468652073746174656d656e7420646966> 171.78 652.8 R .175<666572732066726f6d2074686174206f6620746865207374616e 6461726420666f726d3a20696e207468697320666f726d2c2074686520706172616d2d> -.25 F 1.559<657465722074616b>171.78 664.8 R 1.559 <657320697473206461746120747970652066726f6d207468652076>-.1 F 1.559 <616c75652061737369676e65642c20726174686572207468616e206861>-.25 F 1.558 <76696e672069747320646566>-.2 F 1.558<61756c7420646174612074797065>-.1 F .821<6261736564206f6e20746865208c727374206c6574746572206f66207468652070 6172616d65746572206e616d652e>171.78 676.8 R .822 <285468697320666f726d206f6620746865>5.822 F F1<504152414d45544552>3.322 E F0<73746174656d656e74>3.322 E -.1<7761>171.78 688.8 S 5.472<7369>.1 G 2.972<6e74726f647563656420627920444543206265666f7265207468652046>-5.472 F 2.971<6f727472616e203737207374616e646172642077>-.15 F 2.971 <61732064658c6e65642c20616e642073686f756c64206265>-.1 F -.2<61766f> 171.78 700.8 S<696465642e29>.2 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3133>191.795 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <706f696e746572>144 84 Q F0<3a>A -.15<466f>171.78 96 S .505 <727472616e203930207374616e6461726420706f696e746572>.15 F .505 <2d72656c617465642073796e7461782c20696e636c7564696e67>-.2 F/F2 10 /Courier@0 SF<504f494e544552>3.006 E F0<2c>A F2<544152474554>3.006 E F0 <616e64>3.006 E F2<414c4c4f4341542d>3.006 E<41424c45>171.78 108 Q F0 3.448<74797065206465636c61726174696f6e732c>5.948 F F2<414c4c4f43415445> 5.948 E F0<2c>A F2<4445414c4c4f43415445>5.948 E F0 5.947<2c61>C<6e64> -5.947 E F2<4e554c4c494659>5.947 E F0 3.447 <73746174656d656e74732c20616e64>5.947 F <706f696e7465722061737369676e6d656e74207573696e67>171.78 120 Q F2<3d3e> 2.5 E F0<2e>A F1<71756164ad636f6e7374616e74>144 136.8 Q F0<3a>A<51756164 20707265636973696f6e207265616c20636f6e7374616e74732c20652e672e206f662074 686520666f726d>171.78 148.8 Q F2<312e32335134>2.5 E F0<2e>A F1 <71756f74656d61726b>144 165.6 Q F0<3a>A<537472696e67732064656c696d697465 642062792071756f7465206d61726b7320726174686572207468616e2061706f7374726f 706865732e>171.78 177.6 Q F1 -.18<7265>144 194.4 S<6c6f7073>.18 E F0<3a> A<52656c6174696f6e616c2028636f6d70617269736f6e29206f70657261746f72732063 6f6d706f736564206f662070756e6374756174696f6e2c206e616d656c793a203c203c3d 203d3d202f3d203e203e3d2e>171.78 206.4 Q F1<73656d69636f6c6f6e>144 223.2 Q F0<3a>A<53656d69636f6c6f6e20757365642061732073746174656d656e7420736570 617261746f72>171.78 235.2 Q<2e>-.55 E F1<73746174656d656e74ad6f72646572> 144 252 Q F0<3a>A .72<53746174656d656e7473206f7574206f662074686520736571 75656e6365206d616e646174656420627920746865205374616e646172642e>171.78 264 R .72<54686520616c6c6f>5.72 F .72 <7765642073657175656e636520697320696c6c75732d>-.25 F <74726174656420696e2054>171.78 276 Q<61626c65203120696e2074686520736563 74696f6e206f6e20496e74657270726574696e6720746865204f75747075742e>-.8 E F1<747970656c657373ad636f6e7374616e74>144 292.8 Q F0<3a>A -.8<5479> 171.78 304.8 S<70656c65737320636f6e7374616e74732c20666f722065>.8 E <78616d706c65>-.15 E F2<5a273139414627>2.5 E F0<2e>A F1 <74797065ad73697a65>144 321.6 Q F0<3a>A -.8<5479>171.78 333.6 S<70652064 65636c61726174696f6e732073706563696679696e6720612073697a652c20666f722065> .8 E<78616d706c65>-.15 E F2<5245414c2a38>2.5 E F0<2e>A F1 -.1<7661>144 350.4 S<726961626c65ad66>.1 E<6f726d6174>-.25 E F0<3a>A -1.11<5661> 171.78 362.4 S<726961626c65207265706561742073706563698c636174696f6e206f 72208c656c642073697a6520696e20464f524d41>1.11 E 3.98 -.74<542e2054>-1.11 H<6865736520617265206f662074686520666f726d>.74 E F2<3c>2.5 E/F3 10 /Times-Italic@0 SF -.2<6578>2.5 G<7072>.2 E F2<3e>2.5 E F0<2e>A F1 <766d73ad696f>144 379.2 Q F0<3a>A 2.5<4f62736f6c6574652e204e6f>171.78 391.2 R 2.5<7768>-.25 G <6173207468652073616d65206d65616e696e6720617320746865>-2.5 E F1 <696fad6b>2.5 E<657977>-.1 E<6f726473>-.1 E F0 -.1<6b65>2.5 G<7977>-.05 E<6f72642e>-.1 E<53656520616c736f3a>144 408 Q F12.5 E F0<2c>A F12.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E<65747479>-.18 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E<6f726473697a65>-.1 E F0<2e>A F1108 436.8 Q F3 <6c697374>.09 E F0 .424<546869732073657474696e672070726f>144 448.8 R .423<76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665> -.15 G 2.923<7274>.15 G .423<68652077>-2.923 F .423 <61726e696e67732061626f757420737570706f727465642065>-.1 F .423 <7874656e73696f6e7320746f207468652046>-.15 F<6f727472616e>-.15 E .414<37 37205374616e6461726420746861742077657265206e6f742061646f7074656420617320 70617274206f66207468652046>144 460.8 R .414 <6f727472616e203930205374616e646172642e>-.15 F .414<4e6f74652074686174> 5.414 F F1<66746e6368656b>2.914 E F0 .415<646f6573206e6f74>2.915 F .692 <737570706f7274207468652066756c6c2046>144 472.8 R .692 <6f727472616e203930206c616e67756167652e>-.15 F<486f>5.692 E<7765>-.25 E -.15<7665>-.25 G 1.491 -.4<722c2069>.15 H 3.191<7464>.4 G .691 <6f657320737570706f727420736f6d6520636f6d6d6f6e2065>-3.191 F .691 <7874656e73696f6e7320746f2046>-.15 F<6f72>-.15 E<2d>-.2 E .484 <7472616e2037372074686174207765726520707265>144 484.8 R -.25<7661>-.25 G .484<6c656e74206265666f72652046>.25 F .485<6f727472616e2039302077>-.15 F .485<61732064658c6e65642e>-.1 F .485<536f6d65206f662074686573652065> 5.485 F .485<7874656e73696f6e7320626563616d652070617274>-.15 F .439 <6f66207468652046>144 496.8 R .439 <6f727472616e203930205374616e646172642c2062>-.15 F .438 <7574206f746865727320646964206e6f742e>-.2 F<546865>5.438 E F1 2.938 E F0 .438<73657474696e672077>2.938 F .438 <61726e73206f6e6c792061626f757420746865206c6174746572>-.1 F 5.438<2e54> -.55 G<686174>-5.438 E 1.413<69732c2074686973208d616720636f>144 508.8 R -.15<7665>-.15 G 1.414 <7273207468696e6773207468617420617265206e656974686572206c65>.15 F -.05 <6761>-.15 G 3.914<6c46>.05 G 1.414<6f727472616e203737206e6f72206c65> -4.064 F -.05<6761>-.15 G 3.914<6c46>.05 G 1.414<6f727472616e2039302e> -4.064 F 1.414<5468657265666f72652c20746865>6.414 F -.1<7761>144 520.8 S .649<726e696e677320636f6e74726f6c6c65642062792074686973208d616720617265 206261736963616c6c79206120737562736574206f66207468652077>.1 F .648 <61726e696e677320636f6e74726f6c6c6564206279>-.1 F F13.148 E F0 5.648<2e54>C<68657265>-5.648 E 1.869<6172652061206665>144 532.8 R 4.369 <7763>-.25 G 1.869<617365732c206465736372696265642062656c6f>-4.369 F 3.169 -.65<772c2077>-.25 H 1.869<68657265207468652063697263756d7374616e 63657320696e207768696368207468652077>.65 F 1.87 <61726e696e67206973206769>-.1 F -.15<7665>-.25 G 4.37<6e61>.15 G<7265> -4.37 E<736c696768746c7920646966>144 544.8 Q <666572656e7420666f7220746865207477>-.25 E 2.5<6f8d>-.1 G<6167732e>-2.5 E<546865>144 561.6 Q F3<6c697374>3.183 E F0 .683 <636f6e7369737473206f66206b>3.183 F -.15<6579>-.1 G -.1<776f>.15 G .683 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .683<546865726520617265207468726565207370656369616c206b>5.683 F -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>144 573.6 Q F0 .176 <746f207475726e206f6e20616c6c207468652077>2.676 F .177 <61726e696e67732061626f7574206e6f6e7374616e646172642065>-.1 F <7874656e73696f6e732c>-.15 E F1<6e6f6e65>2.677 E F0 .177 <746f207475726e207468656d20616c6c206f66>2.677 F .177<662c20616e64>-.25 F F1<68656c70>2.677 E F0<746f>2.677 E .379 <7072696e7420746865206c697374206f6620616c6c20746865206b>144 585.6 R -.15 <6579>-.1 G -.1<776f>.15 G .379<726473207769746820612062726965662065>.1 F .379<78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.379 E F3 <6c697374>2.879 E F0 .379<6973206f6d69747465642c>2.879 F F1 2.879 E F0 .378<69732065717569>2.879 F<762d>-.25 E<616c656e7420746f>144 597.6 Q F12.5 E F0 2.5<2c61>C<6e64>-2.5 E F1 2.5 E F0<69732065717569>2.5 E -.25<7661>-.25 G <6c656e7420746f>.25 E F12.5 E F0<2e>A .876 <54686520666f6c6c6f>144 614.4 R .876<77696e67206b>-.25 F -.15<6579>-.1 G -.1<776f>.15 G .876<726473206861>.1 F 1.176 -.15<76652069>-.2 H .876 <64656e746963616c206d65616e696e677320666f72>.15 F F13.377 E F0 .877<617320666f72>3.377 F F13.377 E F0 5.877<2e54>C .877 <68652072656164657220697320726566657272656420746f>-5.877 F<7468652065> 144 626.4 Q<78706c616e6174696f6e7320756e646572>-.15 E F12.5 E F0<2e>A F1 12.5<616363657074ad7479706520646f75626c65ad636f6d706c6578> 221.07 643.2 R<706172616dad6e6f706172>35.69 E<656e>-.18 E 22.06 <6261636b736c6173682066>221.07 655.2 R 25.67 <6f726d6174ad646f6c6c61727369676e2063726179ad706f696e746572>-.25 F 45.41 <627974652066>221.07 667.2 R 23.88 <6f726d6174ad65646974ad64657363722071756164ad636f6e7374616e74>-.25 F 48.18<6370702066756e6374696f6ead6e6f706172>221.07 679.2 R 26.7 <656e2074797065ad73697a65>-.18 F 13.05 <64ad636f6d6d656e74206e616d65ad646f6c6c61727369676e>221.07 691.2 R -.1 <7661>34.02 G<726961626c65ad66>.1 E<6f726d6174>-.25 E 29.71 <646563ad74616220706172616dad696d706c69636974ad74797065>221.07 703.2 R <766d73ad696f>15 E F0<546865206b>144 720 Q -.15<6579>-.1 G -.1<776f>.15 G<72647320776869636820646966>.1 E<66657220736f6d65>-.25 E <776861742066726f6d2074686520636f72726573706f6e64696e67>-.25 E F1 2.5 E F0 -.1<6b65>2.5 G<7977>-.05 E <6f7264732061726520617320666f6c6c6f>-.1 E<77732e>-.25 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3134>191.795 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <636f6e74696e756174696f6e>144 84 Q F0<3a>A 1.081<546865206c696d6974206f 6e20746865206e756d626572206f6620636f6e74696e756174696f6e206c696e65732066 6f7220612073746174656d656e7420696e208c78>171.78 96 R 1.08 <656420736f7572636520666f726d20697320746865>-.15 F .576 <73616d652c206e616d656c792031392c20696e2046>171.78 108 R .576 <6f727472616e20393020617320696e2046>-.15 F .577<6f727472616e2037372e> -.15 F -.15<466f>5.577 G 3.077<7266>.15 G .577<72656520736f757263652066 6f726d20746865206c696d697420697320333920636f6e2d>-3.077 F 1.49<74696e75 6174696f6e206c696e65732c20616e642061206c696e6520636f6e7461696e696e672061 20636f6e74696e756174696f6e206d61726b2063616e6e6f74206265206f746865727769 736520656d707479206f72>171.78 120 R <636f6e7461696e206f6e6c79206120636f6d6d656e742e>171.78 132 Q F1 <696e7472696e736963>144 148.8 Q F0<3a>A .958 <54686973206973207468652073616d6520617320666f72>171.78 160.8 R F1 3.459 E F0 -.15<6578>3.459 G .959<6365707420666f72207468652069 6e7472696e7369632066756e6374696f6e732064658c6e656420696e204d494c2d535444 20313735332c>.15 F 1.098 <77686963682061726520616c6c20696e636c7564656420696e2046>171.78 172.8 R 1.098<6f727472616e2039302c20616e6420736f20617265206e6f742077>-.15 F 1.097<61726e65642061626f75742e>-.1 F<28536565>6.097 E F1 3.597 E F0 1.097<666f722061>3.597 F<6c6973742e29> 171.78 184.8 Q F1<696fad6b>144 201.6 Q<657977>-.1 E<6f726473>-.1 E F0 <3a>A .138<54686973206973207468652073616d6520617320666f72>171.78 213.6 R F12.638 E F0 -.15<6578>2.638 G .138 <636570742074686174206e6f2077>.15 F .138<61726e696e677320617265206769> -.1 F -.15<7665>-.25 G 2.639<6e66>.15 G .139<6f722074686520492f4f206b> -2.639 F -.15<6579>-.1 G -.1<776f>.15 G .139<726473207468617420617265>.1 F<7374616e6461726420696e2046>171.78 225.6 Q<6f727472616e2039302e>-.15 E F1<6c6f6e67ad6c696e65>144 242.4 Q F0<3a>A 1.801 <416c74686f756768207468652046>171.78 254.4 R 1.801 <6f727472616e203930205374616e6461726420616c6c6f>-.15 F 1.801<7773206c69 6e6573206c6f6e676572207468616e203732206368617261637465727320696e20667265 6520736f75726365>-.25 F .709<666f726d2c2074686973207265737472696374696f 6e207374696c6c206170706c69657320746f208c78>171.78 266.4 R .709 <656420736f7572636520666f726d2e>-.15 F .71 <496e206672656520736f7572636520666f726d20746865206c696e65206c656e677468> 5.709 F 2.008 <6c696d69742069732031333220636861726163746572732c20616e6420756e6c696b> 171.78 278.4 R 4.508<658c>-.1 G -.15<7865>-4.508 G 4.508<6466>.15 G <6f726d2c>-4.508 E F1<66746e6368656b>4.508 E F0 2.008 <646f6573206e6f7420616c6c6f>4.508 F 4.508<7774>-.25 G 2.008 <686973206c696d697420746f206265>-4.508 F<696e637265617365642e>171.78 290.4 Q F1<6d69786564ad65787072>144 307.2 Q F0<3a>A 1.367 <54686973206973207468652073616d6520617320666f72>171.78 319.2 R F1 3.867 E F0 -.15<6578>3.867 G 1.367<6365707420666f722065>.15 F 1.367<787072657373696f6e73206d6978696e672065>-.15 F 1.368 <7874656e64656420707265636973696f6e207265616c2077697468>-.15 F <636f6d706c65>171.78 331.2 Q 2.5<7864>-.15 G <6174612074797065732c20776869636820617265207065726d697474656420696e2046> -2.5 E<6f727472616e2039302e>-.15 E F1<73746174656d656e74ad6f72646572>144 348 Q F0<3a>A .453<546869732069732073696d696c617220746f2074686520636f72 726573706f6e64696e67>171.78 360 R F12.953 E F0 -.1<7761>2.953 G .453<726e696e672c2062>.1 F .453 <7574206170706c6965732074686520736f6d65>-.2 F .453 <77686174206c6f6f73657220726573747269632d>-.25 F .432 <74696f6e73206f6e2073746174656d656e74206f72646572206f66207468652046> 171.78 372 R .432<6f727472616e203930205374616e646172642e>-.15 F .432 <496e20706172746963756c6172>5.432 F 2.932<2c46>-.4 G .432 <6f727472616e20393020616c6c6f>-3.082 F<7773>-.25 E/F2 10/Courier@0 SF <44415441>2.933 E F0 2.384<73746174656d656e747320616e642073746174656d65 6e742d66756e6374696f6e2064658c6e6974696f6e7320746f20626520696e7465726d69 78>171.78 384 R 2.383 <656420776974682073706563698c636174696f6e2073746174652d>-.15 F <6d656e74732e>171.78 396 Q F1<747970656c657373ad636f6e7374616e74>144 412.8 Q F0<3a>A .213<496e2046>171.78 424.8 R .213 <6f727472616e2039302c2062696e617279>-.15 F 2.714<2c6f>-.65 G .214 <6374616c2c20616e64206865>-2.714 F .214 <7861646563696d616c20636f6e7374616e7473206f662074686520666f726d>-.15 F F2<422764646427>2.714 E F0<2c>A F2<4f2764646427>2.714 E F0 2.714<2c61>C <6e64>-2.714 E F2<5a2764646427>171.78 436.8 Q F0 3.586<2c72>C <65737065637469>-3.586 E -.15<7665>-.25 G<6c79>.15 E 3.586<2c61>-.65 G 1.086<7265207065726d69747465642e>-3.586 F<48657265>6.086 E F2 <2764646427>3.586 E F0 1.085 <726570726573656e7473206120737472696e67206f66206469676974732e>3.585 F F1 <66746e6368656b>6.085 E F0 1.032<7265636f676e697a657320746865736520666f 726d732c2061732077656c6c20617320612076>171.78 448.8 R 1.033 <617269616e74206f662074686520666f726d>-.25 F F2<582764646427>3.533 E F0 1.033<666f722061206865>3.533 F 1.033<7861646563696d616c20636f6e2d>-.15 F .868<7374616e742c20616e64206f746865722076>171.78 460.8 R .868 <617269616e747320696e20776869636820746865206261736520696e64696361746f72> -.25 F F2<42>3.368 E F0<2c>A F2<4f>3.368 E F0<2c>A F2<5a>3.368 E F0 3.367<2c6f>C<72>-3.367 E F2<58>3.367 E F0<666f6c6c6f>3.367 E .867 <77732074686520646967697420737472696e672e>-.25 F .055<54686573652076> 171.78 472.8 R .055 <617269616e74732077657265206e6f742061646f7074656420696e2046>-.25 F .055 <6f727472616e2039302c20736f206f6e6c7920746865>-.15 F 2.555<7961>-.15 G .055<72652077>-2.555 F .055 <61726e65642061626f7574207768656e2074686973208d6167>-.1 F <6973207475726e6564206f6e2e>171.78 484.8 Q<53656520616c736f3a>144 501.6 Q F12.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E<65747479>-.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E<6f726473697a65>-.1 E F0<2e>A F1108 530.4 Q/F3 10/Times-Italic@0 SF<6c697374>.09 E F0 .714<546869732073657474696e672070726f>144 542.4 R .713 <76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 3.213<7277>.15 G .713 <61726e696e67732061626f7574207374616e646172642046>-3.313 F .713 <6f727472616e20373720666561747572657320746861742077657265>-.15 F .407 <64656c657465642066726f6d207468652046>144 554.4 R .407 <6f727472616e203935205374616e646172642e>-.15 F<556e6c696b>5.407 E 2.907 <6574>-.1 G<6865>-2.907 E F12.907 E F0<616e64>2.907 E F1 2.907 E F0 .408<73657474696e67732c2074686573652077>2.908 F .408<61726e696e6773206170706c7920746f>-.1 F .523 <73796e746178207768696368206973206c65>144 566.4 R -.05<6761>-.15 G 3.023 <6c46>.05 G .523<6f727472616e2037372e>-3.173 F<486f>5.523 E<7765>-.25 E -.15<7665>-.25 G 1.323 -.4<722c2073>.15 H .523 <696e6365207468657365206665617475726573206861>.4 F .822 -.15<76652062> -.2 H .522<65656e2064656c657465642066726f6d20746865205374616e2d>.15 F<64 6172642c20697420697320706f737369626c6520746861742070726f6772616d7320636f 6e7461696e696e67207468656d2077696c6c20626520756e61636365707461626c652074 6f20736f6d65206e65>144 578.4 Q<77657220636f6d70696c6572732e>-.25 E <546865>144 595.2 Q F3<6c697374>3.182 E F0 .683 <636f6e7369737473206f66206b>3.182 F -.15<6579>-.1 G -.1<776f>.15 G .683 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .683<546865726520617265207468726565207370656369616c206b>5.683 F -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>144 607.2 Q F0 .177 <746f207475726e206f6e20616c6c207468652077>2.677 F .177 <61726e696e67732061626f7574206e6f6e7374616e646172642065>-.1 F <7874656e73696f6e732c>-.15 E F1<6e6f6e65>2.677 E F0 .176 <746f207475726e207468656d20616c6c206f66>2.677 F .176<662c20616e64>-.25 F F1<68656c70>2.676 E F0<746f>2.676 E .379 <7072696e7420746865206c697374206f6620616c6c20746865206b>144 619.2 R -.15 <6579>-.1 G -.1<776f>.15 G .379<726473207769746820612062726965662065>.1 F .379<78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.379 E F3 <6c697374>2.879 E F0 .379<6973206f6d69747465642c>2.879 F F1 2.879 E F0 .379<69732065717569>2.879 F<762d>-.25 E 1.977 <616c656e7420746f>144 631.2 R F14.477 E F0 4.477<2c61> C<6e64>-4.477 E F14.477 E F0 1.977<69732065717569>4.477 F -.25<7661>-.25 G 1.977<6c656e7420746f>.25 F F14.477 E F0 6.977<2e54>C 1.977<68652077>-6.977 F 1.977<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G 1.977<7264732077697468207468656972>.1 F <6d65616e696e67732061726520617320666f6c6c6f>144 643.2 Q<77732e>-.25 E F1 -.18<7265>144 660 S<616cad646f>.18 E F0<3a>A<41>171.78 672 Q F2<444f>2.5 E F0 -.25<7661>2.5 G<726961626c65206f6620616e>.25 E 2.5<7972>-.15 G <65616c206e756d6572696320747970652e>-2.5 E F1<7061757365>144 688.8 Q F0 <3a>A<546865>171.78 700.8 Q F2<5041555345>2.5 E F0<73746174656d656e742e> 2.5 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3135> 191.795 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <61737369676e>144 84 Q F0<3a>A<546865>171.78 96 Q/F2 10/Courier@0 SF <41535349474e>2.5 E F0<73746174656d656e742c2061737369676e6564>2.5 E F2 <474f544f>2.5 E F0 2.5<2c6f>C 2.5<7261>-2.5 G <737369676e656420666f726d61742e>-2.5 E F1<68ad65646974>144 112.8 Q F0 <3a>A<546865>171.78 124.8 Q F2<48>2.5 E F0 <656469742064657363726970746f7220696e206120666f726d61742e>2.5 E .578 <5468657265206973206f6e65206f746865722046>144 141.6 R .578 <6f727472616e2037372073796e746178206665617475726520746861742077>-.15 F .578<61732064656c6574656420696e2046>-.1 F .578 <6f727472616e2039352c206e616d656c79>-.15 F .579 <6272616e6368696e6720746f>5.579 F<616e>144 153.6 Q F2<454e444946>3.142 E F0 .642<66726f6d206f75747369646520746865>3.142 F F2<4946>3.142 E F0 3.141<626c6f636b2e20486f>3.141 F<7765>-.25 E -.15<7665>-.25 G -.4<722c> .15 G F1<66746e6368656b>3.541 E F0 .641 <697320756e61626c6520746f20616e616c797a652070726f6772616d208d6f>3.141 F 1.941 -.65<772c2061>-.25 H<6e64>.65 E <736f20697420646f6573206e6f742070726f>144 165.6 Q<7669646520612077>-.15 E<61726e696e6720666f7220746869732e>-.1 E<53656520616c736f3a>144 182.4 Q F12.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E<65747479>-.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E<6f726473697a65>-.1 E F0<2e>A F1108 211.2 Q F0 .311<5072696e74732061206c697374206f 6620616c6c2074686520636f6d6d616e642d6c696e65206f7074696f6e73207769746820 612073686f7274206465736372697074696f6e206f66206561636820616c6f6e67207769 74682069747320646566>144 223.2 R<61756c74>-.1 E -.25<7661>144 235.2 S 3.966<6c75652e2054686973>.25 F 1.466<636f6d6d616e64206973206964656e7469 63616c20696e2066756e6374696f6e20746f20746865>3.966 F F1 -.63<6060>3.966 G<3f27>.63 E<27>-.63 E F0<6172>6.466 E 1.465 <67756d656e742c20616e642069732070726f>-.18 F 1.465 <7669646564206173206120636f6e2d>-.15 F -.15<7665>144 247.2 S .223<6e6965 6e636520666f722074686f73652073797374656d7320696e207768696368207468652071 75657374696f6e206d61726b20686173207370656369616c206d65616e696e6720746f20 74686520636f6d6d616e6420696e746572>.15 F<2d>-.2 E<707265746572>144 259.2 Q 5<2e44>-.55 G<6566>-5 E<61756c74203d206e6f2e>-.1 E <5468652068656c70206c697374696e6720616c736f207072696e7473207468652076> 144 276 Q<657273696f6e206e756d62657220616e64207061746368206c65>-.15 E -.15<7665>-.25 G 2.5<6c6f>.15 G<66>-2.5 E F1<66746e6368656b>2.5 E F0 <616e64206120636f70>2.5 E<797269676874206e6f746963652e>-.1 E .552 <4e6f74653a207468652060>144 292.8 R<60646566>-.74 E<61756c7427>-.1 E 3.052<2776>-.74 G .552 <616c756573207072696e74656420696e2073717561726520627261636b>-3.302 F .551<65747320696e207468652068656c70206c697374696e67206172652c2073747269 63746c7920737065616b696e672c206e6f74>-.1 F 1.026<7468652062>144 304.8 R 1.026<75696c742d696e20646566>-.2 F 1.026<61756c74732062>-.1 F 1.026 <7574207468652063757272656e742076>-.2 F 1.026 <616c75657320616674657220616e>-.25 F 3.526<7965>-.15 G -.4<6e76>-3.526 G 1.026<69726f6e6d656e74206f7074696f6e7320616e6420616e>.4 F 3.527<7963> -.15 G<6f6d6d616e642d6c696e65>-3.527 E <6f7074696f6e7320707265636564696e6720746865>144 316.8 Q F1 2.5 E F0<6f7074696f6e206861>2.5 E .3 -.15<76652062>-.2 H <65656e2070726f6365737365642e>.15 E<53656520616c736f3a>144 333.6 Q F1 2.5 E<76696365>-.1 E F0<2c>A F12.5 E<657273696f6e>-.1 E F0 2.5<2c61>C<6e64>-2.5 E F1<68656c70>2.5 E F0 <6f7074696f6e206f6620616c6c2073657474696e677320746861742074616b>2.5 E 2.5<65616c>-.1 G<697374206f66206b>-2.5 E -.15<6579>-.1 G -.1<776f>.15 G <7264732e>.1 E F1108 362.4 Q/F3 10 /Times-Italic@0 SF<6c697374>.09 E F0 1.787<44658c6e65206e6f6e2d616c7068 616e756d6572696320636861726163746572732074686174206d61792062652075736564 20696e206964656e74698c6572732e>144 374.4 R 1.786<427920646566>6.786 F <61756c742c>-.1 E F1<66746e6368656b>4.286 E F0<6f6e6c79>4.286 E 1.202<61 6363657074732074686520646f6c6c6172207369676e20616e6420756e64657273636f72 65206173206e6f6e2d616c7068616e756d65726963206368617261637465727320696e20 6964656e74698c6572206e616d65732e>144 386.4 R<546865>6.203 E .25 <6368617261637465727320696e20746865>144 398.4 R F3<6c697374>2.749 E F0 .249<7265706c616365207768617465>2.749 F -.15<7665>-.25 G 2.749<7273>.15 G .249<6574206f66206163636570746564206e6f6e2d616c7068616e756d6572696320 636861726163746572732077>-2.749 F .249<617320707265>-.1 F <76696f75736c79>-.25 E 1.006<696e206566>144 410.4 R 3.506 <666563742e20546875732c>-.25 F 1.007<696620646f6c6c6172207369676e206f72 20756e64657273636f726520617265206e6f7420696e636c7564656420696e2074686520 6c6973742c20746865>3.506 F 3.507<796c>-.15 G 1.007 <6f736520746865697220737461747573206173>-3.507 F <61636365707461626c6520636861726163746572732e>144 422.4 Q .498 <54686973206f7074696f6e2069732070726f>144 439.2 R .498 <766964656420746f20656e61626c65>-.15 F F1<66746e6368656b>2.998 E F0 .497 <746f2068616e646c6520736f75726365208c6c657320636f6e7461696e696e67206e6f 6e2d7374616e64617264206964656e7469666572>2.998 F .435 <6e616d65732074686174206d6179206265206e65656465642c20666f722065>144 451.2 R .435<78616d706c652c20746f20616363657373206365727461696e206f7065 726174696e672073797374656d2073657276696365732e>-.15 F .436 <53656520746865207365632d>5.436 F .956<74696f6e206f6e204c696d6974617469 6f6e7320616e6420457874656e73696f6e7320666f72207468652074726561746d656e74 206f66206964656e74698c65727320636f6e7461696e696e672074686573652063686172 61637465727320696e>144 463.2 R<696d706c6963697420747970696e672e>144 475.2 Q<5573696e67>144 492 Q F12.5 E F0<7475726e73206f66>2.5 E 2.5<6661>-.25 G<6363657074616e6365206f66206e 6f6e2d616c7068616e756d65726963206368617261637465727320656e746972656c79> -2.5 E<2e>-.65 E<53656520616c736f3a>144 508.8 Q F12.5 E <6365>-.18 E F0<2e>A F1108 537.6 Q F3<70617468>1.25 E F0 .059<53706563698c65732061206469726563746f727920746f2062652073656172 6368656420666f72208c6c65732073706563698c6564206279>144 549.6 R F2 <494e434c554445>2.559 E F0 2.56<73746174656d656e74732e20556e6c696b>2.56 F 2.56<656f>-.1 G .06<7468657220636f6d2d>-2.56 F .221<6d616e642d6c696e65 206f7074696f6e732c20746869732073657474696e672069732063756d756c617469>144 561.6 R -.15<7665>-.25 G 2.721<3b74>.15 G .221 <6861742069732c206966206974206973206769>-2.721 F -.15<7665>-.25 G 2.72 <6e6d>.15 G .22 <6f7265207468616e206f6e6365206f6e2074686520636f6d6d616e64>-2.72 F .642< 6c696e652c20616c6c20746865206469726563746f7269657320736f2073706563698c65 642061726520706c61636564206f6e2061206c69737420746861742077696c6c20626520 736561726368656420696e207468652073616d65206f72646572206173>144 573.6 R <746865>144 585.6 Q 2.839<7961>-.15 G .339<7265206769>-2.839 F -.15 <7665>-.25 G 2.839<6e2e20546865>.15 F .339<6f7264657220696e207768696368> 2.839 F F1<66746e6368656b>2.838 E F0 .338<736561726368657320666f72206120 8c6c6520746f20626520696e636c756465642069733a207468652063757272656e742064 697265632d>2.838 F .547 <746f72793b20746865206469726563746f72792073706563698c656420627920656e> 144 597.6 R .547<7669726f6e6d656e742076>-.4 F<61726961626c65>-.25 E F2 <46544e4348454b5f494e434c554445>3.047 E F0 .548<696620616e>3.047 F .548 <793b20746865206469726563746f72696573>-.15 F .16 <73706563698c656420627920616e>144 609.6 R<79>-.15 E F1 2.659 E F0 .159<6f7074696f6e733b20746865206469726563746f7279207370656369 8c656420627920656e>2.659 F .159<7669726f6e6d656e742076>-.4 F <61726961626c65>-.25 E F2<494e434c554445>2.659 E F0 2.659<3b61>C<6e64> -2.659 E 2.055<8c6e616c6c7920696e2061207374616e646172642073797374656d2d 77696465206469726563746f72792028>144 621.6 R F2 <2f7573722f696e636c756465>A F0 2.055<666f7220554e49582c>4.555 F F2 <535953244c494252415259>4.555 E F0<666f72>4.555 E<564d532c20616e64>144 633.6 Q F2<5c696e636c756465>2.5 E F0<666f72204d53444f53292e>2.5 E <53656520616c736f3a>144 650.4 Q F12.5 E F0<2c>A F1 2.5 E<6365>-.18 E F0<2e>A F1108 679.2 Q F3 <6c697374>.09 E F0 .626<436f6e74726f6c732077686574686572>144 691.2 R F1 <66746e6368656b>3.126 E F0 .625<7265636f676e697a6573206365727461696e206e 6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e7320617320696e 7472696e7369632e>3.126 F<546865>5.625 E F3<6c697374>3.125 E F0 .84 <636f6e7369737473206f66206b>144 703.2 R -.15<6579>-.1 G -.1<776f>.15 G .84 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .84<536f6d65206f6620746865206b>5.84 F -.15<6579>-.1 G -.1<776f>.15 G .84<72647320636f6e74726f6c207768657468657220746f>.1 F .724<7265636f676e 697a65206365727461696e2067726f757073206f662066756e6374696f6e732c20616e64 206f74686572206b>144 715.2 R -.15<6579>-.1 G -.1<776f>.15 G .724 <72647320636f6e74726f6c207468652065>.1 F .723 <787065637465642073796e74617820666f7220696e>-.15 F -.2<766f>-.4 G<6b2d> .2 E .983 <696e6720736f6d65206e6f6e7374616e6461726420696e7472696e736963732e>144 727.2 R .984<496e636c7564652061206b>5.984 F -.15<6579>-.1 G -.1<776f>.15 G .984<726420746f207475726e206f6e207265636f676e6974696f6e206f6620746865 20636f72726573706f6e64696e67>.1 F<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3136>191.795 E 0 Cg EP %%Page: 17 17 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .59 <736574206f6620696e7472696e73696373206f7220746f20616c6c6f>144 84 R 3.09 <7774>-.25 G .589<686520636f72726573706f6e64696e672073796e7461782e>-3.09 F .589<496e636c7564652061206b>5.589 F -.15<6579>-.1 G -.1<776f>.15 G .589<7264207072658c78>.1 F .589<6564206279>-.15 F/F1 10/Times-Bold@0 SF <6e6fad>3.089 E F0 .589<746f207475726e>3.089 F<6f66>144 96 Q 2.5<6674> -.25 G<686174207265636f676e6974696f6e2e>-2.5 E .477 <546865726520617265207468726565207370656369616c206b>144 112.8 R -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.978 E F0 .478<7475 726e73206f6e207265636f676e6974696f6e206f6620616c6c20746865206e6f6e737461 6e6461726420696e7472696e7369637320286c6973746564>5.478 F<62656c6f>144 124.8 Q .719<772920616e642061636365707473206569746865722073796e74617820 666f722074686f73652074686174206861>-.25 F 1.019 -.15<76652076>-.2 H 3.219<6172696174696f6e732e20557365>-.1 F F1<6e6f6e65>3.218 E F0 .718 <746f207475726e206f66>3.218 F 3.218<6672>-.25 G<65636f676e6974696f6e> -3.218 E 2.421 <6f6620616c6c206e6f6e7374616e6461726420696e7472696e736963732065>144 136.8 R 2.421<78636570742074686f7365206e6f7465642062656c6f>-.15 F 6.221 -.65<772e2055>-.25 H<7365>.65 E F1<68656c70>4.921 E F0 2.422 <746f207072696e7420746865206c697374206f6620616c6c20746865>4.921 F -.1 <6b65>144 148.8 S<7977>-.05 E .783 <6f726473207769746820612062726965662065>-.1 F .783 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.783 E/F2 10 /Times-Italic@0 SF<6c697374>3.283 E F0 .783<6973206f6d69747465642c>3.283 F F13.282 E F0 .782<69732065717569>3.282 F -.25 <7661>-.25 G .782<6c656e7420746f>.25 F F13.282 E <7369633d616c6c>144 160.8 Q F0 2.5<2c61>C<6e64>-2.5 E F1 2.5 E F0<69732065717569>2.5 E -.25<7661>-.25 G <6c656e7420746f>.25 E F12.5 E F0<2e>A 1.6<546865206e6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e 73206e656564656420746f20737570706f727420746865206e6f6e7374616e6461726420 65>144 177.6 R 1.6<7874656e64656420707265636973696f6e2064617461>-.15 F .901<74797065732028646f75626c6520636f6d706c65>144 189.6 R 3.401<7861> -.15 G .901<6e64207175616420707265636973696f6e292061726520616c>-3.401 F -.1<7761>-.1 G .901<7973207265636f676e697a65642e>.1 F .9 <54686520696e7472696e7369637320666f722074686520646f75626c65>5.901 F <636f6d706c65>144 201.6 Q 2.5<7864>-.15 G<6174612074797065206172653a> -2.5 E/F3 10/Courier@0 SF 9 <43444142532043445351525420445245414c205a4c4f47>256.5 218.4 R 9 <4344434f532044434d504c5820494d4147>256.5 230.4 R<5a53494e>21 E 9 <43444558502044434f4e4a47205a414253>256.5 242.4 R<5a53515254>21 E 9 <43444c4f472044494d4147>256.5 254.4 R 15<5a455850205a434f53>21 F <434453494e>256.5 266.4 Q F0<54686520696e7472696e7369637320666f72207468 65207175616420707265636973696f6e20616e64207175616420636f6d706c65>144 290.4 Q 2.5<7874>-.15 G<79706573206172653a>-2.5 E F3 15 <435141425320514152434f53>250.5 307.2 R 21<5145585420514e494e54>15 F 15 <4351434f532051415253494e>250.5 319.2 R 15<5145585444205150524f44>15 F 15<435145585020514154414e2051464c4f4154>250.5 331.2 R<515245414c>15 E 15 <43514c4f4720514154414e32>250.5 343.2 R 15<51494d414720515349474e>15 F 15<435153494e2051434d504c58>250.5 355.2 R 21<51494e54205153494e>15 F 9 <4351535152542051434f4e4a4720514c4f47>250.5 367.2 R<5153494e48>27 E 15 <44424c45512051434f53>250.5 379.2 R 9<514c4f473130205153515254>27 F 15 <4951494e542051434f534820514d415831205154414e>250.5 391.2 R 9 <49514e494e54205144494d>250.5 403.2 R 15<514d494e31205154414e48>27 F 21 <51414253205145585020514d4f4420534e474c51>250.5 415.2 R F0<546865206b> 144 439.2 Q -.15<6579>-.1 G -.1<776f>.15 G<72647320636f6e74726f6c6c696e 67207265636f676e6974696f6e206f66206f74686572206e6f6e7374616e646172642069 6e7472696e7369632066756e6374696f6e732061726520617320666f6c6c6f>.1 E <77733a>-.25 E F1<6578747261>144 456 Q F0<3a>A 1.179 <7265636f676e697a652074686520666f6c6c6f>171.78 468 R 1.179 <77696e6720636f6d6d6f6e6c792061>-.25 F -.25<7661>-.2 G 1.179<696c61626c 65206e6f6e7374616e6461726420696e7472696e736963732028616c6c2065>.25 F <7863657074>-.15 E F3<45584954>3.679 E F0<616e64>3.679 E F3<4c4f43> 171.78 480 Q F0 <6172652064658c6e656420696e204d494c2d5354442031373533293a>2.5 E F3 9 <4254455354204942434c522049454f52>270.39 496.8 R<495348465443>21 E 15 <45584954204942495453>270.39 508.8 R 21<494f52204c4f43>15 F 15 <49414e44204942534554>270.39 520.8 R 9<4953484654204e4f54>15 F F1 <756e6978>144 549.6 Q F0 6.1<3a72>C<65636f676e697a6520746865736520636f6d 6d6f6e20556e69782d73706563698c6320696e7472696e7369632066756e6374696f6e73 3a>-6.1 E F3 15<41424f525420474d54494d45>261.39 566.4 R 15 <4c54494d45205352414e44>15 F 27<414e44204941524743>261.39 578.4 R 33 <4f522053595354454d>21 F 9<474554415247204952414e44>261.39 590.4 R 21 <52414e442054494d45>21 F 9 <474554454e56204c53484946542052534849465420584f52>261.39 602.4 R F1 <766d73>144 631.2 Q F0 7.78<3a72>C<65636f676e697a6520746865736520636f6d 6d6f6e20564d532d73706563698c6320696e7472696e7369632066756e6374696f6e733a> -7.78 E F3 21<44415445204944415445>270.39 648 R 9 <5345434e44532054494d45>15 F 9<455252534e532052414e>270.39 660 R <53495a454f46>27 E F1<696172>144 688.8 Q<6763ad6e6fad6172>-.1 E <67756d656e74>-.1 E F0<3a>A<737065636966792074686174>171.78 700.8 Q F3 <4941524743>2.5 E F0<6d617920626520696e>2.5 E -.2<766f>-.4 G -.1<6b65>.2 G 2.5<6477>.1 G<697468206e6f206172>-2.5 E<67756d656e74732e>-.18 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3137>191.795 E 0 Cg EP %%Page: 18 18 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF<696172> 144 84 Q<6763ad6f6e65ad6172>-.1 E<67756d656e74>-.1 E F0<3a>A <737065636966792074686174>171.78 96 Q/F2 10/Courier@0 SF<4941524743>2.5 E F0<6d617920626520696e>2.5 E -.2<766f>-.4 G -.1<6b65>.2 G 2.5<6477>.1 G <697468206f6e65206172>-2.5 E<67756d656e742e>-.18 E F1 <72616e64ad6e6fad6172>144 112.8 Q<67756d656e74>-.1 E F0<3a>A <737065636966792074686174>171.78 124.8 Q F2<52414e44>2.5 E F0<616e64>2.5 E F2<4952414e44>2.5 E F0<6d617920626520696e>2.5 E -.2<766f>-.4 G -.1 <6b65>.2 G 2.5<6477>.1 G<697468206e6f206172>-2.5 E<67756d656e74732e>-.18 E F1<72616e64ad6f6e65ad6172>144 141.6 Q<67756d656e74>-.1 E F0<3a>A <737065636966792074686174>171.78 153.6 Q F2<52414e44>2.5 E F0<616e64>2.5 E F2<4952414e44>2.5 E F0<6d617920626520696e>2.5 E -.2<766f>-.4 G -.1 <6b65>.2 G 2.5<6477>.1 G<697468206f6e65206172>-2.5 E<67756d656e742e>-.18 E<546865>144 170.4 Q F1<6e6fad6172>3.61 E<67756d656e74>-.1 E F0<616e64> 3.61 E F1<6f6e65ad6172>3.61 E<67756d656e74>-.1 E F0 -.1<6b65>3.61 G <7977>-.05 E 1.11<6f7264732077>-.1 F 1.11<6f726b20617320666f6c6c6f>-.1 F 1.11<77733a207475726e696e6720746865206f7074696f6e206f6e20636175736573> -.25 F F1<66746e6368656b>144 182.4 Q F0 .822<746f2061636365707420746865 20636f72726573706f6e64696e672073796e74617820666f7220696e>3.322 F -.2 <766f>-.4 G .823 <636174696f6e206f66207468652066756e6374696f6e2c20776974686f75742065>.2 F .823<78636c7564696e6720746865>-.15 F .193 <706f73736962696c697479206f662074686520616c7465726e617469>144 194.4 R .492 -.15<76652073>-.25 H 2.692<796e7461782e2054>.15 F .192 <75726e696e6720746865206f7074696f6e206f66>-.45 F 2.692<6663>-.25 G .192< 61757365732074686520636f72726573706f6e64696e672073796e746178206e6f742074 6f>-2.692 F 1.22<62652061636365707465642e>144 206.4 R 1.221<496620626f74 68206f7074696f6e7320617265207475726e6564206f6e206174206f6e63652028746865 20646566>6.22 F 1.221<61756c74292c207468656e206569746865722073796e746178 2069732061636365707465642e>-.1 F -.45<5475>144 218.4 S .363 <726e696e6720626f7468206f7074696f6e73206f66>.45 F 2.863<6661>-.25 G 2.863<746f>-2.863 G .363<6e63652077>-2.863 F .363 <6f756c64206e6f74206265206d65616e696e6766756c2e>-.1 F .362 <5468657365206f7074696f6e73206861>5.362 F .662 -.15<7665206e>-.2 H 2.862 <6f65>.15 G -.25<6666>-2.862 G .362<656374206966207265636f672d>.25 F<6e 6974696f6e206f6620556e697820696e7472696e7369637320686173206265656e207475 726e6564206f66>144 230.4 Q<662e>-.25 E .281<4e6f746520746861742074686973 2073657474696e6720646f6573206e6f7420636f6e74726f6c2077686574686572206e6f 6e2d7374616e646172642077>144 247.2 R .282<61726e696e67732061726520697373 7565642061626f75742074686573652066756e632d>-.1 F 3.068 <74696f6e732e204974>144 259.2 R .568<636f6e74726f6c73207768657468657220 7468652066756e6374696f6e732061726520617373756d656420746f20626520696e7472 696e736963206f72206e6f742c2077686963682064657465726d696e657320686f>3.068 F<77>-.25 E .345<746865697220757361676520697320636865636b>144 271.2 R 2.845<65642e205768656e>-.1 F .345<66756e6374696f6e7320696e20616e>2.845 F 2.846<796f>-.15 G 2.846<6674>-2.846 G .346 <6865736520736574732061726520696e636c756465642c20746865697220696e>-2.846 F -.2<766f>-.4 G .346<636174696f6e732077696c6c206265>.2 F<636865636b>144 283.2 Q .003<6564206163636f7264696e6720746f207468652072756c657320666f72 2074686520696e7472696e7369632066756e6374696f6e733b206f746865727769736520 746865>-.1 F 2.502<7977>-.15 G .002<696c6c20626520636865636b>-2.502 F .002<6564206173206e6f726d616c>-.1 F<2875736572>144 295.2 Q .235 <2d7772697474656e292065>-.2 F .235<787465726e616c2066756e6374696f6e732e> -.15 F .235<546865206e6f6e2d7374616e646172642077>5.235 F .235 <61726e696e67732061726520636f6e74726f6c6c656420627920746865>-.1 F F1 2.735 E F0<6f7074696f6e2e>144 307.2 Q 1.088<54686520646566>144 324 R 1.088<61756c742076>-.1 F 1.088 <616c7565206f6620746869732073657474696e672069732065717569>-.25 F -.25 <7661>-.25 G 1.087<6c656e7420746f>.25 F F1 3.587 E F0<666f6c6c6f>3.587 E 1.087<776564206279>-.25 F F1 3.587 E F0 .333 <666f722074686520556e69782076>144 336 R<657273696f6e2c>-.15 E F1 2.833 E F0 .333 <666f722074686520564d532076>2.833 F .333<657273696f6e2c20616e64>-.15 F F12.833 E F0 <666f72206f746865722076>144 348 Q<657273696f6e732e>-.15 E .424 <4e6f74653a20496e2076>144 364.8 R .424<657273696f6e73206f66>-.15 F F1 <66746e6368656b>2.924 E F0 .424<7072696f7220746f20322e31302c20746865> 2.924 F F12.924 E F0 .424 <8d616720746f6f6b2061206e756d65726963206172>2.924 F .423 <67756d656e7420696e7374656164206f66>-.18 F 2.711<616c>144 376.8 S .211 <697374206f66206f7074696f6e732e>-2.711 F -.15<466f>5.211 G 2.711<7274> .15 G .211<68652073616b>-2.711 F 2.712<656f>-.1 G 2.712<6675>-2.712 G .212<736572732077686f206d6179206861>-2.712 F .512 -.15<76652077>-.2 H .212<72697474656e207363726970747320696e>.15 F -.2<766f>-.4 G<6b696e67>.2 E F1<66746e6368656b>2.712 E F0 .212<696e20746869732077>2.712 F<6179>-.1 E<2c>-.65 E .76 <746865206e756d6572696320666f726d206973207374696c6c2061636365707465642e> 144 388.8 R .76<546865206e756d6572696320666f726d206f66207468652073657474 696e6720636f6e7369737473206f66207468726565206469676974732e>5.76 F <546865>5.76 E .249<6f6e65732064696769742073656c656374732074686520736574 206f6620696e7472696e7369632066756e6374696f6e7320746f20626520737570706f72 7465642e>144 400.8 R .249 <54686520646967697420302073656c65637473206f6e6c792046>5.249 F .249 <6f727472616e203737>-.15 F 1.466<7374616e6461726420696e7472696e73696373 20706c75732074686f7365206e656564656420746f20737570706f727420746865206e6f 6e7374616e646172642065>144 412.8 R 1.465 <7874656e64656420707265636973696f6e20646174612074797065732e>-.15 F .475 <54686520646967697420312069732065717569>144 424.8 R -.25<7661>-.25 G .476<6c656e7420746f>.25 F F1<6578747261>2.976 E F0 2.976<2c3269>C 2.976 <7365>-2.976 G<717569>-2.976 E -.25<7661>-.25 G .476<6c656e7420746f>.25 F F1<65787472612c756e6978>2.976 E F0 2.976<2c61>C .476 <6e6420332069732065717569>-2.976 F -.25<7661>-.25 G .476<6c656e7420746f> .25 F F1<65787472612c766d73>2.976 E F0<2e>A .595<5468652074656e73206469 676974206f6620746869732073657474696e6720636f6e74726f6c73207468652073796e 746178206f6620746865>144 436.8 R F2<52414e44>3.095 E F0 .595<696e747269 6e7369632066756e6374696f6e2c20616e64207468652068756e6472656473>3.095 F .674<646967697420636f6e74726f6c73207468652073796e746178206f6620746865> 144 448.8 R F2<4941524743>3.174 E F0 3.174<66756e6374696f6e2e2046>3.174 F .674<6f72207468657365206469676974732c2073706563696679203020746f207265 717569726520696e>-.15 F -.2<766f>-.4 G<636174696f6e>.2 E <77697468206e6f206172>144 460.8 Q <67756d656e742c203120746f2072657175697265206f6e65206172>-.18 E <67756d656e742c20616e64203220746f20616c6c6f>-.18 E 2.5<7765>-.25 G <697468657220666f726d2e>-2.5 E<53656520616c736f3a>144 477.6 Q F1 2.5 E F0<2e>A F1108 506.4 Q F0 .446<54686973 207377697463682069732075736564207768656e2061206e756d626572206f6620737562 70726f6772616d732061726520636f6e7461696e656420696e2061208c6c652c2062>144 518.4 R .446<7574206e6f7420616c6c206f66207468656d20617265>-.2 F .837 <7573656420627920746865206170706c69636174696f6e2e>144 530.4 R <4e6f726d616c6c79>5.838 E<2c>-.65 E F1<66746e6368656b>3.338 E F0 -.1 <7761>3.338 G .838<726e7320796f7520696620616e>.1 F 3.338<7973>-.15 G .838<756270726f6772616d73206172652064658c6e65642062>-3.338 F .838 <7574206e65>-.2 F -.15<7665>-.25 G<72>.15 E 2.5<757365642e2054686973>144 542.4 R<7377697463682077696c6c2073757070726573732074686573652077>2.5 E 2.5<61726e696e67732e20446566>-.1 F<61756c74203d206e6f2e>-.1 E .398<5468 69732073776974636820616c736f20636f6e74726f6c732077686963682073756270726f 6772616d2063616c6c7320616e6420434f4d4d4f4e20626c6f636b206465636c61726174 696f6e732061726520636865636b>144 559.2 R<65642e>-.1 E .472 <49662061208c6c652069732072656164207769746820746865>144 571.2 R F1 2.972 E F0 .473<8d616720696e206566>2.972 F .473<666563 742c207468652073756270726f6772616d2063616c6c7320616e6420434f4d4d4f4e2064 65636c61726174696f6e73>-.25 F .367<636f6e7461696e656420696e206120726f75 74696e6520696e2074686174208c6c652077696c6c20626520636865636b>144 583.2 R .367<6564206f6e6c79206966207468617420726f7574696e6520697320696e20746865 206d61696e2070726f6772616d27>-.1 F 2.866<7363>-.55 G<616c6c>-2.866 E 2.526<747265652e204f6e>144 595.2 R .026 <746865206f746865722068616e642c20696620746865>2.526 F F1 2.526 E F0 .026 <737769746368206973207475726e6564206f66>2.526 F .026<662c207468656e>-.25 F F1<66746e6368656b>2.526 E F0 .026 <636865636b73207468652063616c6c73206f662065>2.526 F -.15<7665>-.25 G <7279>.15 E .259<726f7574696e652062792065>144 607.2 R -.15<7665>-.25 G .259<7279206f7468657220726f7574696e652c207265>.15 F -.05<6761>-.15 G .259<72646c657373206f6620776865746865722074686f736520726f7574696e657320 636f756c642065>.05 F -.15<7665>-.25 G 2.758<7261>.15 G .258 <637475616c6c7920626520696e>-2.758 F -.2<766f>-.4 G -.1<6b65>.2 G<64>.1 E<61742072756e2074696d652c20616e64206c696b>144 619.2 Q -.25<6577>-.1 G< 69736520616c6c20434f4d4d4f4e20626c6f636b206465636c61726174696f6e73206172 6520636f6d706172656420666f722061677265656d656e742e>.25 E 1.453 <54686520646966>144 636 R 1.453 <666572656e6365206265747765656e20746869732073776974636820616e6420746865> -.25 F F13.954 E F0 1.454 <6f7074696f6e20666f722073756270726f6772616d73206973>3.954 F 2.359<746861 7420746865206c61747465722073757070726573736573206f6e6c79207468652077>144 648 R 2.358<61726e696e672061626f757420726f7574696e6573206265696e67206465 636c617265642062>-.1 F 2.358<7574206e6f7420757365642e>-.2 F<546865>7.358 E F1144 660 Q F0 .514 <73776974636820676f6573206675727468657220616e642065>3.014 F .514<78636c 7564657320756e7573656420726f7574696e65732070726f636573736564207768696c65 20697420697320696e206566>-.15 F .514<666563742066726f6d20616c6c>-.25 F <63726f73732d636865636b696e67206f66206172>144 672 Q<67756d656e747320616e 6420434f4d4d4f4e20626c6f636b206465636c61726174696f6e732061732077656c6c2e> -.18 E .492 <284966207468657265206973206e6f206d61696e2070726f6772616d20616e>144 688.8 R .492 <79776865726520696e2074686520736574206f66208c6c65732074686174>-.15 F F1 <66746e6368656b>2.991 E F0 .491 <68617320726561642c20736f2074686174207468657265206973206e6f>2.991 F .603 <63616c6c20747265652c207468656e>144 700.8 R F1<66746e6368656b>3.103 E F0 .603<77696c6c206c6f6f6b20666f7220616e>3.103 F 3.103<796e>-.15 G .604<6f 6e2d6c69627261727920726f7574696e6573207468617420617265206e6f742063616c6c 656420627920616e>-3.103 F 3.104<796f>-.15 G .604<7468657220726f752d> -3.104 F .882<74696e652c20616e642075736520746865736520617320737562737469 747574657320666f7220746865206d61696e2070726f6772616d20696e20636f6e737472 756374696e67207468652063616c6c207472656520616e64206465636964696e67>144 712.8 R .408<7768617420746f20636865636b2e>144 724.8 R .408 <4966206e6f207375636820746f702d6c65>5.408 F -.15<7665>-.25 G 2.908<6c6e> .15 G .408<6f6e2d6c69627261727920726f7574696e65732061726520666f756e642c 207468656e20616c6c20696e746572>-2.908 F .408 <2d6d6f64756c652063616c6c7320616e64>-.2 F<4e6f>273.795 768 Q -.15<7665> -.15 G<6d6265722032303034>.15 E<3138>191.795 E 0 Cg EP %%Page: 19 19 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<616c6c20434f4d4d4f4e206465636c 61726174696f6e732077696c6c20626520636865636b>144 84 Q<65642e29>-.1 E <53656520616c736f3a>144 100.8 Q/F1 10/Times-Bold@0 SF2.5 E <67756d656e7473>-.1 E F0<2c>A F12.5 E<6565>-.18 E F0<2c> A F12.5 E F0<2c>A F12.5 E<6e>-.15 E F0<2c> A F12.5 E F0<2e>A F1108 129.6 Q F0 .772 <53706563698c657320746861742061206c697374696e67206f66207468652046>144 141.6 R .772<6f727472616e2070726f6772616d20697320746f206265207072696e74 6564206f75742077697468206c696e65206e756d626572732e>-.15 F<4966>5.771 E F1<66746e6368656b>3.271 E F0 .576<6465746563747320616e206572726f72>144 153.6 R 3.076<2c74>-.4 G .576 <6865206572726f72206d65737361676520666f6c6c6f>-3.076 F .576<777320746865 2070726f6772616d206c696e65207769746820612063617265742028205e202920737065 63696679696e6720746865206c6f63612d>-.25 F .206 <74696f6e206f6620746865206572726f72>144 165.6 R 5.206<2e49>-.55 G 2.706 <666e>-5.206 G 2.706<6f73>-2.706 G .206<6f75726365206c697374696e672077> -2.706 F .206<6173207265717565737465642c>-.1 F F1<66746e6368656b>2.706 E F0 .206<77696c6c207374696c6c207072696e74206f757420616e>2.706 F 2.705 <796c>-.15 G .205<696e6520636f6e7461696e696e67>-2.705 F <616e206572726f72>144 177.6 Q 2.5<2c74>-.4 G 2.5<6f61>-2.5 G<6964207468 65207573657220696e2064657465726d696e696e6720776865726520746865206572726f 72206f636375727265642e>-2.5 E<446566>5 E<61756c74203d206e6f2e>-.1 E <53656520616c736f3a>144 194.4 Q F12.5 E F0 2.5<2c5c>C <6642ad73796d746162>-2.5 E F1 2.5<2c66>C<42ad7175696574>-2.5 E F0<2e>A F1108 223.2 Q<6564636c733d>-.1 E/F2 10/Times-Italic@0 SF <6c697374>.09 E F0 .272<507265706172652061206e6561746c792d666f726d617474 6564208c6c65206f66206465636c61726174696f6e73206f662076>144 235.2 R .273< 61726961626c65732c20636f6d6d6f6e20626c6f636b732c20616e64206e616d656c6973 74206c697374732c20666f72>-.25 F .777<706f737369626c65206d6572>144 247.2 R .777<67696e6720696e746f2074686520736f7572636520636f64652e>-.18 F .776< 546865206465636c61726174696f6e73206172652073746f72656420696e2061208c6c65 206f66207468652073616d65206e616d65206173>5.777 F .158 <74686520736f7572636520636f64652c2062>144 259.2 R .158 <75742077697468207468652065>-.2 F .158 <7874656e73696f6e206368616e67656420746f>-.15 F F2<2e64636c>2.658 E F0 5.158<2e49>.51 G 2.658<666e>-5.158 G 2.658<6f64>-2.658 G .159<65636c6172 6174696f6e7320617265207772697474656e20746f20746865208c6c652c206974> -2.658 F<69732064656c6574656420746f2072656475636520636c7574746572206672 6f6d20656d707479208c6c65732e>144 271.2 Q .657<496620696e70757420636f6d65 732066726f6d207374616e6461726420696e7075742c20696e7374656164206f66206120 6e616d6564208c6c652c207468656e206465636c61726174696f6e732061726520777269 7474656e20746f207374616e2d>144 288 R<64617264206f75747075742e>144 300 Q -1.11<5661>144 316.8 S 1.208<726961626c657320617265206465636c6172656420 696e20616c7068616265746963616c206f726465722077697468696e2065616368206465 636c61726174696f6e20636c61737320616e6420747970652c207769746820696e7465> 1.11 F<676572>-.15 E -.25<7661>144 328.8 S<726961626c6573208c7273742c20 62656361757365206f66207468656972206c6174657220706f737369626c652075736520 696e2061727261792064696d656e73696f6e732e>.25 E/F3 10/Courier@0 SF <504152414d45544552>144 345.6 Q F0 1.252 <73746174656d656e74732061726520616e2065>3.752 F 1.251<7863657074696f6e20 746f2074686520616c7068616265746963616c206f726465722072756c652c2062656361 757365207468652046>-.15 F 1.251<6f727472616e203737>-.15 F 2.53 <5374616e646172642072657175697265732074686174207468652065>144 357.6 R 2.53<787072657373696f6e732064658c6e696e6720706172616d657465722076>-.15 F 2.53<616c756573207265666572206f6e6c7920746f20636f6e7374616e747320616e64> -.25 F .661 <616c72656164792d64658c6e656420706172616d65746572206e616d65732e>144 369.6 R .661<5468697320666f7263657320746865206f726967696e616c20736f7572 6365208c6c65206f72646572206f6620737563682073746174656d656e747320746f> 5.661 F<62652070726573657276>144 381.6 Q <656420696e20746865206465636c61726174696f6e208c6c65732e>-.15 E .779 <4578706c69636974206465636c61726174696f6e206f66>144 398.4 R F2<616c6c> 3.609 E F0 -.25<7661>3.789 G .779<726961626c657320697320636f6e7369646572 656420676f6f64206d6f6465726e2070726f6772616d6d696e672070726163746963652e> .25 F .78<4279207573696e67>5.78 F 1.318<636f6d70696c6572206f7074696f6e73 20746f2072656a65637420756e6465636c617265642076>144 410.4 R 1.318 <61726961626c65732c206d69737370656c6c65642076>-.25 F 1.318 <61726961626c65206e616d657320286f72206e616d65732065>-.25 F <7874656e64696e67>-.15 E .242<7061737420636f6c756d6e203732292063616e2062 652063617567687420617420636f6d70696c652074696d652e>144 422.4 R .242<4578 706c69636974206465636c61726174696f6e7320616c736f2067726561746c792066> 5.242 F .243<6163696c6974617465206368616e672d>-.1 F .346<696e67208d6f61 74696e672d706f696e7420707265636973696f6e2077697468208c6c7465727320737563 68206173>144 434.4 R F1<64746f71>2.845 E F0<28314c292c>A F1<64746f73> 2.845 E F0<28314c292c>A F1<66643273>2.845 E F0<28314c292c>A F1<66733264> 2.845 E F0<28314c292c>A F1<71746f64>2.845 E F0<28314c292c>A<616e64>144 446.4 Q F1<73746f64>2.786 E F0 2.787<28314c292e205468657365>B .287<7072 6f6772616d73206172652063617061626c65206f66206368616e67696e67207479706573 206f662065>2.787 F .287 <78706c69636974208d6f6174696e672d706f696e742074797065206465636c612d>-.15 F .925<726174696f6e732c20696e7472696e7369632066756e6374696f6e732c20616e 6420636f6e7374616e74732c2062>144 458.4 R .924 <7574206265636175736520746865>-.2 F 3.424<7964>-.15 G 3.424<6f6e>-3.424 G .924<6f74206361727279206f7574207269676f726f7573206c65>-3.424 F .924 <786963616c20616e64>-.15 F .936 <6772616d6d61746963616c20616e616c79736973206f66207468652046>144 470.4 R .937<6f727472616e20736f7572636520636f64652c20746865>-.15 F 3.437<7963> -.15 G .937<616e6e6f742070726f>-3.437 F .937 <76696465206d6f64698c65642074797065206465636c61726174696f6e73>-.15 F <666f7220756e6465636c617265642076>144 482.4 Q 2.5 <61726961626c65732e20446566>-.25 F <61756c742073657474696e67203d20302c207475726e2d6f6e203d20312e>-.1 E -1.11<5661>144 499.2 S 1.055<72696f7573206f7074696f6e7320666f7220746865 20666f726d206f6620746865206465636c61726174696f6e73208c6c652061726520636f 6e74726f6c6c656420627920746865>1.11 F F2<6c697374>3.555 E F0 3.555<2c77> C 1.055<6869636820636f6e7369737473206f66>-3.555 F -.1<6b65>144 511.2 S <7977>-.05 E .354 <6f7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e> -.1 F .354<546865726520617265207468726565207370656369616c206b>5.354 F -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.855 E F0 .355 <746f207475726e206f6e20616c6c20746865>2.855 F<6f7074696f6e732c>144 523.2 Q F1<6e6f6e65>2.839 E F0 .339<746f207475726e207468656d20616c6c206f66> 2.839 F .339<662c20616e64>-.25 F F1<68656c70>2.839 E F0 .338 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.839 F -.15<6579>-.1 G -.1<776f>.15 G .338 <726473207769746820612062726965662065>.1 F<78706c612d>-.15 E .868 <6e6174696f6e206f6620656163682e>144 535.2 R<4966>5.868 E F2<6c697374> 3.368 E F0 .868<6973206f6d69747465642c>3.368 F F13.368 E <6564636c73>-.1 E F0 .869<69732065717569>3.369 F -.25<7661>-.25 G .869 <6c656e7420746f>.25 F F13.369 E <6564636c733d6465636c61726174696f6e73>-.1 E F0 .869 <28692e652e2070726f2d>3.369 F .803<6475636520746865206465636c6172617469 6f6e73208c6c65207573696e672074686520646566>144 547.2 R .802 <61756c74206f7074696f6e73292c20616e64>-.1 F F13.302 E <6564636c73>-.1 E F0 .802<69732065717569>3.302 F -.25<7661>-.25 G .802 <6c656e7420746f>.25 F F13.302 E<65642d>-.1 E<636c733d6e6f6e65> 144 559.2 Q F0<2e>A -.15<466f>144 576 S 5.131<7263>.15 G 2.631 <6f6d7061746962696c697479207769746820707265>-5.131 F 2.631 <76696f75732076>-.25 F 2.631<657273696f6e73206f66>-.15 F F1 <66746e6368656b>5.131 E F0 5.131<2c616e>C 2.632 <756d6572696320666f726d206f6620746869732073657474696e6720697320616c736f> -5.131 F 2.988<61636365707465643a20746865>144 588 R F2<6c697374>2.988 E F0 .488<6973207265706c616365642062792061206e756d626572207768696368206973 207468652073756d206f6620746865206e756d6265727320696e20706172656e74686573 657320626573696465>2.988 F<746865206b>144 600 Q -.15<6579>-.1 G -.1 <776f>.15 G<72647320696e2074686520666f6c6c6f>.1 E<77696e67206c6973742e> -.25 E<5468652077>5 E<61726e696e67206b>-.1 E -.15<6579>-.1 G -.1<776f> .15 G<7264732077697468207468656972206d65616e696e67732061726520617320666f 6c6c6f>.1 E<77733a>-.25 E F1<6465636c61726174696f6e73>144 616.8 Q F0 <2831293a>2.5 E .364<57726974652061206465636c61726174696f6e208c6c652e> 171.78 628.8 R .364<285468697320697320696d706c69656420627920616e>5.364 F 2.864<796f>-.15 G 2.864<6674>-2.864 G .364<6865206f74686572206f7074696f 6e732c20616e642063616e206265206f6d6974746564206966>-2.864 F<616e>171.78 640.8 Q 2.5<796f>-.15 G<74686572206f7074696f6e7320617265206769>-2.5 E -.15<7665>-.25 G<6e2e29>.15 E F1<756e6465636c6172>144 657.6 Q <6564ad6f6e6c79>-.18 E F0<2832293a>2.5 E .525<427920646566>171.78 669.6 R .525<61756c742c20616c6c2076>-.1 F .524<61726961626c65732061726520696e 636c7564656420696e20746865206465636c61726174696f6e208c6c652e>-.25 F -.4 <5769>5.524 G .524 <74682074686973206f7074696f6e2c20696e636c756465206f6e6c79>.4 F F2 <756e6465636c6172>171.86 681.6 Q<6564>-.37 E F0 -.25<7661>3.916 G 3.147 <726961626c65732e2054686973>.25 F .647 <73657474696e672069732075736566756c20696620796f752077>3.147 F .647 <616e7420746f20636865636b20666f7220756e6465636c617265642076>-.1 F <61726961626c65732c>-.25 E .881<73696e63652046>171.78 693.6 R .881 <6f727472616e20736f75726365208c6c6573207769746820616c6c2076>-.15 F .881< 61726961626c65732070726f7065726c79206465636c617265642077696c6c206e6f7420 726573756c7420696e2061>-.25 F F2<2e64636c>3.61 E F0<8c6c652e>3.89 E -.4 <5769>171.78 705.6 S .636<74682074686973206f7074696f6e2c20636f6d6d6f6e20 626c6f636b7320616e64206e616d656c697374206c697374732077696c6c206e6f742062 6520696e636c7564656420696e20746865206465636c61726174696f6e>.4 F <8c6c652c2073696e6365206279207468656972206e617475726520746865>171.78 717.6 Q 2.5<7963>-.15 G<616e6e6f7420626520756e6465636c617265642e>-2.5 E <4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3139> 191.795 E 0 Cg EP %%Page: 20 20 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <636f6d70616374>144 84 Q F0<2834293a>2.5 E .332<546865206465636c61726174 696f6e7320617265206e6f726d616c6c79207072657474797072696e74656420746f206c 696e65207570206e6561746c7920696e20636f6d6d6f6e20636f6c756d6e732c20617320 696e20746865>171.78 96 R 2.048<6465636c61726174696f6e208c6c6573206f7574 7075742062792074686520457874656e6465642050464f52>171.78 108 R 4.548 <5456>-.6 G<6572698c6572>-5.658 E<2c>-.4 E F1<7066>4.548 E<6f7274>-.25 E F0 4.548<28314c292e2054686973>B 2.049<6f7074696f6e2076>4.549 F<616c7565> -.25 E<73656c6563747320696e737465616420636f6d70616374206f75747075742c20 776974686f757420636f6c756d6e20616c69676e6d656e742e>171.78 120 Q F1 <757365ad636f6e74696e756174696f6ead6c696e6573>144 136.8 Q F0<2838293a> 2.5 E .308<43617573657320636f6e74696e756174696f6e206c696e657320746f2062 652075736564207768657265207065726d69737369626c652e>171.78 148.8 R .307 <54686520646566>5.307 F .307<61756c7420697320746f206265>-.1 F .307 <67696e2061206e65>-.15 F 2.807<7764>-.25 G<65632d>-2.807 E <6c61726174696f6e206f6e2065616368206c696e652e>171.78 160.8 Q<5468697320 6f7074696f6e20697320617070726f70726961746520746f2075736520746f6765746865 722077697468>5 E F1<636f6d70616374>2.5 E F0<2e>A F1 -.1<6b65>144 177.6 S <7977>.1 E<6f726473ad6c6f>-.1 E<776572>-.1 E<63617365>-.18 E F0 <283136293a>2.5 E<4f75747075742046>171.78 189.6 Q<6f727472616e206b>-.15 E -.15<6579>-.1 G -.1<776f>.15 G<72647320696e206c6f>.1 E <776572636173652c20696e7374656164206f662074686520646566>-.25 E <61756c74207570706572636173652e>-.1 E F1 -.1<7661>144 206.4 S <7273ad616e64ad636f6e737473ad6c6f>.1 E<776572>-.1 E<63617365>-.18 E F0 <283332293a>2.5 E 1.138<4f75747075742076>171.78 218.4 R 1.138 <61726961626c657320616e6420636f6e7374616e747320696e206c6f>-.25 F 1.138 <776572636173652c20696e7374656164206f662074686520646566>-.25 F 1.139 <61756c74207570706572636173652e>-.1 F<436861726163746572>8.639 E <737472696e6720636f6e7374616e747320617265206e6f74206166>171.78 230.4 Q <6665637465642062792074686973206f7074696f6e2e>-.25 E F1 <6578636c756465ad73667472616e33>144 247.2 Q F0<283634293a>2.5 E 1.603 <4f6d6974206465636c61726174696f6e73206f6620696e7465726e616c20696e7465> 171.78 259.2 R 1.603<6765722076>-.15 F 1.603<61726961626c65732070726f64 75636564206279207468652053465452414e332070726570726f636573736f72>-.25 F <2c>-.4 E F1<78736633>171.78 271.2 Q F0 1.733<28314c292c2061732070617274 206f6620746865207472616e736c6174696f6e206f6620737472756374757265642046>B 1.734<6f727472616e2073746174656d656e747320746f206f7264696e6172792046> -.15 F<6f727472616e2e>-.15 E 2.063<54686573652076>171.78 283.2 R 2.063 <61726961626c6573206861>-.25 F 2.363 -.15<76652073>-.2 H 2.063 <69782d636861726163746572206e616d6573206f662074686520666f726d>.15 F/F2 10/Times-Italic@0 SF<4e5052646464>4.563 E F0<2c>.77 E F2<4e5864646464> 4.562 E F0<2c>.77 E F2<4e3264646464>4.562 E F0 4.562<2c61>.77 G<6e64> -4.562 E F2<4e3364646464>171.78 295.2 Q F0 3.609<2c77>.77 G<68657265> -3.609 E F2<64>3.959 E F0 1.109<6973206120646563696d616c2064696769742e> 4.379 F 1.109<4265636175736520746865>6.109 F 3.609<7961>-.15 G 1.109 <726520696e>-3.609 F 1.11 <76697369626c6520696e207468652053465452414e3320736f75726365>-.4 F 1.798< 636f64652c20616e642077696c6c206368616e6765206966207468652053465452414e33 20636f6465206973206d6f64698c65642c20737563682076>171.78 307.2 R 1.797 <61726961626c65732073686f756c64206e6f74206265>-.25 F -.15<6578>171.78 319.2 S 1.509<706c696369746c79206465636c617265642e>.15 F 1.509 <496e73746561642c20746865>6.509 F 4.009<7973>-.15 G 1.509 <686f756c64206a75737420617373756d652074686520646566>-4.009 F 1.509 <61756c742046>-.1 F 1.509<6f727472616e20494e54454745522064617461>-.15 F <74797065206261736564206f6e20746865697220696e697469616c206c6574746572> 171.78 331.2 Q<2c>-.4 E F2<4e>2.5 E F0<2e>1.1 E F1 <617374657269736bad636f6d6d656e74>144 348 Q F0<28313238293a>2.5 E<557365 20616e20617374657269736b2061732074686520636f6d6d656e74206368617261637465 723b2074686520646566>171.78 360 Q <61756c74206973206f7468657277697365202743272e>-.1 E F1 <636f6d6d656e74ad63686172ad6c6f>144 376.8 Q<776572>-.1 E<63617365>-.18 E F0<28323536293a>2.5 E<5573652027632720696e7374656164206f6620274327206f72 20272a272061732074686520636f6d6d656e7420636861726163746572>171.78 388.8 Q<2e>-.55 E F1<7375707072>144 405.6 Q <657373ad6172726179ad64696d656e73696f6e73>-.18 E F0<28353132293a>2.5 E .572<53757070726573732064696d656e73696f6e696e67206f66206172726179732069 6e207468652067656e657261746564206465636c61726174696f6e732e>171.78 417.6 R .571<54686973206f7074696f6e20697320666f72207573652077697468>5.571 F .656<636f6465206c61636b696e672074797065206465636c61726174696f6e732c2074 6f20616c6c6f>171.78 429.6 R 3.156<7774>-.25 G .656<6865206465636c617261 74696f6e208c6c657320746f20626520696e73657274656420776974686f757420636861 6e6765>-3.156 F 1.443<696e746f2074686520636f64652e>171.78 441.6 R 1.443 <53696e63652074686520636f64652077696c6c206861>6.443 F 1.742 -.15 <76652064>-.2 H 1.442 <696d656e73696f6e2073746174656d656e747320616c7265616479>.15 F 3.942 <2c64>-.65 G 1.442<696d656e73696f6e696e6720746865>-3.942 F 2.086 <61727261792076>171.78 453.6 R 2.087<61726961626c657320696e207468652074 7970652073746174656d656e7473206f6620746865206465636c61726174696f6e208c6c 6520697320726564756e64616e742e>-.25 F 2.087<54686973206f7074696f6e>7.087 F .363<73686f756c642062652075736564206f6e6c7920696e20636f6e6a756e637469 6f6e2077697468206f7074696f6e2032203d20756e6465636c617265642d6f6e6c792062 656361757365206f746865727769736520616e>171.78 465.6 R<79>-.15 E<61727261 7973207468617420776572652064696d656e73696f6e656420696e206120747970652073 746174656d656e742077696c6c206c6f73652074686569722064696d656e73696f6e696e 672e>171.78 477.6 Q F1<6672>144 494.4 Q<6565ad66>-.18 E<6f726d>-.25 E F0 <2831303234293a>2.5 E 1.726<50726f64756365206465636c61726174696f6e732069 6e206672656520736f7572636520666f726d2e>171.78 506.4 R 1.726<54686973206d 6f6465206973206175746f6d61746963616c6c7920757365642069662074686520696e70 7574>6.726 F .136<736f75726365206973206672656520666f726d2e>171.78 518.4 R .135<5573652074686973206f7074696f6e20746f2070726f64756365206465636c61 726174696f6e7320696e206672656520666f726d2065>5.136 F -.15<7665>-.25 G 2.635<6e69>.15 G 2.635<6674>-2.635 G .135<686520696e707574206973>-2.635 F 1.339<696e208c78>171.78 530.4 R 1.339<656420666f726d2e>-.15 F 1.339<46 72656520666f726d206465636c61726174696f6e732061726520696e64656e746564206f 6e6c79203220636f6c756d6e7320696e7374656164206f6620362c2075736520746865> 6.339 F -.15<6578>171.78 542.4 S .824<636c616d6174696f6e206d61726b206173 2074686520636f6d6d656e7420636861726163746572>.15 F 3.323<2c61>-.4 G .823 <6e6420696e64696361746520636f6e74696e756174696f6e206c696e65732062792061 6e20616d706572>-3.323 F<2d>-.2 E<73616e642061742074686520656e64206f6620 746865206c696e6520746f20626520636f6e74696e7565642e>171.78 554.4 Q .739< 546865206465636c61726174696f6e208c6c657320636f6e7461696e2064697374696e63 7469>144 571.2 R 1.039 -.15<76652063>-.25 H .739<6f6d6d656e747320746861 74206d61726b2074686520737461727420616e6420656e64206f66206465636c61726174 696f6e7320666f72>.15 F .322 <656163682070726f6772616d20756e69742c20746f2066>144 583.2 R .322 <6163696c6974617465207573696e67207465>-.1 F .322 <787420656469746f72206d6163726f7320666f72206d6572>-.15 F .322 <67696e6720746865206465636c61726174696f6e73206261636b20696e746f20746865> -.18 F<736f7572636520636f64652e>144 595.2 Q<546865>144 612 Q F1 <66746e6368656b>2.604 E F0<64697374726962>2.604 E .104 <7574696f6e20696e636c7564657320612070726f6772616d2c>-.2 F F1 <64636c32696e63>2.604 E F0 2.604<2c77>C .104<686963682070726f6365737365 73206465636c61726174696f6e208c6c657320746f2070726f64756365>-2.604 F 1.484<8c6c657320636f6e7461696e696e67206465636c61726174696f6e73206f662061 6c6c20434f4d4d4f4e20626c6f636b732c20696e206120666f726d207375697461626c65 20666f722075736520617320494e434c554445>144 624 R 2.5<8c6c65732e20536565> 144 636 R<746865>2.5 E F1<64636c32696e63>2.5 E F0<28314c29206d616e207061 676520666f72207468652064657461696c73206f6620697473207573652e>A <53656520616c736f3a>144 652.8 Q F12.5 E F0<2e>A F1 108 681.6 Q F2<6c697374>.09 E F0 .27<50726f6475636520 48544d4c20646f63756d656e746174696f6e2066726f6d20736f757263652e2043726561 74657320696e6469>144 693.6 R .27<76696475616c2048544d4c208c6c6573206672 6f6d2066746e6368656b20616e616c79736973>-.25 F .687<616e6420636f64652063 6f6d6d656e74732e20416c6c20636f6d6d656e747320696d6d6564696174656c79207072 65636564696e6720616e6420666f6c6c6f>144 705.6 R .686 <77696e67207468652066756e6374696f6e206f7220737562726f752d>-.25 F .81<74 696e652064658c6e6974696f6e2061726520636170747572656420746f20746865204854 4d4c208c6c652e204e6f207265666f726d617474696e67206f6620736f7572636520636f 6d6d656e747320697320706572666f726d6564>144 717.6 R .415 <6f74686572207468616e20737472697070696e67206f6620464f52>144 729.6 R .414 <5452414e20636f6d6d656e7420636861726163746572732e>-.6 F .414<496e206164 646974696f6e2c207468652048544d4c208c6c65206c6973747320746865206c6f63616c> 5.414 F<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3230>191.795 E 0 Cg EP %%Page: 21 21 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E -.25<7661>144 84 S .13 <726961626c6573206465636c617265642c20636f6d6d6f6e20626c6f636b2076>.25 F .131<61726961626c657320757365642c2066756e6374696f6e7320616e642073756272 6f7574696e65732063616c6c65642c20492f4f20756e69742075736167652c>-.25 F .075<616e64206f7468657220696e666f726d6174696f6e2061626f7574206561636820 73756270726f6772616d2e>144 96 R .075 <557375616c6c7920796f752077696c6c20616c736f2077>5.075 F .075 <616e7420746f2073706563696679>-.1 F/F1 10/Times-Bold@0 SF 2.575 E<6565>-.18 E F0<746f>2.575 E 6.109 <6372656174652074686520726f6f742048544d4c208c6c65>144 108 R/F2 10 /Courier@0 SF<43616c6c547265652e68746d6c>8.609 E F0 11.109<2e28>C 6.109 <506572686170732074686973208c6c652073686f756c64206265206e616d6564> -11.109 F F2<696e6465782e68746d6c>144 120 Q F0<2e29>A -1.11<5661>144 136.8 S 2.061<72696f7573206f7074696f6e7320666f722074686520666f726d206f66 207468652048544d4c208c6c65732061726520636f6e74726f6c6c656420627920746865> 1.11 F/F3 10/Times-Italic@0 SF<6c697374>4.561 E F0 4.561<2c77>C 2.061 <6869636820636f6e7369737473206f66>-4.561 F -.1<6b65>144 148.8 S<7977> -.05 E .354 <6f7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e> -.1 F .354<546865726520617265207468726565207370656369616c206b>5.354 F -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.855 E F0 .355 <746f207475726e206f6e20616c6c20746865>2.855 F<6f7074696f6e732c>144 160.8 Q F1<6e6f6e65>2.839 E F0 .339<746f207475726e207468656d20616c6c206f66> 2.839 F .339<662c20616e64>-.25 F F1<68656c70>2.839 E F0 .338 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.839 F -.15<6579>-.1 G -.1<776f>.15 G .338 <726473207769746820612062726965662065>.1 F<78706c612d>-.15 E 1.066 <6e6174696f6e206f6620656163682e>144 172.8 R<4966>6.067 E F3<6c697374> 3.567 E F0 1.067<6973206f6d69747465642c>3.567 F F13.567 E F0 1.067<69732065717569>3.567 F -.25<7661>-.25 G 1.067<6c656e7420746f> .25 F F13.567 E F0 1.067 <28692e652e2070726f64756365>3.567 F 4.034<7468652048544d4c20646f63756d65 6e74208c6c6573207573696e672074686520646566>144 184.8 R 4.034 <61756c74206f7074696f6e73292c20616e64>-.1 F F1 6.534 E F0 4.034<69732065717569>6.534 F -.25<7661>-.25 G 4.034 <6c656e7420746f>.25 F F1144 196.8 Q F0<2e>A -.15<466f>144 213.6 S 3.226<7274>.15 G .726<68652073616b>-3.226 F 3.227 <656f>-.1 G 3.227<6673>-3.227 G<696d706c6963697479>-3.227 E 3.227<2c74> -.65 G .727<6865206f7074696f6e7320666f72>-3.227 F F1 3.227 E F0 .727<617265207468652073616d652061732074686f736520666f72>3.227 F F13.227 E<6564636c73>-.1 E F0 -.15<6578>3.227 G<63657074>.15 E .836<666f722074686f736520746861742061726520696e6170706c696361626c652e> 144 225.6 R<4c696b>5.836 E -.25<6577>-.1 G 3.336<6973652c2061>.25 F .835 <6e756d6572696320666f726d206f6620746869732073657474696e672063616e206265 20757365642c20666f726d6564206173>3.336 F .567<7468652073756d206f66207468 65206e756d6265727320696e20706172656e74686573657320696e20746865206c697374 2062656c6f>144 237.6 R 4.367 -.65<772e2054>-.25 H .567<68652077>.65 F .567<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1<776f>.15 G .567 <7264732077697468207468656972206d65616e2d>.1 F <696e67732061726520617320666f6c6c6f>144 249.6 Q<77733a>-.25 E F1 <646f63756d656e7473>144 266.4 Q F0<2831293a>2.5 E 1.487 <437265617465207468652048544d4c20646f63756d656e74732e>171.78 278.4 R 1.487<285468697320697320696d706c69656420627920616e>6.487 F 3.987<796f> -.15 G 3.987<6674>-3.987 G 1.486 <6865206f74686572206f7074696f6e732c20616e642063616e206265>-3.987 F <6f6d697474656420696620616e>171.78 290.4 Q 2.5<796f>-.15 G <74686572206f7074696f6e7320617265206769>-2.5 E -.15<7665>-.25 G<6e2e29> .15 E F1<636f6d70616374>144 307.2 Q F0<2834293a>2.5 E 1.475<546865206465 636c61726174696f6e7320617265206e6f726d616c6c79207072657474797072696e7465 6420746f206c696e65207570206e6561746c7920696e20636f6d6d6f6e20636f6c756d6e 732e>171.78 319.2 R<54686973>6.475 E<6f7074696f6e2076>171.78 331.2 Q<61 6c75652073656c6563747320696e737465616420636f6d70616374206f75747075742c20 776974686f757420636f6c756d6e20616c69676e6d656e742e>-.25 E F1 <757365ad636f6e74696e756174696f6ead6c696e6573>144 348 Q F0<2838293a>2.5 E .917<43617573657320636f6e74696e756174696f6e206c696e657320746f20626520 7573656420696e7374656164206f66206265>171.78 360 R .917 <67696e6e696e672061206e65>-.15 F 3.417<7764>-.25 G .917 <65636c61726174696f6e206f6e2065616368206c696e652e>-3.417 F<54686973206f 7074696f6e20697320617070726f70726961746520746f2075736520746f676574686572 2077697468>171.78 372 Q F1<636f6d70616374>2.5 E F0<2e>A F1 -.1<6b65>144 388.8 S<7977>.1 E<6f726473ad6c6f>-.1 E<776572>-.1 E<63617365>-.18 E F0 <283136293a>2.5 E<4f75747075742046>171.78 400.8 Q<6f727472616e206b>-.15 E -.15<6579>-.1 G -.1<776f>.15 G<72647320696e206c6f>.1 E <776572636173652c20696e7374656164206f662074686520646566>-.25 E <61756c74207570706572636173652e>-.1 E F1 -.1<7661>144 417.6 S <7273ad616e64ad636f6e737473ad6c6f>.1 E<776572>-.1 E<63617365>-.18 E F0 <283332293a>2.5 E 1.138<4f75747075742076>171.78 429.6 R 1.138 <61726961626c657320616e6420636f6e7374616e747320696e206c6f>-.25 F 1.138 <776572636173652c20696e7374656164206f662074686520646566>-.25 F 1.139 <61756c74207570706572636173652e>-.1 F<436861726163746572>8.639 E <737472696e6720636f6e7374616e747320617265206e6f74206166>171.78 441.6 Q <6665637465642062792074686973206f7074696f6e2e>-.25 E F1 <6578636c756465ad73667472616e33>144 458.4 Q F0<283634293a>2.5 E 1.603 <4f6d6974206465636c61726174696f6e73206f6620696e7465726e616c20696e7465> 171.78 470.4 R 1.603<6765722076>-.15 F 1.603<61726961626c65732070726f64 75636564206279207468652053465452414e332070726570726f636573736f72>-.25 F <2c>-.4 E F1<78736633>171.78 482.4 Q F0 2.5<28314c292e2028536565>B F1 2.5 E<6564636c73>-.1 E F0<666f722064697363757373696f6e2e29>2.5 E F1<7375707072>144 499.2 Q<657373ad6172726179ad64696d656e73696f6e73> -.18 E F0<28353132293a>2.5 E 1.098<53757070726573732064696d656e73696f6e 696e67206f662061727261797320696e207468652067656e657261746564206465636c61 726174696f6e732e>171.78 511.2 R 1.099 <54686973206973206e6f726d616c6c7920756e6465736972>6.098 F<2d>-.2 E .532 <61626c652c2062>171.78 523.2 R .532<75742069732061>-.2 F -.25<7661>-.2 G .531<696c61626c6520696620666f7220736f6d6520726561736f6e20796f7520646f20 6e6f742077>.25 F .531<616e74207468652061727261792064696d656e73696f6e7320 746f2061707065617220696e>-.1 F<7468652048544d4c2e>171.78 535.2 Q F1 <6672>144 552 Q<6565ad66>-.18 E<6f726d>-.25 E F0<2831303234293a>2.5 E .849<50726f647563652076>171.78 564 R .849<61726961626c65206465636c617261 74696f6e7320696e206672656520736f7572636520666f726d2e>-.25 F .849<546869 73206d6f6465206973206175746f6d61746963616c6c79207573656420696620746865> 5.849 F 1.412<696e70757420736f75726365206973206672656520666f726d2e> 171.78 576 R 1.412<54686973206d61696e6c79206166>6.412 F 1.412<6665637473 2074686520666f726d206f6620636f6e74696e756174696f6e206c696e65732069662074 6865>-.25 F 3.912<7961>-.15 G<7265>-3.912 E<757365642e>171.78 588 Q <53656520616c736f3a>144 604.8 Q F12.5 E<6565>-.18 E F0 <2c>A F12.5 E<6564636c73>-.1 E F0<2e>A F1108 633.6 Q <76696365>-.1 E F0 <54686973208d616720697320696e74656e64656420746f2070726f>144 645.6 Q <76696465206d6f72652068656c7066756c206f757470757420666f72206265>-.15 E 2.5<67696e6e6572732e204974>-.15 F<686173207477>2.5 E 2.5<6f65>-.1 G -.25 <6666>-2.5 G<656374733a>.25 E 3.9<2861292070726f>144 662.4 R .765 <766964657320616e2065>-.15 F .765 <78747261206d65737361676520746f20746865206566>-.15 F .766 <66656374207468617420612066756e6374696f6e207468617420697320757365642062> -.25 F .766<7574206e6f742064658c6e656420616e>-.2 F<797768657265>-.15 E .228<6d6967687420626520616e20617272617920776869636820746865207573657220 666f72>161.5 674.4 R .227<676f7420746f206465636c61726520696e2061>-.18 F F2<44494d454e53494f4e>2.727 E F0 .227 <73746174656d656e74202873696e6365207468652073796e2d>2.727 F<746178206f66 20616e206172726179207265666572656e6365206973207468652073616d652061732074 686174206f6620612066756e6374696f6e207265666572656e6365292e>161.5 686.4 Q 3.34<286229206d6f64698c6573>144 703.2 R .328<74686520666f726d206f662074 6865206572726f72206d6573736167657320616e642077>2.828 F 2.828 <61726e696e67732e204966>-.1 F .328 <746865208d6167206973207475726e6564206f66>2.828 F 2.829<6662>-.25 G<79> -2.829 E F12.829 E<76696365>-.1 E F0<2c>A<7468657365206d6573 736167657320617265207072696e74656420696e2061207374796c65206d6f7265207265 73656d626c696e6720554e4958>161.5 715.2 Q F1<6c696e74>2.5 E F0<2e>A<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3231>191.795 E 0 Cg EP %%Page: 22 22 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<446566>144 84 Q <61756c74203d207965732e>-.1 E/F1 10/Times-Bold@0 SF108 112.8 Q/F2 10/Times-Italic@0 SF<8c6c656e616d65>1.91 E F0 .337 <546869732073657474696e672069732070726f>144 124.8 R .337 <766964656420666f7220636f6e>-.15 F -.15<7665>-.4 G .337 <6e69656e6365206f6e2073797374656d7320776869636820646f206e6f7420616c6c6f> .15 F 2.836<7765>-.25 G .336 <617379207265646972656374696f6e206f66206f7574707574>-2.836 F .54 <66726f6d2070726f6772616d732e>144 136.8 R .54 <5768656e20746869732073657474696e67206973206769>5.54 F -.15<7665>-.25 G .541<6e2c20746865206f7574707574207768696368206e6f726d616c6c792061707065 617273206f6e207468652073637265656e2077696c6c>.15 F .341 <62652073656e7420696e737465616420746f20746865206e616d6564208c6c652e>144 148.8 R .341<4e6f74652c20686f>5.341 F<7765>-.25 E -.15<7665>-.25 G 1.141 -.4<722c2074>.15 H .34 <686174206f7065726174696f6e616c206572726f7273206f66>.4 F F1 <66746e6368656b>2.84 E F0 .34<697473656c662028652e672e206f7574>2.84 F 1.363<6f66207370616365206f722063616e6e6f74206f70656e208c6c65292077696c6c 207374696c6c2062652073656e7420746f207468652073637265656e2e>144 160.8 R 1.364<5468652065>6.364 F 1.364 <7874656e73696f6e20666f7220746865208c6c656e616d65206973>-.15 F <6f7074696f6e616c2c20616e64206966206e6f2065>144 172.8 Q <7874656e73696f6e206973206769>-.15 E -.15<7665>-.25 G<6e2c207468652065> .15 E<7874656e73696f6e>-.15 E F2 1.666<2e6c>2.5 G<6973>-1.666 E F0 <77696c6c20626520757365642e>2.5 E F1108 201.6 Q F2<6e756d>.36 E F0 <53706563698c6573207468652073697a65206f6620612060>144 213.6 Q <604372617920706f696e74657227>-.74 E 2.5<2776>-.74 G <61726961626c6520746f206265>-2.75 E F2<6e756d>2.5 E F0 2.5 <62797465732e20446566>2.5 F <61756c74203d207475726e2d6f6e203d20342062797465732e>-.1 E 1.222<54686520 706f696e7465722073697a65206973207573656420746f20696e666f726d207072656369 73696f6e206d69736d617463682077>144 230.4 R 1.221<61726e696e677320696e> -.1 F -.2<766f>-.4 G 1.221<6c76696e6720706f696e7465722076>.2 F 1.221 <61726961626c65732c20666f72>-.25 F -.15<6578>144 242.4 S .387<616d706c65 207768656e206120706f696e7465722069732061737369676e656420612076>.15 F .388<616c75652066726f6d20616e20616c6c6f636174696f6e20726f7574696e652c20 6f722070617373656420617320612073756270726f6772616d>-.25 F <706172616d65746572>144 254.4 Q<2e>-.55 E<53656520616c736f3a>144 271.2 Q F12.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E<6f726473697a65>-.1 E F0<2e>A F1108 300 Q F2<6c697374>.09 E F1 <66746e6368656b>144 312 Q F0 .251<77696c6c206769>2.751 F .551 -.15 <76652077>-.25 H .251<61726e696e677320666f7220612076>.05 F .251 <617269657479206f66206e6f6e2d706f727461626c65207573616765732e>-.25 F .25 <4578616d706c657320696e636c7564652074686520757365206f662074616273>5.251 F -.15<6578>144 324 S .223<6365707420696e20636f6d6d656e7473206f7220696e 7369646520737472696e67732c2074686520757365206f6620486f6c6c65726974682063 6f6e7374616e74732c20616e64207468652065717569>.15 F -.25<7661>-.25 G .223 <6c656e63696e67206f662076>.25 F<6172692d>-.25 E .786 <61626c6573206f6620646966>144 336 R .786 <666572656e7420646174612074797065732e>-.25 F .786 <54686973206f7074696f6e20646f6573206e6f742070726f647563652077>5.786 F .785<61726e696e677320666f7220737570706f727465642065>-.1 F .785 <7874656e73696f6e7320746f>-.15 F .364<7468652046>144 348 R .364<6f727472 616e203737205374616e646172642c207768696368206d617920616c736f206361757365 20706f72746162696c6974792070726f626c656d732e>-.15 F 1.965 -.8<546f2063> 5.365 H .365<617463682074686f73652c2075736520746865>.8 F F1 2.865 E F0 2.5<73657474696e672e204279>144 360 R<646566>2.5 E <61756c742c20616c6c2077>-.1 E <61726e696e677320617265207475726e6564206f66>-.1 E<662e>-.25 E .549 <546869732073657474696e672070726f>144 376.8 R .549 <76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 3.048<7274>.15 G .548<68652077>-3.048 F .548<61726e696e67732061626f75 7420706f737369626c6520706f72746162696c6974792070726f626c656d732e>-.1 F <546865>5.548 E F2<6c697374>144 388.8 Q F0 .284 <636f6e7369737473206f66206b>2.784 F -.15<6579>-.1 G -.1<776f>.15 G .285 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .285<546865726520617265207468726565207370656369616c206b>5.285 F -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>2.785 E F0<746f>2.785 E .385<7475726e206f6e20616c6c207468652077>144 400.8 R .385 <61726e696e67732061626f7574206e6f6e706f727461626c65207573616765732c>-.1 F F1<6e6f6e65>2.885 E F0 .385<746f207475726e207468656d20616c6c206f66> 2.885 F .385<662c20616e64>-.25 F F1<68656c70>2.885 E F0 .385 <746f207072696e7420746865>2.885 F .651 <6c697374206f6620616c6c20746865206b>144 412.8 R -.15<6579>-.1 G -.1 <776f>.15 G .652<726473207769746820612062726965662065>.1 F .652 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.652 E F2<6c697374> 3.152 E F0 .652<6973206f6d69747465642c>3.152 F F1 3.152 E F0 .652<69732065717569>3.152 F<762d> -.25 E 1.115<616c656e7420746f>144 424.8 R F1 3.615 E F0 3.615<2c61>C<6e64>-3.615 E F13.615 E F0 1.115<69732065717569>3.615 F -.25<7661>-.25 G 1.115<6c656e7420746f>.25 F F1 3.615 E F0 6.115<2e54>C 1.115 <68652077>-6.115 F<61726e696e67>-.1 E -.1<6b65>144 436.8 S<7977>-.05 E< 6f7264732077697468207468656972206d65616e696e67732061726520617320666f6c6c 6f>-.1 E<77733a>-.25 E F1<6261636b736c617368>144 453.6 Q F0<3a>A .206 <4261636b736c6173682063686172616374657220696e20737472696e67732e>171.78 465.6 R .206<53696e636520736f6d6520636f6d70696c657273207472656174207468 65206261636b736c61736820617320616e206573636170652063686172>5.206 F<2d> -.2 E<6163746572>171.78 477.6 Q 2.688<2c69>-.4 G .188 <74732070726573656e63652063616e2063617573652070726f626c656d732065>-2.688 F -.15<7665>-.25 G 2.688<6e74>.15 G .188<686f75676820697420697320757365 6420696e2061207374616e646172642d636f6e666f726d696e672077>-2.688 F<6179> -.1 E<2e>-.65 E F1<636f6d6d6f6ead616c69676e6d656e74>144 494.4 Q F0<3a>A 2.719<434f4d4d4f4e20626c6f636b2076>171.78 506.4 R 2.719<61726961626c6573 206e6f7420696e2064657363656e64696e67206f72646572206f662073746f7261676520 73697a652e>-.25 F 2.72<536f6d6520636f6d70696c657273>7.719 F<726571756972 652074686973206f72646572696e672062656361757365206f662073746f726167652061 6c69676e6d656e7420726571756972656d656e74732e>171.78 518.4 Q F1 <686f6c6c6572697468>144 535.2 Q F0<3a>A .472<486f6c6c657269746820636f6e 7374616e747320286f74686572207468616e2077697468696e20464f524d41>171.78 547.2 R 2.972<5473>-1.11 G 2.972<706563698c636174696f6e73292e20546865> -2.972 F .471<486f6c6c657269746820646174612074797065206973>2.972 F 2.728 <6166>171.78 559.2 S .228<656174757265206f662046>-2.728 F .228<6f727472 616e204956207468617420686173206265656e2064656c6574656420696e207468652046> -.15 F .228<6f727472616e203737207374616e646172642e>-.15 F .229 <49742069732073757065727365646564206279>5.229 F .144 <74686520636861726163746572206461746120747970652e>171.78 571.2 R .144 <53746f72696e6720486f6c6c6572697468206461746120696e2076>5.144 F .144<61 726961626c6573206f662061206e756d65726963206f72206c6f676963616c2064617461 2074797065>-.25 F<6973206e6f6e706f727461626c652064756520746f20646966> 171.78 583.2 Q<666572696e672077>-.25 E<6f72642073697a65732e>-.1 E F1 <6c6f6e67ad737472696e67>144 600 Q F0<3a>A <537472696e6720636f6e7374616e74732c2076>171.78 612 Q <61726961626c65732c206f722065>-.25 E<787072657373696f6e73206f>-.15 E -.15<7665>-.15 G 2.5<7232>.15 G<3535206368617273206c6f6e672e>-2.5 E F1 <6d69786564ad65717569>144 628.8 Q -.1<7661>-.1 G<6c656e6365>.1 E F0<3a>A -1.11<5661>171.78 640.8 S<726961626c6573206f6620646966>1.11 E <666572656e7420646174612074797065732065717569>-.25 E -.25<7661>-.25 G <6c656e6365642e>.25 E F1<6d69786564ad73697a65>144 657.6 Q F0<3a>A -1.11 <5661>171.78 669.6 S 1.541 <726961626c6573206465636c61726564207769746820646566>1.11 F 1.542 <61756c7420707265636973696f6e207573656420776974682076>-.1 F 1.542 <61726961626c6573206769>-.25 F -.15<7665>-.25 G 4.042<6e65>.15 G 1.542 <78706c6963697420707265636973696f6e2c20696e>-4.192 F -.15<6578>171.78 681.6 S .334 <7072657373696f6e732c2061737369676e6d656e74732c206f72206173206172>.15 F 2.833<67756d656e74732e2046>-.18 F .333<6f722065>-.15 F .333 <78616d706c652c20696620612076>-.15 F .333 <61726961626c65206465636c61726564206173>-.25 F/F3 10/Courier@0 SF <5245414c2a38>2.833 E F0<697320747265617465642061732065717569>171.78 693.6 Q -.25<7661>-.25 G<6c656e7420746f>.25 E F3 <444f55424c4520505245434953494f4e>2.5 E F0<2e>A<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3232>191.795 E 0 Cg EP %%Page: 23 23 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF -.18 <7265>144 84 S<616cad646f>.18 E F0<3a>A<4e6f6e2d696e7465>171.78 96 Q .335<67657220444f206c6f6f7020696e6465>-.15 F 2.835<7861>-.15 G .336 <6e6420626f756e64732e>-2.835 F .336 <54686573652063616e20636175736520612070726f6772616d27>5.336 F 2.836 <7372>-.55 G .336<6573756c747320746f20646570656e64206f6e>-2.836 F <746865206861726477>171.78 108 Q<61726520636861726163746572697374696373 206f662074686520706172746963756c617220636f6d707574657220757365642e>-.1 E F1<706172616dad696d706c69636974ad74797065>144 124.8 Q F0<3a>A .68<496d70 6c6963697420747970696e67206f66206120706172616d65746572206279207468652064 6174612074797065206f66207468652076>171.78 136.8 R .68 <616c75652061737369676e65642c20696620697420646966>-.25 F .68 <666572732066726f6d20746865>-.25 F<646566>171.78 148.8 Q .605 <61756c7420747970652e>-.1 F .605<546869732077>5.605 F .606<61726e696e67 2063616e206f6e6c79206f6363757220696620696d706c6963697420706172616d657465 7220747970696e6720686173206265656e207475726e6564206f6e>-.1 F 1.31 <627920746865>171.78 160.8 R F13.809 E <63653d706172616dad696d706c69636974ad74797065>-.18 E F0 1.309 <6f7074696f6e2c206f7220696620746865>3.809 F/F2 10/Courier@0 SF <504152414d45544552>3.809 E F0 1.309 <73746174656d656e74206973206f6620746865>3.809 F .092<6e6f6e7374616e6461 726420666f726d20776974686f757420706172656e7468657365732e>171.78 172.8 R .092<49662074686973206f7074696f6e206973207475726e6564206f6e2c207468656e 20616e>5.092 F 2.593<7969>-.15 G .093<6e7374616e636573207768657265> -2.593 F 1.027<696d706c6963697420706172616d6574657220747970696e67206f63 6375727320616e642077686572652074686520696d706c69636974207479706520697320 646966>171.78 184.8 R 1.027<666572656e742066726f6d2074686520646566>-.25 F<61756c74>-.1 E .115<74797065206261736564206f6e20746865208c727374206c65 74746572206f662074686520706172616d65746572206e616d652c2077696c6c20626520 77>171.78 196.8 R .116<61726e65642061626f75742e>-.1 F .116 <496d706c6963697420706172616d652d>5.116 F 1.578<74657220747970696e672063 616e206368616e6765207468652073656d616e74696373206f662073746174656d656e74 732077686572652074686520706172616d6574657220697320757365642c206361757369 6e67>171.78 208.8 R<706f72746162696c6974792070726f626c656d732e>171.78 220.8 Q F1<746162>144 237.6 Q F0 11.11<3a54>C .551 <61627320696e20736f7572636520636f64652e>-11.91 F -.8<5461>5.551 G .552 <62732061726520696e74657270726574656420646966>.8 F .552 <666572656e746c7920627920646966>-.25 F .552 <666572656e7420636f6d70696c6572732e>-.25 F .552<546869732077>5.552 F <61726e696e67>-.1 E<77696c6c206265206769>171.78 249.6 Q -.15<7665>-.25 G 2.5<6e6f>.15 G <6e6c79206f6e63652c2061742074686520656e64206f6620746865208c6c652e>-2.5 E <53656520616c736f3a>144 266.4 Q F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2c>A F12.5 E<65747479>-.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E<6f726473697a65>-.1 E F0<2e>A F1108 295.2 Q<657474793d>-.18 E/F3 10/Times-Italic@0 SF <6c697374>.09 E F0 .602<436f6e74726f6c73206365727461696e206d657373616765 732072656c6174656420746f2074686520617070656172616e6365206f66207468652073 6f7572636520636f64652e>144 307.2 R .601<54686573652077>5.601 F .601 <61726e2061626f7574207468696e6773>-.1 F .04 <74686174206d69676874206d616b>144 319.2 R 2.54<656170>-.1 G .04 <726f6772616d206c657373207265616461626c65206f722062652064656365707469> -2.54 F .34 -.15<76652074>-.25 H 2.54<6f74>.15 G .04<686520726561646572> -2.54 F 5.04<2e42>-.55 G 2.54<7964>-5.04 G<6566>-2.54 E .04 <61756c742c20616c6c2077>-.1 F .04<61726e696e677320617265>-.1 F <7475726e6564206f6e2e>144 331.2 Q 1.427 <546869732073657474696e672070726f>144 348 R 1.427 <76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 3.927<7274>.15 G 1.427<68652077>-3.927 F 1.427 <61726e696e67732061626f757420617070656172616e63652e>-.1 F<546865>6.427 E F3<6c697374>3.927 E F0 1.426<636f6e7369737473206f66>3.927 F -.1<6b65>144 360 S<7977>-.05 E 2.635 <6f7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e> -.1 F 2.636<53696e636520616c6c2077>7.636 F 2.636 <61726e696e677320617265206f6e20627920646566>-.1 F 2.636 <61756c742c20696e636c7564652061>-.1 F -.1<6b65>144 372 S<7977>-.05 E .239<6f7264207072658c78>-.1 F .239<6564206279>-.15 F F1<6e6fad>2.738 E F0 .238<746f207475726e206f66>2.738 F 2.738<666170>-.25 G .238 <6172746963756c61722077>-2.738 F 2.738<61726e696e672e205468657265>-.1 F .238<617265207468726565207370656369616c206b>2.738 F -.15<6579>-.1 G -.1 <776f>.15 G<7264733a>.1 E F1<616c6c>2.738 E F0<746f>2.738 E .195 <7475726e206f6e20616c6c207468652077>144 384 R .196<61726e696e6773206162 6f7574206d69736c656164696e6720617070656172616e6365732c>-.1 F F1 <6e6f6e65>2.696 E F0 .196<746f207475726e207468656d20616c6c206f66>2.696 F .196<662c20616e64>-.25 F F1<68656c70>2.696 E F0 .196<746f207072696e74> 2.696 F .008<746865206c697374206f6620616c6c20746865206b>144 396 R -.15 <6579>-.1 G -.1<776f>.15 G .008<726473207769746820612062726965662065>.1 F .008<78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.008 E F3 <6c697374>2.508 E F0 .007<6973206f6d69747465642c>2.508 F F12.507 E<65747479>-.18 E F0 .007<69732065717569>2.507 F -.25<7661>-.25 G <6c656e74>.25 E<746f>144 408 Q F13.322 E<657474793d616c6c>-.18 E F0 3.322<2c61>C<6e64>-3.322 E F13.322 E<65747479>-.18 E F0 .822<69732065717569>3.322 F -.25<7661>-.25 G .822<6c656e7420746f>.25 F F13.323 E<657474793d6e6f6e65>-.18 E F0 5.823<2e54>C .823 <68652077>-5.823 F .823<61726e696e67206b>-.1 F -.15<6579>-.1 G -.1<776f> .15 G .823<7264732077697468207468656972>.1 F <6d65616e696e67732061726520617320666f6c6c6f>144 420 Q<77733a>-.25 E F1 <616c746572>144 436.8 Q<6e617465ad72>-.15 E<65747572>-.18 E<6e>-.15 E F0 <3a>A 5.166<4152>171.78 448.8 S 2.665<455455524e2073746174656d656e742068 6173206120636f6e7374616e742073706563696679696e6720616e20616c7465726e6174 652072657475726e20706f696e742074686174206973206e6f74>-5.166 F .662<6265 747765656e203020616e6420746865206e756d626572206f662064756d6d79206172> 171.78 460.8 R .663<67756d656e7473207468617420617265206c6162656c732e> -.18 F .663<54686973206973206c65>5.663 F -.05<6761>-.15 G .663 <6c2c20616e642068617320746865>.05 F 1.131<73616d65206566>171.78 472.8 R 1.131<6665637420617320612052455455524e2077697468206e6f20616c7465726e6174 652072657475726e2065>-.25 F 1.131<787072657373696f6e2c2062>-.15 F 1.13 <75742073756767657374732074686174207468652070726f2d>-.2 F<6772616d6d6572 20696e74656e64656420746f2075736520616e20616c7465726e6174652072657475726e 206c6162656c2074686174206973206e6f742070726f>171.78 484.8 Q <76696465642e>-.15 E F1<656d626564646564ad7370616365>144 501.6 Q F0<3a>A <537061636520656d62656464656420696e2076>171.78 513.6 Q<61726961626c6520 6e616d6573206f7220696e206d756c74692d636861726163746572206f70657261746f72 732073756368206173>-.25 E F2<2a2a>2.5 E F0<2e>A F1 <636f6e74696e756174696f6e>144 530.4 Q F0<3a>A <436f6e74696e756174696f6e206d61726b20666f6c6c6f>171.78 542.4 Q <77696e67206120636f6d6d656e74206c696e652e>-.25 E F1<6c6f6e67ad6c696e65> 144 559.2 Q F0<3a>A 1.685<4c696e6573202865>171.78 571.2 R 1.685 <786365707420636f6d6d656e747329206f>-.15 F -.15<7665>-.15 G 4.185<7237> .15 G 4.185<3263>-4.185 G 1.685<6f6c756d6e7320696e20776964746820286265> -4.185 F 1.686 <796f6e64203732206973206e6f726d616c6c792069676e6f726564206279>-.15 F <636f6d70696c6572292e>171.78 583.2 Q F1<6d697373696e67ad7370616365>144 600 Q F0<3a>A<4c61636b206f66207370616365206265747765656e2076>171.78 612 Q<61726961626c6520616e64206120707265636564696e67206b>-.25 E -.15<6579> -.1 G -.1<776f>.15 G<72642e>.1 E F1<6d756c7469706c65ad636f6d6d6f6e>144 628.8 Q F0<3a>A 1.146<434f4d4d4f4e20626c6f636b206465636c6172656420696e20 6d756c7469706c652073746174656d656e74732e>171.78 640.8 R 1.146<4e6f2077> 6.146 F 1.146<61726e696e67206973206769>-.1 F -.15<7665>-.25 G 3.646 <6e69>.15 G 3.645<6674>-3.646 G 1.145<68652073746174656d656e7473>-3.645 F<61726520636f6e736563757469>171.78 652.8 Q .3 -.15<7665206578>-.25 H <6365707420666f7220636f6d6d656e74206c696e65732e>.15 E F1 <6d756c7469706c65ad6e616d656c697374>144 669.6 Q F0<3a>A -.35<4e41>171.78 681.6 S 1.639<4d454c495354206465636c6172656420696e206d756c7469706c652073 746174656d656e74732e>.35 F 1.639<4e6f2077>6.639 F 1.639 <61726e696e67206973206769>-.1 F -.15<7665>-.25 G 4.139<6e69>.15 G 4.139 <6674>-4.139 G 1.64<68652073746174656d656e747320617265>-4.139 F <636f6e736563757469>171.78 693.6 Q .3 -.15<7665206578>-.25 H <6365707420666f7220636f6d6d656e74206c696e65732e>.15 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3233>191.795 E 0 Cg EP %%Page: 24 24 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF<706172> 144 84 Q<656e746865736573>-.18 E F0<3a>A -.15<5061>171.78 96 S 1.003 <72656e7468657365732061726f756e6420612076>.15 F 1.003 <61726961626c6520627920697473656c662e>-.25 F 1.003 <417320612073756270726f6772616d206172>6.003 F 1.003 <67756d656e742c2074686973206d616b>-.18 F 1.003<657320746865206172>-.1 F <67752d>-.18 E<6d656e7420616e2065>171.78 108 Q<787072657373696f6e2c206e 6f74206d6f64698c61626c65206279207468652073756270726f6772616d2e>-.15 E .245<4e6f7465207468617420696e206672656520736f7572636520666f726d2c2065> 144 124.8 R .245<7874726120737061636520616e64206d697373696e672073706163 652061726520666f7262696464656e206279207468652046>-.15 F .246 <6f727472616e203930205374616e2d>-.15 F .038<646172642c20616e642061726520 6e6f74206d657265207374796c652076696f6c6174696f6e732e>144 136.8 R .038 <496e20746869732063617365207468652077>5.038 F .037<61726e696e6773206172 65207265706c616365642062792073796e746178206572726f72206d65732d>-.1 F <73616765732c20616e642063616e206265207475726e6564206f66>144 148.8 Q 2.5 <666f>-.25 G<6e6c79206279207573696e67>-2.5 E F12.5 E F0<2e>A<53656520616c736f3a>144 165.6 Q F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2e>A F1 108 194.4 Q<6f6a6563743d>-.18 E/F2 10/Times-Italic@0 SF <6c697374>.09 E F1<66746e6368656b>144 206.4 Q F0 .474<77696c6c2063726561 746520612070726f6a656374208c6c652066726f6d206561636820736f75726365208c6c 65207468617420697320696e707574207768696c652074686973206f7074696f6e206973 207475726e6564206f6e2e>2.974 F 1.205 <5468652070726f6a656374208c6c652077696c6c206265206769>144 218.4 R -.15 <7665>-.25 G 3.705<6e74>.15 G 1.205 <68652073616d65206e616d652061732074686520696e707574208c6c652c2062>-3.705 F 1.204<75742077697468207468652065>-.2 F<7874656e73696f6e>-.15 E F2 1.666<2e66>3.704 G F0<6f72>2.038 E F2 1.666<2e66>3.704 G<6f72>-1.666 E F0 .168<7265706c61636564206279>144 230.4 R F2 1.666<2e70>2.668 G<726a> -1.666 E F0 5.168<2e28>C .168<496620696e7075742069732066726f6d207374616e 6461726420696e7075742c207468652070726f6a656374208c6c65206973206e616d6564> -5.168 F F2<66746e63>2.668 E -.834<68656b2e2070726a>-.15 F F0 2.668 <2e2920446566>.48 F .168<61756c74203d>-.1 F<6e6f6e652e>144 242.4 Q <546865>144 259.2 Q F2<6c697374>3.183 E F0 .683 <636f6e7369737473206f66206b>3.183 F -.15<6579>-.1 G -.1<776f>.15 G .683 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .683<546865726520617265207468726565207370656369616c206b>5.683 F -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>144 271.2 Q F0 .047 <746f207475726e206f6e20616c6c20746865206f7074696f6e732c>2.547 F F1 <6e6f6e65>2.547 E F0 .047<746f207475726e207468656d20616c6c206f66>2.547 F .047<662c20616e64>-.25 F F1<68656c70>2.547 E F0 .048 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.547 F -.15<6579>-.1 G -.1<776f>.15 G<726473>.1 E 1.313 <7769746820612062726965662065>144 283.2 R 1.313 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>6.313 E F2<6c697374> 3.813 E F0 1.313<6973206f6d69747465642c>3.813 F F13.813 E <6f6a656374>-.18 E F0 1.312<69732065717569>3.812 F -.25<7661>-.25 G 1.312<6c656e7420746f>.25 F F13.812 E<6f6a6563743d616c6c>-.18 E F0 3.812<2c61>C<6e64>-3.812 E F1144 295.2 Q<6f6a656374>-.18 E F0<69732065717569>2.5 E -.25<7661>-.25 G<6c656e7420746f>.25 E F1 2.5 E<6f6a6563743d6e6f6e65>-.18 E F0 5<2e54>C<6865206b>-5 E -.15 <6579>-.1 G -.1<776f>.15 G<7264732077697468207468656972206d65616e696e67 732061726520617320666f6c6c6f>.1 E<77733a>-.25 E F1<6372>144 312 Q <65617465>-.18 E F0<3a>A 1.423 <50726f6475636520612070726f6a656374208c6c652e>171.78 324 R 1.423 <54686520646566>6.423 F 1.423<61756c74206973206e6f7420746f2070726f647563 6520612070726f6a656374208c6c652e>-.1 F 1.423 <49662074686973206f7074696f6e206973206e6f74>6.423 F <7475726e6564206f6e2c20746865206f74686572206f7074696f6e73206861>171.78 336 Q .3 -.15<7665206e>-.2 H 2.5<6f65>.15 G -.25<6666>-2.5 G<6563742e> .25 E F1<7472696dad63616c6c73>144 352.8 Q F0<3a>A -.35<5472>171.78 364.8 S .043<696d2074686520616d6f756e74206f6620696e666f726d6174696f6e2073746f 72656420696e207468652070726f6a656374208c6c652061626f75742073756270726f67 72616d206465636c61726174696f6e7320616e64>.35 F 4.375 <63616c6c732e2054686973>171.78 376.8 R 1.875<69732074686520646566>4.375 F 4.376<61756c742e2054>-.1 F 1.876<75726e2074686973206f7074696f6e206f66> -.45 F 4.376<666f>-.25 G 1.876 <6e6c7920696e207261726520736974756174696f6e732e>-4.376 F 1.876 <285365652064697363757373696f6e>6.876 F<62656c6f>171.78 388.8 Q -.65 <772e>-.25 G 5.263<2954>.65 G .263 <686520616d6f756e74206f66207472696d6d696e672076>-5.263 F .262 <617269657320646570656e64696e67206f6e20746865>-.25 F F1 2.762 E F0 2.762<8d61672e204d6f7265>2.762 F <696e666f726d6174696f6e>2.762 E<6973207472696d6d65642069662074686174208d 6167206973207475726e6564206f6e2e>171.78 400.8 Q F1 <7472696dad636f6d6d6f6e>144 417.6 Q F0<3a>A -.35<5472>171.78 429.6 S 2.162<696d20746865206e756d626572206f6620636f6d6d6f6e20626c6f636b20646563 6c61726174696f6e732073746f72656420696e207468652070726f6a656374208c6c652e> .35 F 2.163<5468697320697320746865>7.162 F<646566>171.78 441.6 Q 3.543 <61756c742e2054>-.1 F 1.043<75726e2074686973206f7074696f6e206f66>-.45 F 3.542<666f>-.25 G 1.042<6e6c7920696e207261726520736974756174696f6e732e> -3.542 F 1.042<285365652064697363757373696f6e2062656c6f>6.042 F -.65 <772e>-.25 G 6.042<2954>.65 G 1.042<686973206f7074696f6e>-6.042 F .898 <686173206e6f206566>171.78 453.6 R .898<6665637420696620746865>-.25 F F1 3.399 E F0 .899<8d6167206973207475726e6564206f66>3.399 F .899<663a207768656e206e6f7420696e206c696272617279206d6f64652c206e6f20 7472696d6d696e67206f66>-.25 F<636f6d6d6f6e20626c6f636b206465636c61726174 696f6e7320697320646f6e65207265>171.78 465.6 Q -.05<6761>-.15 G <72646c657373206f662074686973206f7074696f6e2e>.05 E 3.175<4170>144 482.4 S .675<726f6a656374208c6c6520636f6e7461696e7320612073756d6d617279206f66 20696e666f726d6174696f6e2066726f6d2074686520736f75726365208c6c652c20666f 722075736520696e20636865636b696e672061677265652d>-3.175 F .514 <6d656e7420616d6f6e67>144 494.4 R/F3 10/Courier@0 SF<46554e4354494f4e> 3.014 E F0<2c>A F3<535542524f5554494e45>3.014 E F0 3.014<2c61>C<6e64> -3.014 E F3<434f4d4d4f4e>3.014 E F0 .514 <75736167657320696e206f74686572208c6c65732e>3.014 F .515<497420616c6c6f> 5.514 F .515<777320696e6372656d656e2d>-.25 F 1.01 <74616c20636865636b696e672c207768696368207361>144 506.4 R -.15<7665>-.2 G 3.51<7374>.15 G 1.01<696d65207768656e65>-3.51 F -.15<7665>-.25 G 3.509 <7279>.15 G 1.009<6f75206861>-3.509 F 1.309 -.15<76652061206c>-.2 H <6172>.15 E 1.009<676520736574206f66208c6c657320636f6e7461696e696e672073 686172656420737562726f752d>-.18 F .064 <74696e65732c206d6f7374206f662077686963682073656c646f6d206368616e67652e> 144 518.4 R -1.1<596f>5.064 G 2.564<7563>1.1 G .064<616e2072756e>-2.564 F F1<66746e6368656b>2.564 E F0 .064 <6f6e6365206f6e2065616368208c6c65207769746820746865>2.564 F F1 2.565 E<6f6a656374>-.18 E F0<8d6167>2.565 E .254 <7365742c206372656174696e67207468652070726f6a656374208c6c65732e>144 530.4 R .253<557375616c6c7920796f752077>5.253 F .253 <6f756c6420616c736f2073657420746865>-.1 F F12.753 E F0 <616e64>2.753 E F12.753 E<6e>-.15 E F0 .253 <8d6167732061742074686973>2.753 F .049<74696d652c20746f2073757070726573 73206d657373616765732072656c6174696e6720746f20636f6e73697374656e63>144 542.4 R 2.549<7977>-.15 G .049<697468206f74686572208c6c65732e>-2.549 F .05<4f6e6c79206572726f72206d65737361676573207065727461696e696e67>5.049 F .281<746f2065616368208c6c6520627920697473656c662077696c6c20626520707269 6e74656420617420746869732074696d652e>144 554.4 R<54686572656166746572> 5.28 E 2.78<2c72>-.4 G<756e>-2.78 E F1<66746e6368656b>2.78 E F0 .28 <776974686f7574207468657365208d616773206f6e20616c6c>2.78 F .549 <7468652070726f6a656374208c6c657320746f676574686572>144 566.4 R 3.049 <2c74>-.4 G 3.049<6f63>-3.049 G .549<6865636b20636f6e73697374656e63> -3.049 F 3.049<7961>-.15 G .549<6d6f6e672074686520646966>-3.049 F .549 <666572656e74208c6c65732e>-.25 F .55 <416c6c206d6573736167657320696e7465726e616c20746f>5.55 F .284 <74686520696e6469>144 578.4 R .284 <76696475616c208c6c65732077696c6c206e6f>-.25 F 2.784<7762>-.25 G 2.784 <656f>-2.784 G 2.784<6d69747465642e204f6e6c79>-2.784 F .284 <7768656e2061208c6c6520697320616c74657265642077696c6c2061206e65>2.784 F 2.783<7770>-.25 G .283<726f6a656374208c6c65206e65656420746f>-2.783 F <6265206d61646520666f722069742e>144 590.4 Q<4e61747572616c6c79>144 607.2 Q 2.5<2c77>-.65 G<68656e20746865>-2.5 E F12.5 E<6f6a656374>-.18 E F0<6f7074696f6e206973207475726e6564206f6e2c>2.5 E F1<66746e6368656b> 2.5 E F0<77696c6c206e6f7420726561642070726f6a656374208c6c65732061732069 6e7075742e>2.5 E<4f7264696e6172696c79>144 624 Q 3.838<2c74>-.65 G 1.339< 6865207472696d206f7074696f6e732073686f756c64206265206c656674206f6e207768 656e20796f7520696e74656e6420746f206372656174652070726f6a656374208c6c6573 20666f7220667574757265>-3.838 F 1.164<696e70757420746f>144 636 R F1 <66746e6368656b>3.664 E F0 6.164<2e53>C 1.163 <696e6365207472696d6d696e67206973206f6e20627920646566>-6.164 F 1.163 <61756c742c2074686973206d65616e7320746861742073696d706c79206769>-.1 F 1.163<76696e672074686520636f6d6d616e64>-.25 F F1144 648 Q <6f6a656374>-.18 E F0 .736<77697468206e6f206f7074696f6e206c697374206973 20746865207265636f6d6d656e646564206d6f64652e>3.236 F .736 <546865207472696d206f7074696f6e73206172652070726f>5.736 F .737 <7669646564206f6e6c792061732061>-.15 F<636f6e>144 660 Q -.15<7665>-.4 G .532<6e69656e636520666f722074686f73652077686f2077>.15 F .531 <616e7420746f206d616b>-.1 F 3.031<6575>-.1 G .531<7365206f662070726f6a65 6374208c6c657320666f7220707572706f736573206f74686572207468616e2063686563 6b696e6720746865>-3.031 F .344<70726f6772616d2077697468>144 672 R F1 <66746e6368656b>2.844 E F0 5.344<2e54>C 2.844<6f75>-6.144 G .344<736520 70726f6a656374208c6c657320666f7220746865697220696e74656e6465642070757270 6f73652c20746865207472696d206f7074696f6e732073686f756c64206e6f74>-2.844 F<6265207475726e6564206f66>144 684 Q<662e>-.25 E .876<50726f6a656374208c 6c657320636f6e7461696e206f6e6c7920696e666f726d6174696f6e206e656564656420 666f7220636865636b696e672061677265656d656e74206265747765656e208c6c65732e> 144 700.8 R .875<54686973206d65616e73>5.875 F .205<7468617420612070726f 6a656374208c6c65206973206f66206e6f2075736520696620616c6c206d6f64756c6573 206f662074686520636f6d706c6574652070726f6772616d2061726520636f6e7461696e 656420696e20612073696e676c65208c6c652e>144 712.8 R 2.5<416d>144 729.6 S <6f72652064657461696c65642064697363757373696f6e206973206769>-2.5 E -.15 <7665>-.25 G 2.5<6e69>.15 G 2.5<6e74>-2.5 G <68652073656374696f6e206f6e205573696e672050726f6a6563742046696c65732e> -2.5 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3234>191.795 E 0 Cg EP %%Page: 25 25 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF 108 84 Q<65>-.18 E F0 .251<417373756d652066756e6374696f6e73206172652060> 144 96 R<607075726527>-.74 E .251<272c20692e652e2c20746865>-.74 F 2.751 <7977>-.15 G .251<696c6c206e6f74206861>-2.751 F .551 -.15<76652073>-.2 H .251<696465206566>.15 F .25 <6665637473206279206d6f64696679696e67207468656972206172>-.25 F .25 <67756d656e7473206f72>-.18 F -.25<7661>144 108 S .183 <726961626c657320696e206120434f4d4d4f4e20626c6f636b2e>.25 F .183 <5768656e2074686973208d616720697320696e206566>5.183 F<666563742c>-.25 E F1<66746e6368656b>2.683 E F0 .183 <77696c6c2062617365206974732064657465726d696e6174696f6e206f66>2.683 F .435<73657420616e64207573656420737461747573206f66207468652061637475616c 206172>144 120 R .435 <67756d656e7473206f6e2074686520617373756d7074696f6e2074686174206172>-.18 F .435<67756d656e74732070617373656420746f20612066756e6374696f6e>-.18 F .074<617265206e6f7420616c74657265642e>144 132 R .074 <49742077696c6c20616c736f20697373756520612077>5.074 F .074<61726e696e67 20696620612066756e6374696f6e20697320666f756e6420746f206d6f6469667920616e> -.1 F 2.574<796f>-.15 G 2.574<6669>-2.574 G .074<7473206172>-2.574 F .074<67756d656e7473206f72>-.18 F<616e>144 144 Q 2.5<7943>-.15 G <4f4d4d4f4e2076>-2.5 E 2.5<61726961626c65732e20446566>-.25 F <61756c74203d207965732e>-.1 E .159 <5768656e2074686973208d6167206973207475726e6564206f66>144 160.8 R .159 <662c2061637475616c206172>-.25 F .159<67756d656e74732070617373656420746f 2066756e6374696f6e732077696c6c2062652068616e646c6564207468652073616d6520 77>-.18 F .158<6179206173>-.1 F .256<61637475616c206172>144 172.8 R .257 <67756d656e74732070617373656420746f20737562726f7574696e65732e>-.18 F .257<54686973206d65616e732074686174>5.257 F F1<66746e6368656b>2.757 E F0 .257<77696c6c20617373756d652074686174206172>2.757 F .257 <67756d656e7473206d6179>-.18 F .043 <6265206d6f64698c6564206279207468652066756e6374696f6e732e>144 184.8 R .042<4e6f2077>5.042 F .042<61726e696e67732077696c6c206265206769>-.1 F -.15<7665>-.25 G 2.542<6e69>.15 G 2.542<666166>-2.542 G .042 <756e6374696f6e20697320666f756e6420746f206861>-2.542 F .342 -.15 <76652073>-.2 H .042<696465206566>.15 F<66656374732e>-.25 E .291<426563 6175736520737472696374657220636865636b696e6720697320706f737369626c652069 662066756e6374696f6e732061726520617373756d656420746f20626520707572652c20 796f752073686f756c64207475726e2074686973208d6167>144 196.8 R<6f66>144 208.8 Q 2.5<666f>-.25 G<6e6c7920696620796f75722070726f6772616d2061637475 616c6c7920757365732066756e6374696f6e7320776974682073696465206566>-2.5 E <66656374732e>-.25 E F1108 237.6 Q F0 .552<54686973206f70 74696f6e20726564756365732074686520616d6f756e74206f66206f7574707574207265 6c6174696e6720746f206e6f726d616c206f7065726174696f6e2c20736f207468617420 6572726f72206d6573736167657320617265>144 249.6 R .186 <6d6f7265206170706172656e742e>144 261.6 R .186 <54686973206f7074696f6e2069732070726f>5.186 F .187 <766964656420666f722074686520636f6e>-.15 F -.15<7665>-.4 G .187<6e69656e 6365206f662075736572732077686f2061726520636865636b696e67206c6172>.15 F .187<676520737569746573>-.18 F .44<6f66208c6c65732e>144 273.6 R .44<5468 6520656c696d696e61746564206f757470757420696e636c7564657320746865206e616d 6573206f662070726f6a656374208c6c65732c20616e6420746865206d65737361676520 7265706f7274696e672074686174>5.44 F .867 <6e6f2073796e746178206572726f7273207765726520666f756e642e>144 285.6 R .867<497420616c736f20656c696d696e6174657320736f6d6520626c616e6b206c696e 6573207468617420617265206f7264696e6172696c7920696e636c7564656420666f72> 5.867 F<636c6172697479>144 297.6 Q 2.5<2e28>-.65 G<536f6d65206f66207468 6973206f7574707574206973207475726e6564206261636b206f6e20627920746865> -2.5 E F12.5 E F0<616e64>2.5 E F12.5 E F0 2.5<6f7074696f6e732e2920446566>2.5 F<61756c74203d206e6f2e>-.1 E .819 <4e6f74653a207468652077>144 314.4 R .819 <617920746f2072656d656d6265722074686520646966>-.1 F 3.319 <666572656e6365206265747765656e>-.25 F<746865>3.319 E F1 3.319 E F0<616e64>3.319 E F13.318 E F0 .818 <69732074686174>3.318 F F13.318 E F0<646f65736e27>3.318 E <74>-.18 E<737570707265737320616e>144 326.4 Q 2.5<7977>-.15 G <61726e696e672d72656c6174656420696e666f726d6174696f6e2c2077686572656173> -2.6 E F12.5 E F0<646f65732e>2.5 E<53656520616c736f3a>144 343.2 Q F12.5 E F0<2e>A F1108 372 Q<65666572>-.18 E <656e6365>-.18 E F0 1.045<53706563698c6573207468617420612077686f2d63616c 6c732d77686f207461626c65206265207072696e7465642e>144 384 R 1.046<546869 73207461626c65206c6973747320656163682073756270726f6772616d20666f6c6c6f> 6.046 F 1.046<7765642062792061>-.25 F <6c697374206f662074686520726f7574696e65732069742063616c6c732e>144 396 Q <54686973207377697463682069732065717569>5 E -.25<7661>-.25 G <6c656e7420746f>.25 E F12.5 E<65653d72>-.18 E<65666572> -.18 E<656e6365>-.18 E F0 5<2e44>C<6566>-5 E<61756c74203d206e6f2e>-.1 E 1.583<546865207265666572656e6365206c697374206f6d69747320726f7574696e6573 2063616c6c656420627920756e75736564206c696272617279206d6f64756c65732e>144 412.8 R 1.583<5468757320697420636f6e7461696e73207468652073616d65>6.583 F .514<696e666f726d6174696f6e20617320666f72207468652063616c6c2d7472656520 666f726d61742c206e616d656c7920746865206869657261726368>144 424.8 R 3.015 <796f>-.05 G 3.015<6673>-3.015 G .515 <756270726f6772616d2063616c6c732c2062>-3.015 F .515 <7574207072696e74656420696e2061>-.2 F<646966>144 436.8 Q .023 <666572656e742077>-.25 F<6179>-.1 E 5.023<2e54>-.65 G .022 <686973207072696e7473206f7574206120627265616474682d8c72737420747261> -5.023 F -.15<7665>-.2 G .022 <7273616c206f66207468652063616c6c20747265652077686572656173>.15 F F1 2.522 E<65653d7472>-.18 E<6565>-.18 E F0<7072696e7473> 2.522 E<6f757420612064657074682d8c72737420747261>144 448.8 Q -.15<7665> -.2 G<7273616c2e>.15 E<53656520616c736f3a>144 465.6 Q F1 2.5 E<6565>-.18 E F0<2c>A F12.5 E<6f737372>-.18 E<6566>-.18 E F0 <2c>A F12.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2e>A F1108 494.4 Q<65736f7572>-.18 E<636573>-.18 E F0 1.013<5072696e74732074686520 616d6f756e74206f66207265736f75726365732075736564206279>144 506.4 R F1 <66746e6368656b>3.513 E F0 1.013 <696e2070726f63657373696e67207468652070726f6772616d2e>3.513 F 1.014 <54686973206c697374696e67206d6179206265>6.014 F .23<75736566756c20696e20 616e616c797a696e67207468652073697a6520616e6420636f6d706c65>144 518.4 R .229<78697479206f6620612070726f6772616d2e>-.15 F .229 <49742063616e20616c736f2068656c7020696e2063686f6f73696e67206c6172>5.229 F .229<6765722073697a6573>-.18 F<666f72>144 530.4 Q F1<66746e6368656b> 2.5 E F0 1.1 -.55<27732069>D<6e7465726e616c207461626c657320696620746865> .55 E 2.5<7961>-.15 G<726520746f6f20736d616c6c20746f20616e616c797a652061 20706172746963756c61722070726f6772616d2e>-2.5 E<446566>5 E <61756c74203d206e6f2e>-.1 E 1.112 <496e2074686973206c697374696e672c20746865207465726d2060>144 547.2 R 1.113<606368756e6b2073697a6527>-.74 F 3.613<2769>-.74 G 3.613<7374> -3.613 G 1.113<68652073697a65206f662074686520626c6f636b73206f66206d656d 6f727920616c6c6f636174656420746f2073746f726520746865>-3.613 F .335<6974 656d20696e207175657374696f6e2c20696e20756e697473206f66207468652073697a65 206f66206f6e65206974656d2c206e6f74206e65636573736172696c7920696e20627974 65732e>144 559.2 R .334 <5768656e2074686520696e697469616c6c7920616c6c6f2d>5.334 F 1.416<63617465 64207370616365206973208c6c6c65642075702c206d6f7265206d656d6f727920697320 616c6c6f636174656420696e206368756e6b73206f6620746869732073697a652e>144 571.2 R 1.416<54686520666f6c6c6f>6.416 F 1.416<77696e6720697320616e>-.25 F -.15<6578>144 583.2 S <706c616e6174696f6e206f6620746865206974656d73207072696e7465643a>.15 E/F2 10/Times-Italic@0 SF<536f7572>144.33 600 Q<6365206c696e6573207072>-.37 E <6f6365737365643a>-.45 E F0 -.8<546f>161.5 612 S 1.541<74616c206e756d62 6572206f66206c696e6573206f6620636f64652c20776974682073657061726174652074 6f74616c7320666f722073746174656d656e74206c696e657320616e6420636f6d6d656e 74206c696e65732e>.8 F .381<436f6d6d656e74206c696e657320696e636c75646520 6c696e6573207769746820274327206f7220272a2720696e20636f6c756d6e2031206173 2077656c6c20617320626c616e6b206c696e657320616e64206c696e657320636f6e2d> 161.5 624 R .733 <7461696e696e67206f6e6c7920616e20696e6c696e6520636f6d6d656e742e>161.5 636 R .733<53746174656d656e74206c696e65732061726520616c6c206f7468657220 6c696e65732c20696e636c7564696e67206c696e65732074686174206861>5.733 F -.15<7665>-.2 G 1.496<616e20696e6c696e6520636f6d6d656e7420666f6c6c6f> 161.5 648 R 1.496<77696e6720736f6d6520636f64652e>-.25 F 1.497<436f6e7469 6e756174696f6e206c696e65732061726520636f756e7465642061732073657061726174 65206c696e65732e>6.497 F<4c696e657320696e20696e636c756465208c6c65732061 726520636f756e74656420656163682074696d6520746865208c6c6520697320696e636c 756465642e>161.5 660 Q F2 -.92<546f>144 676.8 S<74616c2065>.92 E <786563757461626c652073746174656d656e74733a>-.2 E F0 .095<4e756d62657220 6f662073746174656d656e747320696e207468652070726f6772616d2c206f7468657220 7468616e2073706563698c636174696f6e2c20646174612c2073746174656d656e742d66 756e6374696f6e2c20464f522d>161.5 688.8 R<4d41>161.5 700.8 Q 1.48 -.74 <542c2045>-1.11 H<4e5452>.74 E 2.58 -1.29<592c2061>-.65 H <6e6420454e442073746174656d656e74732e>1.29 E<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3235>191.795 E 0 Cg EP %%Page: 26 26 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF -.92 <546f>144 84 S<74616c206e756d626572206f66206d6f64756c65733a>.92 E F0 3.934<416d>161.5 96 S 1.434<6f64756c6520697320616e>-3.934 F 3.934<7965> -.15 G 1.435<787465726e616c2073756270726f6772616d2c20696e636c7564696e67 20746865206d61696e2070726f6772616d2c20737562726f7574696e65732c2066756e63 74696f6e732c>-4.084 F .657<616e6420626c6f636b206461746120756e6974732e> 161.5 108 R .657<5468697320636f756e74206973206f66206d6f64756c6573206465 8c6e65642077697468696e2074686520736f757263652c206e6f74206d6f64756c657320 7265666572>5.657 F<2d>-.2 E 2.536<656e6365642e2053746174656d656e74>161.5 120 R .036<66756e6374696f6e7320617265206e6f7420696e636c756465642e>2.536 F 2.536<4173>5.036 G .036<756270726f6772616d2077697468206d756c7469706c65 20656e74727920706f696e7473206973206f6e6c79>-2.536 F <636f756e746564206f6e63652e>161.5 132 Q F1 -.92<546f>144 148.8 S <74616c2073746174656d656e74206c6162656c732064658c6e6564>.92 E F0 1.593< 4e756d626572206f66206c6162656c7320617474616368656420746f2073746174656d65 6e747320286f6674656e2063616c6c65642073746174656d656e74206e756d6265727329 2e>161.5 160.8 R 1.593<54686520746f74616c206c6162656c>6.593 F .69 <636f756e7420666f722074686520656e746972652070726f6772616d206973206769> 161.5 172.8 R -.15<7665>-.25 G .69<6e2c2061732077656c6c2061732074686520 6d6178696d756d206e756d62657220696e20616e>.15 F 3.19<7973>-.15 G .69 <696e676c652073756270726f2d>-3.19 F<6772616d2e>161.5 184.8 Q F1 <4d6178206964656e74698c6572206e616d652063>144.68 201.6 Q<686172>-.15 E <733a>-.1 E F0 1.192<4e756d626572206f6620636861726163746572732075736564 20666f722073746f72696e67206964656e74698c6572206e616d65732e>161.5 213.6 R 1.191<416e206964656e74698c657220697320612076>6.191 F 1.191 <61726961626c652c2073756270726f2d>-.25 F 1.463 <6772616d2c206f7220636f6d6d6f6e20626c6f636b206e616d652e>161.5 225.6 R 1.464<4c6f63616c206e616d6573206172652074686f7365206f66206c6f63616c2076> 6.463 F 1.464<61726961626c657320696e20612073756270726f6772616d2c>-.25 F .05<7768657265617320676c6f62616c206e616d657320726566657220746f2073756270 726f6772616d20616e6420636f6d6d6f6e20626c6f636b206e616d65732c206173207765 6c6c2061732064756d6d79206172>161.5 237.6 R<67752d>-.18 E .377 <6d656e74206e616d657320616e6420636f6d6d6f6e2076>161.5 249.6 R .377 <61726961626c65206e616d65732e>-.25 F .377<41637475616c206172>5.377 F .377<67756d656e74207465>-.18 F .377 <78742028757020746f203135206368617261637465727320666f722065616368>-.15 F <6172>161.5 261.6 Q .126 <67756d656e742920697320616c736f20696e636c7564656420686572652e>-.18 F .125<546865207370616365207573656420666f72206c6f63616c206e616d6573206973 206e6f74207265636f>5.126 F -.15<7665>-.15 G .125 <7265642061742074686520656e64206f66>.15 F 1.021 <65616368206d6f64756c652c20736f2074686973206e756d626572>161.5 273.6 R 3.521<2c6c>-.4 G<696b>-3.521 E 3.521<6567>-.1 G 1.021 <6c6f62616c2073706163652c2067726f>-3.521 F 1.022<777320756e74696c207468 652077686f6c652070726f6772616d20697320616e616c797a65642e>-.25 F <556e666f7274756e6174656c79>161.5 285.6 Q 2.573<2c74>-.65 G .072 <686973208c67757265206d617920696e636c75646520736f6d65207465>-2.573 F .072<78742073746f726564206d6f7265207468616e206f6e63652c20616c74686f7567 68206120686575726973746963206973>-.15 F <7573656420746861742077696c6c2061>161.5 297.6 Q -.2<766f>-.2 G <6964206475706c69636174657320696e206d616e>.2 E 2.5<7963>-.15 G <617365732e>-2.5 E F1<4d617820746f6b>144.68 314.4 Q<656e207465>-.1 E <78742063>-.2 E<686172>-.15 E<733a>-.1 E F0 2.678<4174>161.5 326.4 S <6f6b>-2.678 E .178<656e2069732074686520736d616c6c6573742073796e74616374 696320756e6974206f662074686520464f52>-.1 F .179 <5452414e206c616e67756167652061626f>-.6 F .479 -.15<76652074>-.15 H .179 <6865206c65>.15 F -.15<7665>-.25 G 2.679<6c6f>.15 G 2.679<6669>-2.679 G <6e6469>-2.679 E<76696475616c>-.25 E .95<636861726163746572732e2046> 161.5 338.4 R .95<6f7220696e7374616e6365206120746f6b>-.15 F .95 <656e2063616e20626520612076>-.1 F .95<61726961626c65206e616d652c2061206e 756d65726963616c20636f6e7374616e742c20612071756f746564207465>-.25 F <7874>-.15 E .02 <737472696e672c206f7220612070756e6374756174696f6e20636861726163746572> 161.5 350.4 R 5.02<2e54>-.55 G<6f6b>-5.82 E .021<656e207465>-.1 F .021< 78742069732073746f726564207768696c652061206d6f64756c65206973206265696e67 2070726f6365737365642e>-.15 F -.15<466f>5.021 G<72>.15 E .164<746563686e 6963616c20726561736f6e732c2073696e676c652d63686172616374657220746f6b> 161.5 362.4 R .164 <656e7320617265206e6f7420696e636c7564656420696e207468697320746f74616c2e> -.1 F .163<4974656d73207468617420617265206e6f74207265702d>5.163 F .709< 726573656e74656420696e207468652073796d626f6c207461626c65206d617920626520 6475706c6963617465642e>161.5 374.4 R .709 <54686520737061636520666f7220746f6b>5.709 F .71<656e207465>-.1 F .71 <7874206973207265636f>-.15 F -.15<7665>-.15 G .71<72656420617420746865> .15 F<656e64206f662065616368206d6f64756c652c20736f2074686973208c67757265 20726570726573656e747320746865206d6178696d756d20666f7220616e>161.5 386.4 Q 2.5<796f>-.15 G<6e65206d6f64756c652e>-2.5 E F1 <4d6178206c6f63616c2073796d626f6c733a>144.68 403.2 Q F0 .52 <5468697320697320746865206c6172>161.5 415.2 R .519<67657374206e756d6265 72206f6620656e747269657320696e20746865206c6f63616c2073796d626f6c20746162 6c6520666f7220616e>-.18 F 3.019<796d>-.15 G 3.019 <6f64756c652e204c6f63616c>-3.019 F<73796d626f6c>3.019 E .498 <7461626c6520656e747269657320696e636c75646520616c6c2076>161.5 427.2 R .498<61726961626c657320616e6420706172616d65746572732c20636f6d6d6f6e2062 6c6f636b206e616d65732c2073746174656d656e742066756e6374696f6e732c>-.25 F -.15<6578>161.5 439.2 S .667<7465726e616c2073756270726f6772616d7320616e 6420696e7472696e7369632066756e6374696f6e73207265666572656e63656420627920 746865206d6f64756c652e>.15 F .667 <4c69746572616c20636f6e7374616e747320617265>5.667 F<6e6f742073746f726564 20696e20746865206c6f63616c2073796d626f6c207461626c652e>161.5 451.2 Q F1 <4d617820676c6f62616c2073796d626f6c733a>144.68 468 Q F0 .159<5468697320 697320746865206e756d626572206f6620656e747269657320696e2074686520676c6f62 616c2073796d626f6c207461626c652061742074686520656e64206f662070726f636573 73696e672e>161.5 480 R .159<476c6f62616c2073796d2d>5.159 F .918 <626f6c207461626c6520656e747269657320696e636c7564652065>161.5 492 R .917 <787465726e616c2073756270726f6772616d20616e6420636f6d6d6f6e20626c6f636b 206e616d65732e>-.15 F .917<496e7472696e7369632066756e6374696f6e73>5.917 F<616e642073746174656d656e742066756e6374696f6e7320617265206e6f7420696e63 6c756465642e>161.5 504 Q F1<4d6178206e756d626572206f6620746f6b>144.68 520.8 Q<656e6c697374733a>-.1 E F0 2.976<4174>161.5 532.8 S<6f6b>-2.976 E .476<656e206c69737420697320612073657175656e6365206f6620746f6b>-.1 F .477 <656e7320726570726573656e74696e67207468652061637475616c206f722064756d6d 79206172>-.1 F .477<67756d656e74206c697374206f662061207375622d>-.18 F .181<70726f6772616d2c206f7220746865206c697374206f662076>161.5 544.8 R .181<61726961626c657320696e206120636f6d6d6f6e20626c6f636b206f72206e616d 656c6973742e>-.25 F .18 <5468657265666f72652074686973206e756d6265722072657072652d>5.18 F .022 <73656e747320746865206c6172>161.5 556.8 R .022 <676573742073756d206f6620434f4d4d4f4e2c2043414c4c2c204e>-.18 F .023 <414d454c49535420616e6420454e5452>-.35 F 2.523<5973>-.65 G .023 <746174656d656e747320616e642066756e6374696f6e>-2.523 F<696e>161.5 568.8 Q -.2<766f>-.4 G<636174696f6e7320666f7220616e>.2 E 2.5<796f>-.15 G <6e65206d6f64756c652e>-2.5 E<546865207370616365206973207265636f>5 E -.15 <7665>-.15 G <7265642061742074686520656e64206f662065616368206d6f64756c652e>.15 E F1 <4d617820746f6b>144.68 585.6 Q<656e206c6973742f7472>-.1 E <65652073706163653a>-.37 E F0<5468697320697320746865206c6172>161.5 597.6 Q<67657374206e756d626572206f6620746f6b>-.18 E <656e7320696e20616c6c2074686520746f6b>-.1 E <656e206c6973747320616e6420746f6b>-.1 E<656e207472656573206f6620616e>-.1 E 2.5<796f>-.15 G<6e65206d6f64756c652e>-2.5 E<41>5 E<746f6b>161.5 609.6 Q .39<656e207472656520697320666f726d6564207768656e20616e616c797a696e6720 616e2065>-.1 F .39<787072657373696f6e3a2065616368206f706572616e64206973 2061206c656166206f662074686520747265652c20616e6420746865>-.15 F .743 <6f70657261746f72732061726520746865206e6f6465732e>161.5 621.6 R .742<54 68657265666f72652074686973206e756d6265722069732061206d656173757265206f66 20746865206d6178696d756d20636f6d706c65>5.742 F .742<78697479206f66>-.15 F .116<616e20696e6469>161.5 633.6 R .117<76696475616c206d6f64756c652e> -.25 F -.15<466f>5.117 G 2.617<7269>.15 G .117 <6e7374616e63652061206d6f64756c652077697468206d616e>-2.617 F 2.617<796c> -.15 G .117<6f6e672061726974686d657469632065>-2.617 F .117 <787072657373696f6e732077696c6c206861>-.15 F -.15<7665>-.2 G 2.787<6168> 161.5 645.6 S .287<696768206e756d626572>-2.787 F 5.287<2e4e>-.55 G .287 <6f7465207468617420756e6c696b>-5.287 F 2.787<6574>-.1 G<6f6b>-2.787 E .287<656e207465>-.1 F .287<7874206465736372696265642061626f>-.15 F -.15 <7665>-.15 G 2.787<2c74>.15 G .286<6865206e756d626572206f6620746f6b> -2.787 F .286<656e7320697320696e646570656e2d>-.1 F <64656e74206f6620746865206c656e677468206f66207468652076>161.5 657.6 Q<61 726961626c65206e616d6573206f72206c69746572616c20636f6e7374616e747320696e 207468652065>-.25 E<787072657373696f6e732e>-.15 E F1 <4e756d626572206f66207375627072>144.7 674.4 Q -.1<6f67>-.45 G -.15<7261> .1 G 2.5<6d69>.15 G -.4<6e76>-2.5 G<6f636174696f6e733a>.4 E F0 .35 <54686973206973207468652073756d206f>161.5 686.4 R -.15<7665>-.15 G 2.85 <7261>.15 G .351<6c6c206d6f64756c6573206f6620746865206e756d626572206f66 2043414c4c2073746174656d656e747320616e642066756e6374696f6e20696e>-2.85 F -.2<766f>-.4 G<636174696f6e73>.2 E<2865>161.5 698.4 Q<786365707420696e74 72696e7369632066756e6374696f6e7320616e642073746174656d656e742066756e6374 696f6e73292e>-.15 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3236>191.795 E 0 Cg EP %%Page: 27 27 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF <4e756d626572206f6620636f6d6d6f6e20626c6f63>144.7 84 Q 2.5<6b64>-.2 G <65636c733a>-2.5 E F0 .501<54686973206973207468652073756d206f>161.5 96 R -.15<7665>-.15 G 3.001<7261>.15 G .501<6c6c206d6f64756c6573206f66207468 65206e756d626572206f6620636f6d6d6f6e20626c6f636b206465636c61726174696f6e 732e>-3.001 F .5<546861742069732c2065616368>5.5 F .099 <6465636c61726174696f6e206f66206120626c6f636b20696e206120646966>161.5 108 R .099 <666572656e74206d6f64756c6520697320636f756e7465642073657061726174656c79> -.25 F 5.1<2e28>-.65 G .1<546865207374616e6461726420616c6c6f>-5.1 F .1 <7773206d756c74692d>-.25 F .331<706c65206465636c61726174696f6e73206f6620 6120626c6f636b2077697468696e207468652073616d65206d6f64756c653b2074686573 652061726520636f756e746564206173206f6e6c79206f6e65206465636c61726174696f 6e>161.5 120 R<73696e636520746865>161.5 132 Q 2.5<7961>-.15 G <72652065717569>-2.5 E -.25<7661>-.25 G <6c656e7420746f20612073696e676c65206c6f6e67206465636c61726174696f6e2e29> .25 E F1<4e756d626572206f6620617272>144.7 148.8 Q <61792064696d202620706172>-.15 E<616d20707472>-.15 E<733a>-.1 E F0 .793 <54686973206973207468652073756d206f>161.5 160.8 R -.15<7665>-.15 G 3.293 <7261>.15 G .793<6c6c206d6f64756c6573206f6620746865206e756d626572206f66 2061727261792064696d656e73696f6e20616e6420706172616d657465722064658c6e69 74696f6e>-3.293 F<7465>161.5 172.8 Q 1.82<787420737472696e6773207361> -.15 F -.15<7665>-.2 G 4.32<6466>.15 G 1.82<6f722075736520627920746865> -4.32 F/F2 10/Times-Bold@0 SF4.32 E<6564636c73>-.1 E F0 4.32 <6f7074696f6e2e20546865>4.32 F 1.82<6c656e677468206f6620746865207465> 4.32 F 1.82<787420737472696e6773206973206e6f74>-.15 F 2.5 <636f756e7465642e2045616368>161.5 184.8 R<64696d656e73696f6e206f66206120 6d756c746964696d656e73696f6e616c20617272617920697320636f756e746564207365 7061726174656c79>2.5 E<2e>-.65 E 1.465 <5468657365206e756d6265727320617265206f62>144 201.6 R 1.465<76696f75736c 79206e6f74207468652073616d65207768656e2070726f6a656374208c6c657320617265 207573656420696e20706c616365206f6620746865206f726967696e616c>-.15 F .775 <736f7572636520636f64652e>144 213.6 R<4576>5.775 E .775<656e20746865206e 756d6265727320666f7220676c6f62616c20656e746974696573206d6179206265206469 66>-.15 F .775 <666572656e742c2073696e636520736f6d6520726564756e64616e7420696e666f72> -.25 F<2d>-.2 E<6d6174696f6e20697320656c696d696e6174656420696e2070726f6a 656374208c6c65732e>144 225.6 Q F2108 254.4 Q F0 .381 <4f6e65206f662074686520676f616c73206f6620746865>144 266.4 R F2 <66746e6368656b>2.882 E F0 .382<70726f6772616d20697320746f2068656c702075 7365727320746f20777269746520706f727461626c652046>2.882 F .382 <6f727472616e2070726f6772616d732e>-.15 F<4f6e65>5.382 E .644<706f74656e 7469616c20736f75726365206f66206e6f6e706f72746162696c69747920697320746865 20757365206f662076>144 278.4 R .644<61726961626c65206e616d65732074686174 20617265206c6f6e676572207468616e2073697820636861726163746572732e>-.25 F .703<536f6d6520636f6d70696c657273206a7573742069676e6f7265207468652065> 144 290.4 R .703<7874726120636861726163746572732e>-.15 F .703 <546869732062656861>5.703 F .703 <76696f7220636f756c6420706f74656e7469616c6c79206c65616420746f207477>-.2 F 3.203<6f64>-.1 G<69662d>-3.203 E .27<666572656e742076>144 302.4 R .269 <61726961626c6573206265696e6720636f6e7369646572656420617320746865207361 6d652e>-.25 F -.15<466f>5.269 G 2.769<7269>.15 G .269 <6e7374616e63652c2076>-2.769 F .269<61726961626c6573206e616d6564>-.25 F /F3 10/Courier@0 SF<41564552414745434f5354>2.769 E F0<616e64>2.769 E F3 <415645524147455052494345>144 314.4 Q F0 .497<617265207468652073616d6520 696e20746865208c7273742073697820636861726163746572732e>2.996 F .497<4966 20796f75207769736820746f206361746368207375636820706f737369626c6520636f6e 2d>5.497 F<8d696374732c207573652074686973208d61672e>144 326.4 Q<446566>5 E<61756c74203d206e6f2e>-.1 E 1.545<55736520746865>144 343.2 R F2 4.045 E F0 1.545<696620796f752077>4.045 F 1.545<616e7420746f206c697374>-.1 F F1<616c6c>4.045 E F0 -.25<7661> 4.045 G 1.544<726961626c6573206c6f6e676572207468616e20736978206368617261 63746572732c206e6f74206a757374>.25 F<74686f7365207061697273207468617420 617265207468652073616d6520696e20746865208c727374207369782e>144 355.2 Q <53656520616c736f3a>144 372 Q F22.5 E F0<2c>A F2 2.5 E F0<2e>A F2108 400.8 Q F0 .253<53706563698c65732074686174206120736f72746564206c697374206f6620616c 6c206d6f64756c6573207573656420696e207468652070726f6772616d20626520707269 6e7465642e>144 412.8 R .253<54686973206c69737420697320696e2060>5.253 F <6070726572657175692d>-.74 E<7369746527>144 424.8 Q 2.658<276f>-.74 G <72646572>-2.658 E 2.658<2c69>-.4 G .158<2e652e2065616368206d6f64756c65 206973207072696e746564206f6e6c7920616674657220616c6c20746865206d6f64756c 65732066726f6d2077686963682069742069732063616c6c6564206861>-2.658 F .457 -.15<76652062>-.2 H<65656e>.15 E 2.91<7072696e7465642e2054686973>144 436.8 R .41<697320616c736f2063616c6c656420612060>2.91 F .41 <60746f706f6c6f676963616c20736f727427>-.74 F 2.911<276f>-.74 G 2.911 <6674>-2.911 G .411<68652063616c6c20747265652e>-2.911 F .411 <45616368206d6f64756c65206973206c6973746564206f6e6c79206f6e63652e>5.411 F .042<526f7574696e6573207468617420617265206e6f7420696e207468652063616c 6c2074726565206f6620746865206d61696e2070726f6772616d20617265206f6d697474 65642e>144 448.8 R .041<49662074686572652061726520616e>5.041 F 2.541 <7963>-.15 G .041<79636c657320696e20746865>-2.691 F <63616c6c2067726170682028696c6c65>144 460.8 Q -.05<6761>-.15 G 2.5<6c69> .05 G 2.5<6e73>-2.5 G<74616e646172642046>-2.5 E<6f727472616e2920746865> -.15 E 2.5<7977>-.15 G <696c6c20626520646574656374656420616e6420646961676e6f7365642e>-2.5 E <446566>5 E<61756c74203d206e6f2e>-.1 E<53656520616c736f3a>144 477.6 Q F2 2.5 E<6565>-.18 E F0<2c>A F22.5 E<6f737372>-.18 E<6566>-.18 E F0<2c>A F22.5 E<65666572>-.18 E<656e6365>-.18 E F0 <2c>A F22.5 E F0<2c>A F22.5 E F0<2e>A F2 108 506.4 Q<63653d>-.18 E F1<6c697374>.09 E F0 .074<54686973 2073657474696e6720636f6e74726f6c73206365727461696e206f7074696f6e73206162 6f75742074686520666f726d206f66207468652046>144 518.4 R .075 <6f727472616e20736f7572636520636f64652e>-.15 F<546865>5.075 E F1 <6c697374>2.575 E F0 .075<636f6e7369737473206f66>2.575 F -.1<6b65>144 530.4 S<7977>-.05 E .355 <6f7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e> -.1 F .354<546865726520617265207468726565207370656369616c206b>5.355 F -.15<6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F2<616c6c>2.854 E F0 .354 <746f207475726e206f6e20616c6c20746865>2.854 F<6f7074696f6e732c>144 542.4 Q F2<6e6f6e65>2.838 E F0 .338<746f207475726e207468656d20616c6c206f66> 2.838 F .338<662c20616e64>-.25 F F2<68656c70>2.838 E F0 .339 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.838 F -.15<6579>-.1 G -.1<776f>.15 G .339 <726473207769746820612062726965662065>.1 F<78706c612d>-.15 E .802 <6e6174696f6e206f6620656163682e>144 554.4 R<4966>5.802 E F1<6c697374> 3.302 E F0 .801<6973206f6d69747465642c>3.302 F F23.301 E <6365>-.18 E F0 .801<69732065717569>3.301 F -.25<7661>-.25 G .801 <6c656e7420746f>.25 F F23.301 E<63653d616c6c>-.18 E F0 3.301 <2c61>C<6e64>-3.301 E F23.301 E<6365>-.18 E F0 .801 <69732065717569>3.301 F<762d>-.25 E<616c656e7420746f>144 566.4 Q F2 2.5 E<63653d6e6f6e65>-.18 E F0<2e>A -.15<466f>144 583.2 S 5.131<7263>.15 G 2.631<6f6d7061746962696c697479207769746820707265>-5.131 F 2.631<76696f75732076>-.25 F 2.631<657273696f6e73206f66>-.15 F F2 <66746e6368656b>5.131 E F0 5.131<2c616e>C 2.632 <756d6572696320666f726d206f6620746869732073657474696e6720697320616c736f> -5.131 F 2.988<61636365707465643a20746865>144 595.2 R F1<6c697374>2.988 E F0 .488<6973207265706c616365642062792061206e756d6265722077686963682069 73207468652073756d206f6620746865206e756d6265727320696e20706172656e746865 73657320626573696465>2.988 F .395<746865206b>144 607.2 R -.15<6579>-.1 G -.1<776f>.15 G .395<72647320696e2074686520666f6c6c6f>.1 F .395 <77696e67206c6973742e>-.25 F<28546865>5.395 E F2<8c786564>2.895 E F0 <616e64>2.895 E F2<6672>2.895 E<6565>-.18 E F0 .395 <6f7074696f6e7320646f206e6f74206861>2.895 F .695 -.15<7665206e>-.2 H .395<756d657269632076>.15 F 2.895<616c7565732e2920546865>-.25 F -.1 <7761>144 619.2 S<726e696e67206b>.1 E -.15<6579>-.1 G -.1<776f>.15 G<72 64732077697468207468656972206d65616e696e67732061726520617320666f6c6c6f> .1 E<77733a>-.25 E F2<8c786564>144 636 Q F0<3a>A .395 <496e746572707265742074686520736f75726365206173208c78>171.78 648 R .395 <656420666f726d20287769746820737570706f727465642065>-.15 F .394 <7874656e73696f6e7320737563682061732065>-.15 F .394 <78636c616d6174696f6e206d61726b20666f72>-.15 F 2.798 <636f6d6d656e7473292e2053746174656d656e7473>171.78 660 R .299<6d75737420 626520696e20636f6c756d6e73203720746f2037322028756e6c65737320746865>2.798 F F22.799 E F0 .299 <73657474696e6720686173206265656e2075736564>2.799 F .758<746f206368616e 67652074686973292c20616e6420626c616e6b7320617265206e6f74207369676e698c63 616e74206f7574736964652063686172616374657220636f6e7465>171.78 672 R .757 <7874202862>-.15 F .757<75742077>-.2 F .757<61726e65642061626f7574>-.1 F .384<756e64657220746865>171.78 684 R F22.884 E<65747479>-.18 E F0 2.884<6f7074696f6e292e2054686973>2.884 F .384<69732074686520646566> 2.884 F .384 <61756c74206d6f646520756e6c6573732074686520736f75726365208c6c652065>-.1 F .385<7874656e73696f6e206973>-.15 F F1 1.666<2e66>2.885 G<3930>-1.666 E F0<6f72>171.78 696 Q F1 1.666<2e46>2.5 G<3930>-1.666 E F0 5<2e74>C <686973206f7074696f6e2063616e6e6f74206265206769>-5 E -.15<7665>-.25 G 2.5<6e74>.15 G<6f6765746865722077697468>-2.5 E F22.5 E <63653d6672>-.18 E<6565>-.18 E F0<2e>A F2<6672>144 712.8 Q<6565>-.18 E F0 8.53<3a49>C .526 <6e746572707265742074686520736f75726365206173206672656520666f726d2e> -8.53 F .526<53746174656d656e7473206d617920626520616e>5.526 F .526 <79776865726520696e20636f6c756d6e73203120746f203133322c20636f6d2d>-.15 F 1.188<6d656e74732063616e206f6e6c79206265>171.78 724.8 R 1.188 <67696e207769746820616e2065>-.15 F 1.189<78636c616d6174696f6e206d61726b 2c20616e6420626c616e6b732061726520726571756972656420696e20736f6d6520706c 61636573>-.15 F<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034> .15 E<3237>191.795 E 0 Cg EP %%Page: 28 28 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .278 <73756368206173206265747765656e206964656e74698c65727320616e64206b>171.78 84 R -.15<6579>-.1 G -.1<776f>.15 G 2.777<7264732e2054686973>.1 F .277 <69732074686520646566>2.777 F .277 <61756c74206d6f64652069662074686520736f75726365208c6c652065>-.1 F <7874656e2d>-.15 E 3.241<73696f6e206973>171.78 96 R/F1 10/Times-Italic@0 SF 1.666<2e66>5.741 G<3930>-1.666 E F0<6f72>5.741 E F1 1.666<2e46>5.741 G<3930>-1.666 E F0 8.241<2e54>C 3.241 <686973206f7074696f6e2063616e6e6f74206265206769>-8.241 F -.15<7665>-.25 G 5.742<6e74>.15 G 3.242<6f6765746865722077697468>-5.742 F/F2 10 /Times-Bold@0 SF5.742 E<63653d8c786564>-.18 E F0<6f72>5.742 E F2171.78 108 Q<63653d646563ad746162>-.18 E<646563ad746162> 144 124.8 Q F0<2831293a>2.5 E .2<416363657074204445432d7374796c65207461 622d666f726d617474656420736f757263652e>171.78 136.8 R 2.699<416c>5.199 G .199<696e65206265>-2.699 F .199<67696e6e696e67207769746820616e20696e6974 69616c207461622077696c6c2062652074726561746564>-.15 F .274 <61732061206e65>171.78 148.8 R 2.774<7773>-.25 G .275<746174656d656e7420 6c696e6520756e6c65737320746865206368617261637465722061667465722074686520 7461622069732061206e6f6e7a65726f2064696769742c20696e20776869636820636173 65206974>-2.774 F 1.543 <69732074726561746564206173206120636f6e74696e756174696f6e206c696e652e> 171.78 160.8 R 1.543<546865206e65>6.543 F 1.542<787420636f6c756d6e206166 7465722074686520746162206f7220636f6e74696e756174696f6e206d61726b206973> -.15 F<74616b>171.78 172.8 Q .446<656e20617320636f6c756d6e20372e>-.1 F 2.946<4177>5.446 G .447<61726e696e672077696c6c206265206769>-3.046 F -.15 <7665>-.25 G 2.947<6e69>.15 G 2.947<6e74>-2.947 G .447<6865206361736520 776865726520746865206c696e65206973206120636f6e74696e756174696f6e2c206966> -2.947 F F2171.78 184.8 Q F0<697320696e206566> 2.5 E<666563742e>-.25 E F2<766d73ad696e636c756465>144 201.6 Q F0 <2832293a>2.5 E .073<41636365707420564d532d7374796c65>171.78 213.6 R/F3 10/Courier@0 SF<494e434c554445>2.573 E F0 2.573 <73746174656d656e74732e205468657365>2.573 F<666f6c6c6f>2.573 E 2.573 <7774>-.25 G .072<6865206e6f726d616c2073796e7461782c2062>-2.573 F .072 <757420776974682074686520666f6c2d>-.2 F<6c6f>171.78 225.6 Q .273<77696e 67206164646974696f6e616c2066656174757265733a2028312920746865208c6c652065> -.25 F .273<7874656e73696f6e2c206966206e6f74206769>-.15 F -.15<7665>-.25 G .273<6e2c20646566>.15 F .273 <61756c747320746f207468652073616d652061732061206e6f72>-.1 F<2d>-.2 E .669<6d616c20736f75726365208c6c652065>171.78 237.6 R .669 <7874656e73696f6e3b20616e642028322920746865206f7074696f6e>-.15 F F3 <2f4c495354>3.169 E F0<6f72>3.169 E F3<2f4e4f4c495354>3.169 E F0 .668 <63616e20626520617070656e64656420746f20746865>3.168 F<696e636c7564652d8c 6c65206e616d652c20746f20636f6e74726f6c206c697374696e67206f66206974732063 6f6e74656e74732e>171.78 249.6 Q F2<756e6978ad6261636b736c617368>144 266.4 Q F0<2834293a>2.5 E .413<48616e646c6520554e49582d7374796c65206261 636b736c617368206573636170657320696e2063686172616374657220737472696e6773 2e>171.78 278.4 R .413 <546865206573636170652073657175656e636520666f6c6c6f>5.413 F<77696e67> -.25 E .271<746865206261636b736c6173682077696c6c2062652065>171.78 290.4 R -.25<7661>-.25 G .271<6c7561746564206163636f7264696e6720746f2074686520 414e5349207374616e6461726420666f7220737472696e677320696e20433a2075702074 6f207468726565>.25 F .898 <646967697473207369676e69667920616e206f6374616c2076>171.78 302.4 R .898< 616c75652c20616e2078207369676e698c657320746865207374617274206f6620612068 65>-.25 F .898<7861646563696d616c20636f6e7374616e742c20616e>-.15 F 3.399 <796f>-.15 G 3.399<6674>-3.399 G<6865>-3.399 E .561<6c657474657273206120 622066206e20722074207369676e696679207370656369616c20636f6e74726f6c20636f 6465732c20616e6420616e>171.78 314.4 R 3.061<796f>-.15 G .561 <74686572206368617261637465722028696e636c7564696e67206e65>-3.061 F <776c696e6529>-.25 E .872 <7369676e698c6573207468652063686172616374657220697473656c662e>171.78 326.4 R .872<5768656e207468697320736f7572636520636f6465206f7074696f6e20 697320696e206566>5.872 F .872<666563742c20612077>-.25 F .872 <61726e696e672077696c6c206265>-.1 F<6769>171.78 338.4 Q -.15<7665>-.25 G 2.5<6e69>.15 G 2.5<6674>-2.5 G<6865>-2.5 E F2 2.5 E F0 <73657474696e672069732073706563698c65642e>2.5 E .193<54686520646566> 171.78 355.2 R .193<61756c742062656861>-.1 F .193 <76696f7220697320746f20747265617420746865206261636b736c617368206c696b> -.2 F 2.693<6561>-.1 G .493 -.15<6e79206f>-2.693 H .192 <74686572206e6f726d616c20636861726163746572>.15 F 2.692<2c62>-.4 G .192 <757420612077>-2.892 F<61726e696e67>-.1 E .788<61626f757420706f72746162 696c6974792077696c6c2062652067656e65726174656420696620746865>171.78 367.2 R F23.289 E F0 .789 <8d6167206973207365742e>3.289 F .789<42656361757365206f66207468652066> 5.789 F .789<6163742074686174>-.1 F 1.165<736f6d6520636f6d70696c65727320 747265617420746865206261636b736c61736820696e2061206e6f6e7374616e64617264 2077>171.78 379.2 R<6179>-.1 E 3.664<2c69>-.65 G 3.664<7469>-3.664 G 3.664<7370>-3.664 G 1.164 <6f737369626c6520666f72207374616e646172642d636f6e2d>-3.664 F<666f726d69 6e672070726f6772616d7320746f206265206e6f6e2d706f727461626c65206966207468 65>171.78 391.2 Q 2.5<7975>-.15 G<736520746865206261636b736c617368206368 6172616374657220696e20737472696e67732e>-2.5 E<53696e6365>171.78 408 Q F2 <66746e6368656b>3.383 E F0 .883<646f6573206e6f7420646f206d75636820776974 682074686520696e74657270726574656420737472696e672c2069742069732073656c64 6f6d206e656365737361727920746f20757365>3.383 F .617 <74686973206f7074696f6e2e>171.78 420 R .617 <4974206973206e656564656420696e206f7264657220746f2061>5.617 F -.2<766f> -.2 G .617<69642073707572696f75732077>.2 F .617<61726e696e6773206f6e6c79 20696620286129207468652070726f6772616d206265696e67>-.1 F<636865636b> 171.78 432 Q .651<65642075736573206261636b736c61736820746f20656d62656420 616e2061706f7374726f706865206f722071756f7465206d61726b20696e206120737472 696e6720696e7374656164206f66207573696e67>-.1 F .869<746865207374616e6461 7264206d656368616e69736d206f6620646f75626c696e67207468652064656c696d6974 65723b2028622920746865206261636b736c617368206973207573656420746f20657363 61706520746865>171.78 444 R .464<656e642d6f662d6c696e6520696e206f726465 7220746f20636f6e74696e7565206120737472696e67206163726f7373206d756c746970 6c6520736f75726365206c696e65733b206f72202863292061>171.78 456 R F3 <504152414d45544552>2.965 E F0 .399<64658c6e6974696f6e207573657320616e20 696e7472696e73696320737472696e672066756e6374696f6e2073756368206173> 171.78 468 R F3<4c454e>2.899 E F0 .398 <776974682073756368206120737472696e67206173206172>2.899 F .398 <67756d656e742c20616e64>-.18 F<746861742076>171.78 480 Q<616c7565206973 206c61746572207573656420746f2064658c6e652061727261792064696d656e73696f6e 732c206574632e>-.25 E F2<706172616dad696d706c69636974ad74797065>144 496.8 Q F0<2838293a>2.5 E .768<496d706c6963697420747970696e67206f662061 20706172616d657465722062792074686520646174612074797065206f66207468652076> 171.78 508.8 R .768<616c75652061737369676e65642e>-.25 F .768 <536f6d65206e6f6e2d7374616e64617264>5.768 F .533 <636f6d70696c657273206d617920616c6c6f>171.78 520.8 R 3.033<7774>-.25 G .533<686520646174612074797065206f66207468652076>-3.033 F .533 <616c756520746f206f>-.25 F -.15<7665>-.15 G .533<7272696465207468652046> .15 F .533<6f727472616e20373720646566>-.15 F .533 <61756c742074797065206f662061>-.1 F .065<706172616d65746572207468617420 6973206261736564206f6e20746865208c727374206c6574746572206f66207468652070 6172616d65746572206e616d652e>171.78 532.8 R .066 <54686973206f7074696f6e206f6e6c79206170706c69657320746f>5.066 F F3 <504152414d45544552>171.78 544.8 Q F0 .265<73746174656d656e7473206f6620 746865207374616e6461726420666f726d2077686963682068617320706172656e746865 7365732e>2.765 F 2.765<4170>5.265 G .265 <6172616d65746572207468617420686173>-2.765 F 2.026<6265656e2065>171.78 556.8 R 2.027<78706c696369746c79206465636c6172656420696e2061207479706520 73746174656d656e74207072696f7220746f20746865>-.15 F F3 <504152414d45544552>4.527 E F0 2.027<73746174656d656e74206973206e6f74> 4.527 F<6166>171.78 568.8 Q .472 <6665637465642062792074686973206f7074696f6e2e>-.25 F 2.972<4177>5.472 G .472<61726e696e672077696c6c206265206769>-3.072 F -.15<7665>-.25 G 2.971 <6e75>.15 G .471<6e64657220746865>-2.971 F F2 2.971 E F0<6f72>2.971 E F2 171.78 580.8 Q F0<6f7074696f6e2e>2.5 E .612<4e6f746520746861742074686973 20696d706c6963697420747970696e6720697320747265617465642061732065717569> 171.78 597.6 R -.25<7661>-.25 G .612<6c656e7420746f20616e2065>.25 F .612 <78706c696369742074797065206465636c61726174696f6e20666f7220746865>-.15 F <706172616d65746572>171.78 609.6 Q 6.815<2e54>-.55 G 1.815 <68657265666f72652c20696620796f7520757365>-6.815 F F24.315 E <6564636c733d756e6465636c6172>-.1 E<6564ad6f6e6c79>-.18 E F0 1.815 <746f2067656e6572617465206465636c61726174696f6e73>4.315 F <6f6e6c79206f6620756e6465636c617265642076>171.78 621.6 Q <61726961626c65732c20746865736520706172616d65746572732077696c6c>-.25 E F1<6e6f74>2.5 E F0<626520696e636c756465642e>2.5 E F2 <646563ad706172616dad7374616e64617264ad74797065>144 638.4 Q F0 <283136293a>2.5 E -.15<466f>171.78 650.4 S<6c6c6f>.15 E 4.133<7774>-.25 G 1.633<68652046>-4.133 F 1.633<6f727472616e2037372072756c6520666f722064 61746120747970696e67206f66204445432046>-.15 F 1.634 <6f727472616e207374796c6520706172616d65746572732e>-.15 F 1.634 <546865736520617265>6.634 F .491<6465636c61726564207573696e672061206e6f 6e7374616e6461726420666f726d206f6620746865>171.78 662.4 R F3 <504152414d45544552>2.991 E F0 .491 <73746174656d656e74207768696368206c61636b7320706172656e7468657365732e> 2.991 F .131<4163636f7264696e6720746f204445432046>171.78 674.4 R .131<6f 727472616e2c20706172616d65746572732064658c6e6564206279207468697320666f72 6d206f66207468652073746174656d656e74206861>-.15 F .432 -.15<76652074>-.2 H .132<686569722064617461>.15 F .186<74797065206769>171.78 686.4 R -.15 <7665>-.25 G 2.686<6e62>.15 G 2.686<7974>-2.686 G .186 <686520646174612074797065206f66207468652076>-2.686 F .186 <616c75652061737369676e65642e>-.25 F .185 <5573652074686973206f7074696f6e20746f2074656c6c>5.186 F F2 <66746e6368656b>2.685 E F0 .185<6e6f7420746f20666f6c2d>2.685 F<6c6f> 171.78 698.4 Q 2.684<7774>-.25 G .184<6869732072756c652062>-2.684 F .184 <757420696e737465616420746f20757365207468652073616d652072756c6520617320 666f72207374616e64617264>-.2 F F3<504152414d45544552>2.684 E F0 2.684 <73746174656d656e74732e2054686973>2.684 F <6f7074696f6e20646f6573206e6f74206170706c7920746f>171.78 710.4 Q F3 <504152414d45544552>2.5 E F0 <73746174656d656e7473206f6620746865207374616e6461726420666f726d2e>2.5 E .243<427920646566>144 727.2 R .243<61756c742c20616c6c20746865736520736f 7572636520636f6465206f7074696f6e7320617265207475726e6564206f66>-.1 F .243<662c2065>-.25 F .242<786365707420666f7220746865>-.15 F F2 <766d73ad696e636c756465>2.742 E F0 .242<6f7074696f6e2c207768696368>2.742 F<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3238> 191.795 E 0 Cg EP %%Page: 29 29 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<6973206f6e20627920646566>144 84 Q<61756c7420696e2074686520564d532076>-.1 E<657273696f6e2e2e>-.15 E <53656520616c736f3a>144 100.8 Q/F1 10/Times-Bold@0 SF2.5 E F0 <2c>A F12.5 E F0<2c>A F12.5 E F0<2e>A F1108 129.6 Q/F2 10/Times-Italic@0 SF <6c697374>.09 E F0<50726f>144 141.6 Q 2.122<76696465732065>-.15 F <787472612d7069636b>-.15 E 4.622<7977>-.15 G 2.122 <61726e696e67732061626f7574206f62736f6c657363656e74206f72206f6c642d66> -4.722 F 2.123 <617368696f6e65642070726f6772616d6d696e6720636f6e737472756374696f6e732e> -.1 F .235<54686973206f7074696f6e2069732068656c7066756c20666f72206566> 144 153.6 R .235<666f72747320746f20666f6c6c6f>-.25 F 2.734<77616d>-.25 G .234<6f6465726e2070726f6772616d6d696e67207374796c652e>-2.734 F .234 <284d6f7374206f6620746865207468696e677320636f6d2d>5.234 F 4.155<706c6169 6e65642061626f757420756e6465722074686973206f7074696f6e2061726520666f7262 696464656e20696e20746865>144 165.6 R F1<46>6.655 E/F3 10/Courier@0 SF 4.155<737562736574206c616e67756167652e29>10.155 F<4279>16.155 E<64656661 756c742c20616c6c207761726e696e677320617265207475726e6564206f66662e>144 177.6 Q F0<546865>144 194.4 Q F2<6c697374>3.183 E F0 .683 <636f6e7369737473206f66206b>3.183 F -.15<6579>-.1 G -.1<776f>.15 G .683 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .683<546865726520617265207468726565207370656369616c206b>5.683 F -.15 <6579>-.1 G -.1<776f>.15 G<7264733a>.1 E F1<616c6c>144 206.4 Q F0 .047 <746f207475726e206f6e20616c6c20746865206f7074696f6e732c>2.547 F F1 <6e6f6e65>2.547 E F0 .047<746f207475726e207468656d20616c6c206f66>2.547 F .047<662c20616e64>-.25 F F1<68656c70>2.547 E F0 .048 <746f207072696e7420746865206c697374206f6620616c6c20746865206b>2.547 F -.15<6579>-.1 G -.1<776f>.15 G<726473>.1 E .209 <7769746820612062726965662065>144 218.4 R .208 <78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.208 E F2<6c697374> 2.708 E F0 .208<6973206f6d69747465642c>2.708 F F12.708 E F0 .208<69732065717569>2.708 F -.25<7661>-.25 G .208<6c656e7420746f>.25 F F12.708 E F0 2.708<2c61>C<6e64>-2.708 E F1 2.708 E F0<69732065717569>144 230.4 Q -.25<7661>-.25 G <6c656e7420746f>.25 E F12.5 E F0 5<2e54>C <68652077>-5 E<61726e696e67206b>-.1 E -.15<6579>-.1 G -.1<776f>.15 G<72 64732077697468207468656972206d65616e696e67732061726520617320666f6c6c6f> .1 E<77733a>-.25 E F1<626c6f636bad6966>144 247.2 Q F0<3a>A .998<436f6d70 6c61696e2061626f75742061726974686d657469632049462073746174656d656e742e> 171.78 259.2 R .999<41636365707420626c6f636b204946206f72206c6f676963616c 2049462028776869636820636f6e74726f6c732061>5.998 F <73696e676c652073746174656d656e74292e>171.78 271.2 Q F1 <636f6e737472756374ad6e616d65>144 288 Q F0<3a>A 1.358<436f6d706c61696e20 61626f757420756e6e616d656420626c6f636b20636f6e737472756374733a204946> 171.78 300 R 3.858<2c44>-.8 G 1.358 <4f2c20616e642053454c45435420434153452e>-3.858 F 1.357 <4e6f746520746861742069662061>6.357 F .604<636f6e737472756374206e616d65 2069732070726573656e74206f6e20746865206f70656e696e672073746174656d656e74 206f66206120636f6e7374727563742c207468656e206974206973207265717569726564 20746f206265>171.78 312 R .946<70726573656e74206f6e20616c6c206f74686572 20636f6d706f6e656e742073746174656d656e74732028454c53452c20454e44204946> 171.78 324 R 3.446<2c65>-.8 G .945 <74632e29206f662074686520636f6e7374727563742e>-3.446 F .945 <496e2074686174>5.945 F 1.145<636173652061206d697373696e6720636f6e737472 756374206e616d65206f6e2074686f73652073746174656d656e74732067656e65726174 657320612073796e746178206572726f72207265>171.78 336 R -.05<6761>-.15 G 1.146<72646c657373206f66>.05 F 1.575<74686973206f7074696f6e2e>171.78 348 R 1.575 <54686520707572706f7365206f662074686973206f7074696f6e20697320746f2077> 6.575 F 1.574<61726e2069662074686520636f6e73747275637420636f6d706c657465 6c79206c61636b7320746865>-.1 F<6f7074696f6e616c206e616d652e>171.78 360 Q F1<64697374696e6374ad646f>144 376.8 Q F0<3a>A <436f6d706c61696e206966207477>171.78 388.8 Q 2.5<6f44>-.1 G 2.5<4f6c> -2.5 G<6f6f7073207368617265206120636f6d6d6f6e207465726d696e61746f722073 746174656d656e742e>-2.5 E F1<646fad636f6e737472756374>144 405.6 Q F0<3a> A 1.024<436f6d706c61696e206966207465726d696e61746f72206f66206120444f206c 6f6f7020697320616e>171.78 417.6 R 1.024<797468696e67206f7468657220746861 6e20616e20454e4420444f206f7220434f4e54494e5545>-.15 F 2.748 <73746174656d656e742e2054686973>171.78 429.6 R .248<69732074686520726571 756972656d656e7420696e206f7264657220666f7220746865206c6f6f7020746f206d65 6574207468652046>2.748 F .247 <6f727472616e2039302064658c6e6974696f6e206f66>-.15 F 2.5<6164>171.78 441.6 S<6f2d636f6e7374727563742e>-2.5 E F1<646fad656e64646f>144 458.4 Q F0<3a>A .69<436f6d706c61696e206966207465726d696e61746f72206f66206120444f 206c6f6f7020697320616e>171.78 470.4 R .69<797468696e67206f74686572207468 616e20616e20454e4420444f2073746174656d656e742e>-.15 F<2854686973>5.69 E <6f7074696f6e206f>171.78 482.4 Q -.15<7665>-.15 G<72726964657320746865> .15 E F1<646fad636f6e737472756374>2.5 E F0 <6f7074696f6e2c206265696e672065>2.5 E -.15<7665>-.25 G 2.5<6e73>.15 G <74726963746572>-2.5 E<2e29>-.55 E F1<656e64ad6e616d65>144 499.2 Q F0 <3a>A<436f6d706c61696e2061626f75742074686520616273656e6365206f6620746865 2073756270726f6772616d206e616d65206f6e207374727563747572656420454e442073 746174656d656e74732e>171.78 511.2 Q F1 -.25<666f>144 528 S <726d6174ad73746d74>.25 E F0<3a>A 2.324<436f6d706c61696e2061626f75742074 68652070726573656e6365206f6620464f524d41>171.78 540 R 4.824<5473>-1.11 G 4.824<746174656d656e74732e204f6e6c79>-4.824 F 2.324<74686520464f524d41> 4.824 F 4.824<5473>-1.11 G<746174656d656e7473>-4.824 E<7468656d73656c76> 171.78 552 Q<657320617265208d61676765642c206e6f742074686520726566657265 6e63657320746f207468656d20696e20492f4f206c697374732e>-.15 E F1<676f746f> 144 568.8 Q F0 6.67<3a43>C 1.44<6f6d706c61696e2061626f757420746865207072 6573656e6365206f6620756e636f6e646974696f6e616c2c20636f6d7075746564206f72 2061737369676e656420474f>-6.67 F 1.8 -.18<544f2073>-.4 H <746174656d656e74732e>.18 E<416c736f20636f6d706c61696e2061626f757420616c 7465726e6174652072657475726e73202862>171.78 580.8 Q<7574206e6f742061626f 7574206c6162656c732061732073756270726f6772616d206172>-.2 E <67756d656e7473292e>-.18 E F1<6c6162656c6564ad73746d74>144 597.6 Q F0 <3a>A .365<436f6d706c61696e2061626f7574207468652070726573656e6365206f66 206c6162656c7320286e756d6265727329206f6e2073746174656d656e7473206f746865 72207468616e20464f524d41>171.78 609.6 R 2.865<5473>-1.11 G<746174652d> -2.865 E 3.185<6d656e74732e202853696e6365>171.78 621.6 R<464f524d41> 3.185 E 3.185<5473>-1.11 G .685<746174656d656e747320617265206172>-3.185 F .685<677561626c7920636f6e>-.18 F -.15<7665>-.4 G .686 <6e69656e7420616e64206e6f742072656164696c79206162>.15 F .686 <757365642c20636f6d2d>-.2 F<706c61696e74732061626f7574207468656d20617265 20636f6e74726f6c6c656420627920746865207365706172617465>171.78 633.6 Q F1 -.25<666f>2.5 G<726d6174ad73746d74>.25 E F0 -.1<6b65>2.5 G<7977>-.05 E <6f72642e29>-.1 E F1<7072>144 650.4 Q<6f6772616dad73746d74>-.18 E F0<3a> A<436f6d706c61696e2061626f75742074686520616273656e6365206f662061205052> 171.78 662.4 Q<4f4752414d2073746174656d656e7420617420746865206865616420 6f6620746865206d61696e2070726f6772616d2e>-.4 E F1<7374727563747572>144 679.2 Q<6564ad656e64>-.18 E F0<3a>A .292<436f6d706c61696e2061626f757420 74686520757365206f66206120706c61696e20454e442073746174656d656e7420746f20 656e6420612073756270726f6772616d2c20726174686572207468616e20612073747275 632d>171.78 691.2 R 2.55 <747572656420454e442073746174656d656e742028454e44205052>171.78 703.2 R 2.55<4f4752414d2c20454e442053554252>-.4 F 2.55 <4f5554494e452c20454e442046554e4354494f4e2c206f72>-.4 F <454e4420424c4f434b2044>171.78 715.2 Q -1.21 -1.11<41542041>-.4 H<292e> 1.11 E<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3239>191.795 E 0 Cg EP %%Page: 30 30 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<53656520616c736f3a>144 84 Q/F1 10/Times-Bold@0 SF2.5 E F0<2c>A F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E<65747479>-.18 E F0<2c>A F1 2.5 E F0<2e>A F1108 112.8 Q F0 2.599<4173>144 124.8 S .098<796d626f6c207461626c652077696c6c206265207072 696e746564206f757420666f722065616368206d6f64756c652c206c697374696e672061 6c6c206964656e74698c657273206d656e74696f6e656420696e20746865206d6f64756c 652e>-2.599 F .472<54686973207461626c65206769>144 136.8 R -.15<7665>-.25 G 2.972<7374>.15 G .472<6865206e616d65206f6620656163682076>-2.972 F .473 <61726961626c652c206974732064617461747970652c20616e6420746865206e756d62 6572206f662064696d656e73696f6e7320666f72206172726179732e>-.25 F .273<41 6e20617374657269736b20282a2920696e646963617465732074686174207468652076> 144 148.8 R .273<61726961626c6520686173206265656e20696d706c696369746c79 2074797065642c20726174686572207468616e206265696e67206e616d656420696e2061 6e>-.25 F -.15<6578>144 160.8 S .075 <706c696369742074797065206465636c61726174696f6e2073746174656d656e742e> .15 F .075<546865207461626c6520616c736f206c6973747320616c6c207375627072 6f6772616d7320696e>5.075 F -.2<766f>-.4 G -.1<6b65>.2 G 2.575<6462>.1 G 2.575<7974>-2.575 G .075<6865206d6f64756c652c20616c6c>-2.575 F <434f4d4d4f4e20626c6f636b73206465636c617265642c206574632e>144 172.8 Q <446566>5 E<61756c74203d206e6f2e>-.1 E .337<416c736f2c20666f722065616368 206d6f64756c652c2061206c6162656c207461626c652077696c6c206265207072696e74 65642e>144 189.6 R .336<546865207461626c65206c697374732065616368206c6162 656c2064658c6e656420696e20746865206d6f642d>5.337 F .627<756c653b20746865 206c696e65206f6e20776869636820736169642073746174656d656e74206c6162656c20 69732064658c6e65643b20616e64207468652073746174656d656e742074797065202865> 144 201.6 R -.15<7865>-.15 G .628<63757461626c652c20666f726d61742c>.15 F <6f722073706563698c636174696f6e292e>144 213.6 Q<546865206c6162656c732061 7265206c697374656420696e2073657175656e7469616c206f72646572>5 E<2e>-.55 E 1.55<416c736f207072696e7465642069732061207461626c652064657363726962696e 672074686520492f4f20756e697473207573656420627920746865206d6f64756c652c20 746f676574686572207769746820696e666f726d6174696f6e>144 230.4 R .044 <61626f757420686f>144 242.4 R 2.544<7774>-.25 G<6865>-2.544 E 2.544 <7961>-.15 G .045<726520757365643a2077686174206f7065726174696f6e73206172 6520706572666f726d65642c207768657468657220746865206163636573732069732073 657175656e7469616c206f72206469726563742c>-2.544 F<616e642077686574686572 2074686520492f4f20697320666f726d6174746564206f7220756e666f726d6174746564 2e>144 254.4 Q<53656520616c736f3a>144 271.2 Q F12.5 E <6565>-.18 E F0<2c>A F12.5 E<6f737372>-.18 E<6566>-.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E<65666572>-.18 E<656e6365>-.18 E F0<2c>A F12.5 E F0<2c>A F12.5 E F0<2e>A F1 108 300 Q/F2 10/Times-Italic@0 SF<6c697374>.09 E F0 -.8<5761>144 312 S 1.434<726e2061626f757420706f737369626c6520747275 6e636174696f6e20286f7220726f756e646f66>.8 F 1.434<6629206572726f72732e> -.25 F 1.433 <4d6f7374206f66207468657365206172652072656c6174656420746f20696e7465> 6.434 F 1.433<6765722061726974682d>-.15 F 2.5<6d657469632e204279>144 324 R<646566>2.5 E<61756c742c20616c6c2077>-.1 E <61726e696e677320617265207475726e6564206f6e2e>-.1 E .528 <546869732073657474696e672070726f>144 340.8 R .528 <76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 3.028<7274>.15 G .528<68652077>-3.028 F .529<61726e696e67732061626f75 7420706f737369626c65207472756e636174696f6e206572726f72732e>-.1 F<546865> 5.529 E F2<6c697374>3.029 E F0 2.199<636f6e7369737473206f66206b>144 352.8 R -.15<6579>-.1 G -.1<776f>.15 G 2.199 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F 2.198<53696e636520616c6c2077>7.199 F 2.198 <61726e696e677320617265206f6e20627920646566>-.1 F<61756c742c>-.1 E 2.138 <696e636c7564652061206b>144 364.8 R -.15<6579>-.1 G -.1<776f>.15 G 2.138 <7264207072658c78>.1 F 2.138<6564206279>-.15 F F1<6e6fad>4.638 E F0 2.139<746f207475726e206f66>4.639 F 4.639<666170>-.25 G 2.139 <6172746963756c61722077>-4.639 F 4.639<61726e696e672e205468657265>-.1 F 2.139<617265207468726565207370656369616c>4.639 F -.1<6b65>144 376.8 S <7977>-.05 E<6f7264733a>-.1 E F1<616c6c>3.182 E F0 .682 <746f207475726e206f6e20616c6c207468652077>3.182 F .682 <61726e696e67732061626f7574207472756e636174696f6e2c>-.1 F F1<6e6f6e65> 3.182 E F0 .681<746f207475726e207468656d20616c6c206f66>3.182 F .681 <662c20616e64>-.25 F F1<68656c70>3.181 E F0<746f>3.181 E .185 <7072696e7420746865206c697374206f6620616c6c20746865206b>144 388.8 R -.15 <6579>-.1 G -.1<776f>.15 G .185<726473207769746820612062726965662065>.1 F .185<78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.185 E F2 <6c697374>2.685 E F0 .185<6973206f6d69747465642c>2.685 F F1 2.685 E F0<6973>2.685 E<65717569>144 400.8 Q -.25<7661>-.25 G .056<6c656e7420746f>.25 F F1 2.556 E F0 2.556<2c61>C<6e64>-2.556 E F1 2.556 E F0 .056<69732065717569>2.556 F -.25 <7661>-.25 G .056<6c656e7420746f>.25 F F1 2.556 E F0 5.056<2e54>C .056<68652077> -5.056 F<61726e2d>-.1 E<696e67206b>144 412.8 Q -.15<6579>-.1 G -.1<776f> .15 G<7264732077697468207468656972206d65616e696e67732061726520617320666f 6c6c6f>.1 E<77733a>-.25 E F1<696e74ad6469>144 429.6 Q <76ad6578706f6e656e74>-.1 E F0<3a>A 1.21 <757365206f662074686520726573756c74206f6620696e7465>171.78 441.6 R 1.21 <676572206469>-.15 F 1.21<766973696f6e20617320616e2065>-.25 F 3.71 <78706f6e656e742e2054686973>-.15 F 1.21 <737567676573747320746861742061207265616c2071756f7469656e74206973>3.71 F 3.673<696e74656e6465642e20416e>171.78 453.6 R -.15<6578>3.673 G 1.172 <616d706c652077>.15 F 1.172<6f756c642062652077726974696e67>-.1 F/F3 10 /Courier@0 SF<582a2a28312f3329>3.672 E F0 1.172<746f2065>3.672 F -.25 <7661>-.25 G 1.172<6c7561746520746865206375626520726f6f74206f66>.25 F F3 <58>3.672 E F0 3.672<2e54>C<6865>-3.672 E<636f72726563742065>171.78 465.6 Q<787072657373696f6e206973>-.15 E F3<582a2a28312e2f332e29>2.5 E F0 <2e>A F1<696e74ad6469>144 482.4 Q<76ad72>-.1 E<65616c>-.18 E F0<3a>A <436f6e>171.78 494.4 Q -.15<7665>-.4 G .472<7273696f6e206f6620616e2065> .15 F .473<787072657373696f6e20696e>-.15 F -.2<766f>-.4 G .473 <6c76696e6720616e20696e7465>.2 F .473<676572206469>-.15 F .473 <766973696f6e20746f207265616c2e>-.25 F .473 <5468697320737567676573747320746861742061207265616c>5.473 F <71756f7469656e7420697320696e74656e6465642e>171.78 506.4 Q F1 <696e74ad6469>144 523.2 Q<76ad7a6572>-.1 E<6f>-.18 E F0<3a>A<6469>171.78 535.2 Q<766973696f6e20696e20616e20696e7465>-.25 E <67657220636f6e7374616e742065>-.15 E<787072657373696f6e2074686174207969 656c6473206120726573756c74206f66207a65726f2e>-.15 E F1 <696e74ad6e6567ad706f>144 552 Q<776572>-.1 E F0<3a>A -.15<6578>171.78 564 S .123<706f6e656e74696174696f6e206f6620616e20696e7465>.15 F .123 <6765722062792061206e65>-.15 F -.05<6761>-.15 G<7469>.05 E .423 -.15 <76652069>-.25 H<6e7465>.15 E .123<67657220287768696368207969656c647320 7a65726f20756e6c65737320746865206261736520696e7465>-.15 F<676572>-.15 E <6973203120696e206d61676e6974756465292e>171.78 576 Q<546869732073756767 6573747320746861742061207265616c206261736520697320696e74656e6465642e>5 E F1<7072>144 592.8 Q<6f6d6f74696f6e>-.18 E F0<3a>A .608 <6175746f6d6174696320636f6e>171.78 604.8 R -.15<7665>-.4 G .608 <7273696f6e206f662061206c6f>.15 F .609<77657220707265636973696f6e207175 616e7469747920746f206f6e65206f662068696768657220707265636973696f6e2e> -.25 F .609<546865206c6f7373206f66>5.609 F<61636375726163>171.78 616.8 Q 2.507<7966>-.15 G .007<6f72207265616c2076>-2.507 F .007<61726961626c6573 20696e20746869732070726f6365737320697320636f6d70617261626c6520746f207468 6520636f72726573706f6e64696e672064656d6f74696f6e2e>-.25 F<4e6f>5.006 E -.1<7761>171.78 628.8 S<726e696e67206973206769>.1 E -.15<7665>-.25 G 2.5 <6e66>.15 G<6f722070726f6d6f74696f6e206f6620696e7465>-2.5 E<676572207175 616e74697469657320746f207265616c2073696e63652074686973206973206f7264696e 6172696c792065>-.15 E<786163742e>-.15 E F1 -.18<7265>144 645.6 S <616cad646fad696e646578>.18 E F0<3a>A 1.015 <757365206f662061206e6f6e2d696e7465>171.78 657.6 R 1.015 <67657220444f20696e6465>-.15 F 3.515<7869>-.15 G 3.515<6e616c>-3.515 G 1.015<6f6f70207769746820696e7465>-3.515 F 1.015<67657220626f756e64732e> -.15 F 1.015<416e20696e7465>6.015 F 1.015<67657220444f20696e6465>-.15 F 3.515<7877>-.15 G<697468>-3.515 E<7265616c20626f756e647320697320616c> 171.78 669.6 Q -.1<7761>-.1 G<79732077>.1 E <61726e65642061626f7574207265>-.1 E -.05<6761>-.15 G <72646c657373206f6620746869732073657474696e672e>.05 E F1 -.18<7265>144 686.4 S<616cad737562736372697074>.18 E F0<3a>A <757365206f662061206e6f6e2d696e7465>171.78 698.4 Q <676572206172726179207375627363726970742e>-.15 E<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3330>191.795 E 0 Cg EP %%Page: 31 31 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF <7369676e698c63616e74ad8c677572>144 84 Q<6573>-.18 E F0<3a>A -.15 <6f7665>171.78 96 S .669<7273706563696679696e6720612073696e676c65207072 65636973696f6e20636f6e7374616e742e>.15 F .668<54686973206d617920696e6469 636174652074686174206120646f75626c6520707265636973696f6e20636f6e2d>5.668 F<7374616e742077>171.78 108 Q<617320696e74656e6465642e>-.1 E F1 <73697a65ad64656d6f74696f6e>144 124.8 Q F0<3a>A .847 <6175746f6d6174696320636f6e>171.78 136.8 R -.15<7665>-.4 G .847<7273696f 6e206f6620612068696768657220707265636973696f6e207175616e7469747920746f20 6f6e65206f66206c6f>.15 F .847 <77657220707265636973696f6e206f66207468652073616d65>-.25 F 2.626 <747970652e2054686973>171.78 148.8 R -.1<7761>2.626 G .126 <726e696e67206f6e6c79206f6363757273207768656e20616e2065>.1 F .126<78706c 696369742073697a65206973207573656420696e206465636c6172696e67207468652074 797065206f66206f6e65206f72>-.15 F .925 <626f7468206f706572616e647320696e20616e2061737369676e6d656e742e>171.78 160.8 R -.15<466f>5.925 G 3.425<7265>.15 G .925<78616d706c652c20612077> -3.575 F .925<61726e696e672077696c206265206973737565642077686572652061> -.1 F/F2 10/Courier@0 SF<5245414c2a38>3.425 E F0 -.25<7661>171.78 172.8 S .282<726961626c652069732061737369676e656420746f2061>.25 F F2<5245414c> 2.782 E F0 -.25<7661>2.782 G .282<726961626c652c2069662074686520646566> .25 F .282<61756c742077>-.1 F .282 <6f726473697a65206f66203420697320696e206566>-.1 F 2.781<666563742e2041> -.25 F -.1<7761>2.781 G<726e696e67>.1 E 1.088 <697320616c736f206973737565642069662061206c6f6e6720696e7465>171.78 184.8 R 1.089<6765722069732061737369676e656420746f20612073686f72746572206f6e65 2c20666f722065>-.15 F 1.089<78616d706c652c20696620616e>-.15 F F2 <494e5445474552>3.589 E F0 -.15<6578>171.78 196.8 S .166 <7072657373696f6e2069732061737369676e656420746f20616e>.15 F F2 <494e54454745522a32>2.666 E F0 -.25<7661>2.666 G 2.666 <726961626c652e205468657265>.25 F .166<6973206f6e652065>2.666 F .165 <7863657074696f6e20746f2074686973206c61737420636173652c>-.15 F .915<6e61 6d656c79206966207468652072696768742068616e642073696465206f66207468652061 737369676e6d656e74206973206120736d616c6c206c69746572616c20636f6e7374616e 7420286c657373207468616e20313238292e>171.78 208.8 R F1 <74797065ad64656d6f74696f6e>171.78 220.8 Q F0 2.875<3a61>C .375 <75746f6d6174696320636f6e>-2.875 F -.15<7665>-.4 G .374<7273696f6e206f66 20612068696768657220707265636973696f6e207175616e7469747920746f206f6e6520 6f66206c6f>.15 F .374<7765722070726563692d>-.25 F .021 <73696f6e206f6620646966>171.78 232.8 R .021<666572656e7420747970652e> -.25 F .021<546869732077>5.021 F .021 <61726e696e6720696e636c7564657320636f6e>-.1 F -.15<7665>-.4 G .022 <7273696f6e206f66207265616c207175616e74697469657320746f20696e7465>.15 F <676572>-.15 E 2.522<2c64>-.4 G<6f75626c65>-2.522 E .969<70726563697369 6f6e20746f2073696e676c6520707265636973696f6e207265616c2c20616e6420617373 69676e6d656e74206f662061206c6f6e6765722063686172616374657220737472696e67 20746f20612073686f72746572>171.78 244.8 R<6f6e652e>171.78 256.8 Q .013 <5468652077>144 273.6 R .014<61726e696e67732061626f75742070726f6d6f7469 6f6e20616e642064656d6f74696f6e20616c736f206170706c7920746f20636f6d706c65> -.1 F 2.514<7863>-.15 G .014 <6f6e7374616e74732c20636f6e7369646572696e6720746865207072652d>-2.514 F 1.55<636973696f6e20746f2062652074686174206f6620746865207265616c206f7220 696d6167696e61727920706172742e>144 285.6 R -.8<5761>6.549 G 1.549<726e69 6e67732061626f75742070726f6d6f74696f6e7320616e642064656d6f74696f6e732061 7265>.8 F<6769>144 297.6 Q -.15<7665>-.25 G 2.807<6e6f>.15 G .307 <6e6c79207768656e2074686520636f6e>-2.807 F -.15<7665>-.4 G .307 <7273696f6e20697320646f6e65206175746f6d61746963616c6c79>.15 F 2.807 <2c65>-.65 G .307<2e672e20696e2065>-2.807 F .308 <787072657373696f6e73206f66206d6978>-.15 F .308 <656420707265636973696f6e206f7220696e>-.15 F .056 <616e2061737369676e6d656e742073746174656d656e742e>144 309.6 R .056 <496620696e7472696e7369632066756e6374696f6e732073756368206173>5.056 F F2 <494e54>2.555 E F0 .055 <617265207573656420746f20706572666f726d2074686520636f6e>2.555 F -.15 <7665>-.4 G .055<7273696f6e2c206e6f>.15 F -.1<7761>144 321.6 S <726e696e67206973206769>.1 E -.15<7665>-.25 G<6e2e>.15 E <53656520616c736f3a>144 338.4 Q F12.5 E F0<2c> A F12.5 E<6f726473697a65>-.1 E F0<2e>A F1108 367.2 Q/F3 10/Times-Italic@0 SF<6c697374>.09 E F0 -.8<5761>144 379.2 S 2.488< 726e2061626f757420756e75736564206f7220706f737369626c6520756e696e69746961 6c697a65642076>.8 F 2.488<61726961626c65732c20756e7573656420636f6d6d6f6e 20626c6f636b732c20756e64658c6e6564206f72>-.25 F 2.142<756e75736564207374 6174656d656e74206c6162656c732c20616e6420756e75736564206f7220756e64658c6e 65642073756270726f6772616d732e>144 391.2 R 2.141<427920646566>7.142 F 2.141<61756c742c20616c6c2077>-.1 F 2.141<61726e696e677320617265>-.1 F <7475726e6564206f6e2e>144 403.2 Q .312<546869732073657474696e672070726f> 144 420 R .313<76696465732064657461696c656420636f6e74726f6c206f>-.15 F -.15<7665>-.15 G 2.813<7274>.15 G .313<68652077>-2.813 F .313<61726e696e 67732061626f757420706f737369626c65207573616765206572726f72732e>-.1 F <546865>5.313 E F3<6c697374>2.813 E F0<636f6e2d>2.813 E .397 <7369737473206f66206b>144 432 R -.15<6579>-.1 G -.1<776f>.15 G .396 <7264732073657061726174656420627920636f6d6d6173206f7220636f6c6f6e732e>.1 F .396<53696e636520616c6c2077>5.396 F .396 <61726e696e677320617265206f6e20627920646566>-.1 F .396 <61756c742c20696e636c7564652061>-.1 F -.1<6b65>144 444 S<7977>-.05 E .238<6f7264207072658c78>-.1 F .238<6564206279>-.15 F F1<6e6fad>2.738 E F0 .238<746f207475726e206f66>2.738 F 2.738<666170>-.25 G .238 <6172746963756c61722077>-2.738 F 2.738<61726e696e672e205468657265>-.1 F .238<617265207468726565207370656369616c206b>2.738 F -.15<6579>-.1 G -.1 <776f>.15 G<7264733a>.1 E F1<616c6c>2.739 E F0<746f>2.739 E .396 <7475726e206f6e20616c6c207468652077>144 456 R .396 <61726e696e67732061626f75742075736167652c>-.1 F F1<6e6f6e65>2.896 E F0 .396<746f207475726e207468656d20616c6c206f66>2.896 F .396<662c20616e64> -.25 F F1<68656c70>2.896 E F0 .395 <746f207072696e7420746865206c697374206f6620616c6c20746865>2.896 F -.1 <6b65>144 468 S<7977>-.05 E .569<6f726473207769746820612062726965662065> -.1 F .569<78706c616e6174696f6e206f6620656163682e>-.15 F<4966>5.569 E F3 <6c697374>3.069 E F0 .569<6973206f6d69747465642c>3.069 F F1 3.07 E F0 .57<69732065717569>3.07 F -.25<7661>-.25 G .57 <6c656e7420746f>.25 F F13.07 E F0<2c>A<616e64>144 480 Q F14.769 E F0 2.269<69732065717569>4.769 F -.25 <7661>-.25 G 2.269<6c656e7420746f>.25 F F14.768 E F0 7.268<2e54>C 2.268<686573652077>-7.268 F 2.268 <61726e696e677320636f>-.1 F -.15<7665>-.15 G 4.768<7266>.15 G 2.268 <6f7572206d61696e2063617465>-4.768 F 2.268<676f72696573206f66>-.15 F 1.648<6f626a656374733a2073756270726f6772616d2064756d6d79206172>144 492 R 1.648<67756d656e74732c20636f6d6d6f6e20626c6f636b7320616e642076>-.18 F 1.648<61726961626c65732c2073756270726f6772616d7320616e642066756e632d> -.25 F 2.259<74696f6e732c20616e64206c6f63616c2076>144 504 R 4.759 <61726961626c65732e2057>-.25 F 2.259<61726e696e677320696e636c7564652075 6e64658c6e6564206974656d732c206d756c7469706c792064658c6e6564206974656d73 2c20756e75736564>-.8 F<6974656d732c206574632e>144 516 Q<5468652077>5 E <61726e696e67206b>-.1 E -.15<6579>-.1 G -.1<776f>.15 G<7264732077697468 207468656972206d65616e696e67732061726520617320666f6c6c6f>.1 E<77733a> -.25 E F1<6172>144 532.8 Q<67ad616c696173>-.1 E F0<3a>A 2.751<6173> 171.78 544.8 S .251<63616c61722064756d6d79206172>-2.751 F .251<67756d65 6e742069732061637475616c6c79207468652073616d6520617320616e6f746865722061 6e6420697320286f72206d617920626529206d6f64698c65642e>-.18 F<546865>5.252 E -.15<466f>171.78 556.8 S 1.34<727472616e203737207374616e64617264202873 656374696f6e2031352e392e332e36292070726f686962697473206d6f64696679696e67 20616e206172>.15 F 1.34 <67756d656e74207468617420697320616c696173656420746f>-.18 F <616e6f74686572>171.78 568.8 Q<2e>-.55 E F1<6172>144 585.6 Q <67ad6172726179ad616c696173>-.1 E F0<3a>A 2.601<6164>171.78 597.6 S .101 <756d6d79206172>-2.601 F .101<67756d656e7420776869636820697320616e206172 726179206f7220617272617920656c656d656e7420697320696e207468652073616d6520 617272617920617320616e6f7468657220616e64206973>-.18 F 3.56 <6d6f64698c65642e2054686973>171.78 609.6 R 1.059 <8d61672069732073696d696c617220746f>3.56 F F1<6172>3.559 E <67ad616c696173>-.1 E F0 -.2<6275>3.559 G 3.559<7470>.2 G<726f>-3.559 E 1.059<766964657320736570617261746520636f6e74726f6c206f>-.15 F -.15<7665> -.15 G 3.559<7261>.15 G 1.059<72726179206172>-3.559 F<67752d>-.18 E 3.213<6d656e74732e204974>171.78 621.6 R .713<69732068617264657220746f20 74656c6c20696620616c696173696e67206973206f6363757272696e6720696e20746865 2063617365206f66206172726179732c20736f206966>3.213 F F1<66746e6368656b> 3.214 E F0<6769>3.214 E -.15<7665>-.25 G<73>.15 E 1.347<746f6f206d616e> 171.78 633.6 R 3.847<7966>-.15 G 1.347<616c73652077>-3.947 F 1.347 <61726e696e67732c2074686973208d616720616c6c6f>-.1 F 1.346<77732074686520 61727261792d72656c61746564206f6e657320746f206265207475726e6564206f66> -.25 F 3.846<6677>-.25 G<6974686f7574>-3.846 E <7375707072657373696e67207468652077>171.78 645.6 Q <61726e696e677320666f72207363616c6172732e>-.1 E F1<6172>144 662.4 Q <67ad636f6d6d6f6ead616c696173>-.1 E F0<3a>A 3.044<6173>171.78 674.4 S .544<63616c61722064756d6d79206172>-3.044 F .544 <67756d656e74206973207468652073616d65206173206120636f6d6d6f6e2076>-.18 F .544<61726961626c6520696e207468652073756270726f6772616d2c20616e64206569 74686572>-.25 F .282<6973206d6f64698c65642e>171.78 686.4 R .282 <5468697320697320616c736f2070726f68696269746564206279207468652046>5.282 F .281<6f727472616e203737207374616e646172642e>-.15 F .281 <496620636f6d6d6f6e20636865636b696e67206973206e6f74>5.281 F -.15<6578> 171.78 698.4 S .454<616374202873656520746865>.15 F F1 2.954 E F0 .454<73657474696e67292c2069742069732068617264657220746f207465 6c6c20696620616c696173696e67206973206f6363757272696e672c20736f2074686520 77>2.954 F<61726e696e67>-.1 E<6973206769>171.78 710.4 Q -.15<7665>-.25 G 2.5<6e69>.15 G 2.5<6674>-2.5 G<68652076>-2.5 E <61726961626c6520697320616e>-.25 E<79776865726520696e206120636f6d6d6f6e 20626c6f636b2074686174206973206465636c6172656420627920746865207375627072 6f6772616d2e>-.15 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3331>191.795 E 0 Cg EP %%Page: 32 32 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF<6172>144 84 Q<67ad636f6d6d6f6ead6172726179ad616c696173>-.1 E F0<3a>A 3.44<6164> 171.78 96 S .94<756d6d79206172>-3.44 F .94<67756d656e742077686963682069 7320616e206172726179206f7220617272617920656c656d656e7420697320696e207468 652073616d65206172726179206173206120636f6d6d6f6e>-.18 F -.25<7661>171.78 108 S .402<726961626c652c20616e6420656974686572206973206d6f64698c65642e> .25 F .403<496620636f6d6d6f6e20636865636b696e67206973206e6f742065>5.402 F .403<786163742c207468652076>-.15 F .403 <61726961626c652063616e20626520616e>-.25 F<792d>-.15 E<776865726520696e 206120636f6d6d6f6e20626c6f636b2074686174206973206465636c6172656420627920 7468652073756270726f6772616d2e>171.78 120 Q F1<6172>144 136.8 Q <67ad636f6e7374ad6d6f64698c6564>-.1 E F0<3a>A 3.313<6173>171.78 148.8 S .813<756270726f6772616d206d6f64698c657320616e206172>-3.313 F .813 <67756d656e74207768696368206973206120636f6e7374616e74206f7220616e2065> -.18 F 3.313<787072657373696f6e2e2053756368>-.15 F .812 <616e20616374696f6e>3.312 F <636f756c6420636175736520616e6f6d616c6f75732062656861>171.78 160.8 Q <76696f72206f66207468652070726f6772616d2e>-.2 E F1<6172>144 177.6 Q <67ad756e75736564>-.1 E F0<3a>A 2.849<6164>171.78 189.6 S .349 <756d6d79206172>-2.849 F .349<67756d656e74206973206465636c617265642062> -.18 F .349<7574206e65>-.2 F -.15<7665>-.25 G 2.849<7275>.15 G 2.849 <7365642e2054686973>-2.849 F .35<69732073696d696c617220746f20746865> 2.849 F F1 -.1<7661>2.85 G<72ad756e75736564>.1 E F0 -.1<6b65>2.85 G <7977>-.05 E<6f7264>-.1 E<6465736372696265642062656c6f>171.78 201.6 Q 1.3 -.65<772c2062>-.25 H<7574206170706c696573206f6e6c7920746f206172>.45 E<67756d656e74732e>-.18 E F1<636f6dad626c6f636bad756e75736564>144 218.4 Q F0<3a>A 3.698<6163>171.78 230.4 S 1.198 <6f6d6d6f6e20626c6f636b206973206465636c617265642062>-3.698 F 1.198 <7574206e6f6e65206f66207468652076>-.2 F 1.197 <61726961626c657320696e20697420617265207573656420627920616e>-.25 F 3.697 <7973>-.15 G<756270726f6772616d2e>-3.697 E<546869732077>171.78 242.4 Q< 61726e696e6720697320737570707265737365642069662074686520636f6d6d6f6e2073 74726963746e6573732073657474696e6720697320302e>-.1 E F1 <636f6dad626c6f636bad76>144 259.2 Q<6f6c6174696c65>-.1 E F0<3a>A 2.636 <6163>171.78 271.2 S .137<6f6d6d6f6e20626c6f636b206d6179206c6f7365207468 652064658c6e6974696f6e206f662069747320636f6e74656e747320696620636f6d6d6f 6e20626c6f636b73206172652076>-2.636 F 2.637<6f6c6174696c652e2054686973> -.2 F .739<6f7074696f6e206f6e6c792068617320616e206566>171.78 283.2 R .739<6665637420696620746865>-.25 F F13.239 E <6f6c6174696c65>-.1 E F0 .739<8d616720697320696e206566>3.239 F 3.238 <666563742e20536565>-.25 F .738<7468652064697363757373696f6e206f66>3.238 F<746865>171.78 295.2 Q F12.5 E F0 <73657474696e672061626f>2.5 E -.15<7665>-.15 G<2e>.15 E F1<636f6dad76> 144 312 Q<6172ad736574ad756e75736564>-.1 E F0<3a>A 3.206<6163>171.78 324 S .706<6f6d6d6f6e2076>-3.206 F .706 <61726961626c652069732061737369676e656420612076>-.25 F .706 <616c75652c2062>-.25 F .706<7574206974732076>-.2 F .706 <616c7565206973206e6f74207573656420627920616e>-.25 F 3.207<7973>-.15 G 3.207<756270726f6772616d2e2054686973>-3.207 F -.1<7761>171.78 336 S<726e 696e6720697320737570707265737365642069662074686520636f6d6d6f6e2073747269 63746e6573732073657474696e6720697320302e>.1 E F1<636f6dad76>144 352.8 Q <6172ad756e696e697469616c697a6564>-.1 E F0<3a>A 3.053<6163>171.78 364.8 S .553<6f6d6d6f6e2076>-3.053 F<61726961626c6527>-.25 E 3.052<7376>-.55 G .552 <616c7565206973207573656420696e20736f6d652073756270726f6772616d2c2062> -3.302 F .552<7574206973206e6f742073657420616e>-.2 F 3.052 <7977686572652e20556e666f7274752d>-.15 F<6e6174656c79>171.78 376.8 Q<2c> -.65 E F1<66746e6368656b>3.73 E F0 1.23<646f6573206e6f7420646f2061207468 6f726f75676820656e6f75676820616e616c79736973206f66207468652063616c6c696e 672073657175656e636520746f206b6e6f>3.73 F<77>-.25 E .763<77686963682072 6f7574696e6573206172652063616c6c6564206265666f7265206f74686572732e> 171.78 388.8 R .763<536f2077>5.763 F .762<61726e696e67732061626f75742074 6869732074797065206f66206572726f722077696c6c206f6e6c79206265>-.1 F<6769> 171.78 400.8 Q -.15<7665>-.25 G 2.937<6e66>.15 G .437 <6f7220636173657320696e20776869636820612076>-2.937 F .438 <61726961626c65206973207573656420696e20736f6d6520726f7574696e652062>-.25 F .438<7574206e6f742073657420696e20616e>-.2 F 2.938<796f>-.15 G .438 <7468657220726f7574696e652e>-2.938 F 1.837 <436865636b696e67206f6620696e6469>171.78 412.8 R 1.836 <76696475616c20434f4d4d4f4e2076>-.25 F 1.836 <61726961626c657320697320646f6e65206f6e6c7920696620746865>-.25 F F1 4.336 E F0 1.836<73657474696e672069732033>4.336 F<2876> 171.78 424.8 Q .416<61726961626c652062792076>-.25 F .416 <61726961626c652061677265656d656e74292e>-.25 F .417<546869732077>5.416 F .417<61726e696e6720697320737570707265737365642069662074686520636f6d6d6f 6e207374726963746e657373207365742d>-.1 F<74696e6720697320302e>171.78 436.8 Q F1<636f6dad76>144 453.6 Q<6172ad756e75736564>-.1 E F0<3a>A 4.371 <6163>171.78 465.6 S 1.871<6f6d6d6f6e2076>-4.371 F 1.871 <61726961626c65206973206465636c617265642062>-.25 F 1.871 <7574206e6f74207573656420627920616e>-.2 F 4.371<7973>-.15 G 4.37 <756270726f6772616d2e2054686973>-4.371 F -.1<7761>4.37 G 1.87 <726e696e67206973207375702d>.1 F<707265737365642069662074686520636f6d6d 6f6e207374726963746e6573732073657474696e6720697320302e>171.78 477.6 Q F1 <646fad696e646578ad6d6f64698c6564>144 494.4 Q F0<3a>A 2.826<6176>171.78 506.4 S .326<61726961626c6520746861742069732074686520696e6465>-3.076 F 2.826<786f>-.15 G 2.827<666144>-2.826 G 2.827<4f6c>-2.827 G .327<6f6f70 206973206d6f64698c656420627920736f6d652073746174656d656e742077697468696e 207468652072616e6765206f66>-2.827 F .132<746865206c6f6f702e>171.78 518.4 R .132<546865205374616e64617264207065726d69747320616e2061637469>5.132 F .432 -.15<76652044>-.25 H 2.632<4f76>.15 G .132<61726961626c6520746f2062 65206d6f64698c6564206f6e6c792062792074686520696e6372656d656e2d>-2.882 F< 746174696f6e206d656368616e69736d206f662074686520444f2073746174656d656e74 2e>171.78 530.4 Q F1<657874ad6d756c7469706c79ad64658c6e6564>144 547.2 Q F0<3a>A .613<616e2065>171.78 559.2 R .613<787465726e616c2028612073756272 6f7574696e65206f722066756e6374696f6e292069732064658c6e6564206d6f72652074 68616e206f6e63652e>-.15 F .614<44658c6e6974696f6e206f6620616e2065>5.614 F<787465726e616c>-.15 E<6d65616e732070726f>171.78 571.2 Q <766964696e672074686520626f6479206f662069747320736f7572636520636f64652e> -.15 E F1<657874ad6465636c6172>144 588 Q<6564ad6f6e6c79>-.18 E F0<3a>A 3.032<616e>171.78 600 S .532<616d65206973206465636c6172656420696e20616e> -3.032 F/F2 10/Courier@0 SF<45585445524e414c>3.032 E F0 .532 <73746174656d656e7420696e20736f6d65206d6f64756c652c2062>3.032 F .532 <7574206973206e6f742064658c6e6564206f722075736564>-.2 F<616e>171.78 612 Q<7977686572652e>-.15 E F1<657874ad756e64658c6e6564>144 628.8 Q F0<3a>A 1.346<616e2065>171.78 640.8 R 1.346 <787465726e616c20697320757365642028696e>-.15 F -.2<766f>-.4 G -.1<6b65> .2 G 1.346<64292062>.1 F 1.346<7574206e6f742064658c6e656420616e>-.2 F 3.847<7977686572652e2054686973>-.15 F 1.347 <6f7074696f6e2069732065717569>3.847 F -.25<7661>-.25 G 1.347 <6c656e7420746f20746865>.25 F F1171.78 652.8 Q<6e616c>-.15 E F0 2.648<8d61672e204966>2.648 F .147 <7468652073756270726f6772616d20697320696e>2.647 F -.2<766f>-.4 G -.1 <6b65>.2 G 2.647<646d>.1 G .147 <6f7265207468616e206f6e63652c2074686f736520696e>-2.647 F -.2<766f>-.4 G .147<636174696f6e732077696c6c207374696c6c206265>.2 F<636865636b>171.78 664.8 Q<656420666f7220636f6e73697374656e63>-.1 E -.65<792e>-.15 G F1 <657874ad756e75736564>144 681.6 Q F0<3a>A .537<616e2065>171.78 693.6 R .537<787465726e616c2069732064658c6e656420286974732073756270726f6772616d 20626f64792069732070726573656e74292062>-.15 F .538 <7574206974206973206e6f7420757365642e>-.2 F 3.038<4173>5.538 G .538 <756270726f6772616d206973>-3.038 F 1.144 <636f6e7369646572656420756e757365642065>171.78 705.6 R -.15<7665>-.25 G 3.644<6e69>.15 G 3.644<6669>-3.644 G 3.644<7469>-3.644 G 3.643<7369> -3.644 G -1.9 -.4<6e76206f>-3.643 H -.1<6b65>.4 G 3.643<6462>.1 G 3.643 <7973>-3.643 G 1.143<6f6d65206f746865722073756270726f6772616d2c20696620 69742063616e6e6f742062652063616c6c6564>-3.643 F .029<66726f6d20616e> 171.78 717.6 R 2.529<7974>-.15 G .029<6872656164206f662065>-2.529 F -.15 <7865>-.15 G .029<637574696f6e207374617274696e67207769746820746865206d61 696e2070726f6772616d2e>.15 F .03 <5468652061677265656d656e74206f66207468652073756270726f2d>5.029 F <6772616d27>171.78 729.6 Q 3.03<7361>-.55 G -.18<7267>-3.03 G .53 <756d656e747320776974682069747320696e>.18 F -.2<766f>-.4 G .529 <636174696f6e73206973207374696c6c20636865636b>.2 F .529<65642065>-.1 F -.15<7665>-.25 G 3.029<6e69>.15 G 3.029<6674>-3.029 G .529<6869732077> -3.029 F .529<61726e696e67206973207475726e6564206f66>-.1 F 3.029 <662e204966>-.25 F<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3332>191.795 E 0 Cg EP %%Page: 33 33 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .27<7468657265206973206e6f206d 61696e2070726f6772616d2c207468656e20746869732077>171.78 84 R .27<61726e 696e6720697320697373756564206f6e6c79206966207468652073756270726f6772616d 206973206e6f7420696e>-.1 F -.2<766f>-.4 G -.1<6b65>.2 G<64>.1 E<616e> 171.78 96 Q 2.872<7977686572652e2054686973>-.15 F -.1<7761>2.872 G .372< 726e696e67206973207375707072657373656420696e206c696272617279206d6f64652c 2062>.1 F .371 <7574206c696272617279206d6f64652068617320746865206164646974696f6e616c> -.2 F<6566>171.78 108 Q<66656374206f66207375707072657373696e67206172> -.25 E<67756d656e7420636865636b696e6720666f7220756e7573656420726f757469 6e65732e>-.18 E/F1 10/Times-Bold@0 SF<6c6162656cad756e64658c6e6564>144 124.8 Q F0<3a>A 2.5<6173>171.78 136.8 S<746174656d656e742072656665727320 746f2061206c6162656c207468617420686173206e6f74206265656e2064658c6e65642e> -2.5 E F1<6c6162656cad756e75736564>144 153.6 Q F0<3a>A 2.5<6173>171.78 165.6 S<746174656d656e74206c6162656c2069732064658c6e65642c2062>-2.5 E <7574206e65>-.2 E -.15<7665>-.25 G 2.5<7272>.15 G <6566657272656420746f2e>-2.5 E F1 -.1<7661>144 182.4 S <72ad736574ad756e75736564>.1 E F0<3a>A 2.5<616c>171.78 194.4 S <6f63616c2076>-2.5 E<61726961626c652069732061737369676e656420612076>-.25 E<616c75652c2062>-.25 E<757420746861742076>-.2 E <616c7565206973206e6f7420757365642e>-.25 E F1 -.1<7661>144 211.2 S <72ad756e696e697469616c697a6564>.1 E F0<3a>A 2.517<616c>171.78 223.2 S .017<6f63616c2076>-2.517 F<61726961626c6527>-.25 E 2.517<7376>-.55 G .017<616c7565206d61792062652075736564206265666f726520697420697320617373 69676e65642e>-2.767 F<536f6d6574696d6573>5.018 E F1<66746e6368656b>2.518 E F0<6d616b>2.518 E .018<65732061206d69732d>-.1 F<74616b>171.78 235.2 Q 4.103<6569>-.1 G 4.103<6e74>-4.103 G 1.603<68652077>-4.103 F 1.603 <61726e696e67732061626f7574206c6f63616c2076>-.1 F 1.603 <61726961626c652075736167652e>-.25 F 1.602 <557375616c6c792069742065727273206f6e207468652073696465206f66206769> 6.603 F 1.602<76696e672061>-.25 F -.1<7761>171.78 247.2 S .75 <726e696e67207768657265206e6f2070726f626c656d2065>.1 F .75 <78697374732c2062>-.15 F .75 <757420696e2072617265206361736573206974206d61792066>-.2 F .75 <61696c20746f2077>-.1 F .75<61726e207768657265207468652070726f626c656d> -.1 F 1.005<646f65732065>171.78 259.2 R 3.505<786973742e20536565>-.15 F 1.005<7468652073656374696f6e206f6e204275677320666f722065>3.505 F 3.505 <78616d706c65732e204966>-.15 F -.25<7661>3.505 G 1.005 <726961626c6573206172652065717569>.25 F -.25<7661>-.25 G 1.005 <6c656e6365642c207468652072756c65>.25 F .907<75736564206279>171.78 271.2 R F1<66746e6368656b>3.407 E F0 .907 <697320746861742061207265666572656e636520746f20616e>3.407 F 3.408<7976> -.15 G .908<61726961626c6520696d706c696573207468652073616d65207265666572 656e636520746f20616c6c2076>-3.658 F<6172692d>-.25 E .896 <61626c65732069742069732065717569>171.78 283.2 R -.25<7661>-.25 G .896 <6c656e63656420746f2e>.25 F -.15<466f>5.896 G 3.395<7261>.15 G .895<7272 6179732c207468652072756c6520697320746861742061207265666572656e636520746f 20616e>-3.395 F 3.395<7961>-.15 G .895<7272617920656c656d656e74206973> -3.395 F<747265617465642061732061207265666572656e636520746f20616c6c2065 6c656d656e7473206f6620746865206172726179>171.78 295.2 Q<2e>-.65 E F1 -.1 <7661>144 312 S<72ad756e75736564>.1 E F0<3a>A 3.112<616c>171.78 324 S .612<6f63616c2076>-3.112 F .612<61726961626c65206973206465636c6172656420 28666f7220696e7374616e63652c20696e20612074797065206465636c61726174696f6e 292062>-.25 F .613<7574206973206e6f74207573656420696e20746865206d6f642d> -.2 F 4.546<756c652e20446f6573>171.78 336 R 2.046 <6e6f74206170706c7920746f2064756d6d79206172>4.546 F 2.045 <67756d656e74733a2077>-.18 F 2.045<61726e696e67732061626f7574207468656d 2061726520636f6e74726f6c6c656420627920746865>-.1 F -.1<6b65>171.78 348 S <7977>-.05 E<6f7264>-.1 E F1<6172>2.5 E<67ad756e75736564>-.1 E F0 <6465736372696265642061626f>2.5 E -.15<7665>-.15 G<2e>.15 E .677 <4e6f74653a20496e2076>144 364.8 R .677<657273696f6e73206f66>-.15 F F1 <66746e6368656b>3.177 E F0 .677<7072696f7220746f20322e31302c20746865> 3.177 F F13.177 E F0 .677 <8d616720746f6f6b2061206e756d65726963206172>3.177 F .677 <67756d656e7420696e7374656164206f662061>-.18 F .633 <6c697374206f66206f7074696f6e732e>144 376.8 R -.15<466f>5.633 G 3.133 <7274>.15 G .633<68652073616b>-3.133 F 3.133<656f>-.1 G 3.132<6675> -3.133 G .632<736572732077686f206d6179206861>-3.132 F .932 -.15 <76652077>-.2 H .632<72697474656e207363726970747320696e>.15 F -.2<766f> -.4 G<6b696e67>.2 E F1<66746e6368656b>3.132 E F0 .632 <696e20746869732077>3.132 F<6179>-.1 E<2c>-.65 E .168 <746865206e756d6572696320666f726d206973207374696c6c2061636365707465642e> 144 388.8 R .169<546865206e756d657269632073657474696e6720697320636f6d70 6f736564206f66207468726565206469676974732e>5.169 F .169 <546865208c727374206469676974>5.169 F 1.7 <2868756e647265647320706c6163652920636f6e74726f6c732077>144 400.8 R 1.7< 61726e696e67732061626f75742073756270726f6772616d73202866756e6374696f6e73 20616e6420737562726f7574696e6573292c20746865207365636f6e64>-.1 F .218 <6469676974202874656e7320706c616365292077>144 412.8 R .218<61726e696e67 732061626f757420636f6d6d6f6e20626c6f636b7320616e6420636f6d6d6f6e2076>-.1 F .219<61726961626c65732c2c20616e64207468652074686972642064696769742028 6f6e6573>-.25 F 1.006<706c616365292077>144 424.8 R 1.006 <61726e696e67732061626f7574206c6f63616c2076>-.1 F 3.506 <61726961626c65732e2045616368>-.25 F 1.006 <646967697420636f6e74726f6c732077>3.506 F 1.006 <61726e696e6773206163636f7264696e6720746f2074686520636f6e>-.1 F -.15 <7665>-.4 G<6e74696f6e>.15 E .44<7468617420612031206d65616e732077>144 436.8 R .44 <61726e2061626f757420756e64658c6e6564206974656d7320616e642076>-.1 F .441 <61726961626c65732074686174206172652075736564206265666f7265207365742c20 612032206d65616e732077>-.25 F<61726e>-.1 E .64<61626f7574206974656d7320 746861742061726520756e757365642c20616e6420612033206d65616e732077>144 448.8 R .639<61726e2061626f757420626f74682074797065732e>-.1 F .639 <5468657365206e756d6265727320617265206e6f>5.639 F 3.139<7763>-.25 G <6f6e2d>-3.139 E -.15<7665>144 460.8 S 1.427 <7274656420746f2074686520617070726f7072696174652076>.15 F 1.427 <616c75657320666f72207468652061626f>-.25 F -.15<7665>-.15 G 1.427 <2d6c6973746564206b>.15 F -.15<6579>-.1 G -.1<776f>.15 G 1.428 <7264732c2065>.1 F 1.428<786365707420666f72>-.15 F F1 <636f6dad626c6f636bad76>3.928 E<6f6c6174696c65>-.1 E F0<2c>A <7768696368206973206e6f74206166>144 472.8 Q <66656374656420627920746865206e756d65726963206172>-.25 E<67756d656e742e> -.18 E<53656520616c736f3a>144 489.6 Q F12.5 E F0<2c>A F1 2.5 E<65>-.18 E F0<2c>A F12.5 E<6e>-.15 E F0<2c>A F12.5 E F0<2e>A F1108 518.4 Q F0 .961<50726f64756365207468652063616c6c20677261706820696e2074686520666f72 6d206f66206120564347206772617068206465736372697074696f6e2e>144 530.4 R .96<54686973206465736372697074696f6e206973207772697474656e20746f2061> 5.96 F .161<7365706172617465208c6c652c2077697468207468652073616d65207374 656d20617320746865208c6c6520636f6e7461696e696e6720746865206d61696e207072 6f6772616d2c20616e6420737566>144 542.4 R<8c78>-.25 E/F2 10 /Times-Italic@0 SF<2e766367>2.662 E F0 5.162<2e54>.22 G .162 <686973208c6c65>-5.162 F .699<69732061626c6520746f206265206769>144 554.4 R -.15<7665>-.25 G 3.199<6e64>.15 G .699<69726563746c7920746f>-3.199 F F1<78766367>3.198 E F0 .698 <28314c2920746f2076697375616c697a65207468652063616c6c2067726170682e>B .698<28496620696e7075742069732066726f6d20746865207374616e64617264>5.698 F 1.128<696e7075742c207468656e20746865206772617068206465736372697074696f 6e2069732073656e7420746f207374616e64617264206f75747075742e29>144 566.4 R 1.129<54686973207377697463682069732065717569>6.129 F -.25<7661>-.25 G 1.129<6c656e7420746f>.25 F F13.629 E<7472>144 578.4 Q <65653d766367>-.18 E F0 5<2e44>C<6566>-5 E<61756c74203d206e6f2e>-.1 E .561<54686520564347206465736372697074696f6e2061732063726561746564206973 206d6f726520636f6d706c65>144 595.2 R 3.061<7874>-.15 G .56 <68616e206974206e6565642062652e2056434720616c6c6f>-3.061 F .56 <77732067726170687320616e64206e6573746564>-.25 F .371<737562677261706873 3a206561636820737562726f7574696e6520697320637265617465642061732061207375 626772617068206e657374656420696e73696465206974732063616c6c696e6720726f75 74696e65732e>144 607.2 R .371<5468697320616c6c6f>5.371 F<7773>-.25 E <796f7520746f20696e74657261637469>144 619.2 Q -.15<7665>-.25 G<6c792064 6973706c617920737562677261706873206f722073756d6d6172697365207468656d2e> .15 E<546865>144 636 Q F12.5 E F0<6f7074696f6e20666f72>2.5 E F1<66746e6368656b>2.5 E F0 -.1<7761>2.5 G 2.5<7377>.1 G <72697474656e206279204472>-2.5 E 2.5<2e50>-.55 G <68696c697020527562696e69206f66204372616e8c656c6420556e69>-2.5 E -.15 <7665>-.25 G<7273697479>.15 E 2.5<2c55>-.65 G<4b2e>-2.5 E F1<78766367> 144 652.8 Q F0 .769<697320612067726170682076697375616c69736174696f6e2074 6f6f6c2077686963682072756e7320756e6465722074686520582077696e646f>3.269 F .769<77732073797374656d2e>-.25 F .768<497420697320667265656c792061>5.768 F -.25<7661>-.2 G<696c61626c65>.25 E <66726f6d206674702e63732e756e69ad7362>144 664.8 Q<2e64652e2049742077>-.4 E<6173207772697474656e20627920472e2053616e646572206f662074686520556e69> -.1 E -.15<7665>-.25 G <7273697479206f6620536161726c616e642c204765726d616e>.15 E -.65<792e>-.15 G<53656520616c736f3a>144 681.6 Q F12.5 E<6565>-.18 E F0 <2c>A F12.5 E<6f737372>-.18 E<6566>-.18 E F0<2c>A F12.5 E <65666572>-.18 E<656e6365>-.18 E F0<2c>A F12.5 E F0<2e>A <4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3333> 191.795 E 0 Cg EP %%Page: 34 34 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Bold@0 SF108 84 Q<657273696f6e>-.1 E F0 .418<54686973206f7074696f6e20636175736573>144 96 R F1<66746e6368656b>2.918 E F0 .419 <746f207072696e742061206c696e65206769>2.918 F .419<76696e67207468652076> -.25 F .419<657273696f6e206e756d626572>-.15 F 2.919<2c72>-.4 G .419 <656c6561736520646174652c20616e64207061746368206c65>-2.919 F -.15<7665> -.25 G<6c>.15 E .491<6f66207468652070726f6772616d2e>144 108 R .491 <4966206e6f208c6c657320617265206769>5.491 F -.15<7665>-.25 G .491 <6e2c206974207468656e2065>.15 F 2.991<786974732e204966>-.15 F .491 <8c6c657320617265206769>2.991 F -.15<7665>-.25 G .491 <6e2c20746865206566>.15 F .491 <66656374206f662074686973206f7074696f6e20697320746f>-.25 F 1.088 <696e636c75646520746865207061746368206c65>144 120 R -.15<7665>-.25 G 3.588<6c28>.15 G 1.088 <6e6f726d616c6c79206f6d69747465642920696e207468652076>-3.588 F 1.088<65 7273696f6e20696e666f726d6174696f6e207072696e7465642061742074686520737461 7274206f662070726f2d>-.15 F 2.5<63657373696e672e20446566>144 132 R <61756c74203d206e6f2e>-.1 E<53656520616c736f3a>144 148.8 Q F1 2.5 E F0<2e>A F1108 177.6 Q<6f6c6174696c65>-.1 E F0 <417373756d65207468617420434f4d4d4f4e20626c6f636b73206172652076>144 189.6 Q 2.5<6f6c6174696c652e20446566>-.2 F<61756c74203d206e6f2e>-.1 E 1.131<54686973208d61672069732073757065727365646564206279>144 206.4 R F1 3.631 E<6f6c6174696c65>-.1 E F0 3.631<2c61>C 1.131 <6e642073686f756c64206e6f206c6f6e67657220626520757365642e>-3.631 F 1.13 <4974206d617920626520656c696d692d>6.13 F <6e6174656420696e2061206675747572652072656c65617365206f66>144 218.4 Q F1 <66746e6368656b>2.5 E F0<2e>A<53656520616c736f3a>144 235.2 Q F1 2.5 E F0<2c>A F12.5 E F0<2e>A F1108 264 Q<6f726473697a653d>-.1 E/F2 10/Times-Italic@0 SF<6e756d>.36 E F0 1.085<53706563698c65732074686520646566>144 276 R 1.085<61756c742077>-.1 F 1.085<6f72642073697a6520746f206265>-.1 F F2<6e756d>3.585 E F0 3.585 <62797465732e2054686973>3.585 F 1.085<6973207468652073697a65206f66206c6f 676963616c20616e642073696e676c652d707265636973696f6e>3.585 F 1.863 <6e756d657269632076>144 288 R 1.863 <61726961626c6573207468617420617265206e6f74206769>-.25 F -.15<7665>-.25 G 4.363<6e65>.15 G 1.863<78706c6963697420707265636973696f6e732e>-4.513 F 1.862<284578706c6963697420707265636973696f6e7320666f72206e6f6e2d63686172 6163746572>6.863 F -.25<7661>144 300 S .769 <726961626c65732061726520616e2065>.25 F .769 <7874656e73696f6e20746f207468652046>-.15 F .769 <6f727472616e203737205374616e646172642c20616e6420617265206769>-.15 F -.15<7665>-.25 G 3.27<6e62>.15 G 3.27<7974>-3.27 G .77 <797065206465636c61726174696f6e732073756368206173>-3.27 F/F3 10 /Courier@0 SF .649<5245414c2a382058>144 312 R F0 3.149 <2e2920446f75626c652d707265636973696f6e>B .649<616e6420636f6d706c65> 3.149 F 3.149<7876>-.15 G .648 <61726961626c65732077696c6c20626520747769636520746869732076>-3.399 F .648<616c75652c20616e6420646f75626c6520636f6d2d>-.25 F<706c65>144 324 Q 4.38<7876>-.15 G 1.88<61726961626c657320666f75722074696d65732e>-4.63 F 1.88<517561642d707265636973696f6e20636f6e7374616e747320616e6420696e7472 696e7369632066756e6374696f6e20726573756c74732077696c6c20626520666f7572> 6.88 F 1.413<74696d657320746869732076>144 336 R 3.912 <616c75652e204e6f7465>-.25 F 1.412<746861742076>3.912 F 1.412 <61726961626c6573206465636c61726564206173>-.25 F F3<5245414c2a3136>3.912 E F0 1.412<77696c6c206265207265>3.912 F -.05<6761>-.15 G 1.412 <72646564206173207175616420707265636973696f6e>.05 F <6f6e6c79206966207468652077>144 348 Q <6f72642073697a6520697320342062797465732e>-.1 E<446566>5 E <61756c74203d207475726e2d6f6e203d20342062797465732e>-.1 E 2.053 <5468652077>144 364.8 R 2.053<6f72642073697a652076>-.1 F 2.054<616c7565 20646f6573206e6f74206d617474657220666f7220636865636b696e67207374616e6461 72642d636f6e666f726d696e672070726f6772616d73207468617420646f206e6f74> -.25 F .028<6465636c6172652065>144 376.8 R .028<78706c696369742070726563 6973696f6e7320666f72206e6f6e2d6368617261637465722076>-.15 F .028<617269 61626c6573206f722073746f726520486f6c6c6572697468206461746120696e2076> -.25 F 2.527<61726961626c65732e2054686973>-.25 F<7365742d>2.527 E .621 <74696e6720616c736f20646f6573206e6f74206166>144 388.8 R .621 <666563742074686520646566>-.25 F .621 <61756c742073697a65206f66206368617261637465722076>-.1 F .621 <61726961626c65732c20776869636820697320616c>-.25 F -.1<7761>-.1 G .622 <7973203120627974652e>.1 F<486f6c6c6572697468>5.622 E <636f6e7374616e747320616c736f2061726520617373756d656420746f206f63637570> 144 400.8 Q 2.5<793162>-.1 G<7974652070657220636861726163746572>-2.5 E <2e>-.55 E 1.293<5468652077>144 417.6 R 1.293<6f72642073697a652069732075 73656420746f2064657465726d696e652077686574686572207472756e636174696f6e20 6f636375727320696e2061737369676e6d656e742073746174656d656e74732c20616e64 20746f>-.1 F 1.873<636174636820707265636973696f6e206d69736d617463686573 20696e2073756270726f6772616d206172>144 429.6 R 1.873<67756d656e74206c69 73747320616e6420636f6d6d6f6e20626c6f636b206c697374732e>-.18 F 1.874 <5468652065>6.874 F<78616374>-.15 E -.1<7761>144 441.6 S 1.937<726e696e 6773207468617420617265206973737565642077696c6c20646570656e64206f6e207468 6520737461747573206f66206f74686572208d6167732e>.1 F 1.936 <556e64657220626f746820746865>6.936 F F14.436 E <6974793d6d69786564ad73697a65>144 453.6 Q F0 1.049<616e6420746865>3.549 F F13.549 E -.1<776f>-.1 G<726473697a65>.1 E F0 1.049 <8d61672c20616e>3.549 F 3.549<796d>-.15 G 1.049<6978696e67206f662065> -3.549 F 1.049<78706c69636974207769746820646566>-.15 F 1.05 <61756c7420707265636973696f6e206f626a65637473>-.1 F .586 <286368617261637465722065>144 465.6 R .586 <787072657373696f6e73206e6f7420696e636c75646564292069732077>-.15 F .586 <61726e65642061626f75742e>-.1 F .586 <54686973206170706c69657320746f2061726974686d657469632065>5.586 F .585 <787072657373696f6e7320636f6e2d>-.15 F .157<7461696e696e6720626f74682074 79706573206f66206f626a656374732c20616e6420746f2073756270726f6772616d2061 72>144 477.6 R .157<67756d656e747320616e6420434f4d4d4f4e2076>-.18 F 2.657<61726961626c65732e20556e646572>-.25 F<636f6e2d>2.657 E .836 <74726f6c206f6620746865>144 489.6 R F1 3.336 E F0<616e64>3.336 E F1 <7072>3.336 E<6f6d6f74696f6e>-.18 E F0 .835<6f7074696f6e732c20612077> 3.335 F .835<61726e696e67206973206769>-.1 F -.15<7665>-.25 G 3.335<6e66> .15 G .835<6f722061737369676e6d656e74206f66>-3.335 F .187<616e2065>144 501.6 R .187<787072657373696f6e20746f20612073686f727465722076>-.15 F .187<61726961626c65206f66207468652073616d6520747970652c206f7220666f7220 70726f6d6f74696f6e206f662061206c6f>-.25 F .188 <77657220707265636973696f6e2076>-.25 F .188<616c756520746f>-.25 F <68696768657220707265636973696f6e20696e20616e2061726974686d657469632065> 144 513.6 Q<787072657373696f6e206f7220616e2061737369676e6d656e7420737461 74656d656e742e>-.15 E<4769>144 530.4 Q .81<76696e6720612077>-.25 F .81 <6f72642073697a65206f6620302c206f722065717569>-.1 F -.25<7661>-.25 G <6c656e746c79>.25 E 3.309<2c75>-.65 G<73696e67>-3.309 E F13.309 E -.1<776f>-.1 G<726473697a65>.1 E F0 .809 <6d65616e732074686174206e6f20646566>3.309 F .809<61756c742076>-.1 F .809 <616c75652077696c6c206265>-.25 F 3.032<617373756d65642e2054686973>144 542.4 R .532<69732065717569>3.032 F -.25<7661>-.25 G .532 <6c656e7420746f2073706563696679696e67>.25 F F1 3.032 E F0 5.532<2e55>C .533<736520697420746f208c6e64206361736573206f66206d69782d>-5.532 F .9 <696e6720646566>144 554.4 R .9<61756c7420616e642065>-.1 F .9 <78706c6963697420707265636973696f6e2c20666f722065>-.15 F .9 <78616d706c6520746f208d616720706c61636573207768657265>-.15 F F3 <5245414c2a38>3.4 E F0 .9<697320747265617465642061732065717569>3.4 F <762d>-.25 E<616c656e7420746f>144 566.4 Q F3 <444f55424c4520505245434953494f4e>2.5 E F0<2e>A<53656520616c736f3a>144 583.2 Q F12.5 E F0<2c>A F1 2.5 E F0<2c>A F12.5 E F0<2e>A F1108 612 Q F2<636f6c>.2 E F0 .758<436f6e74726f6c 7320746865207772617070696e67206f66206572726f72206d657373616765732e>144 624 R .758<4c6f6e67206572726f72206d6573736167657320746861742077>5.758 F .758<6f756c642072756e2070617374207468652073706563698c6564>-.1 F .115 <636f6c756d6e2077696c6c2062652062726f6b>144 636 R .115<656e20757020696e 746f207365706172617465206c696e6573206265747765656e207468652077>-.1 F .115<6f726473206f6620746865206d65737361676520666f7220626574746572207265 61646162696c2d>-.1 F<697479>144 648 Q 5.108<2e49>-.65 G 2.608<6674> -5.108 G .108<75726e6564206f66>-2.608 F 2.609<6677>-.25 G<697468>-2.609 E F12.609 E<77726170>-.1 E F0 2.609<2c65>C .109<6163682073657061 72617465206572726f72206d6573736167652077696c6c206265207072696e746564206f 6e206f6e65206c696e652c206c6561>-2.609 F .109<76696e67206974>-.2 F<757020 746f2074686520646973706c617920746f207772617020746865206d657373616765206f 72207472756e636174652069742e>144 660 Q<446566>5 E <61756c74203d207475726e2d6f6e203d2037392e>-.1 E/F4 10.95/Times-Bold@0 SF <4348414e47494e472054484520444546>72 688.8 Q -.548<4155>-.986 G -1.007 <4c54>.548 G<53>1.007 E F1<66746e6368656b>108 700.8 Q F0 .723 <696e636c75646573207477>3.223 F 3.222<6f6d>-.1 G .722 <656368616e69736d7320666f72206368616e67696e672074686520646566>-3.222 F .722<61756c742076>-.1 F .722 <616c756573206f6620616c6c206f7074696f6e733a2062792064658c6e696e6720656e> -.25 F<7669726f6e6d656e74>-.4 E -.25<7661>108 712.8 S .189<726961626c65 73206f72206279206372656174696e67206120707265666572656e636573208c6c652e> .25 F<5768656e>5.189 E F1<66746e6368656b>2.689 E F0 .19 <7374617274732075702c206974206c6f6f6b7320696e2069747320656e>2.689 F .19 <7669726f6e6d656e7420666f7220616e>-.4 F 2.69<7976>-.15 G<6172692d>-2.94 E 1.078<61626c65732077686f7365206e616d65732061726520636f6d706f7365642062 79207072658c78696e672074686520737472696e67>108 724.8 R F3 <46544e4348454b5f>3.577 E F0 1.077 <6f6e746f2074686520757070657263617365642076>3.577 F 1.077 <657273696f6e206f6620746865>-.15 F<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3334>191.795 E 0 Cg EP %%Page: 35 35 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E 1.521<6f7074696f6e206e616d652e> 108 84 R 1.521<4966207375636820612076>6.521 F 1.522 <61726961626c6520697320666f756e642c206974732076>-.25 F 1.522 <616c7565206973207573656420746f20737065636966792074686520646566>-.25 F 1.522<61756c7420666f722074686520636f72726573706f6e64696e67>-.1 F 1.15 <737769746368206f722073657474696e672e>108 96 R 1.15 <496e207468652063617365206f662073657474696e67732028666f722065>6.15 F 1.149<78616d706c652c20746865>-.15 F/F1 10/Times-Bold@0 SF 3.649 E F0 1.149 <7374726963746e6573732073657474696e6729207468652076>3.649 F 1.149 <616c7565206f6620746865>-.25 F<656e>108 108 Q .315 <7669726f6e6d656e742076>-.4 F .315 <61726961626c6520697320726561642061732074686520646566>-.25 F .315 <61756c742073657474696e672076>-.1 F 2.816<616c75652e20496e>-.25 F .316 <7468652063617365206f662073776974636865732c2074686520646566>2.816 F .316 <61756c74207377697463682077696c6c206265>-.1 F<74616b>108 120 Q <656e2061732074727565206f722079657320756e6c6573732074686520656e>-.1 E <7669726f6e6d656e742076>-.4 E<61726961626c6520686173207468652076>-.25 E <616c7565>-.25 E/F2 10/Courier@0 SF<30>2.5 E F0<6f72>2.5 E F2<4e4f>2.5 E F0<2e>A .217<4e6f746520746861742074686520656e>108 136.8 R .217 <7669726f6e6d656e742076>-.4 F .217<61726961626c65206e616d65206d75737420 626520636f6e73747275637465642077697468207468652066756c6c2d6c656e67746820 6f7074696f6e206e616d652c207768696368206d757374>-.25 F .532 <626520696e207570706572636173652e>108 148.8 R -.15<466f>5.532 G 3.032 <7265>.15 G .532<78616d706c652c20746f206d616b>-3.182 F<65>-.1 E F1 <66746e6368656b>3.032 E F0 .532 <7072696e74206120736f75726365206c697374696e6720627920646566>3.032 F .533 <61756c742c207365742074686520656e>-.1 F .533<7669726f6e6d656e742076>-.4 F<6172692d>-.25 E<61626c65>108 160.8 Q F2<46544e4348454b5f4c495354>3.266 E F0<746f>3.266 E F2<31>3.266 E F0<6f72>3.266 E F2<594553>3.266 E F0 .766<6f7220616e>3.266 F .766<797468696e67206f74686572207468616e>-.15 F F2<30>3.266 E F0<6f72>3.266 E F2<4e4f>3.266 E F0 5.766<2e54>C .766 <6865206e616d6573>-5.766 F F2<46544e4348454b5f4c4953>3.266 E F0 .765 <286e6f7420746865>3.265 F<66756c6c206f7074696f6e206e616d6529206f72>108 172.8 Q F2<66746e6368656b5f6c697374>2.5 E F0<286c6f>2.5 E <7765722063617365292077>-.25 E <6f756c64206e6f74206265207265636f676e697a65642e>-.1 E 1.11 <486572652061726520736f6d652065>108 189.6 R 1.11 <78616d706c6573206f6620686f>-.15 F 3.61<7774>-.25 G 3.61<6f73>-3.61 G 1.11<657420656e>-3.61 F 1.11<7669726f6e6d656e742076>-.4 F 1.11 <61726961626c6573206f6e2076>-.25 F 1.11<6172696f75732073797374656d732e> -.25 F -.15<466f>6.11 G 3.61<7273>.15 G<696d706c6963697479>-3.61 E 3.61 <2c61>-.65 G 1.11<6c6c20746865>-3.61 F -.15<6578>108 201.6 S <616d706c6573207365742074686520646566>.15 E<61756c74>-.1 E F1 2.5 E F0<73776974636820746f>2.5 E F2<594553>2.5 E F0<2e>A <312e20554e49582c20426f75726e65207368656c6c3a>108 218.4 Q F2 6<2446>50.4 G<544e4348454b5f4c4953543d594553>-6 E 6<2465>252 230.4 S <78706f72742046544e4348454b5f4c495354>-6 E F0 <322e20554e49582c2043207368656c6c3a>108 254.4 Q F2 6<2573>73.17 G <6574656e762046544e4348454b5f4c49535420594553>-6 E F0<332e2056>108 278.4 Q<41582f564d533a>-1.35 E F2 6<2444>86.46 G <4546494e452046544e4348454b5f4c49535420594553>-6 E F0 <342e204d53444f533a>108 302.4 Q F2 6<2453>96.77 G <45542046544e4348454b5f4c4953543d594553>-6 E F0 .227 <41667465722070726f63657373696e6720616e>108 319.2 R 2.727<7965>-.15 G -.4<6e76>-2.727 G .227<69726f6e6d656e742076>.4 F .226<61726961626c65732c 2066746e6368656b206c6f6f6b7320666f72206120707265666572656e636573208c6c65 20636f6e7461696e696e67206f7074696f6e7320616e64207365742d>-.25 F 2.538 <74696e67732e204974>108 331.2 R .038 <77696c6c2073656172636820696e2074686520666f6c6c6f>2.538 F .038 <77696e67206f72646572>-.25 F 2.538<2c75>-.4 G .038 <73696e67206f6e6c7920746865208c727374208c6c6520666f756e643a20283129> -2.538 F/F3 10/Times-Italic@0 SF 1.666<2e66>2.538 G<746e63>-1.666 E <68656b72>-.15 E<63>-.37 E F0 .039 <696e207468652063757272656e742064697265632d>2.538 F<746f7279>108 343.2 Q 3.359<2c28>-.65 G<3229>-3.359 E F3<66746e63>3.359 E -.834 <68656b2e20696e69>-.15 F F0 .859 <696e207468652063757272656e74206469726563746f7279>3.359 F 3.359<2c28> -.65 G<3329>-3.359 E F3 1.666<2e66>3.359 G<746e63>-1.666 E<68656b72>-.15 E<63>-.37 E F0 .859<696e20746865207573657227>3.359 F 3.359<7368>-.55 G .859<6f6d65206469726563746f7279>-3.359 F 3.359<2c28>-.65 G<3429>-3.359 E F3<66746e63>3.358 E -.834<68656b2e20696e69>-.15 F F0<696e>3.358 E .073 <74686520686f6d65206469726563746f7279>108 355.2 R 5.073<2e49>-.65 G 2.573<6673>-5.073 G .074<7563682061208c6c6520697320666f756e642c20746865 206f7074696f6e732064658c6e656420696e206974206172652075736564206173206465 66>-2.573 F .074<61756c747320696e20706c616365206f66207468652062>-.1 F <75696c742d>-.2 E<696e20646566>108 367.2 Q<61756c747320616e64206f>-.1 E -.15<7665>-.15 G<72726964696e6720616e>.15 E 2.5<7964>-.15 G<6566>-2.5 E <61756c74732073657420696e2074686520656e>-.1 E<7669726f6e6d656e742e2e>-.4 E .06<45616368206f7074696f6e206f722073657474696e6720696e2074686520707265 666572656e636573208c6c65206d757374206265206f6e2061207365706172617465206c 696e652e>108 384 R<546865>5.059 E 2.559<7961>-.15 G .059<7265206769> -2.559 F -.15<7665>-.25 G 2.559<6e69>.15 G 2.559<6e74>-2.559 G .059 <68652073616d6520666f726d206173>-2.559 F .065 <6f6e2074686520636f6d6d616e64206c696e652c2065>108 396 R .065 <786365707420776974686f75742074686520696e697469616c20646173682e>-.15 F .066<54686520707265666572656e636573208c6c652063616e20636f6e7461696e2062 6c616e6b206c696e657320616e6420636f6d2d>5.065 F 2.558 <6d656e74732e20436f6d6d656e7473>108 408 R .058 <61726520696e74726f647563656420617420616e>2.558 F 2.558<7970>-.15 G .057 <6f696e7420696e2061206c696e65206279206120737061636520636861726163746572 2028626c616e6b206f722074616229206f722074686520272327206368617261632d> -2.558 F<746572>108 420 Q 2.5<2c61>-.4 G<6e6420617265207465726d696e6174 65642062792074686520656e64206f6620746865206c696e652e>-2.5 E .734 <436f6d6d616e642d6c696e65206f7074696f6e73206f>108 436.8 R -.15<7665>-.15 G .734<72726964652074686520646566>.15 F .734 <61756c74732073657420696e2074686520656e>-.1 F .735<7669726f6e6d656e7420 6f7220696e2074686520707265666572656e636573208c6c652c20696e>-.4 F .735 <7468652073616d65>5.735 F -.1<7761>108 448.8 S 2.5<7961>.1 G 2.5<7374> -2.5 G<6865>-2.5 E 2.5<796f>-.15 G -.15<7665>-2.65 G <7272696465207468652062>.15 E<75696c742d696e20646566>-.2 E<61756c74732e> -.1 E/F4 10.95/Times-Bold@0 SF<5553494e47205052>72 477.6 Q <4f4a4543542046494c4553>-.329 E F0 1.047<546869732073656374696f6e20636f 6e7461696e732064657461696c656420696e666f726d6174696f6e206f6e20686f>108 489.6 R 3.546<7774>-.25 G 3.546<6f75>-3.546 G 1.046 <73652070726f6a656374208c6c6573206d6f7374206566>-3.546 F<6665637469>-.25 E -.15<7665>-.25 G<6c79>.15 E 3.546<2c61>-.65 G 1.046<6e6420686f>-3.546 F 3.546<7774>-.25 G 3.546<6f61>-3.546 G -.2<766f>-3.746 G<6964>.2 E <736f6d652070697466>108 501.6 Q<616c6c732e>-.1 E .421 <4f6e652063616e206469>108 518.4 R .422<766964652074686520636865636b73> -.25 F F1<66746e6368656b>2.922 E F0 .422<646f657320696e746f207477>2.922 F 2.922<6f63>-.1 G<617465>-2.922 E .422 <676f726965732c206c6f63616c20616e6420676c6f62616c2e>-.15 F .422 <4c6f63616c20636865636b696e672069732072657374726963746564>5.422 F 1.178< 746f2077697468696e20612073696e676c6520726f7574696e652c20616e642063617463 686573207468696e6773206c696b>108 530.4 R 3.677<6575>-.1 G 1.177 <6e696e697469616c697a65642076>-3.677 F 1.177<61726961626c65732c20756e69 6e74656e646564206c6f7373206f6620707265636973696f6e20696e>-.25 F .081 <61726974686d657469632065>108 542.4 R .081 <787072657373696f6e732c206574632e>-.15 F .081<5468697320736f7274206f6620 636865636b696e672063616e20626520646f6e65206f6e20656163682073756270726f67 72616d20696e646570656e64656e746c79>5.081 F 5.082<2e46>-.65 G <757274686572>-5.082 E<2d>-.2 E 2.127<6d6f72652c206c6f63616c20636865636b 696e67206f6620612073756270726f6772616d20646f6573206e6f74206e65656420746f 206265207265706561746564207768656e20736f6d65206f746865722073756270726f67 72616d206973>108 554.4 R 3.174<6368616e6765642e20476c6f62616c>108 566.4 R .674<636865636b696e672063617463686573207468696e6773206c696b>3.174 F 3.175<6563>-.1 G .675<616c6c696e67206120737562726f7574696e65207769746820 7468652077726f6e67206172>-3.175 F .675 <67756d656e742074797065732c206f72206469732d>-.18 F 1.259<6167726565696e 6720696e20636f6d6d6f6e20626c6f636b206465636c61726174696f6e732e>108 578.4 R 1.258<4974207265717569726573206c6f6f6b696e67206174207468652077686f6c65 20736574206f662073756270726f6772616d7320696e746572616374696e67>6.259 F <776974682065616368206f74686572>108 590.4 Q<2e>-.55 E 1.901<546865207075 72706f7365206f662070726f6a656374208c6c657320697320746f20616c6c6f>108 607.2 R 4.401<7774>-.25 G 1.901<6865206c6f63616c20636865636b696e6720616e 6420676c6f62616c20636865636b696e6720737465707320746f20626520736570617261 7465642e>-4.401 F .241<417373756d696e6720746861742065616368207375627072 6f6772616d20697320696e20697473206f>108 619.2 R .241 <776e20736f75726365208c6c652c20796f752063616e2072756e>-.25 F F1 <66746e6368656b>2.74 E F0 .24 <6f6e6365206f6e2065616368206f6e6520746f20646f206c6f63616c>2.74 F .164<63 6865636b696e67207768696c65207375707072657373696e6720676c6f62616c20636865 636b696e672e>108 631.2 R<5468656e>5.164 E F1<66746e6368656b>2.664 E F0 .165<63616e2062652072756e206f6e6365206f6e20616c6c207468652070726f6a6563 74208c6c657320746f676574686572>2.664 F .524 <746f20646f2074686520676c6f62616c20636865636b696e672e>108 643.2 R .524 <5468652073616d706c65206d616b>5.524 F .524<658c6c652062656c6f>-.1 F 3.024<7773>-.25 G<686f>-3.024 E .524<777320686f>-.25 F 3.024<7774>-.25 G 3.024<6f61>-3.024 G .523<75746f6d6174652074686973207461736b2e>-3.024 F .523<5468652060>5.523 F<60>-.74 E F2<2e662e70726a>A F0 -.74<2727>C <746172>108 655.2 Q .747<676574207570646174657320612070726f6a656374208c 6c6520666f72206120706172746963756c6172208c6c6520616e>-.18 F 3.247<7974> -.15 G .747<696d652074686520736f75726365208c6c65206368616e6765732e> -3.247 F .747<54686520696e666f726d6174696f6e206e6565646564>5.747 F .69 <666f7220676c6f62616c20636865636b696e67206973207361>108 667.2 R -.15 <7665>-.2 G 3.19<6469>.15 G 3.19<6e74>-3.19 G .689 <68652070726f6a656374208c6c652e>-3.19 F .689<5468652060>5.689 F<60>-.74 E F2<636865636b>A F0 2.169 -.74<27272074>D<6172>.74 E .689<67657420646f 65732074686520636f6d62696e656420676c6f62616c20636865636b696e672e>-.18 F -.8<5479>108 679.2 S .25<706963616c6c792060>.8 F<60>-.74 E F2 .25 <6d616b6520636865636b>B F0 1.73 -.74<27272077>D .251 <6f756c6420726570656174207468652060>.64 F<60>-.74 E F2 .251 <66746e6368656b202d70726f6a656374>B F0 1.731 -.74<27272073>D .251 <746570206f6e6c79206f6e206368616e67656420736f75726365208c6c65732c>.74 F .679<7468656e20646f2074686520676c6f62616c20636865636b2e>108 691.2 R .678 <54686973206973206f62>5.678 F .678<76696f75736c7920612062696720616476> -.15 F .678<616e7461676520666f72206c6172>-.25 F .678 <67652070726f6772616d732c207768656e206d616e>-.18 F 3.178<7973>-.15 G <756270726f6772616d73>-3.178 E<73656c646f6d2069662065>108 703.2 Q -.15 <7665>-.25 G 2.5<7263>.15 G<68616e67652e>-2.5 E .021<497420697320626573 74207768656e207573696e672070726f6a656374208c6c657320746f20706c6163652065 6163682073756270726f6772616d20696e206120736570617261746520736f7572636520 8c6c652e>108 720 R .022<4966206561636820736f75726365208c6c65206d6179> 5.022 F<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3335>191.795 E 0 Cg EP %%Page: 36 36 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .004 <636f6e7461696e206d6f7265207468616e206f6e652073756270726f6772616d2c>108 84 R .004 <697420636f6d706c696361746573207468652064658c6e6974696f6e206f662060> 5.004 F<606c6f63616c27>-.74 E 2.503<2761>-.74 G .003<6e642060>-2.503 F <60676c6f62616c27>-.74 E 2.503<2763>-.74 G .003 <6865636b696e672062656361757365>-2.503 F .926 <746865726520697320736f6d6520696e746572>108 96 R .926<2d6d6f64756c652063 6865636b696e67207468617420697320636f6e7461696e65642077697468696e2061208c 6c652e>-.2 F/F1 10/Times-Bold@0 SF<66746e6368656b>5.926 E F0 .926 <747269657320746f20646f20746865207269676874207468696e6720696e>3.426 F 1.399<7468697320636173652c2062>108 108 R 1.399<757420746865726520617265 20736f6d6520636f6d706c69636174696f6e7320286465736372696265642062656c6f> -.2 F 1.399<77292064756520746f207468652074726164652d6f66>-.25 F 3.898 <6662>-.25 G 1.398<65747765656e2061>-3.898 F -.2<766f>-.2 G 1.398 <6964696e672072652d>.2 F<646f696e672063726f73732d636865636b7320616e6420 70726573657276696e6720696e666f726d6174696f6e2061626f7574207468652070726f 6772616d27>108 120 Q 2.5<7373>-.55 G<74727563747572652e>-2.5 E <4f7264696e6172696c79>108 136.8 Q 3.19<2c74>-.65 G 3.19<6f64>-3.19 G 3.19<6f74>-3.19 G .69<6865206c6561737420616d6f756e74206f662072652d636865 636b696e672c2070726f6a656374208c6c65732073686f756c6420626520637265617465 64207769746820746865>-3.19 F F13.19 E F0 .69 <8d616720696e>3.19 F<6566>108 148.8 Q .101 <6665637420616e64207472696d6d696e67207475726e6564206f6e2e>-.25 F .101 <496e2074686973206d6f64652c2074686520696e666f726d6174696f6e207361>5.101 F -.15<7665>-.2 G 2.6<6469>.15 G 2.6<6e74>-2.6 G .1<68652070726f6a656374 208c6c6520636f6e7369737473206f6620616c6c2073756270726f2d>-2.6 F 2.343<67 72616d206465636c61726174696f6e732c20616c6c2073756270726f6772616d20696e> 108 160.8 R -.2<766f>-.4 G 2.343<636174696f6e73206e6f74207265736f6c76>.2 F 2.344<6564206279206465636c61726174696f6e7320696e207468652073616d65208c 6c652c20616e64206f6e65>-.15 F 1.615<696e7374616e6365206f6620656163682043 4f4d4d4f4e20626c6f636b206465636c61726174696f6e2e>108 172.8 R 1.614<5468 697320697320746865206d696e696d756d20616d6f756e74206f6620696e666f726d6174 696f6e206e656564656420746f>6.614 F <636865636b2061677265656d656e74206265747765656e208c6c65732e>108 184.8 Q .379<49662074686520736f75726365208c6c6520636f6e7461696e73206d6f72652074 68616e206f6e6520726f7574696e652c2074686572652061726520736f6d6520706f7373 69626c652070726f626c656d7320746861742063616e2061726973652066726f6d206372 652d>108 201.6 R .157<6174696e67207468652070726f6a656374208c6c6520696e20 6c696272617279206d6f64652c2062656361757365207468652063616c6c696e67206869 657261726368>108 213.6 R 2.656<7961>-.05 G .156<6d6f6e6720726f7574696e65 732064658c6e65642077697468696e20746865208c6c65206973>-2.656 F 3.197 <6c6f73742e20416c736f2c>108 225.6 R .697 <69662074686520726f7574696e657320696e20746865208c6c65206d616b>3.197 F 3.197<6575>-.1 G .698<7365206f6620434f4d4d4f4e20626c6f636b73207468617420 61726520736861726564207769746820726f7574696e657320696e206f74686572> -3.197 F .768<8c6c65732c2074686572652077696c6c206e6f7420626520656e6f7567 6820696e666f726d6174696f6e207361>108 237.6 R -.15<7665>-.2 G 3.267<6466> .15 G .767<6f722074686520636f727265637420636865636b696e67206f6620736574 20616e64207573656420737461747573206f6620434f4d2d>-3.267 F 1.94 <4d4f4e20626c6f636b7320616e6420434f4d4d4f4e2076>108 249.6 R 1.941 <61726961626c6573206163636f7264696e6720746f20746865>-.25 F F1 4.441 E F0 4.441<73657474696e672e205468657265666f7265> 4.441 F 1.941<696620796f7520706c616e20746f20757365>4.441 F .412 <70726f6a656374208c6c6573207768656e>108 261.6 R F12.912 E F0 .411<636865636b696e67206973207475726e6564206f6e2028776869636820697320 74686520646566>2.911 F .411<61756c7420736974756174696f6e292c20616e642069 66206d756c7469706c6520726f7574696e657320696e>-.1 F .251<6f6e652070726f6a 656374208c6c6520736861726520434f4d4d4f4e20626c6f636b73207769746820726f75 74696e657320696e206f74686572208c6c65732c207468652070726f6a656374208c6c65 732073686f756c6420626520637265617465642077697468>108 273.6 R<746865>108 285.6 Q F12.696 E F0 .196<8d6167207475726e6564206f66> 2.696 F 2.696<662e20496e>-.25 F .196<74686973206d6f64652c>2.696 F F1 <66746e6368656b>2.696 E F0<7361>2.696 E -.15<7665>-.2 G .195<732c206265 73696465732074686520696e666f726d6174696f6e206c69737465642061626f>.15 F -.15<7665>-.15 G 2.695<2c6f>.15 G .195<6e6520696e>-2.695 F -.2<766f>-.4 G<63612d>.2 E .624 <74696f6e206f6620656163682073756270726f6772616d20627920616e>108 297.6 R 3.124<796f>-.15 G .625<746865722073756270726f6772616d20696e207468652073 616d65208c6c652c20616e6420616c6c20434f4d4d4f4e20626c6f636b206465636c6172 6174696f6e732e>-3.124 F .007<54686973206d65616e732074686174207468652070 726f6a656374208c6c652077696c6c206265206c6172>108 309.6 R .007 <676572207468616e206e6563657373617279>-.18 F 2.506<2c61>-.65 G .006 <6e642074686174207768656e206974206973207265616420696e2c>-2.506 F F1 <66746e6368656b>2.506 E F0 .006<6d617920726570656174>2.506 F .255 <736f6d6520696e746572>108 321.6 R .255<2d6d6f64756c6520636865636b732074 68617420697420616c726561647920646964207768656e207468652070726f6a65637420 8c6c652077>-.2 F .255<617320637265617465642e>-.1 F .256 <496620656163682070726f6a656374208c6c6520636f6e7461696e73>5.256 F<6f6e6c 79206f6e65206d6f64756c652c207468657265206973206e6f206c6f7373206f6620696e 666f726d6174696f6e20696e206372656174696e67207468652070726f6a656374208c6c 657320696e206c696272617279206d6f64652e>108 333.6 Q 1.435<42656361757365 206f662074686520706f737369626c65206c6f7373206f6620696e666f726d6174696f6e 20656e7461696c6564206279206372656174696e6720612070726f6a656374208c6c6520 7769746820746865>108 350.4 R F13.935 E F0 1.435 <8d616720696e>3.935 F<6566>108 362.4 Q .612<666563742c207768656e65>-.25 F -.15<7665>-.25 G 3.112<7274>.15 G .612 <6861742070726f6a656374208c6c65206973207265616420696e206c61746572>-3.112 F 3.112<2c69>-.4 G 3.112<7477>-3.112 G .613 <696c6c20626520747265617465642061732061206c696272617279208c6c65207265> -3.112 F -.05<6761>-.15 G .613 <72646c657373206f66207468652063757272656e74>.05 F .729 <73657474696e67206f6620746865>108 374.4 R F13.229 E F0 3.229<8d61672e204f6e>3.229 F .729<746865206f746865722068616e642c20612070 726f6a656374208c6c6520637265617465642077697468206c696272617279206d6f6465 207475726e6564206f66>3.229 F 3.229<6663>-.25 G .728<616e206265>-3.229 F <7265616420696e206c6174657220696e20656974686572206d6f64652e>108 386.4 Q .243<54686520666f7265>108 403.2 R .244<676f696e672064697363757373696f6e 20617373756d6573207468617420746865207472696d6d696e67206f7074696f6e73206f 6620746865>-.15 F F12.744 E<6f6a656374>-.18 E F0 .244 <73657474696e6720617265207475726e6564206f6e207768656e20746865>2.744 F .687<70726f6a656374208c6c6520697320637265617465642e>108 415.2 R .687 <5468697320697320746865206e6f726d616c20736974756174696f6e2e>5.687 F <546865>5.686 E F1<6e6fad7472696d>3.186 E F0 .686 <6f7074696f6e73206f6620746865>3.186 F F13.186 E<6f6a656374>-.18 E F0 .686<73657474696e67206172652070726f2d>3.186 F .259 <766964656420696e2063617365206f6e652077>108 427.2 R .26<616e747320746f20 757365207468652070726f6a656374208c6c657320666f7220707572706f736573206f74 686572207468616e20636865636b696e67207468652070726f6772616d2077697468>-.1 F F1<66746e6368656b>2.76 E F0<2e>A -.15<466f>108 439.2 S 2.925<7269>.15 G .425<6e7374616e63652c206f6e6520636f756c642077726974652061205065726c20 73637269707420746f20616e616c797a65207468652070726f6a656374208c6c65732066 6f7220696e666f726d6174696f6e2061626f757420686f>-2.925 F 2.925<7774>-.25 G .425<686520646966>-2.925 F<666572>-.25 E<2d>-.2 E .29 <656e742073756270726f6772616d73206172652063616c6c65642e>108 451.2 R -1.1 <596f>5.29 G 2.79<7573>1.1 G .29<686f756c64206e6f742075736520746865> -2.79 F F1<6e6fad7472696d>2.791 E F0 .291<6f7074696f6e7320746f206465616c 20776974682074686520697373756573206f6620696e666f726d6174696f6e>2.791 F 1.916<6c6f7373206469736375737365642061626f>108 463.2 R -.15<7665>-.15 G 4.416<2c73>.15 G 1.916<696e636520746865>-4.416 F 4.416<7963>-.15 G 1.915 <61757365206d6f726520696e666f726d6174696f6e207468616e206e65636573736172 7920746f2062652073746f7265642e>-4.416 F 1.915<54686973206d616b>6.915 F 1.915<657320746865>-.1 F .738 <70726f6a656374208c6c65732062696767657220616e6420636175736573>108 475.2 R F1<66746e6368656b>3.238 E F0 .738<746f20646f206d6f72652077>3.238 F .739<6f726b206c61746572207768656e206974207265616473207468656d20746f2063 6865636b20796f757220636f6d706c657465>-.1 F 2.623 <70726f6772616d2e204f7264696e6172696c79>108 487.2 R 2.623<2c79>-.65 G .123<6f752073686f756c642075736520746865>-2.623 F F1 2.623 E F0 .122<6f7074696f6e20746f20636f6e74726f6c20686f>2.623 F 2.622 <776d>-.25 G .122 <75636820696e666f726d6174696f6e20746f2073746f726520666f72206c61746572> -2.622 F<757365206279>108 499.2 Q F1<66746e6368656b>2.5 E F0 <696e20636865636b696e6720796f75722070726f6772616d2e>2.5 E .982 <4865726520697320616e2065>108 516 R .982<78616d706c65206f6620686f>-.15 F 3.482<7774>-.25 G 3.482<6f75>-3.482 G .983<73652074686520554e4958>-3.482 F F1<6d616b>3.483 E<65>-.1 E F0 .983<7574696c69747920746f206175746f6d61 746963616c6c79206372656174652061206e65>3.483 F 3.483<7770>-.25 G .983 <726f6a656374208c6c652065616368>-3.483 F .063<74696d652074686520636f7272 6573706f6e64696e6720736f75726365208c6c6520697320616c74657265642c20616e64 20746f20636865636b2074686520736574206f66208c6c657320666f7220636f6e736973 74656e63>108 528 R 3.863 -.65<792e2041>-.15 H .063 <6464207468657365206c696e657320746f>.65 F<796f7572>108 540 Q/F2 10 /Courier@0 SF<6d616b6566696c65>3.018 E F0 5.518<2e54>C .518<68652065> -5.518 F .519<78616d706c6520617373756d657320746861742061206d6163726f> -.15 F F2<4f424a53>3.019 E F0 .519<686173206265656e2064658c6e6564207768 696368206c6973747320616c6c20746865206e616d6573206f66>3.019 F 2.149 <6f626a656374208c6c657320746f206265206c696e6b>108 552 R 2.149 <656420746f67657468657220746f20666f726d2074686520636f6d706c6574652065> -.1 F -.15<7865>-.15 G 2.148<63757461626c652070726f6772616d2e>.15 F 2.148<28496e2074686973>7.148 F F2<6d616b6566696c65>4.648 E F0 4.648 <2c74>C<6865>-4.648 E .66 <696e64656e746564206c696e65732073686f756c642065616368206265>108 564 R .66<67696e20776974682061207461622c206e6f7420626c616e6b732e29>-.15 F .661 <496620616e>5.661 F 3.161<7973>-.15 G .661<6f75726365208c6c6520636f6e74 61696e73206d756c7469706c6520726f7574696e65732074686174>-3.161 F 3.879 <736861726520636f6d6d6f6e20626c6f636b7320616d6f6e67207468656d73656c76> 108 576 R 3.878<65732c207468656e20746865>-.15 F F2<6e6f2d636f6d2d5c2a> 6.378 E F0 3.878<6f7074696f6e2073686f756c642062652072656d6f>6.378 F -.15 <7665>-.15 G 6.378<6466>.15 G<726f6d>-6.378 E F2<4e4f474c4f42414c>108 588 Q F0 2.5<2c61>C<6e642f6f722064726f7020746865>-2.5 E F2 <2d6c696272617279>2.5 E F0<8d61672e>2.5 E F2 6<2374>132 612 S<656c6c206d 616b65207768617420612070726f6a6563742066696c6520737566666978206973>-6 E <2e53554646495845533a202e70726a>132 624 Q 6<2374>132 648 S<68657365206f 7074696f6e7320737570707265737320676c6f62616c20636865636b732e>-6 E<4e4f47 4c4f42414c3d2d75736167653d6e6f2d6578742d756e646566696e65642c6e6f2d636f6d 2d5c2a>132 660 Q 6<2374>132 684 S<656c6c206d616b6520686f7720746f20637265 6174652061202e70726a2066696c652066726f6d2061202e662066696c65>-6 E <2e662e70726a3a>132 696 Q<66746e6368656b202d70726f6a6563742024284e4f474c 4f42414c29202d6c69627261727920243c>180 708 Q F0<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3336>191.795 E 0 Cg EP %%Page: 37 37 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF 6<2373>132 84 S<6574207570206d6163726f2050524a5320636f6e7461696e696e672070726f6a65 63742066696c656e616d6573>-6 E <50524a533d2024284f424a533a2e6f3d2e70726a29>132 96 Q 6<2322>132 120 S<6d 616b6520636865636b222077696c6c20636865636b2065766572797468696e6720746861 7420686173206265656e206368616e6765642e>-6 E <636865636b3a20242850524a5329>132 132 Q<66746e6368656b20242850524a5329> 180 144 Q F0 .319<5768656e20612070726f6772616d2075736573206d616e>108 160.8 R 2.819<7972>-.15 G .319 <6f7574696e65732064658c6e656420696e2061206c6172>-2.819 F .32 <6765206e756d626572206f6620646966>-.18 F .32 <666572656e7420736f75726365208c6c657320696e20646966>-.25 F .32 <666572656e74206469726563746f2d>-.25 F .814<726965732c2069742063616e2062 652063756d626572736f6d6520746f207370656369667920616c6c2074686520646966> 108 172.8 R .813<666572656e742070726f6a656374208c6c6573206e656564656420 746f20636865636b207468652070726f6772616d2070726f7065726c79>-.25 F<2e> -.65 E 1.89 -.8<546f2064>108 184.8 T .29 <65616c207769746820737563682063617365732c>.8 F/F2 10/Times-Bold@0 SF <66746e6368656b>2.79 E F0<616c6c6f>2.79 E .291<77732070726f6a656374208c 6c657320746f20626520636f6e636174656e6174656420696e746f20612073696e676c65 206c6172>-.25 F .291<6765208c6c652e>-.18 F .291<546869732073696e676c65> 5.291 F .728<8c6c652063616e207468656e206265206769>108 196.8 R -.15<7665> -.25 G 3.227<6e74>.15 G<6f>-3.227 E F2<66746e6368656b>3.227 E F0 .727 <746f2070726f>3.227 F .727<766964652074686520696e666f726d6174696f6e2066 6f7220636865636b696e672074686520757365206f6620616e>-.15 F 3.227<796f> -.15 G 3.227<7261>-3.227 G .727<6c6c206f662074686520726f752d>-3.227 F 2.085<74696e65732064658c6e656420696e2074686520636f6d62696e65642070726f6a 656374208c6c65732e>108 208.8 R 2.085 <5768656e207573696e67207375636820612060>7.085 F<606c69627261727927>-.74 E 4.585<2770>-.74 G 2.085<726f6a656374208c6c652c20796f75206d61792077> -4.585 F<616e74>-.1 E F2<66746e6368656b>108 220.8 Q F0 1.37 -.55 <27732065>D .269<72726f72207265706f72747320746f20646f63756d656e74207072 65636973656c7920746865206e616d65206f6620746865208c6c65207768657265207468 652073706563698c632066756e6374696f6e2069732064658c6e65642e>.55 F<4966> 5.269 E 1.702<7468652076>108 232.8 R 1.702 <6172696f757320736f75726365208c6c65732061726520696e207365>-.25 F -.15 <7665>-.25 G 1.702<72616c206469726563746f726965732c20616e206572726f7220 7265706f72742074686174206769>.15 F -.15<7665>-.25 G 4.202<736f>.15 G 1.703<6e6c7920746865208c6c65206e616d65206d6179206265>-4.202 F .791<616d 626967756f75732c20616e64207261746865722073686f756c6420696e636c7564652074 6865207061746820746f20746865208c6c652e>108 244.8 R .791<54686520736f6c75 74696f6e20697320746f206372656174652065616368206f662074686520696e6469> 5.791 F<76696475616c>-.25 E .223<70726f6a656374208c6c6573206279206769> 108 256.8 R .224<76696e672074686520636f6d706c657465207061746820746f2074 686520736f75726365208c6c652e>-.25 F .224<5468656e207468697320636f6d706c 65746520706174682077696c6c2061707065617220696e20746865206572726f72>5.224 F 4.09<7265706f7274732e2046>108 268.8 R 1.59<6f722065>-.15 F 1.589<7861 6d706c652c20737570706f7365207468617420616c6c206f6620746865206c6962726172 792073756270726f6772616d20736f75726365208c6c65732061726520696e2073756264 69726563746f72696573206f662061>-.15 F .461 <6469726563746f7279206e616d6564>108 280.8 R F1<2f7574696c2f6c6962>2.961 E F0 5.461<2e54>C .461<68656e2074686520696e6469>-5.461 F .461<7669647561 6c2070726f6a656374208c6c657320636f756c64208c7273742062652063726561746564 206279206120636f6d6d616e642073756368>-.25 F<6173>108 292.8 Q F1<66696e64 202f7574696c2f6c6962202d6e616d6520272a2e6627202d657865632066746e6368656b 202d70726f6a65637420277b7d2720273b27>108 316.8 Q F0 .283 <28506f737369626c79206f74686572206f7074696f6e732077>108 328.8 R .283 <6f756c642062652070726f>-.1 F .283<766964656420746f>-.15 F F2 <66746e6368656b>2.783 E F0 .282<6173206469736375737365642061626f>2.783 F -.15<7665>-.15 G 5.282<2e41>.15 G .282 <6c736f2c2074686973207374657020636f756c642062652068616e646c6564>-5.282 F .937<696e73746561642062792061207265>108 340.8 R<7669736564>-.25 E F1 <6d616b6566696c65>3.437 E F0 .937<72756c6520746861742077>3.437 F .938 <6f756c642070726f>-.1 F .938<766964652074686520636f6d706c65746520736f75 726365208c6c65207061746820696e7374656164206f66206a75737420746865>-.15 F <6c6f63616c206e616d65207768656e20696e>108 352.8 Q -.2<766f>-.4 G <6b696e67>.2 E F2<66746e6368656b>2.5 E F0 2.5<2e29204e65>B<78742c20636f 6e636174656e61746520616c6c206f662074686573652070726f6a656374208c6c657320 6d616e75616c6c79>-.15 E<2e>-.65 E F1<66696e64202f7574696c2f6c6962202d6e 616d6520272a2e70726a27202d657865632063617420277b7d2720273b27203e206f7572 6c69622e70726a>108 376.8 Q F0<5468656e20612070726f6772616d20736f75726365 208c6c652063616e20626520636865636b>108 388.8 Q <6564206279207573696e672074686520636f6d6d616e64>-.1 E F1 <66746e6368656b2070726f672e66202e2e2e202d6c6962206f75726c69622e70726a> 108 412.8 Q F0 <616e6420616e206572726f72206d6573736167652072656c6174656420746f20616e> 108 424.8 Q 2.5<796c>-.15 G<69627261727920726f7574696e652077696c6c20696e 636c756465207468652066756c6c207061746820746f2074686520726f7574696e6527> -2.5 E 2.5<7373>-.55 G<6f75726365208c6c652e>-2.5 E .638 <41742070726573656e742c207468657265206973206e6f206172636869>108 441.6 R .938 -.15<76652075>-.25 H .638<74696c697479206c696b>.15 F<65>-.1 E F2 <6172>3.138 E F0 .638<746f206d616e6167652074686520636f6e74656e7473206f66 206120636f6e636174656e617465642070726f6a656374208c6c65206c696b>3.138 F 3.137<6574>-.1 G<6865>-3.137 E .276 <6f6e6520696e2074686520696c6c757374726174696f6e2061626f>108 453.6 R -.15 <7665>-.15 G 5.276<2e49>.15 G 2.776<6663>-5.276 G .277<68616e6765732061 7265206d61646520746f206f6e65206f6620746865206c69627261727920726f7574696e 65732c20746865206f6e6c792077>-2.776 F .277 <617920746f2075706461746520746865>-.1 F .749<636f6d62696e65642070726f6a 656374208c6c6520697320746f20636f6e636174656e61746520616c6c2074686520696e 6469>108 465.6 R .748 <76696475616c2070726f6a656374208c6c6573206f6e6365206167>-.25 F 3.248 <61696e2e2053756368>-.05 F 3.248<6175>3.248 G .748<74696c6974792077> -3.248 F .748<6f756c64206265>-.1 F <7175697465206561737920746f2077726974652e>108 477.6 Q <536f6d656f6e652073686f756c6420646f20736f20616e6420636f6e74726962>5 E <75746520697420746f20746865>-.2 E F2<66746e6368656b>2.5 E F0<6566>2.5 E <666f72742e>-.25 E/F3 10.95/Times-Bold@0 SF<414e204558414d504c45>72 494.4 Q F0 .322<54686520666f6c6c6f>108 506.4 R .322 <77696e672073696d706c652046>-.25 F .322<6f727472616e2070726f6772616d2069 6c6c757374726174657320746865206d65737361676573206769>-.15 F -.15<7665> -.25 G 2.822<6e62>.15 G<79>-2.822 E F2<66746e6368656b>2.822 E F0 5.322 <2e54>C .323<68652070726f6772616d20697320696e74656e646564>-5.322 F<746f 2061636365707420616e206172726179206f6620746573742073636f72657320616e6420 7468656e20636f6d70757465207468652061>108 518.4 Q -.15<7665>-.2 G <7261676520666f7220746865207365726965732e>.15 E F1 42<4341>108 547.2 S< 5554484f52533a204d494b45204d5945525320414e44204c5543494120535041474e554f 4c4f>-42 E 42<4344>108 559.2 S 18<4154453a204d4159>-42 F<382c2031393839> 6 E 42<4356>108 583.2 S<61726961626c65733a>-42 E 90<4353>108 595.2 S <434f5245202d3e20616e206172726179206f6620746573742073636f726573>-90 E 90 <4353>108 607.2 S<554d202d3e>-90 E <73756d206f662074686520746573742073636f726573>18 E 90<4343>108 619.2 S <4f554e54202d3e20636f756e746572206f662073636f726573207265616420696e>-90 E 90<4349>108 631.2 S 24<2d3e206c6f6f70>-84 F<636f756e746572>6 E <5245414c2046554e4354494f4e20434f4d5041562853434f52452c434f554e5429>156 655.2 Q<494e54454745522053554d2c434f554e542c4a2c53434f5245283529>180 667.2 Q<444f2033302049203d20312c434f554e54>180 691.2 Q <53554d203d2053554d202b2053434f5245284929>204 703.2 Q 54 <333020434f4e54494e5545>108 715.2 R <434f4d504156203d2053554d2f434f554e54>180 727.2 Q F0<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3337>191.795 E 0 Cg EP %%Page: 38 38 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF<454e44>156 84 Q<50524f4752414d204156454e554d>156 120 Q<43>108 132 Q 138<434d>108 144 S<41494e2050524f4752414d>-138 E<43>108 156 Q 42<4341>108 168 S 12 <5554484f523a204c4f4953>-42 F<424947424945>6 E 42<4344>108 180 S 24 <4154453a204d4159>-42 F<31352c2031393930>6 E<43>108 192 Q 42<4356>108 204 S<61726961626c65733a>-42 E 90<434d>108 216 S<41584e4f53202d3e206d61 78696d756d206e756d626572206f6620696e7075742076616c756573>-90 E 90<434e> 108 228 S 18<554d53202d3e>-90 F<616e206172726179206f66206e756d62657273>6 E 90<4343>108 240 S 12<4f554e54202d3e>-90 F <6578616374206e756d626572206f6620696e7075742076616c756573>6 E 90<4341> 108 252 S 24<5647202d3e>-90 F <617665726167652072657475726e656420627920434f4d504156>6 E 90<4349>108 264 S<2d3e206c6f6f7020636f756e746572>-48 E<43>108 276 Q <504152414d45544552284d41584e4f533d3529>180 300 Q <494e544547455220492c20434f554e54>180 312 Q <5245414c204e554d53284d41584e4f53292c20415647>180 324 Q <434f554e54203d2030>180 336 Q<444f2038302049203d20312c4d41584e4f53>180 348 Q<524541442028352c2a2c454e443d31303029204e554d53284929>204 360 Q <434f554e54203d20434f554e54202b2031>204 372 Q 54<383020434f4e54494e5545> 108 384 R 48<31303020415647>108 396 R 6<3d43>6 G <4f4d504156284e554d532c20434f554e5429>-6 E<454e44>156 408 Q F0 .317 <54686520636f6d70696c6572206769>108 436.8 R -.15<7665>-.25 G 2.816<736e> .15 G 2.816<6f65>-2.816 G .316<72726f72206d65737361676573207768656e2074 6869732070726f6772616d20697320636f6d70696c65642e>-2.816 F -1<5965>5.316 G 2.816<7468>1 G .316 <65726520697320776861742068617070656e73207768656e206974206973>-2.816 F <72756e3a>108 448.8 Q F1 6<2472>108 477.6 S<756e2061766572616765>-6 E <3730>108 489.6 Q<3930>108 501.6 Q<3835>108 513.6 Q<3c454f463e>108 525.6 Q<24>108 537.6 Q F0 .41<576861742068617070656e65643f>108 554.4 R<5768> 5.41 E 2.91<7964>-.05 G<69646e27>-2.91 E 2.91<7474>-.18 G .41 <68652070726f6772616d20646f20616e>-2.91 F 2.911<797468696e673f20546865> -.15 F<666f6c6c6f>2.911 E .411 <77696e6720697320746865206f75747075742066726f6d>-.25 F/F2 10 /Times-Bold@0 SF<66746e6368656b>2.911 E F0 .411<7768656e206974>2.911 F <6973207573656420746f20646562>108 566.4 Q<7567207468652061626f>-.2 E .3 -.15<76652070>-.15 H<726f6772616d3a>.15 E F1 6<2466>108 619.2 S <746e6368656b202d6c697374202d73796d7461622061766572616765>-6 E <46544e4348454b2056657273696f6e20332e33204e6f76656d6265722032303034>108 643.2 Q<46696c6520617665726167652e663a>108 667.2 Q 24 6<31432041>144 691.2 T<5554484f52533a204d494b45204d5945525320414e44204c5543494120535041 474e554f4c4f>-6 E 24 6<32432044>144 703.2 T 18<4154453a204d4159>-6 F <382c2031393839>6 E<33>144 715.2 Q 24 6<34432056>144 727.2 T <61726961626c65733a>-6 E F0<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3338>191.795 E 0 Cg EP %%Page: 39 39 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF 72 6 <35432053>144 84 T <434f5245202d3e20616e206172726179206f6620746573742073636f726573>-6 E 72 6<36432053>144 96 T<554d202d3e>-6 E <73756d206f662074686520746573742073636f726573>18 E 72 6<37432043>144 108 T<4f554e54202d3e20636f756e746572206f662073636f726573207265616420696e>-6 E 72 6<384320492d>144 120 T 30<3e6c>-6 G<6f6f7020636f756e746572>-30 E <39>144 132 Q 48<3130205245414c>138 144 R <46554e4354494f4e20434f4d5041562853434f52452c434f554e5429>6 E 72 <313120494e5445474552>138 156 R <53554d2c434f554e542c4a2c53434f5245283529>6 E<3132>138 168 Q 72 <313320444f>138 180 R<33302049203d20312c434f554e54>6 E 96<31342053554d> 138 192 R 6<3d53>6 G<554d202b2053434f5245284929>-6 E<3135203330>138 204 Q<434f4e54494e5545>60 E 72<313620434f4d504156>138 216 R 6<3d53>6 G <554d2f434f554e54>-6 E<5e>270 228 Q<5761726e696e67206e656172206c696e6520 313620636f6c2032303a20696e74656765722071756f7469656e7420657870722053554d 2f434f554e54>108 240 Q<636f6e76657274656420746f>12 E<7265616c>114 252 Q 48<313720454e44>138 264 R <4d6f64756c6520434f4d5041563a2066756e633a207265616c>108 288 Q <5661726961626c65733a>108 312 Q<4e616d6520547970652044696d73>144 336 Q <4e616d6520547970652044696d73>30 E<4e616d6520547970652044696d73>30 E <4e616d6520547970652044696d73>30 E<434f4d504156207265616c>132 348 Q <434f554e5420696e7467>54 E 6<4969>78 G 66<6e74672a204a>-6 F<696e7467>6 E <53434f524520696e7467>138 360 Q 48<3153>12 G<554d20696e7467>-48 E 6 <2a56>108 384 S<61726961626c65206e6f74206465636c617265642e20547970652068 6173206265656e20696d706c696369746c7920646566696e65642e>-6 E<5761726e696e 6720696e206d6f64756c6520434f4d5041563a205661726961626c6573206465636c6172 656420627574206e65766572207265666572656e6365643a>108 420 Q 6<4a64>132 432 S<65636c61726564206174206c696e65203131>-6 E<5761726e696e6720696e206d 6f64756c6520434f4d5041563a205661726961626c6573206d6179206265207573656420 6265666f7265207365743a>108 456 Q<53554d2075736564206174206c696e65203134> 132 468 Q<53554d20736574206174206c696e65203134>132 480 Q <53746174656d656e74206c6162656c7320646566696e65643a>108 516 Q 12 <4c6162656c204c696e65>132 540 R<53746d7454797065>12 E 24<3c33303e203135> 138 552 R<65786563>36 E<3138>138 576 Q<3139>138 588 Q 48 <32302050524f4752414d>138 600 R<4156454e554d>6 E<32312043>138 612 Q <32322043>138 624 Q<4d41494e2050524f4752414d>138 E<32332043>138 636 Q <32342043>138 648 Q 12<415554484f523a204c4f4953>42 F<424947424945>6 E <32352043>138 660 Q 24<444154453a204d4159>42 F<31352c2031393930>6 E <32362043>138 672 Q<32372043>138 684 Q<5661726961626c65733a>42 E <32382043>138 696 Q<4d41584e4f53202d3e206d6178696d756d206e756d626572206f 6620696e7075742076616c756573>90 E<32392043>138 708 Q 18<4e554d53202d3e> 90 F<616e206172726179206f66206e756d62657273>6 E<33302043>138 720 Q 12 <434f554e54202d3e>90 F <6578616374206e756d626572206f6620696e7075742076616c756573>6 E F0<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3339>191.795 E 0 Cg EP %%Page: 40 40 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF<33312043>138 84 Q 24<415647202d3e>90 F <617665726167652072657475726e656420627920434f4d504156>6 E<33322043>138 96 Q 42<492d>90 G 6<3e6c>-42 G<6f6f7020636f756e746572>-6 E<33332043>138 108 Q<3334>138 120 Q 72<333520504152414d45544552284d41584e4f533d3529>138 132 R 72<333620494e5445474552>138 144 R<492c20434f554e54>6 E 72 <3337205245414c>138 156 R<4e554d53284d41584e4f53292c20415647>6 E 72 <333820434f554e54>138 168 R 6<3d30>6 G 72<333920444f>138 180 R <38302049203d20312c4d41584e4f53>6 E 96<34302052454144>138 192 R <28352c2a2c454e443d31303029204e554d53284929>6 E 96<343120434f554e54>138 204 R 6<3d43>6 G<4f554e54202b2031>-6 E<3432203830>138 216 Q <434f4e54494e5545>60 E<343320313030>138 228 Q <415647203d20434f4d504156284e554d532c20434f554e5429>54 E 48 <343420454e44>138 240 R<4d6f64756c65204156454e554d3a2070726f67>108 264 Q <45787465726e616c2073756270726f6772616d73207265666572656e6365643a>108 288 Q<434f4d5041563a207265616c2a>132 312 Q<5661726961626c65733a>108 336 Q<4e616d6520547970652044696d73>144 360 Q<4e616d6520547970652044696d73>30 E<4e616d6520547970652044696d73>30 E<4e616d6520547970652044696d73>30 E <415647207265616c>150 372 Q<434f554e5420696e7467>54 E 6<4969>78 G 42 <6e7467204d41584e4f53>-6 F<696e74672a>6 E<4e554d53207265616c>144 384 Q <31>12 E 6<2a56>108 408 S<61726961626c65206e6f74206465636c617265642e2054 79706520686173206265656e20696d706c696369746c7920646566696e65642e>-6 E<57 61726e696e6720696e206d6f64756c65204156454e554d3a205661726961626c65732073 657420627574206e6576657220757365643a>108 444 Q <41564720736574206174206c696e65203433>132 456 Q <492f4f204f7065726174696f6e733a>108 480 Q<556e697420494420556e6974204e6f 2e2041636365737320466f726d204f7065726174696f6e>138 504 Q<4c696e65>18 E 60<3553>186 516 S 6<455120464d5444>-60 F 48<52454144203430>6 F <53746174656d656e74206c6162656c7320646566696e65643a>108 540 Q 12 <4c6162656c204c696e65>132 564 R 18<53746d7454797065204c6162656c>12 F 6 <4c696e652053746d7454797065>18 F 24<3c38303e203432>138 576 R 18 <65786563203c3130303e>36 F 30<34332065786563>30 F 6<3073>114 612 S<796e 746178206572726f727320646574656374656420696e2066696c6520617665726167652e 66>-6 E 6<3677>114 624 S <61726e696e67732069737375656420696e2066696c6520617665726167652e66>-6 E< 5761726e696e673a2053756270726f6772616d20434f4d50415620617267756d656e7420 646174612074797065206d69736d6174636820617420706f736974696f6e20313a>108 648 Q<44756d6d79206172672053434f524520696e206d6f64756c6520434f4d50415620 6c696e652031302066696c6520617665726167652e66206973207479706520696e7467> 132 660 Q<41637475616c20617267204e554d5320696e206d6f64756c65204156454e55 4d206c696e652034332066696c6520617665726167652e66206973207479706520726561 6c>132 672 Q F0 .034<4163636f7264696e6720746f>108 700.8 R/F2 10 /Times-Bold@0 SF<66746e6368656b>2.534 E F0 2.534<2c74>C .034 <68652070726f6772616d20636f6e7461696e732076>-2.534 F .034<61726961626c65 73207768696368206d61792062652075736564206265666f726520746865>-.25 F 2.533<7961>-.15 G .033<72652061737369676e656420616e20696e697469616c> -2.533 F -.25<7661>108 712.8 S .853<6c75652c20616e642076>.25 F .853 <61726961626c657320776869636820617265206e6f74206e65656465642e>-.25 F F2 <66746e6368656b>5.853 E F0 .854<616c736f2077>3.353 F .854 <61726e73207468652075736572207468617420616e20696e7465>-.1 F .854 <6765722071756f7469656e7420686173206265656e>-.15 F<636f6e>108 724.8 Q -.15<7665>-.4 G .585<7274656420746f2061207265616c2e2054686973206d617920 61737369737420746865207573657220696e206361746368696e6720616e20756e696e74 656e64656420726f756e646f66>.15 F 3.085<6665>-.25 G<72726f72>-3.085 E 5.585<2e53>-.55 G .585<696e636520746865>-5.585 F F23.085 E F0<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3430> 191.795 E 0 Cg EP %%Page: 41 41 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .107<8d61672077>108 84 R .107 <6173206769>-.1 F -.15<7665>-.25 G<6e2c>.15 E/F1 10/Times-Bold@0 SF <66746e6368656b>2.607 E F0 .108<7072696e7473206f75742061207461626c652063 6f6e7461696e696e67206964656e74698c6572732066726f6d20746865206c6f63616c20 6d6f64756c6520616e6420746865697220636f72726573706f6e642d>2.607 F .198<69 6e6720646174617479706520616e64206e756d626572206f662064696d656e73696f6e73 2e>108 96 R<46696e616c6c79>5.198 E<2c>-.65 E F1<66746e6368656b>2.698 E F0 -.1<7761>2.698 G .197<726e732074686174207468652066756e6374696f6e>.1 F /F2 10/Courier@0 SF<434f4d504156>2.697 E F0 .197 <6973206e6f7420757365642077697468>2.697 F <7468652070726f7065722074797065206f66206172>108 108 Q<67756d656e74732e> -.18 E -.4<5769>108 124.8 S<7468>.4 E F1<66746e6368656b>2.5 E F0 1.1 -.55<27732068>D<656c702c2077652063616e20646562>.55 E <7567207468652070726f6772616d2e>-.2 E 1.6 -.8<57652063>5 H <616e20736565207468617420746865726520776572652074686520666f6c6c6f>.8 E <77696e67206572726f72733a>-.25 E<312e>108 141.6 Q F2<53554d>10 E F0 <616e64>2.5 E F2<434f554e54>2.5 E F0<73686f756c64206861>2.5 E .3 -.15 <76652062>-.2 H<65656e20636f6e>.15 E -.15<7665>-.4 G <7274656420746f207265616c206265666f726520646f696e6720746865206469>.15 E <766973696f6e2e>-.25 E<322e>108 158.4 Q F2<53554d>10 E F0 <73686f756c64206861>2.5 E .3 -.15<76652062>-.2 H<65656e20696e697469616c 697a656420746f2030206265666f726520656e746572696e6720746865206c6f6f702e> .15 E<332e>108 175.2 Q F2<415647>10 E F0 -.1<7761>2.5 G 2.5<736e>.1 G -2.15 -.25<65762065>-2.5 H 2.5<7270>.25 G <72696e746564206f7574206166746572206265696e672063616c63756c617465642e> -2.5 E<342e>108 192 Q F2<4e554d53>10 E F0<73686f756c64206861>2.5 E .3 -.15<76652062>-.2 H<65656e206465636c61726564>.15 E F2<494e5445474552>2.5 E F0<696e7374656164206f66>2.5 E F2<5245414c>2.5 E F0<2e>A 2.209 -.8 <57652061>108 208.8 T .609<6c736f207365652074686174>.8 F F2<49>3.109 E F0 3.109<2c6e>C<6f74>-3.109 E F2<4a>3.109 E F0 3.109<2c73>C .609 <686f756c64206861>-3.109 F .909 -.15<76652062>-.2 H .609 <65656e206465636c61726564>.15 F F2<494e5445474552>3.11 E F0 .61 <696e2066756e6374696f6e>3.11 F F2<434f4d504156>3.11 E F0 3.11<2e41>C <6c736f2c>-3.11 E F2<4d41584e4f53>3.11 E F0 -.1<7761>3.11 G<73>.1 E .097 <6e6f74206465636c61726564206173>108 220.8 R F2<494e5445474552>2.597 E F0 2.597<2c6e>C<6f72>-2.597 E F2<434f4d504156>2.597 E F0<6173>2.597 E F2 <5245414c>2.597 E F0 2.597<2c69>C 2.596<6e70>-2.597 G<726f6772616d> -2.596 E F2<4156454e554d>2.596 E F0 5.096<2e54>C .096 <6865736520617265206e6f74206572726f72732c2062>-5.096 F .096 <757420746865>-.2 F 2.596<796d>-.15 G<6179>-2.596 E <696e64696361746520636172656c6573736e6573732e>108 232.8 Q <41732069742068617070656e65642c2074686520646566>5 E <61756c742074797065206f662074686573652076>-.1 E<61726961626c657320636f69 6e636964656420776974682074686520696e74656e64656420747970652e>-.25 E<4865 72652069732074686520636f727265637465642070726f6772616d2c20616e6420697473 206f7574707574207768656e2072756e3a>108 249.6 Q F2 42<4341>108 278.4 S<55 54484f52533a204d494b45204d5945525320414e44204c5543494120535041474e554f4c 4f>-42 E 42<4344>108 290.4 S 18<4154453a204d4159>-42 F<382c2031393839>6 E<43>108 302.4 Q 42<4356>108 314.4 S<61726961626c65733a>-42 E 90<4353> 108 326.4 S <434f5245202d3e20616e206172726179206f6620746573742073636f726573>-90 E 90 <4353>108 338.4 S<554d202d3e>-90 E <73756d206f662074686520746573742073636f726573>18 E 90<4343>108 350.4 S <4f554e54202d3e20636f756e746572206f662073636f726573207265616420696e>-90 E 90<4349>108 362.4 S 24<2d3e206c6f6f70>-84 F<636f756e746572>6 E<43>108 374.4 Q <5245414c2046554e4354494f4e20434f4d5041562853434f52452c434f554e5429>150 386.4 Q<494e54454745522053554d2c434f554e542c492c53434f5245283529>180 398.4 Q<43>108 410.4 Q<53554d203d2030>180 422.4 Q <444f2033302049203d20312c434f554e54>180 434.4 Q <53554d203d2053554d202b2053434f5245284929>204 446.4 Q 54 <333020434f4e54494e5545>108 458.4 R <434f4d504156203d20464c4f41542853554d292f464c4f415428434f554e5429>180 470.4 Q<454e44>156 482.4 Q<43>108 494.4 Q<43>108 506.4 Q <50524f4752414d204156454e554d>156 518.4 Q<43>108 530.4 Q 138<434d>108 542.4 S<41494e2050524f4752414d>-138 E<43>108 554.4 Q 42<4341>108 566.4 S 12<5554484f523a204c4f4953>-42 F<424947424945>6 E 42<4344>108 578.4 S 24 <4154453a204d4159>-42 F<31352c2031393930>6 E<43>108 590.4 Q 42<4356>108 602.4 S<61726961626c65733a>-42 E 90<434d>108 614.4 S<41584e4f53202d3e20 6d6178696d756d206e756d626572206f6620696e7075742076616c756573>-90 E 90 <434e>108 626.4 S 18<554d53202d3e>-90 F <616e206172726179206f66206e756d62657273>6 E 90<4343>108 638.4 S 12 <4f554e54202d3e>-90 F <6578616374206e756d626572206f6620696e7075742076616c756573>6 E 90<4341> 108 650.4 S 24<5647202d3e>-90 F <617665726167652072657475726e656420627920434f4d504156>6 E 90<4349>108 662.4 S<2d3e206c6f6f7020636f756e746572>-48 E<43>108 674.4 Q<43>108 686.4 Q<494e5445474552204d41584e4f53>180 698.4 Q <504152414d45544552284d41584e4f533d3529>180 710.4 Q <494e544547455220492c204e554d53284d41584e4f53292c20434f554e54>180 722.4 Q F0<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3431> 191.795 E 0 Cg EP %%Page: 42 42 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF <5245414c204156472c434f4d504156>180 84 Q<434f554e54203d2030>180 96 Q <444f2038302049203d20312c4d41584e4f53>180 108 Q <524541442028352c2a2c454e443d31303029204e554d53284929>204 120 Q <434f554e54203d20434f554e54202b2031>204 132 Q 54<383020434f4e54494e5545> 108 144 R 48<31303020415647>108 156 R 6<3d43>6 G <4f4d504156284e554d532c20434f554e5429>-6 E <575249544528362c2a29202741564552414745203d272c415647>180 168 Q<454e44> 156 180 Q 6<2472>108 192 S<756e2061766572616765>-6 E<3730>108 204 Q <3930>108 216 Q<3835>108 228 Q<3c454f463e>108 240 Q<41564552414745203d> 108 252 Q<38312e3636363636>18 E<24>108 264 Q F0 -.4<5769>108 280.8 S <7468>.4 E/F2 10/Times-Bold@0 SF<66746e6368656b>2.5 E F0 1.1 -.55 <27732068>D <656c702c206f75722070726f6772616d2069732061207375636365737321>.55 E/F3 10.95/Times-Bold@0 SF<494e54455250524554494e4720544845204f5554505554>72 309.6 Q F0 .942<546865206d65737361676573206769>108 321.6 R -.15<7665> -.25 G 3.442<6e62>.15 G<79>-3.442 E F2<66746e6368656b>3.442 E F0 .943 <696e636c756465206e6f74206f6e6c792073796e746178206572726f72732062>3.442 F .943<757420616c736f2077>-.2 F .943 <61726e696e677320616e6420696e666f726d6174696f6e616c206d65732d>-.1 F .857 <73616765732061626f7574207468696e6773207468617420617265206c65>108 333.6 R -.05<6761>-.15 G 3.357<6c46>.05 G .857<6f727472616e2062>-3.507 F .857< 75742074686174206d617920696e646963617465206572726f7273206f7220636172656c 6573736e6573732e>-.2 F .857<4d6f7374206f66207468657365206d65732d>5.857 F 1.247<73616765732063616e206265207475726e6564206f66>108 345.6 R 3.747 <6662>-.25 G 3.747<7963>-3.747 G 1.247 <6f6d6d616e642d6c696e65206f7074696f6e732e>-3.747 F 1.248<5768696368206f 7074696f6e20636f6e74726f6c732065616368206d65737361676520646570656e647320 6f6e20746865>6.247 F .22 <6e6174757265206f662074686520636f6e646974696f6e206265696e672077>108 357.6 R .22<61726e65642061626f75742e>-.1 F .22<536565207468652064657363 72697074696f6e73206f662074686520636f6d6d616e642d6c696e65208d61677320696e 2074686520707265>5.22 F<76696f7573>-.25 E .338 <73656374696f6e732c20616e64206f6620696e6469>108 369.6 R .338 <76696475616c206d657373616765732062656c6f>-.25 F 4.138 -.65<772e2045> -.25 H .338<616368206d657373616765206973207072658c78>.65 F .338 <6564207769746820612077>-.15 F .338 <6f7264206f722070687261736520696e6469636174696e6720746865>-.1 F <6e6174757265206f662074686520636f6e646974696f6e20616e6420697473207365> 108 381.6 Q -.15<7665>-.25 G<72697479>.15 E<2e>-.65 E -.74<6060>108 398.4 S<4572726f7227>.74 E 3.75<276d>-.74 G 1.25 <65616e7320612073796e746178206572726f72>-3.75 F 6.25<2e54>-.55 G 1.249< 68652073696d706c657374206b696e64206f662073796e746178206572726f7273206172 65207479706f67726170686963616c206572726f72732c20666f722065>-6.25 F <78616d706c65>-.15 E .16<756e62616c616e63656420706172656e74686573657320 6f72206d69737370656c6c696e67206f662061206b>108 410.4 R -.15<6579>-.1 G -.1<776f>.15 G 2.66<72642e2054686973>.1 F .161<74797065206f66206572726f 7220697320636175676874206279207468652070617273657220616e6420617070656172 73>2.661 F .207<7769746820746865206465736372697074696f6e2060>108 422.4 R .207<607061727365206572726f7227>-.74 F 2.706<276f>-.74 G 2.706<7260> -2.706 G .206<6073796e746178206572726f7227>-3.446 F 2.706<2728>-.74 G .206<646570656e64696e67206f6e>-2.706 F .206<7468652076>5.206 F .206 <657273696f6e206f6620746865207061727365722067656e657261746f7220616e64> -.15 F .346<7768657468657220697420697320474e55>108 434.4 R F2 <6269736f6e>2.846 E F0 .346<6f7220554e4958>2.846 F F2<79616363>2.846 E F0 2.846<292e2054686973>B .346<74797065206f66206572726f72206d6573736167 652063616e6e6f7420626520737570707265737365642e>2.846 F .347<42652061> 5.346 F -.1<7761>-.15 G .347<72652074686174>.1 F 1.832 <746869732074797065206f66206572726f72206f6674656e206d65616e732074686174> 108 446.4 R F2<66746e6368656b>4.332 E F0 1.832<686173206e6f742070726f70 65726c7920696e746572707265746564207468652073746174656d656e74207768657265 20746865206572726f72>4.332 F .878<6f63637572732c20736f207468617420697473 2073756273657175656e7420636865636b696e67206f7065726174696f6e732077696c6c 20626520636f6d70726f6d697365642e>108 458.4 R -1.1<596f>5.879 G 3.379 <7573>1.1 G .879<686f756c6420656c696d696e61746520616c6c2073796e746178> -3.379 F<6572726f7273206265666f72652070726f63656564696e6720746f20696e74 65727072657420746865206f74686572206d65737361676573>108 470.4 Q F2 <66746e6368656b>2.5 E F0<6769>2.5 E -.15<7665>-.25 G<732e>.15 E -.74 <6060>108 487.2 S -.8<5761>.74 G 1.615 <726e696e673a204e6f6e7374616e646172642073796e74617827>.8 F 4.115<2769> -.74 G 1.615<6e6469636174657320616e2065>-4.115 F 1.614 <7874656e73696f6e20746f2046>-.15 F 1.614<6f727472616e2074686174>-.15 F F2<66746e6368656b>4.114 E F0 1.614<737570706f7274732062>4.114 F 1.614 <75742074686174206973206e6f74>-.2 F .6 <6163636f7264696e6720746f207468652046>108 499.2 R .6 <6f727472616e203737205374616e646172642e>-.15 F .6<5468652065>5.6 F .6 <7874656e73696f6e732074686174>-.15 F F2<66746e6368656b>3.1 E F0 .6<6163 6365707473206172652064657363726962656420696e207468652073656374696f6e206f 6e>3.1 F 1.436<457874656e73696f6e732062656c6f>108 511.2 R 5.236 -.65 <772e204f>-.25 H 1.436<6e652065>.65 F 1.436<78616d706c6520697320746865> -.15 F F1<444f>3.935 E F0<2e2e2e>3.935 E F1<454e44444f>3.935 E F0 3.935 <636f6e737472756374696f6e2e204966>3.935 F 3.935<6170>3.935 G 1.435 <726f6772616d20757365732074686573652065>-3.935 F<7874656e73696f6e732c> -.15 E -.1<7761>108 523.2 S .75<726e696e67732077696c6c206265206769>.1 F -.15<7665>-.25 G 3.25<6e61>.15 G .75 <63636f7264696e6720746f2073706563698c636174696f6e7320756e64657220746865> -3.25 F F23.25 E F0 3.25<73657474696e672e20546865>3.25 F <646566>3.25 E .75<61756c742062656861>-.1 F .75 <76696f7220697320746f206769>-.2 F -.15<7665>-.25 G<6e6f2077>108 535.2 Q <61726e696e67732e>-.1 E -.74<6060>108 552 S -.8<5761>.74 G<726e696e6727> .8 E 2.999<2769>-.74 G 2.999<6e6f>-2.999 G .499<74686572206361736573206d 65616e73206120636f6e646974696f6e207468617420697320737573706963696f757320 62>-2.999 F .499<75742074686174206d6179206f72206d6179206e6f742062652061 2070726f6772616d6d696e67>-.2 F<6572726f72>108 564 Q 5.669<2e46>-.55 G .669<72657175656e746c7920746865736520636f6e646974696f6e7320617265206c65> -5.669 F -.05<6761>-.15 G 3.169<6c75>.05 G .669 <6e64657220746865207374616e646172642e>-3.169 F .669 <536f6d652061726520696c6c65>5.669 F -.05<6761>-.15 G 3.17<6c62>.05 G .67 <757420646f206e6f742066>-3.37 F .67<616c6c20756e64657220746865>-.1 F .491<68656164696e67206f662073796e746178206572726f72732e>108 576 R .491 <5573616765206572726f727320617265206f6e652065>5.491 F 2.991 <78616d706c652e205468657365>-.15 F .49 <726566657220746f2074686520706f73736962696c697479207468617420612076> 2.991 F .49<61726961626c65206d6179>-.25 F .12<62652075736564206265666f72 6520697420686173206265656e2061737369676e656420612076>108 588 R .12<616c 7565202867656e6572616c6c7920616e206572726f72292c206f72207468617420612076> -.25 F .12<61726961626c65206973206465636c617265642062>-.25 F .12 <7574206e65>-.2 F -.15<7665>-.25 G 2.62<7275>.15 G<736564>-2.62 E 1.32 <286861726d6c6573732062>108 600 R 1.32 <7574206d617920696e64696361746520636172656c6573736e657373292e>-.2 F 1.319<54686520616d6f756e74206f6620636865636b696e6720666f7220757361676520 6572726f727320697320636f6e74726f6c6c656420627920746865>6.32 F F2 108 612 Q F0<8d61672c2077686963682073706563698c6573207468 65206d6178696d756d20616d6f756e74206f6620636865636b696e6720627920646566> 2.5 E<61756c742e>-.1 E -.35<5472>108 628.8 S 1.003<756e636174696f6e2077> .35 F 1.003<61726e696e677320636f>-.1 F -.15<7665>-.15 G 3.503<7273>.15 G 1.003<6974756174696f6e7320696e2077686963682061636375726163>-3.503 F 3.504<796d>-.15 G 1.004 <6179206265206c6f737420756e696e74656e74696f6e616c6c79>-3.504 F 3.504 <2c66>-.65 G 1.004<6f722065>-3.504 F 1.004<78616d706c65207768656e2061> -.15 F .055<646f75626c6520707265636973696f6e2076>108 640.8 R .055 <616c75652069732061737369676e656420746f2061207265616c2076>-.25 F 2.554 <61726961626c652e205468657365>-.25 F -.1<7761>2.554 G .054 <726e696e67732061726520636f6e74726f6c6c656420627920746865>.1 F F2 2.554 E F0<7365742d>2.554 E <74696e672c207768696368206973206f6e20627920646566>108 652.8 Q <61756c742e>-.1 E -.74<6060>108 669.6 S .046 <4e6f6e706f727461626c6520757361676527>.74 F 2.546<2777>-.74 G .046<6172 6e732061626f757420736f6d6520666561747572652074686174206d6179206e6f742062 6520616363657074656420627920736f6d6520636f6d70696c6572732065>-2.646 F -.15<7665>-.25 G 2.547<6e74>.15 G .047<686f756768206974>-2.547 F .106 <6973206e6f7420636f6e747261727920746f207468652046>108 681.6 R .105<6f72 7472616e203737205374616e646172642c206f722074686174206d617920636175736520 7468652070726f6772616d20746f20706572666f726d20646966>-.15 F .105 <666572656e746c79206f6e20646966>-.25 F<666572656e74>-.25 E 3.607 <706c6174666f726d732e2046>108 693.6 R 1.107<6f722065>-.15 F 1.107 <78616d706c652c2065717569>-.15 F -.25<7661>-.25 G 1.108 <6c656e63696e67207265616c20616e6420696e7465>.25 F 1.108<6765722076>-.15 F 1.108<61726961626c657320697320757375616c6c792061206e6f6e2d706f72746162 6c652070726163746963652e>-.25 F<546865>6.108 E .703<757365206f662065>108 705.6 R .703<7874656e73696f6e7320746f20746865207374616e64617264206c616e 67756167652069732c206f6620636f757273652c20616e6f7468657220736f7572636520 6f66206e6f6e2d706f72746162696c697479>-.15 F 3.203<2c62>-.65 G .703 <757420746869732069732068616e2d>-3.403 F .751 <646c6564206173206120736570617261746520636173652e>108 717.6 R 2.351 -.8 <546f2063>5.751 H .751 <6865636b20612070726f6772616d20666f72207472756520706f72746162696c697479> .8 F 3.251<2c62>-.65 G .751<6f746820746865>-3.251 F F2 3.251 E F0 .751<616e6420746865>3.251 F F2 3.252 E F0<8d616773>3.252 E 1.383 <73686f756c6420626520757365642e>108 729.6 R<546865>6.383 E 3.883<7961> -.15 G 1.383<726520626f7468207475726e6564206f66>-3.883 F 3.882<6662>-.25 G 3.882<7964>-3.882 G<6566>-3.882 E 3.882<61756c742e20546865>-.1 F F2 3.882 E<6f726473697a65>-.1 E F0 1.382 <73657474696e672069732070726f>3.882 F 1.382 <766964656420746f20636865636b206f6e6c79>-.15 F<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3432>191.795 E 0 Cg EP %%Page: 43 43 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<74686f7365206e6f6e706f72746162 6c6520757361676573207468617420646570656e64206f6e206120706172746963756c61 72206d616368696e652077>108 84 Q<6f726473697a652e>-.1 E -.74<6060>108 100.8 S .871 <506f737369626c79206d69736c656164696e6720617070656172616e636527>.74 F 3.371<2769>-.74 G 3.371<7375>-3.371 G .871<73656420666f72206c65>-3.371 F -.05<6761>-.15 G 3.371<6c63>.05 G .871<6f6e737472756374696f6e7320746861 74206d6179206e6f74206d65616e207768617420746865>-3.371 F 3.372<7961>-.15 G .872<707065617220746f>-3.372 F .104 <6d65616e206174208c72737420676c616e63652e>108 112.8 R -.15<466f>5.103 G 2.603<7265>.15 G .103<78616d706c652c2046>-2.753 F .103 <6f727472616e20697320696e73656e73697469>-.15 F .403 -.15<76652074>-.25 H 2.603<6f62>.15 G .103<6c616e6b2073706163652c20736f2065>-2.603 F .103 <787472616e656f75732073706163652077697468696e2076>-.15 F<61726961626c65> -.25 E 1.485<6e616d6573206f7220746865206c61636b206f66207370616365206265 747765656e2061206b>108 124.8 R -.15<6579>-.1 G -.1<776f>.15 G 1.486 <726420616e6420612076>.1 F 1.486<61726961626c652063616e20636f6e>-.25 F 1.786 -.15<7665792074>-.4 H 1.486 <68652077726f6e6720696d7072657373696f6e20746f20746865>.15 F <726561646572>108 136.8 Q 5<2e54>-.55 G<68657365206d65737361676573206361 6e2062652073757070726573736564206279207475726e696e67206f66>-5 E 2.5 <6674>-.25 G<6865>-2.5 E/F1 10/Times-Bold@0 SF2.5 E<65747479> -.18 E F0<8d61672c207768696368206973206f6e20627920646566>2.5 E <61756c742e>-.1 E .976 <4f74686572206d65737361676573207468617420617265206769>108 153.6 R -.15 <7665>-.25 G 3.476<6e61>.15 G .976<6674657220616c6c20746865208c6c657320 6172652070726f6365737365642c20616e64206861>-3.476 F .976 <76696e6720746f20646f20776974682061677265656d656e74206265747765656e>-.2 F .389<6d6f64756c65732c20646f206e6f7420757365207468652077>108 165.6 R .389<6f72642060>-.1 F<6077>-.74 E<61726e696e6727>-.1 E 2.889<2762>-.74 G .389<75742067656e6572616c6c792066>-3.089 F .39 <616c6c20696e746f20746861742063617465>-.1 F<676f7279>-.15 E 5.39<2e45> -.65 G .39<78616d706c657320696e636c7564652074797065206d69732d>-5.39 F 1.094<6d617463686573206265747765656e20636f72726573706f6e64696e672076>108 177.6 R 1.094<61726961626c657320696e20646966>-.25 F 1.093<666572656e7420 434f4d4d4f4e20626c6f636b206465636c61726174696f6e732c206f7220626574776565 6e2064756d6d79>-.25 F .592<616e642061637475616c206172>108 189.6 R .592 <67756d656e7473206f6620612073756270726f6772616d2e>-.18 F .592 <54686573652077>5.592 F .592 <61726e696e67732061726520636f6e74726f6c6c656420627920746865>-.1 F F1 3.092 E F0<616e64>3.093 E F13.093 E <67756d656e7473>-.1 E F0<73657474696e6773207265737065637469>108 201.6 Q -.15<7665>-.25 G<6c79>.15 E 5<2e42>-.65 G 2.5<7964>-5 G<6566>-2.5 E<6175 6c7420626f7468206172652073657420666f72206d6178696d756d207374726963746e65 7373206f6620636865636b696e672e>-.1 E .603 <416e6f746865722067726f7570206f662077>108 218.4 R .602<61726e696e677320 61626f757420636f6e646974696f6e73207468617420617265206f6674656e206861726d 6c65737320726566657220746f2063617365732077686572652074686520617272617920 70726f706572>-.1 F<2d>-.2 E .44<74696573206f6620612076>108 230.4 R .44 <61726961626c652070617373656420617320612073756270726f6772616d206172>-.25 F .44<67756d656e7420646966>-.18 F .44 <666572206265747765656e20746865207477>-.25 F 2.94<6f72>-.1 G 2.94 <6f7574696e65732e2046>-2.94 F .44 <6f7220696e7374616e63652c20616e206172726179>-.15 F .087<656c656d656e7420 6d696768742062652070617373656420746f206120737562726f7574696e652074686174 2065>108 242.4 R .087<78706563747320612077686f6c65206172726179>-.15 F 5.087<2e54>-.65 G .087<686973206973206120636f6d6d6f6e6c792d757365642074 6563686e6971756520666f72>-5.087 F .625 <70726f63657373696e672073696e676c6520726f>108 254.4 R .625 <7773206f7220636f6c756d6e73206f66207477>-.25 F .625 <6f2d64696d656e73696f6e616c206172726179732e>-.1 F<486f>5.625 E<7765>-.25 E -.15<7665>-.25 G 1.425 -.4<722c2069>.15 H 3.125<7463>.4 G .625 <6f756c6420616c736f20696e64696361746520612070726f6772616d2d>-3.125 F .195<6d696e67206572726f72>108 266.4 R 5.195<2e54>-.55 G<6865>-5.195 E F1 2.695 E F0 .195<73657474696e6720616c6c6f>2.695 F .195 <777320746865207573657220746f2061646a75737420746865206465>-.25 F .194<67 726565206f66207374726963746e65737320746f206265207573656420696e2063686563 6b696e672074686973>-.15 F<6b696e64206f662061677265656d656e74206265747765 656e2061637475616c20616e642064756d6d79206172726179206172>108 278.4 Q 2.5 <67756d656e74732e204279>-.18 F<646566>2.5 E <61756c7420746865207374726963746e657373206973206d6178696d756d2e>-.1 E -.74<6060>108 295.2 S<4f6f707327>.74 E 3.92<2769>-.74 G 1.42<6e64696361 746573206120746563686e6963616c2070726f626c656d2c206d65616e696e6720656974 68657220612062>-3.92 F 1.421<756720696e>-.2 F F1<66746e6368656b>3.921 E F0 1.421<6f72207468617420697473207265736f7572636573206861>3.921 F 1.721 -.15<76652062>-.2 H<65656e>.15 E -.15<6578>108 307.2 S<6365656465642e> .15 E .17 <5468652073796e746178206572726f72206d6573736167657320616e642077>108 324 R .17<61726e696e677320696e636c75646520746865208c6c656e616d6520616c6f6e67 207769746820746865206c696e65206e756d62657220616e6420636f6c756d6e206e756d 2d>-.1 F<626572>108 336 Q<2e>-.55 E F1<66746e6368656b>5.548 E F0 .548 <686173207477>3.048 F 3.049<6f64>-.1 G<6966>-3.049 E .549<666572656e7420 6f7074696f6e7320666f722074686520617070656172616e6365206f6620746865736520 6572726f72206d657373616765732e>-.25 F<4966>5.549 E F13.049 E <76696365>-.1 E F0 .549<697320696e206566>3.049 F<666563742c>-.25 E .672 <77686963682069732074686520646566>108 348 R .672<61756c742c20746865206d 657373616765732061726520696e2061207374796c6520617070726f78696d6174696e67 206e6f726d616c20456e676c6973682e>-.1 F .671<28496e20646566>5.672 F .671 <61756c74207374796c652c20746865208c6c652d>-.1 F 1.08<6e616d65206973206e 6f74207072696e74656420696e206d657373616765732077697468696e2074686520626f 6479206f66207468652070726f6772616d206966>108 360 R F13.58 E F0 1.08<697320696e206566>3.58 F 3.58<666563742e2920546865>-.25 F 1.08 <6f74686572207374796c65206f66>3.58 F .184 <6572726f72206d657373616765732069732073656c656374656420627920746865>108 372 R F12.684 E<76696365>-.1 E F0 2.684 <6f7074696f6e2e20496e>2.684 F .184<74686973207374796c652c20746865206170 70656172616e6365206f6620746865206d657373616765732069732073696d696c6172> 2.684 F<746f2074686174206f662074686520554e4958>108 384 Q F1<6c696e74>2.5 E F0<70726f6772616d2e>2.5 E F1<66746e6368656b>108 400.8 Q F0 .211<697320 7374696c6c20626c696e6420746f20736f6d65206b696e6473206f662073796e74617820 6572726f72732e>2.711 F .211<546865207477>5.211 F 2.711<6f6d>-.1 G .211< 6f737420696d706f7274616e74206f6e6573206172652064657461696c65642063686563 6b696e67206f66>-2.711 F/F2 10/Courier@0 SF<464f524d4154>108 412.8 Q F0 1.01<73746174656d656e74732c20616e6420616c6d6f737420616e>3.51 F 1.01 <797468696e6720746f20646f207769746820636f6e74726f6c206f662065>-.15 F -.15<7865>-.15 G 1.01<637574696f6e208d6f>.15 F 3.51<7762>-.25 G 3.51 <796d>-3.51 G 1.01<65616e73206f66>-3.51 F F2<4946>3.51 E F0<2c>A F2 <444f>3.51 E F0 3.51<2c61>C<6e64>-3.51 E F2<474f544f>108 424.8 Q F0 .373 <73746174656d656e74733a206e616d656c7920636f7272656374206e657374696e6720 6f6620636f6e74726f6c20737472756374757265732c206d61746368696e67206f66206f 70656e696e672073746174656d656e74732073756368206173>2.872 F F2<4946>2.873 E F0<2e2e2e>108 436.8 Q F2<5448454e>3.107 E F0 .607 <7769746820636c6f73696e672073746174656d656e74732073756368206173>3.107 F F2<454e444946>3.107 E F0 3.107<2c61>C .607<6e64207468652070726f70657220 757365206f662073746174656d656e74206c6162656c7320286e756d62657273292e> -3.107 F<4d6f7374>5.606 E <636f6d70696c6572732077696c6c206361746368207468657365206572726f72732e> 108 448.8 Q<536565207468652073656374696f6e206f6e204c696d69746174696f6e73 20666f722061206d6f72652064657461696c65642064697363757373696f6e2e>5 E <4966>108 465.6 Q F1<66746e6368656b>3.023 E F0<6769>3.023 E -.15<7665> -.25 G 3.024<7379>.15 G .524<6f7520612073796e746178206572726f72206d6573 73616765207768656e2074686520636f6d70696c657220646f6573206e6f742c20697420 6d6179206265206265636175736520796f75722070726f6772616d>-3.024 F .658 <636f6e7461696e7320616e2065>108 477.6 R .657 <7874656e73696f6e20746f207374616e646172642046>-.15 F .657<6f727472616e20 77686963682069732061636365707465642062792074686520636f6d70696c65722062> -.15 F .657<7574206e6f74206279>-.2 F F1<66746e6368656b>3.157 E F0 5.657 <2e28>C .657<53656520746865>-5.657 F .848 <73656374696f6e206f6e20457874656e73696f6e732e29>108 489.6 R .848 <4f6e20612056>5.848 F .848<41582f564d532073797374656d2c20796f752063616e 207573652074686520636f6d70696c6572206f7074696f6e>-1.35 F F2 <2f5354414e44415244>3.348 E F0 .848<746f206361757365>3.348 F .962<746865 20636f6d70696c657220746f20616363657074206f6e6c79207374616e646172642046> 108 501.6 R 3.461<6f727472616e2e204f6e>-.15 F .961 <6d6f737420554e4958206f7220554e49582d6c696b>3.461 F 3.461<6573>-.1 G .961<797374656d732c20746869732063616e206265206163636f6d2d>-3.461 F <706c69736865642062792073657474696e6720746865208d6167>108 513.6 Q F1 2.5 E F0<4d616e>108 530.4 Q 2.795<796f>-.15 G 2.795<6674> -2.795 G .295<6865206d65737361676573206769>-2.795 F -.15<7665>-.25 G 2.795<6e62>.15 G<79>-2.795 E F1<66746e6368656b>2.795 E F0 .295 <6172652073656c662d65>2.795 F<78706c616e61746f7279>-.15 E 5.295<2e54> -.65 G .295 <686f73652074686174206e65656420736f6d65206164646974696f6e616c2065>-5.295 F<78706c616e6174696f6e>-.15 E<617265206c69737465642062656c6f>108 542.4 Q 2.5<7769>-.25 G 2.5<6e61>-2.5 G<6c7068616265746963616c206f72646572>-2.5 E<2e>-.55 E/F3 10/Times-Italic@0 SF<436f6d6d6f6e20626c6f63>107.84 559.2 Q 2.5<6b4e>-.2 G<414d453a20646174612074797065206d69736d617463>-2.77 E 2.5<6861>-.15 G 2.5<7470>-2.5 G<6f736974696f6e206e>-2.5 E F0<546865>144 571.2 Q F3<6e>3.176 E F0 .676<2d74682076>B .676 <61726961626c6520696e2074686520434f4d4d4f4e20626c6f636b20646966>-.25 F .676<6665727320696e2064617461207479706520696e207477>-.25 F 3.175<6f64> -.1 G<6966>-3.175 E .675 <666572656e74206465636c61726174696f6e73206f6620746865>-.25 F .856 <434f4d4d4f4e20626c6f636b2e>144 583.2 R .857<427920646566>5.857 F .857 <61756c742028>-.1 F F1A F0 .857 <7374726963746e657373206c65>3.357 F -.15<7665>-.25 G 3.357<6c33>.15 G <292c>-3.357 E F1<66746e6368656b>3.357 E F0 .857<69732076>3.357 F .857 <657279207069636b>-.15 F 3.357<7961>-.15 G .857<626f757420434f4d2d> -3.357 F .615<4d4f4e20626c6f636b733a207468652076>144 595.2 R .615<617269 61626c6573206c697374656420696e207468656d206d757374206d617463682065>-.25 F .614<786163746c792062792064617461207479706520616e64206172726179206469 6d656e73696f6e732e>-.15 F<546861742069732c20746865206c65>144 607.2 Q -.05<6761>-.15 G 2.5<6c70>.05 G <616972206f66206465636c61726174696f6e7320696e20646966>-2.5 E <666572656e74206d6f64756c65733a>-.25 E F2 <434f4d4d4f4e202f434f4d312f20412c42>174 619.2 Q F0<616e64>144 631.2 Q F2 <434f4d4d4f4e202f434f4d312f2041283229>174 643.2 Q F0 .51 <77696c6c206361757365>144 655.2 R F1<66746e6368656b>3.01 E F0 .51 <746f206769>3.01 F .81 -.15<76652077>-.25 H .511 <61726e696e6773206174207374726963746e657373206c65>.05 F -.15<7665>-.25 G 3.011<6c33>.15 G 5.511<2e54>-3.011 G .511<68657365207477>-5.511 F 3.011 <6f64>-.1 G .511<65636c61726174696f6e7320617265206c65>-3.011 F -.05 <6761>-.15 G 3.011<6c69>.05 G 3.011<6e46>-3.011 G<6f72>-3.161 E<2d>-.2 E 1.109<7472616e2073696e636520746865>144 667.2 R 3.609<7962>-.15 G 1.109 <6f7468206465636c617265207477>-3.609 F 3.608<6f72>-.1 G 1.108 <65616c2076>-3.608 F 3.608<61726961626c65732e204174>-.25 F 1.108 <7374726963746e657373206c65>3.608 F -.15<7665>-.25 G 3.608<6c316f>.15 G 3.608<7232>-3.608 G 3.608<2c6e>-3.608 G 3.608<6f77>-3.608 G 1.108 <61726e696e672077>-3.708 F 1.108<6f756c64206265>-.1 F<6769>144 679.2 Q -.15<7665>-.25 G 3.834<6e69>.15 G 3.834<6e74>-3.834 G 1.334<6869732065> -3.834 F 1.334<78616d706c652c2062>-.15 F 1.334<7574207468652077>-.2 F 1.335<61726e696e672077>-.1 F 1.335<6f756c64206265206769>-.1 F -.15<7665> -.25 G 3.835<6e69>.15 G 3.835<6674>-3.835 G 1.335 <686572652077657265206120646174612074797065206d69736d617463682c20666f72> -3.835 F<696e7374616e63652c206966>144 691.2 Q F2<42>2.5 E F0 <77657265206465636c61726564>2.5 E F2<494e5445474552>2.5 E F0 5<2e43>C <6f6e74726f6c6c6564206279>-5 E F12.5 E F0 <73657474696e672e>2.5 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3433>191.795 E 0 Cg EP %%Page: 44 44 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF <436f6d6d6f6e20626c6f63>107.84 84 Q 2.5<6b4e>-.2 G<414d4520686173206c6f 6e672064617461207479706520666f6c6c6f77696e672073686f72742064617461207479 7065>-2.77 E F0 .579<536f6d6520636f6d70696c657273207265717569726520616c 69676e6d656e74206f66206d756c74692d62797465206974656d7320736f207468617420 65616368206974656d206265>144 96 R .579 <67696e7320617420616e20616464726573732074686174>-.15 F .141 <69732061206d756c7469706c65206f6620746865206974656d2073697a652e>144 108 R .141<5468757320696620612073686f72742028652e672e2073696e676c652d707265 636973696f6e207265616c29206974656d20697320666f6c6c6f>5.141 F .141 <7765642062792061206c6f6e67>-.25 F 2.533<28652e672e20646f75626c65>144 120 R .032<707265636973696f6e207265616c29206974656d2c20746865206c617474 6572206d6179206e6f7420626520616c69676e656420636f72726563746c79>2.533 F 5.032<2e43>-.65 G .032<6f6e74726f6c6c6564206279>-5.032 F/F2 10 /Times-Bold@0 SF2.532 E <6974793d636f6d6d6f6ead616c69676e6d656e74>144 132 Q F0<6f7074696f6e2e> 2.5 E F1<436f6d6d6f6e20626c6f63>107.84 160.8 Q 2.5<6b4e>-.2 G <414d4520686173206d697865642063>-2.77 E<686172>-.15 E <616374657220616e64206e6f6e2d63>-.15 E<686172>-.15 E <6163746572207661726961626c6573>-.15 E F0 1.126<54686520414e534920737461 6e64617264207265717569726573207468617420696620616e>144 172.8 R 3.627 <7976>-.15 G 1.127<61726961626c6520696e206120434f4d4d4f4e20626c6f636b20 6973206f662074797065>-3.877 F/F3 10/Courier@0 SF<434841524143544552> 3.627 E F0<2c>A 1.097<7468656e20616c6c206f746865722076>144 184.8 R 1.097 <61726961626c657320696e207468652073616d6520434f4d4d4f4e20626c6f636b206d 75737420616c736f206265206f662074797065>-.25 F F3<434841524143544552> 3.596 E F0 6.096<2e43>C<6f6e2d>-6.096 E<74726f6c6c6564206279>144 196.8 Q F22.5 E F0<6f7074696f6e2e>2.5 E F1 <436f6d6d6f6e20626c6f63>107.84 225.6 Q 2.5<6b4e>-.2 G <414d453a2076617279696e67206c656e677468>-2.77 E F0 -.15<466f>144 237.6 S <72>.15 E F22.734 E F0 .234<73657474696e67206c65>2.734 F -.15<7665>-.25 G 2.734<6c32>.15 G 2.734<2c74>-2.734 G .234<686973206d65 7373616765206d65616e732074686174206120434f4d4d4f4e20626c6f636b2069732064 65636c6172656420746f206861>-2.734 F .535 -.15<76652064>-.2 H<69662d>.15 E .312<666572656e74206e756d62657273206f662077>144 249.6 R .312 <6f72647320696e207477>-.1 F 2.812<6f64>-.1 G<6966>-2.812 E .312 <666572656e742073756270726f6772616d732e>-.25 F 2.812<4177>5.312 G .312< 6f72642069732074686520616d6f756e74206f662073746f72616765206f636375706965 64>-2.912 F .8<6279206f6e6520696e7465>144 261.6 R .8 <676572206f72207265616c2076>-.15 F 3.3<61726961626c652e2046>-.25 F<6f72> -.15 E F23.3 E F0 .8<73657474696e67206c65>3.3 F -.15 <7665>-.25 G 3.3<6c33>.15 G 3.3<2c69>-3.3 G 3.3<746d>-3.3 G .8 <65616e73207468617420746865207477>-3.3 F 3.3<6f64>-.1 G <65636c61726174696f6e73>-3.3 E<6861>144 273.6 Q .535 -.15<76652064>-.2 H <6966>.15 E .235<666572656e74206e756d62657273206f662076>-.25 F .234 <61726961626c65732c20776865726520616e206172726179206f6620616e>-.25 F 2.734<7973>-.15 G .234<697a6520697320636f6e73696465726564206f6e652076> -2.734 F 2.734<61726961626c652e2054686973>-.25 F<6973>2.734 E .645 <6e6f74206e65636573736172696c7920616e206572726f72>144 285.6 R 3.145 <2c62>-.4 G .645<7574206974206d617920696e646963617465207468617420612076> -3.345 F .646<61726961626c65206973206d697373696e672066726f6d206f6e65206f 6620746865206c697374732e>-.25 F<4e6f7465>5.646 E 1.494 <74686174206163636f7264696e6720746f207468652046>144 297.6 R 1.494<6f7274 72616e203737205374616e646172642c20697420697320616e206572726f7220666f7220 6e616d656420434f4d4d4f4e20626c6f636b73202862>-.15 F 1.493<7574206e6f74> -.2 F 1.139<626c616e6b20434f4d4d4f4e2920746f20646966>144 309.6 R 1.139 <66657220696e206e756d626572206f662077>-.25 F 1.139 <6f72647320696e206465636c61726174696f6e7320696e20646966>-.1 F 1.14 <666572656e74206d6f64756c65732e>-.25 F<4769>6.14 E -.15<7665>-.25 G 3.64 <6e66>.15 G<6f72>-3.64 E F2144 321.6 Q F0 <73657474696e672032206f7220332e>2.5 E F1<457272>108.51 350.4 Q <6f723a204261646c7920666f726d6564206c6f>-.45 E<676963616c2f72>-.1 E <656c6174696f6e616c206f706572>-.37 E<61746f72206f7220636f6e7374616e74> -.15 E<457272>108.51 367.2 Q<6f723a204261646c7920666f726d65642072>-.45 E <65616c20636f6e7374616e74>-.37 E F0 1.432<5468652073796e74617820616e616c 797a65722068617320666f756e6420746865207374617274206f66206f6e65206f662074 6865207370656369616c2077>144 379.2 R 1.431<6f7264732074686174206265>-.1 F 1.431<67696e20616e6420656e6420776974682061>-.15 F .835 <706572696f642028652e672e>144 391.2 R F3<2e45512e>3.335 E F0 .835<292c20 6f7220746865207374617274206f662061206e756d6572696320636f6e7374616e742c20 62>B .836<757420646964206e6f74207375636365656420696e208c6e64696e67206120 636f6d706c657465>-.2 F<6974656d206f662074686174206b696e642e>144 403.2 Q F1<457272>108.51 432 Q<6f723a2063616e6e6f742062652061646a75737461626c65 2073697a6520696e206d6f64756c65204e>-.45 E<414d45>-.27 E F0 3.038<4163> 144 444 S .538<68617261637465722076>-3.038 F .538<61726961626c652063616e 6e6f74206265206465636c61726564207769746820612073697a65207468617420697320 616e20617374657269736b20696e20706172656e74686573657320756e6c657373206974 2069732061>-.25 F<64756d6d79206172>144 456 Q <67756d656e742c206120706172616d65746572>-.18 E 2.5<2c6f>-.4 G 2.5<7274> -2.5 G<6865206e616d65206f66207468652066756e6374696f6e2064658c6e65642069 6e20746865206d6f64756c652e>-2.5 E F1<457272>108.51 484.8 Q <6f723a2063616e6e6f74206265206465636c6172>-.45 E<656420696e205341>-.37 E <56452073746174656d656e7420696e206d6f64756c65204e>-1.05 E<414d45>-.27 E F0<4f6e6c79206c6f63616c2076>144 496.8 Q<61726961626c657320616e6420636f6d 6d6f6e20626c6f636b732063616e206265206465636c6172656420696e2061>-.25 E F3 <53415645>2.5 E F0<73746174656d656e742e>2.5 E F1<457272>108.51 525.6 Q <6f723a204e6f207061746820746f20746869732073746174656d656e74>-.45 E F2 <66746e6368656b>144 537.6 Q F0 1.558<77696c6c20646574656374207374617465 6d656e7473207768696368206172652069676e6f726564206f722062792d706173736564 2062656361757365207468657265206973206e6f20666f726573656561626c65>4.058 F .959<726f75746520746f207468652073746174656d656e742e>144 549.6 R -.15 <466f>5.959 G 3.459<7265>.15 G .958<78616d706c652c20616e20756e6e756d6265 7265642073746174656d656e742028612073746174656d656e7420776974686f75742061 2073746174656d656e74>-3.609 F<6c6162656c292c206f6363757272696e6720696d6d 6564696174656c792061667465722061>144 561.6 Q F3<474f544f>2.5 E F0 <73746174656d656e742c2063616e6e6f7420706f737369626c792062652065>2.5 E -.15<7865>-.15 G<63757465642e>.15 E F1<457272>108.51 590.4 Q<6f723a2050> -.45 E<6172>-.8 E<736520657272>-.1 E<6f72>-.45 E F0 .477 <54686973206d65616e7320746861742074686520706172736572>144 602.4 R 2.978 <2c77>-.4 G .478<6869636820616e616c797a6573207468652046>-2.978 F .478 <6f727472616e2070726f6772616d20696e746f2065>-.15 F .478 <787072657373696f6e732c2073746174656d656e74732c206574632e2c>-.15 F .878 <686173206265656e20756e61626c6520746f208c6e6420612076>144 614.4 R .878< 616c696420696e746572707265746174696f6e20666f7220736f6d6520706f7274696f6e 206f6620612073746174656d656e7420696e207468652070726f6772616d2e>-.25 F <4966>5.877 E .094<796f757220636f6d70696c657220646f6573206e6f7420726570 6f727420612073796e746178206572726f72206174207468652073616d6520706c616365 2c20746865206d6f737420636f6d6d6f6e2065>144 626.4 R .094 <78706c616e6174696f6e73206172653a>-.15 F 1.355 <28312920757365206f6620616e2065>144 638.4 R 1.355 <7874656e73696f6e20746f20414e5349207374616e646172642046>-.15 F 1.355 <6f727472616e2074686174206973206e6f74207265636f676e697a6564206279>-.15 F F2<66746e6368656b>3.854 E F0 3.854<2c6f>C 3.854<7228>-3.854 G 1.354 <322920746865>-3.854 F<73746174656d656e74207265717569726573206d6f726520 6c6f6f6b6168656164207468616e>144 650.4 Q F2<66746e6368656b>2.5 E F0 <7573657320287365652073656374696f6e206f6e2042756773292e>2.5 E<4e4f>144 667.2 Q .182 <54453a2054686973206d657373616765206d65616e73207468617420746865206166> -.4 F .182<6665637465642073746174656d656e74206973206e6f7420696e74657270 72657465642e>-.25 F .183 <5468657265666f72652c20697420697320706f737369626c65>5.182 F<74686174>144 679.2 Q F2<66746e6368656b>2.877 E F0 1.477 -.55<27732073>D .376<75627365 7175656e742070726f63657373696e672077696c6c20626520696e206572726f72>.55 F 2.876<2c69>-.4 G 2.876<6669>-2.876 G 2.876<7464>-2.876 G .376 <6570656e6473206f6e20616e>-2.876 F 2.876<796d>-.15 G .376 <617474657273206166>-2.876 F .376<6665637465642062792074686973>-.25 F<73 746174656d656e74202874797065206465636c61726174696f6e732c206574632e292e> 144 691.2 Q<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3434>191.795 E 0 Cg EP %%Page: 45 45 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF<457272> 108.51 84 Q<6f723a2053796e74617820657272>-.45 E<6f72>-.45 E F0 1.02 <54686973206973207468652073616d652061732060>144 96 R 1.02 <604572726f723a2050>-.74 F 1.02<61727365206572726f7227>-.15 F 3.521 <2728>-.74 G 1.021<7365652061626f>-3.521 F -.15<7665>-.15 G 3.521 <292e204974>.15 F 1.021<69732067656e65726174656420696620796f75722076> 3.521 F 1.021<657273696f6e206f66>-.15 F/F2 10/Times-Bold@0 SF <66746e6368656b>3.521 E F0 -.1<7761>144 108 S 2.5<7362>.1 G <75696c74207573696e672074686520554e4958>-2.7 E F2<79616363>2.5 E F0 <7061727365722067656e657261746f7220726174686572207468616e20474e55>2.5 E F2<6269736f6e>2.5 E F0<2e>A F1<4964656e74698c6572>108.58 136.8 Q 2.5 <7377>-.1 G<686963>-2.5 E 2.5<6861>-.15 G .74 -.37<7265206e>-2.5 H <6f7420756e6971756520696e208c72>.37 E<7374207369782063>-.1 E<686172>-.15 E<73>-.1 E F0 -.8<5761>144 148.8 S .296<726e732074686174207477>.8 F 2.796<6f69>-.1 G .295<64656e74698c65727320776869636820617265206c6f6e6765 72207468616e2036206368617261637465727320646f206e6f7420646966>-2.796 F .295<66657220696e20746865208c727374203620636861726163746572732e>-.25 F 1.63<5468697320697320666f7220706f72746162696c6974793a20746865>144 160.8 R 4.131<796d>-.15 G 1.631<6179206e6f7420626520636f6e73696465726564206469 7374696e637420627920736f6d6520636f6d70696c6572732e>-4.131 F 1.631 <436f6e74726f6c6c6564206279>6.631 F F2144 172.8 Q F0 <6f7074696f6e2e>2.5 E F1<4e6f6e706f727461626c6520757361>108.7 201.6 Q -.1<6765>-.1 G 2.5<3a61>.1 G -.37<7267>-2.5 G<756d656e74207072>.37 E <65636973696f6e206d6179206e6f7420626520636f7272>-.37 E <65637420666f7220696e7472696e7369632066756e6374696f6e>-.37 E F0 .232 <54686520707265636973696f6e206f6620616e206172>144 213.6 R .231<67756d65 6e742070617373656420746f20616e20696e7472696e7369632066756e6374696f6e206d 617920626520696e636f7272656374206f6e20736f6d6520636f6d7075746572732e> -.18 F .62<497373756564207768656e2061206e756d657269632076>144 225.6 R .621<61726961626c65206465636c6172656420776974682065>-.25 F .621 <78706c6963697420707265636973696f6e2028652e672e>-.15 F/F3 10/Courier@0 SF .621<5245414c2a382058>5.621 F F0 3.121<2969>C 3.121<7370>-3.121 G .621<617373656420746f2061>-3.121 F .006 <73706563698c6320696e7472696e7369632066756e6374696f6e2028652e672e>144 237.6 R F3<4453515254285829>2.506 E F0 2.506<292e20436f6e74726f6c6c6564> B<6279>2.505 E F22.505 E F0<616e64>2.505 E F22.505 E<6f72642d>-.1 E<73697a65>144 249.6 Q F0 <2e>A F1<4e6f6e706f727461626c6520757361>108.7 278.4 Q -.1<6765>-.1 G 2.5 <3a63>.1 G<686172>-2.65 E <616374657220636f6e7374616e742f7661726961626c65206c656e6774682065>-.15 E <78636565647320323535>-.2 E F0 .871<536f6d6520636f6d70696c65727320646f20 6e6f7420737570706f72742063686172616374657220737472696e6773206d6f72652074 68616e20323535206368617261637465727320696e206c656e6774682e>144 290.4 R <436f6e74726f6c6c6564>5.872 E<6279>144 302.4 Q F2 2.5 E F0<2e>A F1 <4e6f6e706f727461626c6520757361>108.7 331.2 Q -.1<6765>-.1 G 2.5<3a46>.1 G<696c6520636f6e7461696e732074616273>-2.95 E F2<66746e6368656b>144 343.2 Q F0 -.15<6578>3.389 G .889<70616e6473207461627320746f2062652065717569> .15 F -.25<7661>-.25 G .889 <6c656e7420746f2073706163657320757020746f20746865206e65>.25 F .889 <787420636f6c756d6e2077686963682069732061206d756c7469706c65206f6620382e> -.15 F .623<536f6d6520636f6d70696c657273207472656174207461627320646966> 144 355.2 R<666572656e746c79>-.25 E 3.124<2c61>-.65 G .624<6e6420616c73 6f20697420697320706f737369626c652074686174208c6c65732073656e742062792065 6c656374726f6e6963206d61696c2077696c6c>-3.124 F<6861>144 367.2 Q 1.06 -.15<76652074>-.2 H .76<6865207461627320636f6e>.15 F -.15<7665>-.4 G .76 <7274656420746f20626c616e6b7320696e20736f6d652077>.15 F<6179>-.1 E 5.76 <2e54>-.65 G .76<68657265666f7265208c6c657320636f6e7461696e696e67207461 6273206d6179206e6f7420626520636f6d2d>-5.76 F 1.851<70696c656420636f7272 6563746c79206166746572206265696e67207472616e736665727265642e>144 379.2 R F2<66746e6368656b>6.851 E F0 1.851<646f6573206e6f74206769>4.351 F 2.152 -.15<76652074>-.25 H 1.852 <686973206d6573736167652069662074616273206f6e6c79206f63637572>.15 F<7769 7468696e20636f6d6d656e7473206f722063686172616374657220636f6e7374616e7473 2e>144 391.2 Q<436f6e74726f6c6c6564206279>5 E F2 2.5 E F0<2e>A F1 <4e6f6e706f727461626c6520757361>108.7 420 Q -.1<6765>-.1 G 2.5<3a6e>.1 G <6f6e2d696e7465>-2.5 E -.1<6765>-.4 G 2.5<7244>.1 G 2.5<4f6c>-2.5 G <6f6f7020626f756e6473>-2.5 E F0 1.204<546869732077>144 432 R 1.204 <61726e696e67206973206f6e6c79206769>-.1 F -.15<7665>-.25 G 3.704<6e77> .15 G 1.204<68656e20746865>-3.704 F F3<444f>3.704 E F0<696e6465>3.704 E 3.704<7861>-.15 G 1.204<6e6420626f756e647320617265206e6f6e2d696e7465> -3.704 F<676572>-.15 E 6.204<2e55>-.55 G 1.204 <7365206f66206e6f6e2d696e7465>-6.204 F<676572>-.15 E 2.97 <7175616e74697469657320696e2061>144 444 R F3<444f>5.47 E F0 2.971 <73746174656d656e74206d617920636175736520756e65>5.471 F 2.971 <78706563746564206572726f72732c206f7220646966>-.15 F 2.971 <666572656e7420726573756c7473206f6e20646966>-.25 F<666572656e74>-.25 E <6d616368696e65732c2064756520746f20726f756e646f66>144 456 Q 2.5<6665> -.25 G -.25<6666>-2.5 G 2.5<656374732e20436f6e74726f6c6c6564>.25 F<6279> 2.5 E F22.5 E<65616cad646f>-.18 E F0<2e>A F1 -.8<506f>108 484.8 S<737369626c7920697420697320616e20617272>.8 E <61792077686963>-.15 E 2.5<6877>-.15 G<6173206e6f74206465636c6172>-2.5 E <6564>-.37 E F0 .156 <54686973206d65737361676520697320617070656e64656420746f2077>144 496.8 R .156<61726e696e67732072656c6174656420746f20612066756e6374696f6e20696e> -.1 F -.2<766f>-.4 G .155<636174696f6e206f7220746f20616e206172>.2 F .155 <67756d656e742074797065206d69732d>-.18 F .112 <6d617463682c20666f722077686963682074686520706f73736962696c6974792065> 144 508.8 R .113<786973747320746861742077686174206170706561727320746f20 626520612066756e6374696f6e2069732061637475616c6c79206d65616e7420746f2062 6520616e>-.15 F<6172726179>144 520.8 Q 5.655<2e49>-.65 G 3.155<6674> -5.655 G .655<68652070726f6772616d6d657220666f72>-3.155 F .655 <676f7420746f2064696d656e73696f6e20616e206172726179>-.18 F 3.155<2c72> -.65 G .654<65666572656e63657320746f207468652061727261792077696c6c206265 20696e746572707265746564>-3.155 F 1.091<61732066756e6374696f6e20696e>144 532.8 R -.2<766f>-.4 G 3.591<636174696f6e732e2054686973>.2 F 1.091<6d65 73736167652077696c6c206265207375707072657373656420696620746865206e616d65 20696e207175657374696f6e206170706561727320696e20616e>3.591 F F3 <45585445524e414c>144 544.8 Q F0<6f72>2.5 E F3<494e5452494e534943>2.5 E F0 2.5<73746174656d656e742e20436f6e74726f6c6c6564>2.5 F<627920746865>2.5 E F22.5 E<76696365>-.1 E F0<6f7074696f6e2e>2.5 E F1 -.8<506f>108 573.6 S<737369626c79206d69736c656164696e6720617070656172>.8 E <616e63653a2063>-.15 E<686172>-.15 E<6163746572>-.15 E 2.5<7370>-.1 G <61737420373220636f6c756d6e73>-2.5 E F0 1.383<5468652070726f6772616d2069 73206265696e672070726f6365737365642077697468207468652073746174656d656e74 208c656c6420776964746820617420697473207374616e646172642076>144 585.6 R 1.383<616c7565206f662037322c20616e64>-.25 F .057 <736f6d65206e6f6e626c616e6b2063686172616374657273206861>144 597.6 R .357 -.15<76652062>-.2 H .057 <65656e20666f756e64207061737420636f6c756d6e2037322e>.15 F .057 <496e207468697320636173652c>5.057 F F2<66746e6368656b>2.558 E F0 .058 <6973206e6f742070726f63657373696e67>2.558 F .247<7468652063686172616374 657273207061737420636f6c756d6e2037322c20616e64206973206e6f74696679696e67 2074686520757365722074686174207468652073746174656d656e74206d6179206e6f74 206861>144 609.6 R .546 -.15<76652074>-.2 H .246<6865206d65616e2d>.15 F .748<696e672074686174206974206170706561727320746f206861>144 621.6 R -.15 <7665>-.2 G 5.748<2e54>.15 G .748<686573652063686172616374657273206d6967 687420626520696e74656e646564206279207468652070726f6772616d6d657220746f20 6265207369676e698c2d>-5.748 F<63616e742c2062>144 633.6 Q<757420746865> -.2 E 2.5<7977>-.15 G <696c6c2062652069676e6f7265642062792074686520636f6d70696c6572>-2.5 E 5 <2e43>-.55 G<6f6e74726f6c6c6564206279>-5 E F22.5 E <657474793d6c6f6e67ad6c696e65>-.18 E F0<2e>A F1 -.8<506f>108 662.4 S <737369626c79206d69736c656164696e6720617070656172>.8 E <616e63653a20436f6d6d6f6e20626c6f63>-.15 E 2.5<6b64>-.2 G<65636c6172> -2.5 E<656420696e206d6f72>-.37 E 2.5<6574>-.37 G <68616e206f6e652073746174656d656e74>-2.5 E F0 .188 <53756368206d756c7469706c65206465636c61726174696f6e7320617265206c65>144 674.4 R -.05<6761>-.15 G 2.688<6c61>.05 G .188<6e64206861>-2.688 F .488 -.15<76652074>-.2 H .188<68652073616d65206566>.15 F .187<66656374206173 206120636f6e74696e756174696f6e206f6620746865206f726967696e616c206465632d> -.25 F .833<6c61726174696f6e206f662074686520626c6f636b2e>144 686.4 R .833<546869732077>5.833 F .833<61726e696e67206973206f6e6c79206769>-.1 F -.15<7665>-.25 G 3.334<6e69>.15 G 3.334<6674>-3.334 G .834<6865207477> -3.334 F 3.334<6f64>-.1 G .834 <65636c61726174696f6e732061726520736570617261746564206279206f6e65206f72> -3.334 F<6d6f726520696e74657276>144 698.4 Q <656e696e672073746174656d656e74732e>-.15 E<436f6e74726f6c6c6564206279>5 E F22.5 E<657474793d6d756c7469706c65ad636f6d6d6f6e>-.18 E F0<2e> A<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3435> 191.795 E 0 Cg EP %%Page: 46 46 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF -.8 <506f>108 84 S<737369626c79206d69736c656164696e6720617070656172>.8 E<61 6e63653a20436f6e74696e756174696f6e20666f6c6c6f777320636f6d6d656e74206f72 20626c616e6b206c696e65>-.15 E/F2 10/Times-Bold@0 SF<66746e6368656b>144 96 Q F0 .987<69737375657320746869732077>3.487 F .987<61726e696e67206d65 737361676520746f20616c6572742074686520757365722074686174206120636f6e7469 6e756174696f6e206f6620612073746174656d656e7420697320696e746572>-.1 F<2d> -.2 E<73706572736564207769746820636f6d6d656e74732c206d616b696e6720697420 6561737920746f206f>144 108 Q -.15<7665>-.15 G 2.5 <726c6f6f6b2e20436f6e74726f6c6c6564>.15 F<6279>2.5 E F22.5 E <657474793d636f6e74696e756174696f6e>-.18 E F0<2e>A F1 -.8<506f>108 136.8 S<737369626c79206d69736c656164696e6720617070656172>.8 E <616e63653a2045787472>-.15 E<616e656f757320706172>-.15 E <656e746865736573>-.37 E F0 -.8<5761>144 148.8 S .497<726e732061626f7574 20706172656e74686573657320737572726f756e64696e6720612076>.8 F .497 <61726961626c6520627920697473656c6620696e20616e2065>-.25 F 2.997 <787072657373696f6e2e205768656e>-.15 F 2.997<6170>2.997 G <6172656e74686573697a6564>-2.997 E -.25<7661>144 160.8 S .446 <726961626c652069732070617373656420617320616e206172>.25 F .446<67756d65 6e7420746f20612073756270726f6772616d2c2069742069732074726561746564206173 20616e2065>-.18 F .445<787072657373696f6e2c206e6f7420617320612076>-.15 F <61726961626c65>-.25 E<77686f73652076>144 172.8 Q<616c75652063616e206265 206d6f64698c6564206279207468652063616c6c656420726f7574696e652e>-.25 E <436f6e74726f6c6c6564206279>5 E F22.5 E<657474793d706172>-.18 E <656e746865736573>-.18 E F0<2e>A F1<5375627072>108.33 201.6 Q -.1<6f67> -.45 G -.15<7261>.1 G 2.5<6d4e>.15 G<414d453a206172>-2.77 E <67756d656e7420646174612074797065206d69736d617463>-.37 E 2.5<6861>-.15 G 2.5<7470>-2.5 G<6f736974696f6e206e>-2.5 E F0 .052 <5468652073756270726f6772616d27>144 213.6 R<73>-.55 E F1<6e>2.552 E F0 .052<2d74682061637475616c206172>B .052<67756d656e742028696e20746865>-.18 F/F3 10/Courier@0 SF<43414c4c>2.552 E F0 .053 <6f7220746865207573616765206f6620612066756e6374696f6e2920646966>2.552 F .053<6665727320696e206461746174797065>-.25 F 1.265 <6f7220707265636973696f6e2066726f6d20746865>144 225.6 R F1<6e>3.764 E F0 1.264<2d74682064756d6d79206172>B 1.264<67756d656e742028696e20746865>-.18 F F3<535542524f5554494e45>3.764 E F0<6f72>3.764 E F3<46554e4354494f4e> 3.764 E F0<6465636c61726174696f6e292e>3.764 E -.15<466f>144 237.6 S 2.5 <7269>.15 G<6e7374616e63652c2069662074686520757365722064658c6e6573206120 73756270726f6772616d206279>-2.5 E F3 <535542524f5554494e452053554241285829>174 249.6 Q<5245414c2058>174 261.6 Q F0<616e6420656c7365>144 273.6 Q<776865726520696e>-.25 E -.2<766f>-.4 G -.1<6b65>.2 G<73>.1 E F3<53554241>2.5 E F0<6279>2.5 E F3 <43414c4c2053554241283229>174 285.6 Q F2<66746e6368656b>144 297.6 Q F0 .754<77696c6c2064657465637420746865206572726f72>3.253 F 5.754<2e54>-.55 G .754<686520726561736f6e2068657265206973207468617420746865206e756d6265 72203220697320696e7465>-5.754 F<676572>-.15 E 3.254<2c6e>-.4 G .754 <6f74207265616c2e>-3.254 F .754<5468652075736572>5.754 F <73686f756c64206861>144 309.6 Q .3 -.15<76652077>-.2 H<72697474656e>.15 E F3<43414c4c205355424128322e3029>174 321.6 Q F0 .158 <5768656e20636865636b696e6720616e206172>144 338.4 R .158 <67756d656e7420776869636820697320612073756270726f6772616d2c>-.18 F F2 <66746e6368656b>2.657 E F0 .157<6d7573742062652061626c6520746f2064657465 726d696e652077686574686572206974>2.657 F .726 <697320612066756e6374696f6e206f72206120737562726f7574696e652e>144 350.4 R .726<5468652072756c65732075736564206279>5.726 F F2<66746e6368656b> 3.226 E F0 .727<746f20646f20746869732061726520617320666f6c6c6f>3.226 F .727<77733a204966207468652073756270726f2d>-.25 F .684<6772616d2c20626573 69646573206265696e672070617373656420617320616e2061637475616c206172>144 362.4 R .684<67756d656e742c20697320616c736f20696e>-.18 F -.2<766f>-.4 G -.1<6b65>.2 G 3.184<6464>.1 G .684<69726563746c7920656c7365>-3.184 F .684<776865726520696e207468652073616d65>-.25 F .243<6d6f64756c652c207468 656e2069747320747970652069732064657465726d696e65642062792074686174207573 6167652e>144 374.4 R .244<4966206e6f742c207468656e20696620746865206e616d 65206f66207468652073756270726f6772616d20646f6573>5.243 F .041 <6e6f742061707065617220696e20616e2065>144 386.4 R .04<78706c696369742074 797065206465636c61726174696f6e2c20697420697320617373756d656420746f206265 206120737562726f7574696e653b2069662069742069732065>-.15 F .04 <78706c696369746c79207479706564206974>-.15 F .054<69732074616b>144 398.4 R .054<656e20617320612066756e6374696f6e2e>-.1 F .055<5468657265666f7265 2c20737562726f7574696e6573207061737365642061732061637475616c206172>5.054 F .055<67756d656e7473206e656564206f6e6c79206265206465636c61726564206279> -.18 F<616e>144 410.4 Q F3<45585445524e414c>2.708 E F0 .207<73746174656d 656e7420696e207468652063616c6c696e67206d6f64756c652c20776865726561732066 756e6374696f6e73206d75737420616c736f2062652065>2.708 F .207 <78706c696369746c7920747970656420696e>-.15 F<6f7264657220746f2061>144 422.4 Q -.2<766f>-.2 G <69642067656e65726174696e672074686973206572726f72206d6573736167652e>.2 E <436f6e74726f6c6c6564206279>5 E F22.5 E<67756d656e7473>-.1 E F0 <73657474696e672e>2.5 E F1<5375627072>108.33 451.2 Q -.1<6f67>-.45 G -.15<7261>.1 G 2.5<6d4e>.15 G<414d453a206172>-2.77 E <67756d656e7420617272>-.37 E<61796e657373206d69736d617463>-.15 E 2.5 <6861>-.15 G 2.5<7470>-2.5 G<6f736974696f6e206e>-2.5 E F0 1.197<53696d69 6c617220746f2074686520707265636564696e6720736974756174696f6e2c2062>144 463.2 R 1.198<7574207468652073756270726f6772616d2064756d6d79206172>-.2 F 1.198<67756d656e7420646966>-.18 F 1.198 <666572732066726f6d2074686520636f7272652d>-.25 F 1.781 <73706f6e64696e672061637475616c206172>144 475.2 R 1.781<67756d656e742069 6e20697473206e756d626572206f662064696d656e73696f6e73206f72206e756d626572 206f6620656c656d656e74732e>-.18 F 1.78<436f6e74726f6c6c6564206279>6.78 F F2144 487.2 Q F0<746f6765746865722077697468>2.5 E F2 2.5 E<67756d656e7473>-.1 E F0<73657474696e67732e>2.5 E F1 <5375627072>108.33 516 Q -.1<6f67>-.45 G -.15<7261>.1 G 2.5<6d4e>.15 G <414d453a206172>-2.77 E<67756d656e74206d69736d617463>-.37 E 2.5<6861> -.15 G 2.5<7470>-2.5 G<6f736974696f6e206e>-2.5 E F0 4.206<4163>144 528 S 1.706<68617261637465722064756d6d79206172>-4.206 F 1.706 <67756d656e74206973206c6172>-.18 F 1.706<676572207468616e2074686520636f 72726573706f6e64696e672061637475616c206172>-.18 F 1.707 <67756d656e742c206f72206120486f6c6c6572697468>-.18 F 1.227 <64756d6d79206172>144 540 R 1.227<67756d656e74206973206c6172>-.18 F 1.226<676572207468616e2074686520636f72726573706f6e64696e672061637475616c 206172>-.18 F 3.726<67756d656e742e20436f6e74726f6c6c6564>-.18 F<6279> 3.726 E F23.726 E<67756d656e7473>-.1 E F0<73657474696e672e>144 552 Q F1<5375627072>108.33 580.8 Q -.1<6f67>-.45 G -.15<7261>.1 G 2.5 <6d4e>.15 G<414d453a206172>-2.77 E<67756d656e7420757361>-.37 E .2 -.1 <6765206d>-.1 H<69736d617463>.1 E<68>-.15 E F2<66746e6368656b>144 592.8 Q F0 .634<64657465637473206120706f737369626c6520636f6e8d6963742062657477 65656e207468652077>3.134 F .634 <617920612073756270726f6772616d207573657320616e206172>-.1 F .634 <67756d656e7420616e64207468652077>-.18 F<6179>-.1 E .059 <696e20776869636820746865206172>144 604.8 R .059<67756d656e742069732073 7570706c69656420746f207468652073756270726f6772616d2e>-.18 F .058 <54686520636f6e8d6963742063616e206265206f6e65206f66207477>5.058 F 2.558 <6f74>-.1 G .058<797065732c206173206f75742d>-2.558 F <6c696e65642062656c6f>144 616.8 Q -.65<772e>-.25 G F1<44756d6d79206172> 130.18 645.6 Q 2.5<6769>-.37 G 2.5<736d>-2.5 G <6f64698c65642c2041637475616c206172>-2.5 E 2.5<6769>-.37 G 2.5<7363>-2.5 G<6f6e7374206f722065>-2.5 E<787072>-.2 E F0 3.615<4164>144 657.6 S 1.115 <756d6d79206172>-3.615 F 1.115<67756d656e7420697320616e206172>-.18 F 1.116<67756d656e74206173206e616d656420696e2061>-.18 F F3 <535542524f5554494e45>3.616 E F0<6f72>3.616 E F3<46554e4354494f4e>3.616 E F0 1.116<73746174656d656e7420616e64>3.616 F .055 <757365642077697468696e207468652073756270726f6772616d2e>144 669.6 R .055 <416e2061637475616c206172>5.055 F .054<67756d656e7420697320616e206172> -.18 F .054<67756d656e742061732070617373656420746f206120737562726f757469 6e65206f722066756e632d>-.18 F 1.783 <74696f6e206279207468652063616c6c6572>144 681.6 R<2e>-.55 E F2 <66746e6368656b>6.783 E F0 1.783 <697320736179696e67207468617420612064756d6d79206172>4.283 F 1.784<67756d 656e74206973206d6f64698c6564206279207468652073756270726f6772616d2c>-.18 F 1.93<696d706c79696e672074686174206974732076>144 693.6 R 1.929<616c7565 206973206368616e67656420696e207468652063616c6c696e67206d6f64756c652e> -.25 F 1.929<54686520636f72726573706f6e64696e672061637475616c206172> 6.929 F<67756d656e74>-.18 E .533 <73686f756c64206e6f74206265206120636f6e7374616e74206f722065>144 705.6 R .533<787072657373696f6e2c2062>-.15 F .533<75742072617468657220612076>-.2 F .533<61726961626c65206f7220617272617920656c656d656e742077686963682063 616e206265206c65>-.25 F<676974692d>-.15 E <6d6174656c792061737369676e656420746f2e>144 717.6 Q <436f6e74726f6c6c656420627920746865>5 E F22.5 E <67ad636f6e7374ad6d6f64698c6564>-.1 E F0<6f7074696f6e2e>2.5 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3436>191.795 E 0 Cg EP %%Page: 47 47 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF <44756d6d79206172>130.18 84 Q 2.5<6775>-.37 G<736564206265666f72>-2.5 E 2.5<6573>-.37 G<65742c2041637475616c206172>-2.5 E 2.5<676e>-.37 G <6f7420736574>-2.5 E F0 .737<4865726520612064756d6d79206172>144 96 R .737<67756d656e74206d6179206265207573656420696e207468652073756270726f67 72616d206265666f7265206861>-.18 F .737<76696e6720612076>-.2 F .737 <616c75652061737369676e656420746f206974206279>-.25 F 1.48 <7468652073756270726f6772616d2e>144 108 R 1.48 <54686520636f72726573706f6e64696e672061637475616c206172>6.48 F 1.481 <67756d656e742073686f756c64206861>-.18 F 1.781 -.15<766520612076>-.2 H 1.481<616c75652061737369676e656420746f20697420627920746865>-.1 F <63616c6c6572207072696f7220746f20696e>144 120 Q -.2<766f>-.4 G <6b696e67207468652073756270726f6772616d2e>.2 E <436f6e74726f6c6c656420627920746865>5 E/F2 10/Times-Bold@0 SF 2.5 E<6172ad756e696e697469616c697a6564>-.1 E F0 <6f7074696f6e2e>2.5 E<546869732077>144 136.8 Q <61726e696e67206973206e6f74206166>-.1 E<66656374656420627920746865>-.25 E F22.5 E<67756d656e7473>-.1 E F0<73657474696e672e>2.5 E F1 <5375627072>108.33 165.6 Q -.1<6f67>-.45 G -.15<7261>.1 G 2.5<6d4e>.15 G <414d4520696e>-2.77 E<766f6b>-.4 E<656420696e636f6e73697374656e746c79> -.1 E F0 .996<4865726520746865206d69736d61746368206973206265747765656e20 746865206461746174797065206f66207468652073756270726f6772616d20697473656c 66206173207573656420616e642061732064658c6e65642e2046>144 177.6 R<6f72> -.15 E<696e7374616e63652c206966207468652075736572206465636c61726573>144 189.6 Q/F3 10/Courier@0 SF <494e54454745522046554e4354494f4e20434f554e54284129>174 201.6 Q F0 <616e6420696e>144 213.6 Q -.2<766f>-.4 G -.1<6b65>.2 G<73>.1 E F3 <434f554e54>2.5 E F0<696e20616e6f74686572206d6f64756c65206173>2.5 E F3 6 <4e3d43>174 225.6 S<4f554e54284129>-6 E F0 .279<776974686f7574206465636c 6172696e67206974732064617461747970652c2069742077696c6c20646566>144 237.6 R .28<61756c7420746f207265616c20747970652c206261736564206f6e20746865208c 727374206c6574746572206f6620697473206e616d652e>-.1 F<546865>5.28 E <63616c6c696e67206d6f64756c652073686f756c64206861>144 249.6 Q .3 -.15 <76652069>-.2 H<6e636c7564656420746865206465636c61726174696f6e>.15 E F3 <494e544547455220434f554e54>174 261.6 Q F0<4769>144 278.4 Q -.15<7665> -.25 G 2.5<6e66>.15 G<6f72>-2.5 E F22.5 E<67756d656e7473>-.1 E F0<73657474696e672032206f7220332e>2.5 E F1<5375627072>108.33 307.2 Q -.1 <6f67>-.45 G -.15<7261>.1 G 2.5<6d4e>.15 G 2.5<414d453a2076617279696e67> -2.77 F<6c656e677468206172>2.5 E<67756d656e74206c697374733a>-.37 E F0 .985<416e20696e636f6e73697374656e63>144 319.2 R 3.485<7968>-.15 G .985< 6173206265656e20666f756e64206265747765656e20746865206e756d626572206f6620 64756d6d79206172>-3.485 F .984 <67756d656e74732028706172616d6574657273292061207375622d>-.18 F .216<7072 6f6772616d2068617320616e6420746865206e756d626572206f662061637475616c2061 72>144 331.2 R .216<67756d656e7473206769>-.18 F -.15<7665>-.25 G 2.716 <6e69>.15 G 2.716<7469>-2.716 G 2.716<6e61>-2.716 G 2.716<6e69>-2.716 G -1.9 -.4<6e76206f>-2.716 H<636174696f6e2e>.4 E F2<66746e6368656b>5.217 E F0 -.1<6b65>2.717 G .217<65707320747261636b206f66>.1 F .684 <616c6c20696e>144 343.2 R -.2<766f>-.4 G .684 <636174696f6e73206f662073756270726f6772616d732028>.2 F F3<43414c4c>A F0 .684<73746174656d656e747320616e642065>3.184 F .683<787072657373696f6e73 207573696e672066756e6374696f6e732920616e6420636f6d7061726573>-.15 F .461 <7468656d2077697468207468652064658c6e6974696f6e73206f662074686520737562 70726f6772616d7320656c7365>144 355.2 R .462 <776865726520696e2074686520736f7572636520636f64652e>-.25 F .462 <5468652046>5.462 F .462<6f727472616e20636f6d70696c6572>-.15 F<6e6f726d 616c6c7920646f6573206e6f7420636174636820746869732074797065206f6620657272 6f72>144 367.2 Q 5<2e47>-.55 G -2.15 -.25<69762065>-5 H 2.5<6e66>.25 G <6f72>-2.5 E F22.5 E<67756d656e7473>-.1 E F0 <73657474696e672031206f7220332e>2.5 E F1 -1.11<5661>108 396 S <726961626c65206e6f74206465636c6172>1.11 E 2.5<65642e2054>-.37 F <79706520686173206265656e20696d706c696369746c792064658c6e6564>-.74 E F0 .325<5768656e207072696e74696e67207468652073796d626f6c207461626c6520666f 722061206d6f64756c652c>144 408 R F2<66746e6368656b>2.824 E F0 .324<7769 6c6c208d6167207769746820616e20617374657269736b20616c6c206964656e74698c65 72732074686174>2.824 F .082<617265206e6f742065>144 420 R .082 <78706c696369746c7920747970656420616e642077696c6c2073686f>-.15 F 2.583 <7774>-.25 G .083<686520646174617479706520746861742077>-2.583 F .083<61 732061737369676e6564207468726f75676820696d706c6963697420747970696e672e> -.1 F<54686973>5.083 E<70726f>144 432 Q .406<766964657320737570706f7274 20666f722075736572732077686f207769736820746f206465636c61726520616c6c2076> -.15 F .406<61726961626c657320617320697320726571756972656420696e2050> -.25 F .405<617363616c206f7220736f6d65206f74686572>-.15 F 3.482 <6c616e6775616765732e2054686973>144 444 R .982 <6d6573736167652061707065617273206f6e6c79207768656e20746865>3.482 F F2 3.482 E F0 .983<6f7074696f6e20697320696e206566>3.482 F 3.483<666563742e20416c7465726e617469>-.25 F -.15<7665>-.25 G<6c79>.15 E 3.483<2c75>-.65 G<7365>-3.483 E<746865>144 456 Q F22.5 E <65>-.18 E F0<8d616720696620796f752077>2.5 E<616e7420746f20676574206120 6c697374206f6620616c6c20756e6465636c617265642076>-.1 E <61726961626c65732e>-.25 E F1 -1.11<5661>108 484.8 S <726961626c6573206465636c6172>1.11 E<65642062>-.37 E<7574206e65>-.2 E <7665722072>-.15 E<65666572>-.37 E<656e636564>-.37 E F0 2.086 <4465746563747320616e>144 496.8 R 4.586<7969>-.15 G 2.086<64656e74698c65 727320746861742077657265206465636c6172656420696e20796f75722070726f677261 6d2062>-4.586 F 2.086<75742077657265206e65>-.2 F -.15<7665>-.25 G 4.586 <7275>.15 G 2.086<7365642c2065697468657220746f206265>-4.586 F 1.577 <61737369676e656420612076>144 508.8 R 1.578<616c7565206f7220746f206861> -.25 F 1.878 -.15<76652074>-.2 H 1.578<686569722076>.15 F 1.578 <616c75652061636365737365642e>-.25 F -1.11<5661>6.578 G 1.578 <726961626c657320696e20434f4d4d4f4e206172652065>1.11 F 4.078 <78636c756465642e20436f6e2d>-.15 F<74726f6c6c656420627920746865>144 520.8 Q F22.5 E<6172ad756e75736564>-.1 E F0 <6f7074696f6e2e>2.5 E F1 -1.11<5661>108 549.6 S <726961626c6573207365742062>1.11 E<7574206e65>-.2 E<7665722075736564> -.15 E F2<66746e6368656b>144 561.6 Q F0 .282 <77696c6c206e6f74696679207468652075736572207768656e20612076>2.782 F .282 <61726961626c6520686173206265656e2061737369676e656420612076>-.25 F .281 <616c75652c2062>-.25 F .281<7574207468652076>-.2 F .281 <61726961626c65206973206e6f74206f74682d>-.25 F 4.055 <657277697365207573656420696e207468652070726f6772616d2e>144 573.6 R 4.055<557375616c6c79207468697320726573756c74732066726f6d20616e206f>9.055 F -.15<7665>-.15 G 6.556<7273696768742e20436f6e74726f6c6c6564>.15 F 4.056<627920746865>6.556 F F2144 585.6 Q <6172ad736574ad756e75736564>-.1 E F0<6f7074696f6e2e>2.5 E F1 -1.11<5661> 108 614.4 S<726961626c65732075736564206265666f72>1.11 E 2.5<6573>-.37 G <6574>-2.5 E F0 .184<54686973206d65737361676520696e64696361746573207468 617420616e206964656e74698c6572206973207573656420746f20636f6d707574652061 2076>144 626.4 R .183 <616c7565207072696f7220746f2069747320696e697469616c697a6174696f6e2e>-.25 F<53756368>5.183 E .079 <7573616765206d6179206c65616420746f20616e20696e636f72726563742076>144 638.4 R .079<616c7565206265696e6720636f6d70757465642c2073696e6365206974 7320696e697469616c2076>-.25 F .08 <616c7565206973206e6f7420636f6e74726f6c6c65642e>-.25 F<436f6e2d>5.08 E <74726f6c6c656420627920746865>144 650.4 Q F22.5 E <6172ad756e696e697469616c697a6564>-.1 E F0<6f7074696f6e2e>2.5 E F1 -1.11 <5661>108 679.2 S<726961626c6573206d61792062652075736564206265666f72> 1.11 E 2.5<6573>-.37 G<6574>-2.5 E F0 1.243 <53696d696c617220746f2075736564206265666f7265207365742065>144 691.2 R 1.243<78636570742074686174>-.15 F F2<66746e6368656b>3.743 E F0 1.243<69 73206e6f742061626c6520746f2064657465726d696e6520697473207374617475732077 697468206365727461696e7479>3.743 F<2e>-.65 E F2<66746e6368656b>144 703.2 Q F0 .273<617373756d657320612076>2.773 F .273<61726961626c65206d61792062 652075736564206265666f72652073657420696620746865208c72737420757361676520 6f66207468652076>-.25 F .274 <61726961626c65206f6363757273207072696f7220696e>-.25 F <7468652070726f6772616d207465>144 715.2 Q <787420746f206974732061737369676e6d656e742e>-.15 E <436f6e74726f6c6c656420627920746865>5 E F22.5 E <6172ad756e696e697469616c697a6564>-.1 E F0<6f7074696f6e2e>2.5 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3437>191.795 E 0 Cg EP %%Page: 48 48 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF -.92 <5761>108 84 S<726e696e673a20444f20696e6465>.92 E 2.5<7869>-.2 G 2.5 <736e>-2.5 G<6f7420696e7465>-2.5 E -.1<6765>-.4 G<72>.1 E F0 .503 <546869732077>144 96 R .502<61726e696e67206973206f6e6c79206769>-.1 F -.15<7665>-.25 G 3.002<6e77>.15 G .502<68656e20746865>-3.002 F/F2 10 /Courier@0 SF<444f>3.002 E F0 .502<626f756e64732061726520696e7465>3.002 F<676572>-.15 E 3.002<2c62>-.4 G .502<757420746865>-3.202 F F2<444f> 3.002 E F0<696e6465>3.002 E 3.002<7869>-.15 G 3.002<736e>-3.002 G 3.002 <6f742e204974>-3.002 F .502<6d617920696e64692d>3.002 F<6361746520612066> 144 108 Q<61696c75726520746f206465636c6172652074686520696e6465>-.1 E 2.5 <7874>-.15 G 2.5<6f62>-2.5 G 2.5<6561>-2.5 G 2.5<6e69>-2.5 G<6e7465>-2.5 E<676572>-.15 E 5<2e43>-.55 G<6f6e74726f6c6c6564206279>-5 E/F3 10 /Times-Bold@0 SF2.5 E<65616cad646f>-.18 E F0 <6f7074696f6e2e>2.5 E F1 -.92<5761>108 136.8 S<726e696e673a20696e7465> .92 E -.1<6765>-.4 G 2.5<7271>.1 G<756f7469656e742065>-2.5 E <787072202e2e2e20636f6e>-.2 E<76657274656420746f2072>-.4 E<65616c>-.37 E F0 2.191<5468652071756f7469656e74206f66207477>144 148.8 R 4.691<6f69>-.1 G<6e7465>-4.691 E 2.191<6765727320726573756c747320696e20616e20696e7465> -.15 F 2.191<676572207479706520726573756c742c20696e20776869636820746865 206672616374696f6e616c2070617274206973>-.15 F 3.425 <64726f707065642e204966>144 160.8 R .925<7375636820616e20696e7465>3.425 F .925<6765722065>-.15 F .925<787072657373696f6e20696e>-.15 F -.2<766f> -.4 G .925<6c76696e67206469>.2 F .925 <766973696f6e206973206c6174657220636f6e>-.25 F -.15<7665>-.4 G .924 <7274656420746f2061207265616c2064617461747970652c206974>.15 F 1.748 <6d617920626520746861742061207265616c2074797065206469>144 172.8 R 1.748 <766973696f6e20686164206265656e20696e74656e6465642e>-.25 F 1.749 <436f6e74726f6c6c6564206279>6.749 F F3 4.249 E<76ad72>-.1 E<65616c>-.18 E F0<6f7074696f6e2e>144 184.8 Q F1 -.92<5761>108 213.6 S <726e696e673a20496e7465>.92 E -.1<6765>-.4 G 2.5<7271>.1 G <756f7469656e742065>-2.5 E<787072202e2e2e207573656420696e2065>-.2 E <78706f6e656e74>-.2 E F0 2.192<5468652071756f7469656e74206f66207477>144 225.6 R 4.692<6f69>-.1 G<6e7465>-4.692 E 2.191 <6765727320726573756c747320696e20616e20696e7465>-.15 F 2.191<6765722074 79706520726573756c742c20696e20776869636820746865206672616374696f6e616c20 70617274206973>-.15 F 3.623<64726f707065642e204966>144 237.6 R 1.123 <7375636820616e20696e7465>3.623 F 1.123<6765722065>-.15 F 1.123 <787072657373696f6e206973207573656420617320616e2065>-.15 F 1.123 <78706f6e656e742c206974206973207175697465206c696b>-.15 F 1.124 <656c7920746861742061207265616c2074797065>-.1 F<6469>144 249.6 Q <766973696f6e2077>-.25 E<617320696e74656e6465642e>-.1 E <436f6e74726f6c6c6564206279>5 E F3 2.5 E<76ad6578706f6e656e74>-.1 E F0<6f7074696f6e2e>2.5 E F1 -.92<5761> 108 278.4 S<726e696e673a204e>.92 E <414d45206e6f7420736574207768656e2052455455524e20656e636f756e746572>-.27 E<6564>-.37 E F0 .315<5468652077>144 290.4 R .315 <617920746861742066756e6374696f6e7320696e2046>-.1 F .315 <6f727472616e2072657475726e20612076>-.15 F .315 <616c75652069732062792061737369676e696e67207468652076>-.25 F .314 <616c756520746f20746865206e616d65206f66207468652066756e632d>-.25 F 3.248 <74696f6e2e2054686973>144 302.4 R .748<6d65737361676520696e646963617465 732074686174207468652066756e6374696f6e2077>3.248 F .748 <6173206e6f742061737369676e656420612076>-.1 F .748 <616c7565206265666f72652074686520706f696e742077686572652061>-.25 F F2 <52455455524e>144 314.4 Q F0 .21<73746174656d656e742077>2.71 F .21 <617320666f756e642e>-.1 F .209<5468657265666f726520697420697320706f7373 69626c652074686174207468652066756e6374696f6e20636f756c642072657475726e20 616e20756e64658c6e6564>5.21 F -.25<7661>144 326.4 S<6c75652e>.25 E F1 -.92<5761>108 355.2 S<726e696e673a204e6f6e7374616e646172>.92 E 2.5<6473> -.37 G<796e7461783a2061646a75737461626c652073697a652063616e6e6f74206265 20636f6e636174656e6174656420686572>-2.5 E<65>-.37 E F0 1.354<5468652046> 144 367.2 R 1.354<6f727472616e203737205374616e6461726420287365632e20362e 322e322920666f726269647320636f6e636174656e6174696e6720636861726163746572 2076>-.15 F 1.355<61726961626c65732077686f73652073697a6520697320616e> -.25 F<617374657269736b20696e20706172656e7468657365732c2065>144 379.2 Q <786365707420696e20616e2061737369676e6d656e742073746174656d656e742e>-.15 E<436f6e74726f6c6c6564206279>7.5 E F32.5 E F0<2e>A F1 -.92<5761>108 408 S<726e696e673a204e6f6e7374616e646172>.92 E 2.5<6473>-.37 G<796e746178203a207369676e698c63616e742063>-2.5 E <686172>-.15 E<6163746572>-.15 E 2.5<7370>-.1 G <61737420373220636f6c756d6e73>-2.5 E F0 .6<546869732077>144 420 R .6 <61726e696e67206973206769>-.1 F -.15<7665>-.25 G 3.1<6e75>.15 G .6 <6e64657220746865>-3.1 F F33.099 E F0 .599 <73657474696e6720696620746865>3.099 F F33.099 E F0 .599<73657474696e6720686173206265656e207573656420746f>3.099 F 1.001<696e 637265617365207468652073746174656d656e74208c656c642077696474682c20616e64 20612073746174656d656e7420686173206d65616e696e6766756c2070726f6772616d20 7465>144 432 R 1.002<7874206265>-.15 F 1.002<796f6e6420636f6c756d6e>-.15 F 2.925<37322e205374616e64617264>144 444 R -.15<466f>2.925 G .425 <727472616e2069676e6f72657320616c6c207465>.15 F .425 <787420696e2074686f736520636f6c756d6e732c2062>-.15 F .425 <757420736f6d6520636f6d70696c65727320646f206e6f742e>-.2 F .425 <54687573207468652070726f2d>5.425 F <6772616d206d6179206265207472656174656420646966>144 456 Q <666572656e746c7920627920646966>-.25 E <666572656e7420636f6d70696c6572732e>-.25 E F1 -.92<5761>108 484.8 S <726e696e673a204e6f6e7374616e646172>.92 E 2.5<6473>-.37 G <796e746178203a2053746174656d656e74206f7574206f66206f72>-2.5 E<646572> -.37 E<2e>-1.11 E F3<66746e6368656b>144 496.8 Q F0 .081<77696c6c20646574 6563742073746174656d656e7473207468617420617265206f7574206f66207468652073 657175656e63652073706563698c656420666f7220414e5349207374616e646172642046> 2.581 F .082<6f727472616e2037372e>-.15 F -.8<5461>144 508.8 S .623 <626c65203120696c6c75737472617465732074686520616c6c6f>.8 F .622 <7765642073657175656e6365206f662073746174656d656e747320696e207468652046> -.25 F .622<6f727472616e206c616e67756167652e>-.15 F .622 <53746174656d656e7473207768696368>5.622 F .532<617265206f7574206f66206f 7264657220617265206e6f6e657468656c65737320696e746572707265746564206279> 144 520.8 R F3<66746e6368656b>3.032 E F0 3.032<2c74>C 3.032<6f70>-3.032 G<7265>-3.032 E -.15<7665>-.25 G .532<6e742060>.15 F <60636173636164657327>-.74 E 3.032<276f>-.74 G 3.033<6665>-3.032 G .533 <72726f72206d657373616765732e>-3.033 F .595<5468652073657175656e63652063 6f756e74657220697320616c736f20726f6c6c6564206261636b20746f20707265>144 532.8 R -.15<7665>-.25 G .594<6e742072657065746974696f6e206f662074686520 6572726f72206d65737361676520666f72206120626c6f636b206f66>.15 F <73696d696c61722073746174656d656e74732e>144 544.8 Q <436f6e74726f6c6c656420627920746865>5 E F3 2.5 E F0<6f7074696f6e2e>2.5 E F2<2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d>144 573.6 Q 90<7c7c>252 585.6 S<696d706c69636974>-84 E 12<7c70>252 597.6 S 18 <6172616d65746572207c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d>-12 F 90 <7c7c>252 609.6 S<6f746865722073706563696669636174696f6e>-84 E 18<666f72 6d6174207c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d 2d2d2d2d2d2d>192 621.6 R 30<616e64207c>198 633.6 R 6<7c73>90 G <746174656d656e742d66756e6374696f6e>-6 E 24<656e747279207c>192 645.6 R 48<64617461207c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d>12 F 90<7c7c> 252 657.6 S<65786563757461626c65>-84 E<2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d 2d2d2d2d>144 669.6 Q F0 -.8<5461>276 693.6 S<626c652031>.8 E<4e6f> 273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E<3438>191.795 E 0 Cg EP %%Page: 49 49 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Times-Italic@0 SF -.92 <5761>108 84 S<726e696e673a2050>.92 E <6f737369626c65206469766973696f6e206279207a6572>-.8 E<6f>-.45 E F0 .963 <54686973206d657373616765206973207072696e746564206f7574207768657265>144 96 R -.15<7665>-.25 G 3.464<7264>.15 G -.25<6976>-3.464 G .964 <6973696f6e20697320646f6e65202865>.25 F .964<7863657074206469>-.15 F .964<766973696f6e206279206120636f6e7374616e74292e>-.25 F .964 <55736520697420746f>5.964 F <68656c70206c6f6361746520612072756e74696d65206469>144 108 Q <766973696f6e206279207a65726f2070726f626c656d2e>-.25 E <436f6e74726f6c6c6564206279>5 E/F2 10/Times-Bold@0 SF2.5 E <766973696f6e>-.1 E F0<6f7074696f6e2e>2.5 E F1 -.92<5761>108 136.8 S <726e696e673a2072>.92 E<65616c207472756e636174656420746f20696e7467>-.37 E F2<66746e6368656b>144 148.8 Q F0 .036<68617320646574656374656420616e20 61737369676e6d656e742073746174656d656e7420776869636820686173206120726561 6c2065>2.537 F .036<787072657373696f6e206f6e207468652072696768742c2062> -.15 F .036<757420616e20696e74652d>-.2 F .342<6765722076>144 160.8 R .342<61726961626c65206f6e20746865206c6566742e>-.25 F .343 <546865206672616374696f6e616c2070617274206f6620746865207265616c2076> 5.343 F .343<616c75652077696c6c206265206c6f73742e>-.25 F .343 <496620796f752065>5.343 F .343<78706c696369746c7920636f6e>-.15 F -.15 <7665>-.4 G<7274>.15 E 2.185<746865207265616c2065>144 172.8 R 2.185 <787072657373696f6e20746f20696e7465>-.15 F 2.185 <676572207573696e6720746865>-.15 F/F3 10/Courier@0 SF<494e54>4.685 E F0 <6f72>4.685 E F3<4e494e54>4.685 E F0 2.184 <696e7472696e7369632066756e6374696f6e2c206e6f2077>4.685 F 2.184 <61726e696e672077696c6c206265>-.1 F 2.575<7072696e7465642e2041>144 184.8 R .075<73696d696c6172206d657373616765206973207072696e746564206966206120 646f75626c6520707265636973696f6e2065>2.575 F .075<787072657373696f6e2069 732061737369676e656420746f20612073696e676c652070726563692d>-.15 F <73696f6e2076>144 196.8 Q<61726961626c652c206574632e>-.25 E <436f6e74726f6c6c6564206279>5 E F2 2.5 E F0<6f7074696f6e2e>2.5 E F1 -.92<5761>108 225.6 S <726e696e673a20737562736372697074206973206e6f7420696e7465>.92 E -.1 <6765>-.4 G<72>.1 E F0 1.486<53696e636520617272617920737562736372697074 7320617265206e6f726d616c6c7920696e7465>144 237.6 R 1.485<67657220717561 6e7469746965732c2074686520757365206f662061206e6f6e2d696e7465>-.15 F 1.485<6765722065>-.15 F 1.485<787072657373696f6e2068657265>-.15 F <6d6179207369676e616c20616e206572726f72>144 249.6 Q 5<2e43>-.55 G <6f6e74726f6c6c6564206279>-5 E F22.5 E <65616cad737562736372697074>-.18 E F0<6f7074696f6e2e>2.5 E F1 -.92<5761> 108 278.4 S <726e696e673a20556e6b6e6f776e20696e7472696e7369632066756e6374696f6e>.92 E F0 1.216<54686973206d6573736167652077>144 290.4 R 1.216<61726e73207468 65207573657220746861742061206e616d65206465636c6172656420696e20616e>-.1 F F3<494e5452494e534943>3.716 E F0 1.216 <73746174656d656e7420697320756e6b6e6f>3.716 F 1.216<776e20746f>-.25 F F2 <66746e6368656b>144 302.4 Q F0 5.569<2e50>C .569<726f6261626c7920697420 69732061206e6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e2c 20616e6420736f207468652070726f6772616d2077696c6c206e6f7420626520706f7274 61626c652e>-5.569 F .072 <5468652066756e6374696f6e2077696c6c2062652074726561746564206279>144 314.4 R F2<66746e6368656b>2.572 E F0 .072<617320612075736572>2.572 F .072<2d64658c6e65642066756e6374696f6e2e>-.2 F .072<546869732077>5.072 F .072<61726e696e67206973206e6f742073757070726573736564>-.1 F .038 <627920616e>144 326.4 R 2.538<796f>-.15 G .038 <7074696f6e2c2073696e6365206974206166>-2.538 F<6665637473>-.25 E F2 <66746e6368656b>2.537 E F0 1.137 -.55<27732061>D .037 <6e616c79736973206f66207468652070726f6772616d2e>.55 F<486f>5.037 E<7765> -.25 E -.15<7665>-.25 G .837 -.4<722c2069>.15 H 2.537<6674>.4 G .037 <686520696e7472696e7369632066756e6374696f6e>-2.537 F .052<697320696e206f 6e65206f662074686520737570706f727465642073657473206f66206e6f6e7374616e64 61726420696e7472696e736963732c20796f752063616e2075736520746865>144 338.4 R F22.553 E F0 .053 <73657474696e6720746f206361757365>2.553 F F2<66746e6368656b>144 350.4 Q F0<746f207265636f676e697a652069742e>2.5 E/F4 10.95/Times-Bold@0 SF <4c494d4954>72 379.2 Q -1.04<4154>-.986 G <494f4e5320414e4420455854454e53494f4e53>1.04 E F2<66746e6368656b>108 391.2 Q F0 .692<6163636570747320414e5349207374616e646172642046>3.192 F .692<6f727472616e2d37372070726f6772616d73207769746820736f6d65206d696e6f 72206c696d69746174696f6e7320616e64206e756d65726f757320636f6d6d6f6e>-.15 F -.15<6578>108 403.2 S<74656e73696f6e732e>.15 E F2 <4c696d69746174696f6e73>108 420 Q F0<3a>A .892<5468652064756d6d79206172> 144 432 R .892<67756d656e747320696e2073746174656d656e742066756e6374696f 6e73206172652074726561746564206c696b>-.18 F 3.392<656f>-.1 G .893 <7264696e6172792076>-3.392 F .893 <61726961626c6573206f66207468652070726f6772616d2e>-.25 F<54686174206973 2c2074686569722073636f70652069732074686520656e746972652073756270726f6772 616d2c206e6f74206a757374207468652073746174656d656e742066756e6374696f6e20 64658c6e6974696f6e2e>144 444 Q .482 <54686520636865636b696e67206f6620464f524d41>144 460.8 R 2.982<5473>-1.11 G .482<746174656d656e7473206973206c61782c20746f6c65726174696e67206d6973 73696e6720736570617261746f72732028636f6d6d612c206574632e2920626574776565 6e>-2.982 F .61<666f726d61742064657363726970746f727320696e20706c61636573 20776865726520746865205374616e64617264207265717569726573207468656d2c2061 6e6420616c6c6f>144 472.8 R<77696e67>-.25 E F1 1.666<2e64>3.111 G F0 .611 <8c656c6473206f6e20646573637269702d>1.445 F .886 <746f727320746861742073686f756c64206e6f74206861>144 484.8 R 1.186 -.15 <76652074>-.2 H 3.386<68656d2e204974>.15 F .886<646f65732077>3.386 F .886<61726e20756e646572>-.1 F F23.386 E <6f726d6174ad65646974ad6465736372>-.25 E F0 .885 <61626f7574206e6f6e7374616e64617264>3.385 F <64657363726970746f7220747970657320286c696b>144 496.8 Q<65>-.1 E F3<4f> 2.5 E F0<292c20616e6420737570706f727465642065>A<7874656e73696f6e732e> -.15 E .877<54686572652061726520736f6d652073796e7461637469632065>144 513.6 R .877<7874656e73696f6e7320616e642046>-.15 F .877 <6f727472616e20393020656c656d656e74732074686174>-.15 F F2 <66746e6368656b>3.377 E F0 .877<616363657074732062>3.377 F .878 <757420646f65732076>-.2 F<657279>-.15 E .917 <6c6974746c6520636865636b696e672e>144 525.6 R -.15<466f>5.917 G 3.417 <7269>.15 G .917<6e7374616e63652c20706f696e7465722075736167652028776865 7468657220746865206e6f6e7374616e6461726420437261792073796e746178206f7220 7468652046>-3.417 F<6f727472616e>-.15 E .436 <39302073796e74617829206973206e6f7420636865636b>144 537.6 R .437<656420 6f74686572207468616e20666f722073657420616e642075736564207374617475732e> -.1 F .437 <497420697320686f706564207468617420736f6d6520646179206d6f72652074686f72> 5.437 F<2d>-.2 E 1.042<6f75676820636865636b696e672077696c6c20626520696d 706c656d656e7465642c2062>144 549.6 R 1.041<757420666f72206e6f>-.2 F 3.541<7774>-.25 G 1.041<686520757365722073686f756c64207265>-3.541 F -.05 <6761>-.15 G 1.041<72642074686520616363657074616e6365206f66207468657365> .05 F .943 <73796e7461637469632066656174757265732073696d706c79206173206120636f6e> 144 561.6 R -.15<7665>-.4 G .943<6e69656e636520746f20656e61626c65206368 65636b696e67206f66206f746865722061737065637473206f6620636f64652074686174 20636f6e2d>.15 F .326<7461696e73207468656d2e>144 573.6 R .325<5365652074 68652073656374696f6e20457874656e73696f6e7320666f722073706563698c63732061 626f75742077686174206665617475726573206172652061636365707465642062>5.326 F .325<7574206e6f742066756c6c79>-.2 F<636865636b>144 585.6 Q<65642e>-.1 E .03<496620612075736572>144 602.4 R .03<2d737570706c696564207375627072 6f6772616d20686173207468652073616d65206e616d65206173206f6e65206f66207468 65206e6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e73207265 632d>-.2 F .243<6f676e697a6564206279>144 614.4 R F2<66746e6368656b>2.743 E F0 2.743<2c69>C 2.743<746d>-2.743 G .243 <757374206265206465636c6172656420696e20616e>-2.743 F F3 <45585445524e414c>2.742 E F0 .242<73746174656d656e7420696e20616e>2.742 F 2.742<7972>-.15 G .242<6f7574696e65207468617420696e>-2.742 F -.2<766f> -.4 G -.1<6b65>.2 G 2.742<7369>.1 G<742e>-2.742 E 1.262<4f74686572776973 652069742077696c6c206265207375626a65637420746f2074686520636865636b696e67 206e6f726d616c6c79206769>144 626.4 R -.15<7665>-.25 G 3.762<6e74>.15 G 3.762<6f74>-3.762 G 1.262<686520696e7472696e7369632066756e6374696f6e2e> -3.762 F 1.262<53696e636520746865>6.262 F .886<6e6f6e7374616e6461726420 696e7472696e7369637320617265206e6f74207374616e646172642c2074686973>144 638.4 R F3<45585445524e414c>3.386 E F0 .886 <73746174656d656e74206973206e6f74207265717569726564206279207468652046> 3.386 F<6f727472616e>-.15 E 2.877<3737205374616e646172642e>144 650.4 R 2.877<5573696e6720746865>7.877 F F25.377 E F0 2.877<73657474696e672c207265636f676e6974696f6e206f66206d6f7374206e 6f6e7374616e6461726420696e7472696e73696373>5.377 F<2865>144 662.4 Q .38< 7863657074696e67206f6e6c792074686f7365206e656564656420746f20737570706f72 742074686520646f75626c6520636f6d706c65>-.15 F 2.879<7864>-.15 G .379 <6174612074797065292063616e206265207475726e6564206f66>-2.879 F 2.879 <662e20536565>-.25 F<746865>2.879 E 1.507<6c69737473206f6620737570706f72 746564206e6f6e7374616e6461726420696e7472696e7369632066756e6374696f6e7320 756e646572207468652064697363757373696f6e206f6620746865>144 674.4 R F2 4.008 E F0<73657474696e67>4.008 E<61626f>144 686.4 Q -.15<7665>-.15 G<2e>.15 E F2<457874656e73696f6e73>108 703.2 Q F0<3a>A .67<416c6c206f662074686573652065>144 715.2 R .67 <7874656e73696f6e73202865>-.15 F .67<7863657074206c6f>-.15 F<776572>-.25 E .67 <2d636173652063686172616374657273292077696c6c2067656e65726174652077>-.2 F .67<61726e696e6773206966207468652072656c65>-.1 F -.25<7661>-.25 G <6e74>.25 E F23.17 E F0 .551<6f7074696f6e206973207365742e>144 727.2 R .552<536f6d65206f66207468652065>5.552 F .552 <7874656e73696f6e73206c69737465642062656c6f>-.15 F 3.052<7761>-.25 G .552<72652070617274206f66207468652046>-3.052 F .552 <6f727472616e2d3930205374616e646172642e>-.15 F .552<546865736520617265> 5.552 F<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3439>191.795 E 0 Cg EP %%Page: 50 50 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E <696e6469636174656420627920746865206e6f746174696f6e2028463930292e>144 84 Q -.8<5461>144 100.8 S 1.21<627320617265207065726d69747465642c20616e6420 7472616e736c6174656420696e746f2065717569>.8 F -.25<7661>-.25 G 1.209<6c 656e7420626c616e6b7320776869636820636f72726573706f6e6420746f207461622073 746f70732065>.25 F -.15<7665>-.25 G 1.209<72792038>.15 F 3.619 <636f6c756d6e732e20546865>144 112.8 R 1.119 <7374616e6461726420646f6573206e6f74207265636f676e697a6520746162732e> 3.619 F 1.119 <4e6f7465207468617420736f6d6520636f6d70696c65727320616c6c6f>6.119 F 3.62 <7774>-.25 G 1.12<6162732c2062>-3.62 F 1.12<7574207472656174>-.2 F 3.905 <7468656d20646966>144 124.8 R<666572656e746c79>-.25 E 8.905<2e54>-.65 G 3.904<68652074726561746d656e742064658c6e656420666f722044454320464f52> -8.905 F 3.904<5452414e2063616e206265206163686965>-.6 F -.15<7665>-.25 G 6.404<6475>.15 G 3.904<73696e6720746865>-6.404 F/F1 10/Times-Bold@0 SF 144 136.8 Q<63653d646563ad746162>-.18 E F0<73657474696e672e> 2.5 E .109<537472696e6773206d61792062652064656c696d69746564206279206569 746865722071756f7465206d61726b73206f722061706f7374726f706865732e>144 153.6 R 2.61<4173>5.109 G .11<657175656e6365206f66207477>-2.61 F 2.61 <6f64>-.1 G .11<656c696d697465722063686172>-2.61 F<2d>-.2 E<616374657273 20697320696e74657270726574656420617320612073696e676c6520656d626564646564 2064656c696d6974657220636861726163746572>144 165.6 Q 5<2e28>-.55 G <46393029>-5 E .672<537472696e6773206d617920636f6e7461696e20554e49582d73 74796c65206261636b736c617368206573636170652073657175656e6365732e>144 182.4 R<546865>5.672 E 3.171<7977>-.15 G .671 <696c6c20626520696e7465727072657465642061732073756368206966>-3.171 F <746865>144 194.4 Q F13.39 E <63653d756e6978ad6261636b736c617368>-.18 E F0 .891 <73657474696e67206973206769>3.391 F -.15<7665>-.25 G 3.391 <6e2e204f7468657277697365>.15 F .891<746865206261636b736c61736820636861 7261637465722077696c6c2062652074726561746564>3.391 F <61732061206e6f726d616c207072696e74696e6720636861726163746572>144 206.4 Q<2e>-.55 E <536f7572636520636f64652063616e20626520696e206569746865722046>144 223.2 Q<6f727472616e203930206672656520666f726d6174206f7220747261646974696f6e61 6c208c78>-.15 E<656420666f726d61742e>-.15 E<2846393029>5 E 2.5<4173>144 240 S<656d69636f6c6f6e20697320616c6c6f>-2.5 E <77656420617320612073746174656d656e7420736570617261746f72>-.25 E 5<2e28> -.55 G<46393029>-5 E<4c6f>144 256.8 Q .376<7765722063617365206368617261 637465727320617265207065726d69747465642c20616e642061726520636f6e>-.25 F -.15<7665>-.4 G .375 <7274656420696e7465726e616c6c7920746f207570706572636173652065>.15 F .375 <786365707420696e20636861726163746572>-.15 F 2.5 <737472696e67732e20546865>144 268.8 R <7374616e646172642073706563698c65732075707065722063617365206f6e6c79>2.5 E 2.5<2c65>-.65 G <786365707420696e20636f6d6d656e747320616e6420737472696e67732e>-2.65 E <2846393029>5 E .639<486f6c6c657269746820636f6e7374616e7473206172652070 65726d69747465642c20696e206163636f7264616e63652077697468207468652046>144 285.6 R .639 <6f727472616e203737205374616e646172642c20617070656e64697820432e>-.15 F <546865>5.64 E<79>-.15 E<73686f756c64206e6f74206265207573656420696e2065> 144 297.6 Q<787072657373696f6e732c206f7220636f6e667573656420776974682064 61746174797065204348415241>-.15 E<435445522e>-.4 E .454 <546865206c65747465722027442720287570706572206f72206c6f>144 314.4 R .453 <77657220636173652920696e20636f6c756d6e20312069732074726561746564206173 20746865206265>-.25 F .453<67696e6e696e67206f66206120636f6d6d656e742e> -.15 F<5468657265>5.453 E<6973206e6f206f7074696f6e20746f2074726561742073 756368206c696e65732061732073746174656d656e747320696e7374656164206f662063 6f6d6d656e74732e>144 326.4 Q 2.263<53746174656d656e7473206d617920626520 6c6f6e676572207468616e20373220636f6c756d6e732070726f>144 343.2 R 2.263 <76696465642074686174207468652073657474696e67>-.15 F F1 4.763 E F0 -.1<7761>4.763 G 4.763<7375>.1 G 2.263 <73656420746f>-4.763 F .318<696e63726561736520746865206c696d69742e>144 355.2 R .318 <4163636f7264696e6720746f20746865207374616e646172642c20616c6c207465> 5.318 F .317<78742066726f6d20636f6c756d6e73203733207468726f756768203830 2069732069676e6f7265642c20616e64>-.15 F<6e6f206c696e65206d6179206265206c 6f6e676572207468616e20383020636f6c756d6e732e>144 367.2 Q -1.11<5661>144 384 S 1.168<726961626c65206e616d6573206d6179206265206c6f6e67657220746861 6e2073697820636861726163746572732e>1.11 F 1.168<546865207374616e64617264 2073706563698c65732073697820617320746865206d6178696d756d2e>6.168 F F1 <66746e6368656b>144 396 Q F0<7065726d697473206e616d657320757020746f2033 312063686172616374657273206c6f6e672028463930292e>2.5 E -1.11<5661>144 412.8 S 1.157<726961626c65206e616d6573206d617920636f6e7461696e20756e6465 7273636f72657320616e6420646f6c6c6172207369676e7320286f72206f74686572206e 6f6e2d616c70686162657469632063686172616374657273206173>1.11 F 1.237 <73706563698c656420627920746865>144 424.8 R F1 3.737 E F0 3.738 <6f7074696f6e292e205468657365>3.737 F 1.238<6368617261637465727320617265 206172652074726561746564207468652073616d6520617320616c7068612d>3.738 F 3.22<6265746963206c6574746572732e>144 436.8 R 3.22<54686520646566>8.22 F 3.219<61756c74207479706520666f722076>-.1 F 3.219<61726961626c6573206265> -.25 F 3.219<67696e6e696e6720776974682074686573652063686172616374657273 206973205245414c2e>-.15 F<496e>8.219 E .829<494d504c49434954207479706520 73746174656d656e74732073706563696679696e6720612072616e6765206f6620636861 726163746572732c2074686520646f6c6c6172207369676e20666f6c6c6f>144 448.8 R .829<7773205a20616e6420697320666f6c2d>-.25 F<6c6f>144 460.8 Q .619 <77656420627920756e64657273636f72652e>-.25 F<28416e>5.619 E 3.119<796f> -.15 G .619<746865722075736572>-3.119 F .618<2d64658c6e6564206368617261 6374657273206172652074726561746564207468652073616d652061732074686520646f 6c6c6172207369676e2e29>-.2 F -.15<466f>144 472.8 S <727472616e203930207065726d69747320756e64657273636f72657320696e2076>.15 E<61726961626c65206e616d65732e>-.25 E .727<54686520554e49582076>144 489.6 R .727<657273696f6e20746f6c657261746573207468652070726573656e6365 206f662070726570726f636573736f722064697265637469>-.15 F -.15<7665>-.25 G .728<732c206e616d656c79206c696e6573206265>.15 F .728 <67696e6e696e672077697468>-.15 F .401 <74686520706f756e64207369676e202823292e>144 501.6 R .401 <546865736520617265207472656174656420617320636f6d6d656e74732c2065>5.401 F .401<786365707420666f72>-.15 F/F2 10/Courier@0 SF<236c696e65>2.9 E F0 <64697265637469>2.9 E -.15<7665>-.25 G .4 <732c2077686963682061726520696e746572>.15 F<2d>-.2 E .413<7072657465642c 20616e6420617265207573656420746f2073657420746865206c696e65206e756d626572 20616e6420736f75726365208c6c65206e616d6520666f722077>144 513.6 R .414 <61726e696e677320616e64206572726f72206d657373616765732e>-.1 F .128 <4e6f74652074686174>144 525.6 R F2<23696e636c756465>2.628 E F0 <64697265637469>2.628 E -.15<7665>-.25 G 2.628<7361>.15 G .128 <7265206e6f742070726f636573736564206279>-2.628 F F1<66746e6368656b>2.628 E F0 5.128<2e50>C .128 <726f6772616d73207468617420757365207468656d20666f7220696e636c75642d> -5.128 F 1.702<696e6720736f75726365208c6c65732073686f756c64206265207061 73736564207468726f756768207468652070726570726f636573736f72206265666f7265 206265696e6720696e70757420746f>144 537.6 R F1<66746e6368656b>4.203 E F0 6.703<2e41>C<73>-6.703 E 2.13<6e6f7465642062656c6f>144 549.6 R -.65 <772c>-.25 G F1<66746e6368656b>5.28 E F0 2.13<646f65732070726f63657373> 4.63 F F2<494e434c554445>4.63 E F0 2.13 <73746174656d656e74732c207768696368206861>4.63 F 2.43 -.15<766520612064> -.2 H<6966>.15 E 2.13<666572656e742073796e7461782e>-.25 F<416e>7.13 E .957<6f7074696f6e616c2070726f6772616d2c>144 561.6 R F1<66746e7070>3.457 E F0 .958<28314c29202861>B -.25<7661>-.2 G .958 <696c61626c652073657061726174656c79292070726f>.25 F 3.458 <76696465732070726570726f63657373696e67>-.15 F .958 <746861742070726f7065726c792068616e646c6573>3.458 F F2<494e434c554445> 144 573.6 Q F0<8c6c65732e>2.5 E 1.045<5468652046>144 590.4 R 1.045 <6f727472616e203930>-.15 F F2<444f>3.545 E F0<2e2e2e>3.545 E F2 <454e44444f>6.045 E F0 1.045 <636f6e74726f6c20737472756374757265206973207065726d69747465642e>3.545 F <546865>6.045 E F2<4359434c45>3.545 E F0<616e64>3.545 E F2<45584954> 3.545 E F0<73746174656d656e7473>3.545 E .85<6172652061636365707465642e> 144 602.4 R .85<416c6c206f66207468657365206d6179206861>5.85 F 1.15 -.15 <76652061>-.2 H 3.35<6e6f>.15 G .85 <7074696f6e616c20646f2d636f6e737472756374206e616d652c2062>-3.35 F .85 <757420636f6e737472756374206e616d657320617265206e6f74>-.2 F<636865636b> 144 614.4 Q<656420666f7220636f6e73697374656e63>-.1 E 1.3 -.65<792e2028> -.15 H<46393029>.65 E<5468652046>144 631.2 Q<6f727472616e203930>-.15 E F2<53454c4543542043415345>2.5 E F0 <636f6e7374727563742069732061636365707465642e202846393029>2.5 E .431<43 6f6e737472756374206e616d65732061726520616c736f206163636570746564206f6e> 144 648 R F2<4946>2.931 E F0<2c>A F2<5448454e>2.931 E F0<2c>A F2 <454c5345>2.931 E F0<2c>A F2<454e444946>2.931 E F0<616e64>2.931 E F2 .43 <53454c4543542043415345>2.93 F F0<73746174656d656e74732e>2.93 E <2846393029>144 660 Q<546865>144 676.8 Q F2<414343455054>4.341 E F0 <616e64>4.341 E F2<54595045>4.341 E F0 1.842<73746174656d656e7473202866 6f72207465726d696e616c20492f4f2920617265207065726d69747465642c2077697468 207468652073616d652073796e746178206173>4.341 F F2<5052494e54>144 688.8 Q F0<2e>A .894<54686520736f2d63616c6c65642060>144 705.6 R .894 <604372617920706f696e74657227>-.74 F 3.394<2773>-.74 G .894<796e74617820 697320746f6c6572617465642e204974206973206e6f74207468652073616d6520617320 7468652046>-3.394 F .893<6f727472616e203930>-.15 F F2<504f494e544552> 3.393 E F0 3.469<73746174656d656e742e205468657265>144 717.6 R .969<6973 206e6f207265616c20636865636b696e67206f66207468652073746174656d656e74206f 74686572207468616e2062617369632073796e7461782e>3.469 F .97 <54686520666f726d206f662074686973>5.97 F<73746174656d656e74206973>144 729.6 Q<4e6f>273.795 768 Q -.15<7665>-.15 G<6d6265722032303034>.15 E <3530>191.795 E 0 Cg EP %%Page: 51 51 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E/F1 10/Courier@0 SF <504f494e5445522028>174 84 Q/F2 10/Times-Italic@0 SF<706f696e746572>A F1 <2c>A F2<706f696e746565>6 E F1<29>A F0<5b>2.5 E F1<2c28>A F2 <706f696e746572>A F1<2c>A F2<706f696e746565>6 E F1<29>A F0<5d>A .793 <54686520706f696e7465722076>144 96 R .793<61726961626c657320617265206173 7369676e6564206120646174612074797065206f66>-.25 F F1 .793 <494e5445474552202a34>3.293 F F0 5.792<2e55>C .792 <7361676520636865636b696e67206f662074686520706f696e746565>-5.792 F -.25 <7661>144 108 S<726961626c657320697320737570707265737365642c2073696e6365 20696e20707261637469636520746865>.25 E 2.5<7961>-.15 G<7265206163636573 73656420696e6469726563746c79207669612074686520706f696e746572732e>-2.5 E .707<54686520666f6c6c6f>144 124.8 R .707<77696e672046>-.25 F .707 <6f727472616e20393020706f696e7465722072656c617465642073796e746178>-.15 F .707<6573206172652061636365707465643a>-.15 F F1<414c4c4f43415441424c45> 3.208 E F0<2c>A F1<504f494e544552>3.208 E F0 3.208<2c61>C<6e64>-3.208 E F1<544152474554>144 136.8 Q F0 .228 <73746174656d656e747320616e64207468652073616d6520617474726962>2.729 F .228<7574657320696e2074797065206465636c61726174696f6e733b>-.2 F F1 <414c4c4f43415445>2.728 E F0<2c>A F1<4445414c4c4f43415445>2.728 E F0 2.728<2c61>C<6e64>-2.728 E F1<4e554c4c494659>144 148.8 Q F0 -.15<657865> 3.9 G 1.4<63757461626c652073746174656d656e74733b20706f696e74657220617373 69676e6d656e74207573696e67>.15 F F1<3d3e>3.9 E F0 1.4 <6f70657261746f723b20616e642074686520696e7472696e7369632066756e632d>3.9 F<74696f6e73>144 160.8 Q F1<414c4c4f4341544544>3.391 E F0<616e64>3.391 E F1<4153534f434941544544>3.391 E F0 5.891<2e4c>C .891<6974746c652073656d 616e74696320636865636b696e67206f6620706f696e7465722076>-5.891 F .891 <61726961626c657320616e64206f706572612d>-.25 F .029 <74696f6e7320697320646f6e65206265>144 172.8 R .029 <796f6e642062617369632073657420616e642075736564207374617475732e>-.15 F -.15<466f>5.029 G 2.529<7269>.15 G .03<6e7374616e63652c2074686572652069 73206e6f20636865636b696e6720666f722073756368206572726f7273206173>-2.529 F<64616e676c696e6720706f696e746572732c206f7220757365206f6620756e616c6c6f 6361746564206172726179732e>144 184.8 Q .569 <53746174656d656e7473206d6179206861>144 201.6 R .869 -.15<76652061>-.2 H .869 -.15<6e79206e>.15 H .569 <756d626572206f6620636f6e74696e756174696f6e206c696e65732e>.15 F .568 <5468652046>5.569 F .568<6f727472616e20373720616e642046>-.15 F .568 <6f727472616e203930207374616e6461726473>-.15 F<616c6c6f>144 213.6 Q 2.602<77616d>-.25 G .102<6178696d756d206f6620313920696e208c78>-2.602 F .102<656420736f7572636520666f726d2e>-.15 F .102<5468652046>5.102 F .102 <6f727472616e203930207374616e6461726420616c6c6f>-.15 F .103 <77732061206d6178696d756d206f6620333920696e>-.25 F <6672656520736f7572636520666f726d2e>144 225.6 Q 2.715<52656c6174696f6e61 6c2028636f6d70617269736f6e29206f70657261746f727320636f6d706f736564206f66 2070756e6374756174696f6e2c206e616d656c793a203c203c3d203d3d202f3d203e203e 3d20617265>144 242.4 R<616c6c6f>144 254.4 Q 2.5<7765642e202846393029> -.25 F<496e6c696e6520636f6d6d656e74732c206265>144 271.2 Q <67696e6e696e67207769746820616e2065>-.15 E <78636c616d6174696f6e206d61726b2c20617265207065726d69747465642e>-.15 E <2846393029>5 E -.35<4e41>144 288 S <4d454c49535420492f4f20697320737570706f727465642e>.35 E <5468652073796e746178206973207468652073616d6520617320696e2046>5 E <6f727472616e2039302e>-.15 E<464f524d41>144 304.8 Q 2.731<5473>-1.11 G .231<746174656d656e74732063616e20636f6e7461696e206120646f6c6c6172207369 676e20746f20696e646963617465207375707072657373696f6e206f6620636172726961 67652d72657475726e2e>-2.731 F .232<416e20696e74652d>5.232 F .861 <6765722065>144 316.8 R .861 <787072657373696f6e20656e636c6f73656420696e20616e676c6520627261636b>-.15 F .861<6574732063616e206265207573656420616e>-.1 F .86 <79776865726520696e206120464f524d41>-.15 F 3.36<5473>-1.11 G .86 <746174656d656e74207768657265>-3.36 F .599<7468652046>144 328.8 R .599 <6f727472616e203737205374616e6461726420616c6c6f>-.15 F .599 <777320616e20696e7465>-.25 F .599<67657220636f6e7374616e74202865>-.15 F .6<786365707420666f7220746865206c656e677468206f66206120486f6c6c65726974 6820636f6e7374616e74292c>-.15 F<746f2070726f>144 340.8 Q <7669646520612072756e2d74696d652076>-.15 E<616c756520666f72206120726570 6561742073706563698c636174696f6e206f72208c656c642077696474682e>-.25 E <4e6f6e7374616e64617264206b>144 357.6 Q -.15<6579>-.1 G -.1<776f>.15 G <7264732061726520616c6c6f>.1 E<77656420696e20492f4f2073746174656d656e74 732c20636f72726573706f6e64696e6720746f2074686f736520696e20564d532046> -.25 E<6f727472616e2e>-.15 E<546865>144 374.4 Q F1 .135 <494d504c49434954204e4f4e45>2.635 F F0 .135 <73746174656d656e7420697320737570706f727465642e>2.635 F .135<546865206d 65616e696e67206f6620746869732073746174656d656e74206973207468617420616c6c 2076>5.135 F<61726961626c6573>-.25 E .647<6d757374206861>144 386.4 R .947 -.15<76652074>-.2 H .647<6865697220646174612074797065732065>.15 F .647<78706c696369746c79206465636c617265642e>-.15 F .647<5261746865722074 68616e208d616720746865206f6363757272656e636573206f6620737563682076>5.647 F<61726961626c6573>-.25 E .619 <776974682073796e746178206572726f72206d657373616765732c>144 398.4 R/F3 10/Times-Bold@0 SF<66746e6368656b>3.119 E F0 -.1<7761>3.119 G .618<6974 732074696c6c2074686520656e64206f6620746865206d6f64756c652c20616e64207468 656e207072696e7473206f75742061206c697374206f66>.1 F <616c6c20756e6465636c617265642076>144 410.4 Q <61726961626c65732c20617320697420646f657320666f7220746865>-.25 E F3 2.5 E<65>-.18 E F0 2.5<6f7074696f6e2e202846393029>2.5 F .212<44617461207479706573>144 427.2 R F1<494e5445474552>2.712 E F0<2c>A F1<5245414c>2.712 E F0<2c>A F1<434f4d504c4558>2.712 E F0 2.712<2c61>C <6e64>-2.712 E F1<4c4f474943414c>2.712 E F0 .212<61726520616c6c6f>2.712 F .212<77656420746f206861>-.25 F .513 -.15<76652061>-.2 H 2.713<6e6f>.15 G .213<7074696f6e616c20707265636973696f6e>-2.713 F .122 <73706563698c636174696f6e20696e2074797065206465636c61726174696f6e732e> 144 439.2 R -.15<466f>5.122 G 2.622<7269>.15 G<6e7374616e63652c>-2.622 E F1<5245414c2a38>2.622 E F0 .121<6d65616e7320616e20382d62797465208d6f6174 696e6720706f696e74206461746120747970652e>2.622 F<546865>144 451.2 Q F1 <5245414c2a38>5.843 E F0 3.343<6461746174797065206973206e6f74206e656365 73736172696c7920636f6e736964657265642065717569>5.843 F -.25<7661>-.25 G 3.343<6c656e7420746f>.25 F F1 3.343<444f55424c4520505245434953494f4e> 5.843 F F0<2c>A .813<646570656e64696e67206f6e20746865>144 463.2 R F3 3.313 E<6f726473697a65>-.1 E F0 3.312<73657474696e672e20546865> 3.313 F -.15<466f>3.312 G .812 <727472616e203737205374616e6461726420616c6c6f>.15 F .812 <77732061206c656e6774682073706563698c636174696f6e206f6e6c79>-.25 F <666f72>144 475.2 Q F1<434841524143544552>2.5 E F0<646174612e>2.5 E F3 <66746e6368656b>144 492 Q F0 .096<737570706f72747320746865>2.596 F F1 -3.404<444f55424c4520434f4d504c4558>2.596 F F0 .096 <747970652073706563698c636174696f6e20666f72206120636f6d706c65>2.596 F 2.596<7871>-.15 G .097<75616e746974792077686f7365207265616c20616e64> -2.596 F .495<696d6167696e6172792070617274732061726520646f75626c65207072 65636973696f6e2e>144 504 R<4d6978>5.494 E .494 <65642d6d6f64652061726974686d6574696320696e>-.15 F -.2<766f>-.4 G .494 <6c76696e672073696e676c652d707265636973696f6e20636f6d706c65>.2 F<78>-.15 E<7769746820646f75626c652d707265636973696f6e207265616c20646174612c207072 6f6869626974656420756e64657220746865205374616e646172642c207969656c647320 6120646f75626c6520636f6d706c65>144 516 Q 2.5<7872>-.15 G<6573756c742e> -2.5 E .165<436f6d62696e65642074797065206465636c61726174696f6e7320616e64 20646174612d73746174656d656e742d6c696b>144 532.8 R 2.665<6569>-.1 G .165 <6e697469616c697a657273206172652061636365707465642e>-2.665 F .166 <5468657365206861>5.166 F .466 -.15<76652074>-.2 H .166<686520666f726d> .15 F .659<6f662061207374616e646172642046>144 544.8 R .659 <6f727472616e2037372074797065206465636c61726174696f6e2c20666f6c6c6f>-.15 F .658<776564206279206120736c6173682d64656c696d69746564206c697374206f66 20636f6e7374616e7473206c696b>-.25 F 3.158<6574>-.1 G<686174>-3.158 E <7573656420696e2061>144 556.8 Q F1<44415441>2.5 E F0 2.5 <73746174656d656e742e20416e>2.5 F -.15<6578>2.5 G <616d706c65206f66207468652073796e746178206973>.15 E F1 6 <494e5445474552204e>194 568.8 R 6<2f31>6 G<3030202f>-6 E F0 1.617<546869 73206261737461726420666f726d206f6620696e697469616c697a696e67206465636c61 726174696f6e2077>144 580.8 R 1.617 <6173206e6f742061646f7074656420696e2046>-.1 F 1.617 <6f727472616e2039302e>-.15 F 1.617<53756368206465636c61726174696f6e73> 6.617 F<73686f756c64206265207772697474656e207573696e6720746865207374616e 6461726420666f726d206465736372696265642062656c6f>144 592.8 Q 1.3 -.65 <772c2077>-.25 H<68696368206973206163636570746564206279>.65 E F3 <66746e6368656b>2.5 E F0<2e>A .386 <5468657265206973206c696d6974656420737570706f727420666f722046>144 609.6 R .386<6f727472616e20393020617474726962>-.15 F .386 <7574652d62617365642074797065206465636c61726174696f6e732e>-.2 F .386 <54686973207374796c65206f66206465636c61726174696f6e>5.386 F 1.704<697320 64697374696e677569736865642062792074686520757365206f66206120646f75626c65 20636f6c6f6e20283a3a29206265747765656e20746865206c697374206f662061747472 6962>144 621.6 R 1.704<7574657320616e6420746865206c697374206f66>-.2 F .645<6465636c617265642076>144 633.6 R 3.145<61726961626c65732e20546865> -.25 F .645<666561747572657320737570706f72746564206d61792062652061646571 7561746520666f72206e6f>3.145 F .644 <766963652070726f6772616d6d6572732c2062>-.15 F .644 <757420617265206e6f74>-.2 F 1.097<79657420737566>144 645.6 R 1.097 <8c6369656e7420666f722070726f66657373696f6e616c2d7175616c6974792046>-.25 F 1.097<6f727472616e2039302070726f6772616d732e>-.15 F 3.597<4968>6.097 G 1.097<6f706520746f2061646420737570706f727420666f72206d6f7265206665612d> -3.597 F .846<747572657320696e206675747572652072656c65617365732e>144 657.6 R 3.346<4969>5.846 G -.4<6e76>-3.346 G .846<6974652076>.4 F .846 <6f6c756e746565727320746f2061737369737420696e2074686973207461736b2e>-.2 F .845<536565207468652054>5.845 F .845 <6f446f208c6c6520696e2074686520736f75726365>-.8 F .145 <636f64652064697374726962>144 669.6 R .145 <7574696f6e20666f722064657461696c732e>-.2 F .145<54686520617474726962> 5.145 F .145<757465732063757272656e746c792061636365707465642c2062657369 64657320616c6c2074686520757375616c20646174612074797065732c20617265>-.2 F F1<44494d454e53494f4e>144 681.6 Q F0<2c>A F1<45585445524e414c>2.84 E F0 <2c>A F1<494e5452494e534943>2.84 E F0<2c>A F1<504152414d45544552>2.84 E F0 2.84<2c61>C<6e64>-2.84 E F1<53415645>2.84 E F0 5.34<2e54>C .34 <6865206e65>-5.34 F 2.84<7766>-.25 G .34 <6f726d206f66206465636c61726174696f6e>-2.84 F .475<616c736f20616c6c6f> 144 693.6 R .475<77732061737369676e6d656e74206f662076>-.25 F .475 <616c75657320746f207468652076>-.25 F .475 <61726961626c6573206465636c617265642e>-.25 F .475 <41742070726573656e742c20746865>5.475 F F1<284c454e3d>2.975 E F2 <76616c7565>A F1<29>A F0 .475<666f726d206f66>2.975 F 2.657<737065636966 79696e6720636861726163746572206c656e6774687320697320616c736f206163636570 7465642e>144 705.6 R 2.657 <4b696e642073706563698c636174696f6e732c207573696e67>7.657 F F1 <284b494e443d>5.157 E F2<76616c7565>A F1<29>A F0<617265>5.157 E .407 <7061727365642062>144 717.6 R .407<757420617265206e6f742070726f63657373 65643a20616c6c206b696e647320617265207472656174656420617320646566>-.2 F .408<61756c74206b696e642e>-.1 F .408 <416c736f2c207468657265206973206c6974746c6520636865636b696e67206f66> 5.408 F<7468657365206465636c61726174696f6e73206265>144 729.6 Q <796f6e642062617369632073796e7461782e>-.15 E<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3531>191.795 E 0 Cg EP %%Page: 52 52 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E<4d616e>144 84 Q 5.324<7963>-.15 G 2.824<6f6d6d6f6e6c7920666f756e64206e6f6e7374616e6461726420696e7472696e 7369632066756e6374696f6e73206172652070726f>-5.324 F 5.323 <76696465642e20536565>-.15 F 2.823<7468652064697363757373696f6e206f66> 5.323 F/F1 10/Times-Bold@0 SF144 96 Q F0 <666f722061206c697374206f662066756e6374696f6e7320616e6420686f>2.5 E 2.5 <7774>-.25 G 2.5<6f63>-2.5 G <6f6e74726f6c207768696368206f6e657320617265207265636f676e697a65642e>-2.5 E<4172>144 112.8 Q .118<67756d656e7420636865636b696e67206973206e6f742074 6967687420666f722074686f7365206e6f6e7374616e6461726420696e7472696e736963 7320746861742074616b>-.18 F 2.619<6561>-.1 G .119 <7272617973206f72206d6978>-2.619 F .119<6564206172>-.15 F<67756d656e74> -.18 E<74797065732e>144 124.8 Q F1<66746e6368656b>144 141.6 Q F0 .195 <7065726d69747320746865>2.695 F/F2 10/Courier@0 SF<494e434c554445>2.695 E F0 .195<73746174656d656e742c2077686963682063617573657320696e636c757369 6f6e206f6620746865207465>2.695 F .194<7874206f6620746865206769>-.15 F -.15<7665>-.25 G 2.694<6e8c>.15 G 2.694<6c652e20546865>-2.694 F <73796e746178206973>144 153.6 Q F2<494e434c5544452027>194 165.6 Q/F3 10 /Times-Italic@0 SF<8c6c656e616d65>A F2<27>A F0 .162 <5468697320697320636f6d70617469626c6520776974682046>144 177.6 R .162 <6f727472616e2039302e>-.15 F .162<496620746865>5.162 F F1 2.662 E<63653d766d73ad696e636c756465>-.18 E F0 .163 <6f7074696f6e206973206769>2.662 F -.15<7665>-.25 G<6e2c>.15 E F1 <66746e6368656b>2.663 E F0<666f6c6c6f>2.663 E<7773>-.25 E .722 <564d5320636f6e>144 189.6 R -.15<7665>-.4 G .722<6e74696f6e732077697468 207265737065637420746f20746869732073746174656d656e743a20697420617373756d 6573206120646566>.15 F .721<61756c742065>-.1 F .721 <7874656e73696f6e206f66>-.15 F F3 1.666<2e66>3.221 G<6f72>-1.666 E F0 .721<6966206e6f208c6c652d>3.221 F .685<6e616d652065>144 201.6 R .685 <7874656e73696f6e206973206769>-.15 F -.15<7665>-.25 G .685 <6e2c20616e6420616c6c6f>.15 F .685<777320746865207175616c698c6572>-.25 F F2<2f5b4e4f5d4c495354>3.185 E F0<666f6c6c6f>3.186 E .686 <77696e6720746865208c6c656e616d652c20746f20636f6e74726f6c>-.25 F <746865206c697374696e67206f662074686520696e636c75646564208c6c652e>144 213.6 Q<5468657265206973206e6f20737570706f727420666f7220696e636c7564696e 6720564d53207465>5 E<7874206d6f64756c65732e>-.15 E .673<496e20646961676e 6f73746963206f75747075742072656c6174696e6720746f206974656d7320636f6e7461 696e656420696e20696e636c756465208c6c65732c20746865206c6f636174696f6e206f 6620746865206572726f722069732073706563692d>144 230.4 R 1.068<8c65642062 7920626f746820697473206c6f636174696f6e20696e2074686520696e636c756465208c 6c6520616e6420746865206c6f636174696f6e20696e2074686520706172656e74208c6c 6520776865726520746865208c6c652077>144 242.4 R<6173>-.1 E <696e636c756465642e>144 254.4 Q F1<66746e6368656b>144 271.2 Q F0 <61636365707473>3.237 E F2<504152414d45544552>3.237 E F0 .737 <73746174656d656e7473207768696368206c61636b20706172656e7468657365732e> 3.237 F .736<54686573652077696c6c2062652077>5.737 F .736 <61726e65642061626f7574206966>-.1 F<746865>144 283.2 Q F1 2.5 E<656e>-.18 E F0 <8d6167206973206769>2.5 E -.15<7665>-.25 G<6e2e>.15 E F1<66746e6368656b> 144 300 Q F0<61636365707473>3.245 E F2<504152414d45544552>3.245 E F0 .745<64658c6e6974696f6e73207468617420696e>3.245 F -.2<766f>-.4 G<6c76>.2 E 3.245<6569>-.15 G .746 <6e7472696e7369632066756e6374696f6e7320616e642065>-3.245 F .746 <78706f6e656e74696174696f6e2062792061>-.15 F<6e6f6e2d696e7465>144 312 Q .62<6765722065>-.15 F 3.12<78706f6e656e742e20426f7468>-.15 F .619<6f6620 7468657365206361736573206172652070726f68696269746564206279207468652046> 3.12 F .619 <6f727472616e203737205374616e646172642c20616e642077696c6c206265>-.15 F -.1<7761>144 324 S .702<726e65642061626f757420696620746865>.1 F F1 3.202 E F0 .702 <8d6167206973206769>3.202 F -.15<7665>-.25 G 3.202<6e2e204966>.15 F .702 <616e20696e7472696e7369632066756e6374696f6e2076>3.202 F .702 <616c7565206973206120636f6d2d>-.25 F .2<70696c652d74696d6520696e7465>144 336 R .2<67657220636f6e7374616e742c>-.15 F F1<66746e6368656b>2.7 E F0 .199<77696c6c2065>2.7 F -.25<7661>-.25 G .199<6c756174652069742e>.25 F .199<5468697320616c6c6f>5.199 F .199<77732062657474657220636865636b696e 672069662074686520706172616d65746572206973>-.25 F <7573656420696e206465636c6172696e672061727261792073697a65732e>144 348 Q -.15<466f>5 G<727472616e20393020616c6c6f>.15 E <777320696e7472696e7369632066756e6374696f6e7320696e>-.25 E F2 <504152414d45544552>2.5 E F0<64658c6e6974696f6e732e>2.5 E <54686520696e7472696e7369632066756e6374696f6e732074686174206172652065> 144 364.8 Q -.25<7661>-.25 G<6c7561746564206172653a>.25 E F2 21 <4142532049414253>243 381.6 R 21<44494d204944494d>15 F<4d4158>21 E 15 <4d415830204d494e204d494e30204d4f44>243 393.6 R<5349474e>27 E 9 <495349474e204c454e>243 405.6 R 9<494348415220494e444558>21 F F0 .052 <5468652066756e6374696f6e73206f6620696e7465>144 429.6 R .053 <676572206172>-.15 F .053<67756d656e7473206172652065>-.18 F -.25<7661> -.25 G .053<6c7561746564206f6e6c7920696620746865206172>.25 F .053 <67756d656e74732061726520696e7465>-.18 F .053 <67657220636f6e7374616e742065>-.15 F<78707265732d>-.15 E 3.356 <73696f6e732e20285468657365>144 441.6 R .856<6d617920696e>3.356 F -.2 <766f>-.4 G<6c76>.2 E 3.356<6569>-.15 G<6e7465>-3.356 E .855 <67657220636f6e7374616e74732c20706172616d65746572732c20616e642065>-.15 F -.25<7661>-.25 G .855 <6c756174656420696e7472696e7369632066756e6374696f6e732e29>.25 F<546865> 5.855 E<66756e6374696f6e>144 453.6 Q F2<4c454e>3.177 E F0 .677<69732065> 3.177 F -.25<7661>-.25 G .677<6c756174656420696620697473206172>.25 F .677<67756d656e7420697320616e2065>-.18 F .677<787072657373696f6e20696e> -.15 F -.2<766f>-.4 G .677 <6c76696e67206f6e6c792063686172616374657220636f6e7374616e747320616e64>.2 F -.25<7661>144 465.6 S .605<726961626c65732077686f7365206c656e67746820 6973206e6f742061646a75737461626c652e>.25 F .605 <5468652066756e6374696f6e73>5.605 F F2<4943484152>3.105 E F0<616e64> 3.105 E F2<494e444558>3.105 E F0 .605<6172652065>3.105 F -.25<7661>-.25 G .605<6c7561746564206f6e6c79206966>.25 F 1.745<746865206172>144 477.6 R 1.745<67756d656e7473206172652063686172616374657220636f6e7374616e74732e> -.18 F F1<66746e6368656b>6.745 E F0<6769>4.245 E -.15<7665>-.25 G 4.245 <736177>.15 G 1.746<61726e696e67206966206974206e65656473207468652076> -4.345 F 1.746<616c7565206f6620736f6d65>-.25 F <696e7472696e7369632066756e6374696f6e2074686174206973206e6f742065>144 489.6 Q -.25<7661>-.25 G<6c75617465642e>.25 E/F4 10.95/Times-Bold@0 SF <4e455720464541>72 506.4 Q<5455524553>-1.04 E F0 <486572652061726520746865206368616e6765732066726f6d2056>108 518.4 Q <657273696f6e20332e3220746f2056>-1.11 E<657273696f6e20332e333a>-1.11 E 7.5<312e2046726f6e742d656e64>108 535.2 R 1.412<686173206265656e207265> 3.912 F 1.412<7772697474656e20666f7220756e6c696d69746564206c6f6f6b616865 61642c20656c696d696e6174696e6720746865206c6f6e677374616e64696e672062> -.25 F 1.411<7567207468617420636175736564>-.2 F<696e636f727265637420696e 746572707265746174696f6e206f662073746174656d656e74732077686f736520616d62 6967756974792077>125.5 547.2 Q<6173206e6f74207265736f6c76>-.1 E <656420696e20746865208c727374206c696e652e>-.15 E 7.5<322e20546865>108 564 R F12.5 E F0<6f7074696f6e206973206e6f>2.5 E 2.5 <7761>-.25 G -.25<7661>-2.7 G <696c61626c6520696e20746865204d532d444f532076>.25 E<657273696f6e2e>-.15 E 7.5<332e204164646564>108 580.8 R .113<737570706f727420666f722046>2.613 F .113 <6f727472616e20393020706f696e7465722072656c617465642073796e7461783a>-.15 F F2<414c4c4f43415445>2.613 E F0<2c>A F2<4445414c4c4f43415445>2.614 E F0 2.614<2c61>C<6e64>-2.614 E F2<4e554c4c494659>2.614 E F0<73746174652d> 2.614 E .64<6d656e74733b20746865>125.5 592.8 R F2 <414c4c4f43415441424c45>3.14 E F0<2c>A F2<504f494e544552>3.139 E F0 <616e64>3.139 E F2<544152474554>3.139 E F0<617474726962>3.139 E .639<75 74657320696e2074797065206465636c61726174696f6e733b2074686520706f696e7465 722061737369672d>-.2 F 1.057<6d656e74206f70657261746f72>125.5 604.8 R F2 <3d3e>3.557 E F0 1.057<616e6420696e7472696e7369632066756e6374696f6e73> 3.557 F F2<414c4c4f4341544544>3.557 E F0<616e64>3.557 E F2 <4153534f434941544544>3.557 E F0 3.558<3b61>C 1.058 <6e642064656665727265642d7368617065206172726179>-3.558 F 2.711 <6465636c61726174696f6e732e204174>125.5 616.8 R .211 <70726573656e74207468657365206e65>2.711 F 2.711<7773>-.25 G .211 <796e746178206665617475726573206172652061636365707465642062>-2.711 F .21 <7574206e6f742070726f7065726c7920636865636b>-.2 F 2.71<65642e2054686973> -.1 F<66656174757265>2.71 E -.1<7761>125.5 628.8 S 2.5<7361>.1 G <6464656420627920526f62657274204c616e647269746f2e>-2.5 E 7.5 <342e20546865>108 645.6 R F13.513 E F0<616e64>3.513 E F1 1.013 3.513 F F0 1.013 <6f7074696f6e20636f6e74726f6c6c696e672077>3.513 F 1.014 <61726e696e67732061626f75742060>-.1 F 1.014 <604372617920706f696e7465727327>-.74 F 3.514<2768>-.74 G 1.014 <6173206265656e2072656e616d656420746f>-3.514 F F1 <63726179ad706f696e746572>125.5 657.6 Q F0 5.061<2e54>C<6865>-5.061 E F1 2.561 E F0 .061<6f7074696f6e206e6f>2.561 F 2.561<7769>-.25 G .061<6e737465616420636f6e74726f6c732077>-2.561 F .061 <61726e696e677320666f7220636f646520636f6e7461696e696e672046>-.1 F .06 <6f727472616e203930>-.15 F<706f696e746572>125.5 669.6 Q <2d72656c617465642073796e7461782e>-.2 E 7.5 <352e2052652d696d706c656d656e746564>108 686.4 R F13.524 E F0 1.024<70726f63657373696e6720736f206974206973206e6f>3.524 F 3.524 <776d>-.25 G 1.024<7563682066>-3.524 F 1.025 <6173746572206f6e20736f75726365208c6c657320636f6e7461696e696e67206d616e> -.1 F 3.525<7972>-.15 G<6f752d>-3.525 E<74696e65732e>125.5 698.4 Q 7.5 <362e204368616e676564>108 715.2 R .272<74686520617272616e67656d656e7420 6f66207468652074657374206469726563746f727920736f207468657265206973206e6f 206c6f6e67657220616e>2.773 F 2.772<796e>-.15 G .272 <65656420746f206d6f64696679207468652064697374726962>-2.772 F<7574696f6e> -.2 E<696e206f7264657220746f2072756e2074686520746573742073756974652028> 125.5 727.2 Q F3 -.15<6368>C<6563>.15 E -.834<6b2e20626174>-.2 F F0 2.5 <2975>C<6e646572204d532d444f532e>-2.5 E<4e6f>273.795 768 Q -.15<7665> -.15 G<6d6265722032303034>.15 E<3532>191.795 E 0 Cg EP %%Page: 53 53 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E 7.5<372e20466978>108 84 R .122 <65642062>-.15 F .122<756720696e2072656164696e67206e756d6572696320736574 74696e6773206f6e20636f6d6d616e64206c696e65207768656e2073657474696e67206e 616d65206162627265>-.2 F .122 <76696174656420746f203320636861726163746572732e>-.25 F 7.5<382e20466978> 108 100.8 R .745<65642062>-.15 F .745 <75672063617573696e672073707572696f75732077>-.2 F .745 <61726e696e6720666f722061>-.1 F/F1 10/Courier@0 SF<474f544f>3.244 E F0 .744<726566657272696e6720746f2061206c6162656c6564>3.244 F F1<454e44> 3.244 E F0 .744<73746174656d656e74207768656e207468652073746174652d>3.244 F<6d656e74206265666f7265>125.5 112.8 Q F1<454e44>2.5 E F0 -.1<7761>2.5 G 2.5<7361>.1 G F1<464f524d4154>A F0<2e>A 7.5<392e204e65>108 129.6 R 3.27 <778d>-.25 G<6167>-3.27 E/F2 10/Times-Bold@0 SF 3.27 E F0 .77<746f20636f6e74726f6c2077> 3.27 F .77<61726e696e67732061626f75742065>-.1 F .77 <7874656e73696f6e7320746f207468652046>-.15 F .77 <6f727472616e20373720636861726163746572206461746120747970652e>-.15 F <4163636f6d70616e>125.5 141.6 Q .004<79696e672074686973206e65>-.15 F 2.504<778d>-.25 G .004<616720697320737570706f727420666f722046>-2.504 F .004<6f727472616e2039302072756c657320666f72206368617261637465722076>-.15 F .004<61726961626c65206465636c61726174696f6e7320746861742065>-.25 F -.25<7661>-.25 G<6c2d>.25 E<7561746520746f207a65726f206f72206e65>125.5 153.6 Q -.05<6761>-.15 G<7469>.05 E .3 -.15<7665206c>-.25 H <656e6774682c20616c6c6f>.15 E <77696e67207468656d20616e64207472656174696e67206e65>-.25 E -.05<6761> -.15 G<7469>.05 E .3 -.15<7665206c>-.25 H<656e6774682076>.15 E <616c756573206173207a65726f2e>-.25 E 2.5<31302e20466978>108 170.4 R <6564206d696e6f722062>-.15 E<756720696e207072696e74696e67206f6620636f6d 6d656e747320616e6420626c616e6b206c696e657320666f6c6c6f>-.2 E <77696e67206c617374>-.25 E F1<454e44>2.5 E F0<73746174656d656e7420696e> 2.5 E F22.5 E F0<6d6f64652e>2.5 E/F3 10.95/Times-Bold@0 SF -.11<4255>72 187.2 S<4753>.11 E F2<66746e6368656b>108 199.2 Q F0 .402 <7374696c6c20686173206d75636820726f6f6d20666f7220696d70726f>2.902 F -.15 <7665>-.15 G 2.902<6d656e742e2059>.15 F .403 <6f757220666565646261636b2069732061707072656369617465642e>-1.1 F 2.003 -.8<57652077>5.403 H .403<616e7420746f206b6e6f>.7 F 2.903<7761>-.25 G .403<626f757420616e>-2.903 F<79>-.15 E -.2<6275>108 211.2 S 1.163 <677320796f75206e6f746963652e>.2 F 1.163<4275677320696e636c756465206e6f 74206f6e6c7920636173657320696e207768696368>6.163 F F2<66746e6368656b> 3.663 E F0 1.163<69737375657320616e206572726f72206d65737361676520776865 7265206e6f206572726f72>3.663 F -.15<6578>108 223.2 S 1.214 <697374732c2062>.15 F 1.214<757420616c736f206966>-.2 F F2 <66746e6368656b>3.714 E F0 -.1<6661>3.714 G 1.214 <696c7320746f20697373756520612077>.1 F 1.214 <61726e696e67207768656e206974206f7567687420746f2e>-.1 F 1.214 <4e6f74652c20686f>6.214 F<7765>-.25 E -.15<7665>-.25 G 2.015 -.4 <722c2074>.15 H<686174>.4 E F2<66746e6368656b>3.715 E F0 1.215 <6973206e6f74>3.715 F .483<696e74656e64656420746f20636174636820616c6c20 73796e746178206572726f727320287365652073656374696f6e206f6e204c696d697461 74696f6e73292e>108 235.2 R .483 <416c736f2c206974206973206e6f7420636f6e7369646572656420612062>5.483 F .483<756720666f7220612076>-.2 F<6172692d>-.25 E .454<61626c6520746f2062 65207265706f727465642061732075736564206265666f7265207365742c206966207468 6520726561736f6e206973207468617420746865207573616765206f66207468652076> 108 247.2 R .455 <61726961626c65206f6363757273207072696f7220696e20746865207465>-.25 F <7874>-.15 E .047<746f207768657265207468652076>108 259.2 R .046 <61726961626c65206973207365742e>-.25 F -.15<466f>5.046 G 2.546<7269>.15 G .046<6e7374616e63652c207468697320636f756c64206f63637572207768656e2061> -2.546 F F1<474f544f>2.546 E F0 .046<6361757365732065>2.546 F -.15<7865> -.15 G .046<637574696f6e20746f206c6f6f70206261636b77>.15 F<617264>-.1 E .226<746f20736f6d6520707265>108 271.2 R .226 <76696f75736c7920736b69707065642073746174656d656e74732e>-.25 F F2 <66746e6368656b>5.226 E F0 .226 <646f6573206e6f7420616e616c797a65207468652070726f6772616d208d6f>2.726 F 1.526 -.65<772c2062>-.25 H .226 <757420617373756d657320746861742073746174652d>.45 F <6d656e7473206f6363757272696e67206561726c69657220696e20746865207465>108 283.2 Q<7874206172652065>-.15 E -.15<7865>-.15 G <6375746564206265666f72652074686520666f6c6c6f>.15 E <77696e67206f6e65732e>-.25 E 2.56 -.8<57652065>108 300 T .96 <7370656369616c6c792077>.8 F .96<616e7420746f206b6e6f>-.1 F 3.46<7769> -.25 G<66>-3.46 E F2<66746e6368656b>3.46 E F0 .96 <6372617368657320666f7220616e>3.46 F 3.459<7972>-.15 G 3.459 <6561736f6e2e204974>-3.459 F .959 <6973206e6f7420737570706f73656420746f2063726173682c2065>3.459 F -.15 <7665>-.25 G 3.459<6e6f>.15 G 3.459<6e70>-3.459 G<726f2d>-3.459 E .61 <6772616d7320776974682073796e746178206572726f72732e>108 312 R .611<5375 6767657374696f6e73206172652077656c636f6d656420666f72206164646974696f6e61 6c20666561747572657320776869636820796f752077>5.61 F .611 <6f756c64208c6e642075736566756c2e>-.1 F -.7<5465>108 324 S .668 <6c6c20757320696620616e>.7 F 3.168<796f>-.15 G<66>-3.168 E F2 <66746e6368656b>3.168 E F0 1.768 -.55<2773206d>D .668 <657373616765732061726520696e636f6d70726568656e7369626c652e>.55 F .668< 436f6d6d656e7473206f6e2074686520726561646162696c69747920616e642061636375 726163>5.668 F 3.168<796f>-.15 G<66>-3.168 E <7468697320646f63756d656e742061726520616c736f2077656c636f6d652e>108 336 Q -1.1<596f>108 352.8 S 3.674<756d>1.1 G 1.174<617920616c736f2073756767 65737420737570706f727420666f72206164646974696f6e616c2065>-3.674 F 1.174 <7874656e73696f6e7320746f207468652046>-.15 F 1.174 <6f727472616e206c616e67756167652e>-.15 F 1.174 <54686573652077696c6c20626520696e636c75646564>6.174 F <6f6e6c792069662069742069732066656c742074686174207468652065>108 364.8 Q <7874656e73696f6e732061726520737566>-.15 E<8c6369656e746c7920776964656c 7920616363657074656420627920636f6d70696c6572732e>-.25 E .059 <496620796f75208c6e6420612062>108 381.6 R .058<756720696e>-.2 F F2 <66746e6368656b>2.558 E F0 2.558<2c8c>C .058 <72737420636f6e73756c7420746865206c697374206f66206b6e6f>-2.558 F .058 <776e2062>-.25 F .058<7567732062656c6f>-.2 F 2.558<7774>-.25 G 2.558 <6f73>-2.558 G .058 <65652069662069742068617320616c7265616479206265656e207265706f727465642e> -2.558 F .79 <416c736f20636865636b207468652073656374696f6e20656e7469746c65642060>108 393.6 R .79<604c696d69746174696f6e7320616e6420457874656e73696f6e7327> -.74 F 3.29<2761>-.74 G<626f>-3.29 E 1.09 -.15<76652066>-.15 H .79<6f72 207265737472696374696f6e73207468617420636f756c642062652063617573696e67> .15 F<7468652070726f626c656d2e>108 405.6 Q<496620796f7520646f206e6f7420 8c6e64207468652070726f626c656d20646f63756d656e74656420696e20656974686572 20706c6163652c207468656e2073656e642061207265706f727420696e636c7564696e67> 5 E 7.5<312e20546865>108 422.4 R<6f7065726174696e672073797374656d20616e 64204350552074797065206f6e207768696368>2.5 E F2<66746e6368656b>2.5 E F0 <69732072756e6e696e672e>2.5 E 7.5<322e20546865>108 439.2 R -.15<7665> 2.705 G .205<7273696f6e206f66>.15 F F2<66746e6368656b>2.705 E F0 .205 <616e642076>2.705 F .205<616c756573206f6620616e>-.25 F 2.704<7965>-.15 G -.4<6e76>-2.704 G .204<69726f6e6d656e74206f7074696f6e73206f722073657474 696e67732064658c6e656420696e2073746172747570208c6c652e>.4 F<284361702d> 5.204 E<747572696e6720746865206f7574707574206f66>125.5 451.2 Q F1 <66746e6368656b202d68656c70>2.5 E F0 <69732075736566756c20666f7220746869732e29>2.5 E 7.5<332e2041>108 468 R <6272696566206465736372697074696f6e206f66207468652062>2.5 E<75672e>-.2 E 7.5<342e204966>108 484.8 R<706f737369626c652c206120736d616c6c2073616d70 6c652070726f6772616d2073686f>2.5 E<77696e67207468652062>-.25 E<75672e> -.2 E 1.111 <546865207265706f72742073686f756c642062652073656e7420746f204472>108 501.6 R 3.611<2e52>-.55 G 1.112<6f62657274204d6f6e696f74202873656520636f 6e7461637420696e666f726d6174696f6e20696e2073656374696f6e20656e7469746c65 642060>-3.611 F<60496e7374616c6c6174696f6e>-.74 E <616e6420537570706f727427>108 513.6 Q<27292e>-.74 E <48696768657374207072696f726974792077696c6c206265206769>108 530.4 Q -.15 <7665>-.25 G 2.5<6e74>.15 G 2.5<6f62>-2.5 G <756773207768696368206361757365>-2.7 E F2<66746e6368656b>2.5 E F0 <746f2063726173682e>2.5 E .617<4365727461696e2070726f626c656d7320746861 74206172697365207768656e20636865636b696e67206c6172>108 547.2 R .617 <67652070726f6772616d732063616e206265208c78>-.18 F .616<656420627920696e 6372656173696e67207468652073697a6573206f66207468652064617461>-.15 F .187 <617265617320696e>108 559.2 R F2<66746e6368656b>2.687 E F0 5.187<2e28>C .187<54686573652070726f626c656d73206172652067656e6572616c6c79207369676e 616c6564206279206572726f72206d65737361676573206265>-5.187 F .187 <67696e6e696e6720776974682060>-.15 F<604f6f707327>-.74 E 2.688 <272e2920546865>-.74 F .073<73696d706c6573742077>108 571.2 R .073<617920 746f20696e63726561736520746865207461626c652073697a6573206973206279207265 636f6d70696c696e67>-.1 F F2<66746e6368656b>2.573 E F0 .072 <7769746820746865>2.572 F F1<4c415247455f4d414348494e45>2.572 E F0 .072 <6d6163726f206e616d65>2.572 F 2.5<64658c6e65642e20436f6e73756c74>108 583.2 R<746865>2.5 E F1<6d616b6566696c65>2.5 E F0<616e64>2.5 E F1 <524541444d45>2.5 E F0 <8c6c6520666f7220746865206d6574686f64206f6620646f696e6720746869732e>2.5 E<54686520666f6c6c6f>108 600 Q <77696e672069732061206c697374206f66206b6e6f>-.25 E<776e2062>-.25 E <7567732e>-.2 E 7.5<312e204275673a>108 616.8 R 1.362<557365642d6265666f 72652d736574206d657373616765206973207375707072657373656420666f7220616e> 3.861 F 3.862<7976>-.15 G 1.362<61726961626c6520776869636820697320757365 6420617320746865206c6f6f7020696e6465>-4.112 F 3.862<7869>-.15 G 3.862 <6e61>-3.862 G<6e>-3.862 E .861<696d706c6965642d646f206c6f6f702c2065> 125.5 628.8 R -.15<7665>-.25 G 3.361<6e69>.15 G 3.361<6669>-3.361 G 3.361<7477>-3.361 G .861<617320696e2066>-3.461 F .86<616374207573656420 6265666f7265206265696e672073657420696e20736f6d65206561726c69657220737461 74656d656e742e>-.1 F -.15<466f>5.86 G 3.36<7265>.15 G<78616d706c652c> -3.51 E<636f6e7369646572>125.5 640.8 Q F1<4a>2.5 E F0 <696e207468652073746174656d656e74>2.5 E F1 <575249544528352c2a29202841284a292c204a3d312c313029>161.5 657.6 Q F0 <48657265>125.5 674.4 Q F2<66746e6368656b>4.131 E F0 1.632 <7061727365732074686520492f4f2065>4.131 F<787072657373696f6e2c>-.15 E F1 <41284a29>4.132 E F0 4.132<2c77>C<68657265>-4.132 E F1<4a>4.132 E F0 1.632<697320757365642c206265666f7265206974207061727365732074686520696d70 6c696564206c6f6f70>4.132 F<7768657265>125.5 686.4 Q F1<4a>2.795 E F0 .295<6973207365742e>2.795 F .295<4e6f726d616c6c7920746869732077>5.295 F .295<6f756c64206361757365>-.1 F F2<66746e6368656b>2.795 E F0 .295<746f20 7265706f727420612073707572696f757320757365642d6265666f72652d7365742077> 2.795 F .295<61726e696e6720666f72>-.1 F F1<4a>2.795 E F0<2e>A .432<5369 6e63652074686973207265706f727420697320757375616c6c7920696e206572726f7220 616e64206f63637572732066>125.5 698.4 R .432 <6169726c7920636f6d6d6f6e6c79>-.1 F<2c>-.65 E F2<66746e6368656b>2.932 E F0 .432<73757070726573736573207468652077>2.932 F .432 <61726e696e6720666f72>-.1 F F1<4a>2.932 E F0<616c746f676574686572>125.5 710.4 Q<2e>-.55 E<50726f676e6f7369733a2041206675747572652076>125.5 727.2 Q<657273696f6e206f66>-.15 E F2<66746e6368656b>5 E F0<697320706c616e6e65 642077686963682077696c6c2068616e646c6520696d706c6965642d646f206c6f6f7073 20636f72726563746c79>2.5 E<2e>-.65 E<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3533>191.795 E 0 Cg EP %%Page: 54 54 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E 7.5<322e204275673a>108 84 R -1.11<5661>2.785 G .285<726961626c6573207573656420286e6f74206173206172> 1.11 F .284<67756d656e74732920696e2073746174656d656e742d66756e6374696f6e 2073756270726f6772616d7320646f206e6f74206861>-.18 F .584 -.15<76652074> -.2 H .284<68656972207573616765207374612d>.15 F<747573207570646174656420 7768656e207468652073746174656d656e742066756e6374696f6e20697320696e>125.5 96 Q -.2<766f>-.4 G -.1<6b65>.2 G<642e>.1 E<50726f676e6f7369733a2054> 125.5 112.8 Q 2.5<6f62>-.8 G 2.5<658c>-2.5 G -.15<7865>-2.5 G 2.5<6469> .15 G 2.5<6e6166>-2.5 G<75747572652076>-2.5 E<657273696f6e206f66>-.15 E /F1 10/Times-Bold@0 SF<66746e6368656b>2.5 E F0<2e>A 7.5<332e204275673a> 108 129.6 R -1.35<5641>3.329 G 3.329<5876>1.35 G .829 <657273696f6e20646f6573206e6f742065>-3.479 F .829<7870616e642077696c6463 6172647320696e208c6c656e616d6573206f6e2074686520636f6d6d616e64206c696e65 20696620746865>-.15 F 3.33<7961>-.15 G .83<726520666f6c6c6f>-3.33 F <776564>-.25 E 1.337 <776974686f757420737061636520627920616e206f7074696f6e2c20652e672e>125.5 141.6 R/F2 10/Courier@0 SF 1.336 <66746e6368656b202a2e662f63616c6c74726565>6.337 F F0 -.1<776f>3.836 G 1.336<756c64206e6f742065>.1 F 1.336<7870616e6420746865>-.15 F F2<2a2e66> 3.836 E F0 6.336<2e54>C 1.336<686973206973>-6.336 F 1.085<62656361757365 20564d532d7374796c65206f7074696f6e7320776974686f757420696e74657276>125.5 153.6 R 1.086<656e696e6720737061636520617265206e6f7420737570706f72746564 2062792074686520474e55>-.15 F F2<7368656c6c5f6d756e67>3.586 E F0 <726f7574696e652074686174206973207573656420746f2065>125.5 165.6 Q <7870616e642077696c6463617264732e>-.15 E <50726f676e6f7369733a20756e6c696b>125.5 182.4 Q <656c7920746f206265208c78>-.1 E<65642e>-.15 E 7.5<342e204275673a>108 199.2 R .139<636865636b696e6720666f72206e6f6e7374616e6461726420666f726d 617420656469742064657363726970746f727320697320646f6e65206f6e6c7920696e> 2.639 F F2<464f524d4154>2.638 E F0 .138 <73746174656d656e74732c206e6f7420696e2063686172>2.638 F<2d>-.2 E <616374657220737472696e6773207573656420617320666f726d6174732e>125.5 211.2 Q<50726f676e6f7369733a206d6179206265208c78>125.5 228 Q <656420736f6d65646179>-.15 E<2e>-.65 E/F3 10.95/Times-Bold@0 SF -.602 <4143>72 256.8 S<4b4e4f>.602 E<574c454447454d454e5453>-.548 E F1 <66746e6368656b>108 268.8 Q F0 -.1<7761>3.216 G 3.216<7364>.1 G .716 <657369676e6564206279204472>-3.216 F 3.216<2e52>-.55 G .716 <6f62657274204d6f6e696f742c2070726f666573736f722061742046>-3.216 F .717 <6f726468616d20556e69>-.15 F -.15<7665>-.25 G<7273697479>.15 E 5.717 <2e44>-.65 G .717<7572696e67207468652061636164656d69632079656172>-5.717 F .771<6f6620313938382d313938392c204d69636861656c204d7965727320616e6420 4c7563696120537061676e756f6c6f206465>108 280.8 R -.15<7665>-.25 G .771 <6c6f706564207468652070726f6772616d20746f20706572666f726d207468652076> .15 F .77<61726961626c65207573616765>-.25 F 3.284 <636865636b732e20447572696e67>108 292.8 R .784<74686520666f6c6c6f>3.284 F .784<77696e6720796561722069742077>-.25 F .784<6173206175676d656e746564 206279204c6f69732042696762696520746f20636865636b2073756270726f6772616d20 6172>-.1 F .784<67756d656e747320616e64>-.18 F 1.089 <434f4d4d4f4e20626c6f636b206465636c61726174696f6e732e>108 304.8 R 1.089 <427269616e20446f>6.089 F 1.088<776e696e67206173736973746564207769746820 74686520696d706c656d656e746174696f6e206f6620746865>-.25 F F2 <494e434c554445>3.588 E F0<73746174652d>3.588 E 2.698 <6d656e742e204a6f686e>108 316.8 R .199<5175696e6e2077726f74652074686520 636f6d6d6f6e20626c6f636b20757361676520636865636b732e>2.698 F .199<486562 6120456c73617965642077726f746520746865206c6162656c207461626c65207072696e 746f757420616e64>5.199 F .873<6c6162656c20757361676520636865636b732e>108 328.8 R .873<4e656c736f6e20482e2046>5.873 F 3.373<2e42>-.8 G .873 <65656265206f662074686520556e69>-3.373 F -.15<7665>-.25 G .872 <7273697479206f662055746168206164646564206d6f7374206f6620746865206e65> .15 F 3.372<7763>-.25 G .872<6f646520746f20696d706c652d>-3.372 F .498 <6d656e7420746865>108 340.8 R F12.998 E<6564636c73>-.1 E F0 .498<6665617475726520616e642077726f7465207468652064636c32696e6320736372 6970742e>2.998 F<546865>5.498 E F12.998 E F0 .498 <666561747572652077>2.998 F .498<617320636f6e74726962>-.1 F .498 <75746564206279204d61726b>-.2 F<4d6356>108 352.8 Q .737 <65696768206f66204672616d61746f6d6520414e50>-1.11 F 3.236<2c49>-1.11 G 3.236<6e632e20546865>-3.236 F F13.236 E<65666572>-.18 E<656e6365> -.18 E F0 .736<666561747572652077>3.236 F .736<617320636f6e74726962>-.1 F .736<75746564206279204765726f6d6520456d6d616e75656c2c2045636f6c65>-.2 F .787<646573206d696e65732c20552e204e616e63>108 364.8 R 3.287<7928>-.15 G .787<736c696768746c79206d6f64698c6564292e>-3.287 F<546865>5.787 E F1 3.287 E F0 .788<6f7074696f6e2077>3.287 F .788 <617320636f6e74726962>-.1 F .788<75746564206279204472>-.2 F 3.288<2e50> -.55 G .788<68696c697020527562696e69206f66204372616e2d>-3.288 F .797 <8c656c6420556e69>108 376.8 R -.15<7665>-.25 G<7273697479>.15 E 3.297 <2c55>-.65 G 3.297<4b2e20546865>-3.297 F .797 <737570706f727420666f72204372617920706f696e7465722073796e7461782077> 3.297 F .797<61732070726f>-.1 F .796 <7669646564206279204a6f686e2044616e6e656e686f66>-.15 F .796 <666572206f6620556e69746564>-.25 F -.7<5465>108 388.8 S 1.397 <63686e6f6c6f676965732052657365617263682043656e746572>.7 F 6.397<2e4a> -.55 G 1.397 <6f686e20432e20426f6c6c696e676572206f6620496e6469616e6120556e69>-6.397 F -.15<7665>-.25 G 1.397<727369747920616464656420746865207061727365722073 796e74617820666f7220746865>.15 F F2 .014<53454c4543542043415345>108 400.8 R F0 2.513<636f6e7374727563742e20526f62657274>2.513 F .013<4c616e 647269746f20616464656420746865207061727365722073796e74617820666f72204639 3020706f696e746572>2.513 F .013<2d72656c617465642066656174757265732e>-.2 F<416464692d>5.013 E .854<74696f6e616c2066656174757265732077696c6c206265 2061646465642061732074696d65207065726d6974732e>108 412.8 R .854 <4173206f662056>5.854 F .855 <657273696f6e20322e352c20746865206e616d652077>-1.11 F .855 <6173206368616e6765642066726f6d>-.1 F F1 -.25<666f>3.355 G -.18<7263>.25 G<68656b>.18 E F0<746f>3.355 E F1<66746e6368656b>108 424.8 Q F0 3.335 <2c74>C 3.335<6f61>-3.335 G -.2<766f>-3.535 G .835<696420636f6e66757369 6f6e207769746820612073696d696c61722070726f6772616d206e616d6564>.2 F F1 -.25<666f>3.335 G -.18<7263>.25 G<6865636b>.18 E F0 3.335<2c64>C -2.15 -.25<65762065>-3.335 H .835 <6c6f706564206561726c696572206174204c656964656e20556e69>.25 F -.15<7665> -.25 G -.2<722d>.15 G<73697479>108 436.8 Q<2e>-.65 E 2.408 -.8<57652077> 108 453.6 T .808<6f756c64206c696b>.7 F 3.309<6574>-.1 G 3.309<6f74> -3.309 G .809<68616e6b204a6f686e20416d6f72206f662074686520556e69>-3.309 F -.15<7665>-.25 G .809 <7273697479206f66204272697469736820436f6c756d6269612c205265>.15 F 3.309 <6743>-.15 G .809<6c656d656e73206f6620746865204169722046>-3.309 F <6f726365>-.15 E .464<5068696c6c697073204c616220696e20416c62>108 465.6 R .463 <75717565727175652c204d61726b757320447261786c6572206f662074686520556e69> -.2 F -.15<7665>-.25 G .463<7273697479206f6620537475747467>.15 F .463 <6172742c2056>-.05 F .463 <6963746f722045696a6b686f7574206f662074686520556e69>-.6 F -.15<7665>-.25 G -.2<722d>.15 G 2.481<73697479206f662054>108 477.6 R 2.481 <656e6e6573736565206174204b6e6f7876696c6c652c20477265>-.7 F 4.981<6746> -.15 G 2.481<6c696e74206f662050757264756520556e69>-4.981 F -.15<7665> -.25 G<7273697479>.15 E 4.981<2c44>-.65 G 2.482<616e69656c2050>-4.981 F 4.982<2e47>-1.11 G 2.482<69657379206f66204e>-4.982 F 2.482 <415341204c616e676c65>-.35 F<79>-.15 E .209 <52657365617263682043656e746572>108 489.6 R 2.709<2c46>-.4 G .209 <7269747a204b>-2.709 F .209<65696e657274206f6620496f>-.25 F .409 -.1 <77612053>-.25 H .209<7461746520556e69>.1 F -.15<7665>-.25 G<7273697479> .15 E 2.709<2c4a>-.65 G .209 <75646168204d696c6772616d206f662074686520556e69>-2.709 F -.15<7665>-.25 G .208<7273697479206f66204d6172796c616e6420436f6c2d>.15 F<6c65>108 501.6 Q .18<67652050>-.15 F .18 <61726b2c2048756768204e6963686f6c6173206f662074686520506974747362>-.15 F <7572>-.2 E .181<6768205375706572636f6d707574696e672043656e746572>-.18 F 2.681<2c44>-.4 G .181<616e205365>-2.681 F -.15<7665>-.25 G .181 <72616e6365206f662059>.15 F .181<616c6520556e69>-1 F -.15<7665>-.25 G <7273697479>.15 E 2.681<2c50>-.65 G<68696c>-2.681 E .037 <537465726e65206f66204c61>108 513.6 R .037<7772656e6365204c69>-.15 F -.15<7665>-.25 G .037 <726d6f7265204e6174696f6e616c204c61626f7261746f7279>.15 F 2.537<2c4c> -.65 G .037<617272792057>-2.537 F .037 <656973736d616e206f662074686520556e69>-.8 F -.15<7665>-.25 G .037 <7273697479206f662057>.15 F .036<617368696e67746f6e2c2057>-.8 F<6172>-.8 E<2d>-.2 E .978<72656e204a2e2057>108 525.6 R .979 <6973636f6d6265206f66204e>-.4 F .979 <41534120476f64646172642c20616e64204e656c736f6e20482e2046>-.35 F 3.479 <2e42>-.8 G .979<65656265206f662074686520556e69>-3.479 F -.15<7665>-.25 G .979<7273697479206f6620557461682c20666f7220706f696e74696e67206f7574> .15 F -.2<6275>108 537.6 S .266 <677320616e642073756767657374696e6720736f6d6520696d70726f>.2 F -.15 <7665>-.15 G 2.766<6d656e74732e2053746566>.15 F .266 <616e20412e20446575747363686572>-.1 F 2.766<2c47>-.4 G .266 <756e6e617220447575732c20436c69>-2.766 F .565 -.15<7665205061>-.25 H .265<6765206f662074686520556e69>.15 F -.15<7665>-.25 G<7273697479>.15 E .062<6f66204c6569636573746572>108 549.6 R 2.562<2c53>-.4 G .062 <74657068616e2057>-2.562 F .062<658c6e67206f662048656964656c626572>-.8 F 2.562<6755>-.18 G<6e69>-2.562 E -.15<7665>-.25 G<7273697479>.15 E 2.562 <2c61>-.65 G .062<6e6420426f622057>-2.562 F .062 <656c6c73206f66204f78666f726420556e69>-.8 F -.15<7665>-.25 G .063 <727369747920776572652065>.15 F<787472656d656c79>-.15 E .26 <68656c7066756c20617320616c70686120746573746572732e>108 561.6 R 1.86 -.8 <57652061>5.26 H .26<6c736f207468616e6b204a61636b20446f6e67>.8 F .26 <6172726120666f722070757474696e67>-.05 F F1<66746e6368656b>2.76 E F0 .26 <696e746f20746865>2.76 F F2<6e65746c6962>2.76 E F0 .26 <6c696272617279206f66207075622d>2.76 F<6c69636c792061>108 573.6 Q -.25 <7661>-.2 G<696c61626c6520736f667477>.25 E<6172652e>-.1 E F3<494e5354>72 590.4 Q<414c4c41>-.986 E<54494f4e20414e4420535550504f52>-1.04 E<54>-.438 E F0<546865>108 602.4 Q F1<66746e6368656b>3.21 E F0 .71 <70726f6772616d206973206672656520736f667477>3.21 F 3.21<6172652e204974> -.1 F .71<63616e206265206f627461696e656420627920616e6f6e>3.21 F .71 <796d6f7573206674702066726f6d206d616e>-.15 F 3.21<7973>-.15 G<6f667477> -3.21 E .71<6172652073657276>-.1 F<6572732c>-.15 E .613 <696e636c7564696e67206674703a2f2f6e65746c6962>108 614.4 R<2e6f72>-.4 E .613<672f666f727472616e202e>-.18 F .612 <4e6f74652074686174206f6e204e65746c6962207468652064697374726962>5.612 F .612<7574696f6e206973206e616d6564>-.2 F/F4 10/Times-Italic@0 SF <66746e63>3.112 E -.834<68656b202e746172202e677a>-.15 F F0 .612 <77686572656173206f6e>3.112 F .129<6d6f7374206f746865722073657276>108 626.4 R .13 <65727320746865208c6c65206e616d6520696e636c75646573207468652076>-.15 F .13<657273696f6e206e756d626572>-.15 F 2.63<2c65>-.4 G<2e672e>-2.63 E F4 <66746e63>2.63 E -.834<68656b2d332e332e30202e746172202e677a>-.15 F F0 5.13<2e49>C 2.63<6674>-5.13 G .13<6865208c6c652065>-2.63 F <7874656e73696f6e>-.15 E<6973>108 638.4 Q F4 1.666<2e5a>3.417 G F0 3.417 <2c75>-1.666 G .916<6e636f6d707265737320776974682074686520556e6978> -3.417 F F1<756e636f6d7072>3.416 E<657373>-.18 E F0 .916 <283129207574696c697479>B 5.916<2e49>-.65 G 3.416<6674>-5.916 G .916 <6865208c6c652065>-3.416 F .916<7874656e73696f6e206973>-.15 F F4 1.666 <2e67>3.416 G<7a>-1.666 E F0 3.416<2c75>C .916 <6e636f6d7072657373207769746820746865>-3.416 F<474e55>108 650.4 Q F1 <67756e7a6970>2.5 E F0<28314c292070726f6772616d2e>A<5468656e20757365>5 E F1<746172>2.5 E F0<28312920746f20756e7061636b20746865208c6c657320696e74 6f2061207375626469726563746f7279>A<2e>-.65 E .377<496e7374616c6c6174696f 6e2072657175697265732061204320636f6d70696c657220666f7220796f757220636f6d 7075746572>108 667.2 R 5.377<2e53>-.55 G .377<656520746865>-5.377 F F2 <494e5354414c4c>2.877 E F0 .378<8c6c652070726f>2.878 F .378 <76696465642077697468207468652064697374726962>-.15 F<7574696f6e>-.2 E 1.427<666f7220696e737472756374696f6e73206f6e20696e7374616c6c696e67>108 679.2 R F1<66746e6368656b>3.927 E F0 1.427 <6f6e20796f75722073797374656d2e>3.927 F<4578>6.426 E 1.426<656375746162 6c652062696e61727920666f7220706172746963756c61722073797374656d7320737563 68206173>-.15 F 4.027 <49424d205043206f72204d6163696e746f73682c2061732061>108 691.2 R -.25 <7661>-.2 G 4.028 <696c61626c652c2063616e206265206f627461696e656420627920616e6f6e>.25 F 4.028 <796d6f7573206674702066726f6d206674703a2f2f6674702e64736d2e666f72642d> -.15 F<68616d2e6564752f7075622f66746e6368656b202e>108 703.2 Q <417373697374616e636520696e20707265706172696e6720737563682065>5 E -.15 <7865>-.15 G <63757461626c652062696e61727920666f726d732069732077656c636f6d652e>.15 E <546865>108 720 Q F1<6e72>2.998 E<6f6666>-.18 E F0 -.15<7665>2.998 G .498<7273696f6e206f66207468697320646f63756d656e74206973206e616d6564>.15 F F4<66746e63>2.998 E -.834<68656b2e206d616e>-.15 F F0 5.498<2e4f>.24 G 2.998<6e55>-5.498 G .498<4e49582073797374656d732c2074686973208c6c652063 616e206265207573656420617320746865>-2.998 F<4e6f>273.795 768 Q -.15 <7665>-.15 G<6d6265722032303034>.15 E<3534>191.795 E 0 Cg EP %%Page: 55 55 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF<46544e4348454b20332e3328314c29>72 48 Q <46544e4348454b20332e3328314c29>310.24 E .182<6d616e20706167652c2062>108 84 R .183<75742061637475616c6c792069742069732061206d756c74692d707572706f 736520736f75726365208c6c65207768696368206973207573656420746f2070726f6475 636520746865206f7468657220666f726d73206f662074686520646f632d>-.2 F 5.728 <756d656e746174696f6e2e20546865>108 96 R 3.228<636c65616e65642d7570206d 616e207061676520646f63756d656e742c206372656174656420647572696e6720696e73 74616c6c6174696f6e206f66>5.728 F/F1 10/Times-Bold@0 SF<66746e6368656b> 5.727 E F0 5.727<2c69>C 5.727<736e>-5.727 G<616d6564>-5.727 E/F2 10 /Times-Italic@0 SF<66746e63>108 108 Q -.834<68656b2e2031>-.15 F F0 6.092 <2e54>C 1.092<68652064697374726962>-6.092 F 1.092 <7574696f6e20616c736f20696e636c75646573206120706c61696e2041534349492076> -.2 F 1.092<657273696f6e206e616d6564>-.15 F F2<66746e63>3.592 E -.834 <68656b2e20646f63>-.15 F F0 -6.091 3.592<2c612050>.31 H 1.093 <6f73745363726970742076>-3.592 F<657273696f6e>-.15 E<6e616d6564>108 120 Q F2<66746e63>2.5 E -.834<68656b2e207073>-.15 F F0 2.5<2c61>.27 G 2.5 <6e48>-2.5 G<544d4c2076>-2.5 E<657273696f6e20696e206469726563746f7279> -.15 E F2<68746d6c>2.5 E F0 2.5<2c61>.51 G <6e64206120564d532048454c502076>-2.5 E<657273696f6e206e616d6564>-.15 E F2<66746e63>2.5 E -.834<68656b2e20686c70>-.15 F F0<2e>.19 E .015 <496e666f726d6174696f6e2061626f757420746865206c61746573742076>108 136.8 R .015<657273696f6e20616e642074686520737461747573206f66207468652070726f 6a6563742063616e206265206f627461696e6564206279207669736974696e67>-.15 F F1<66746e6368656b>2.514 E F0 1.114 -.55<27732068>D<6f6d65>.55 E .463 <706167652c20687474703a2f2f777777>108 148.8 R .463 <2e64736d2e666f726468616d2e6564752f7e66746e6368656b202e>-.65 F -.15 <466f>5.463 G 2.963<7266>.15 G .463 <75727468657220696e666f726d6174696f6e20616e6420746f207265706f72742062> -2.963 F .464<7567732c20796f75206d617920636f6e74616374>-.2 F<4472>108 160.8 Q 3.446<2e52>-.55 G .946<6f62657274204d6f6e696f742c2077686f736520 636f6e7461637420696e666f726d6174696f6e2063616e20626520666f756e6420627920 612057>-3.446 F .946 <65622073656172636820666f7220686973206e616d6520616e642046>-.8 F <6f726468616d>-.15 E<556e69>108 172.8 Q -.15<7665>-.25 G<7273697479>.15 E 5.378<2e28>-.65 G .378 <452d6d61696c2061646472657373206973206e6f742070726f>-5.378 F .379<766964 65642068657265206265636175736520697420617474726163747320756e736f6c696369 74656420636f6d6d65726369616c20652d6d61696c2c2062>-.15 F .379 <7574206974206973>-.2 F<656173696c7920636f6e737472756374656420627920636f 6d62696e696e6720686973206c617374206e616d65207769746820746865206e616d6520 6f662074686520756e69>108 184.8 Q -.15<7665>-.25 G <727369747920616e64207468652065647520646f6d61696e2e29>.15 E/F3 10.95 /Times-Bold@0 SF<53454520414c534f>72 201.6 Q F1<64636c32696e63>108 213.6 Q F0<28314c292c>A F1<64746f71>4.702 E F0<28314c292c>A F1<64746f73>4.701 E F0<28314c292c>A F1<663737>4.701 E F0<2831292c>A F1<66643273>4.701 E F0 <28314c292c>A F1<66733264>4.701 E F0<28314c292c>A F1<66746e7070>4.701 E F0<28314c292c>A F1<7066>4.701 E<6f7274>-.25 E F0<28314c292c>A F1 <71746f64>4.701 E F0<28314c292c>A F1<736633>4.701 E F0<28314c292c>A F1 <73746f64>108 225.6 Q F0<28314c292e>A F1<78736633>5 E F0<28314c292c>A F1 <78766367>2.5 E F0<28314c292e>A<4e6f>273.795 768 Q -.15<7665>-.15 G <6d6265722032303034>.15 E<3535>191.795 E 0 Cg EP %%Trailer end %%EOF ftnchek-3.3.1/html/0000755000031000002260000000000007636147016014534 5ustar moniotstaff00000000000000ftnchek-3.3.1/html/index.html0000644000031000002260000001011410202535155016512 0ustar moniotstaff00000000000000 Manpage of FTNCHEK 3.3

FTNCHEK 3.3

Section: Misc. Reference Manual Pages (1L)
Updated: November 2004
Table of Contents  

NAME

ftnchek - Fortran 77 program checker  

SYNOPSIS

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


Next: DESCRIPTION ftnchek-3.3.1/html/lbAD.html0000644000031000002260000000276010202535155016215 0ustar moniotstaff00000000000000 DESCRIPTION Table of Contents

Previous: SYNOPSIS


 

DESCRIPTION

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

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


Next: INVOKING FTNCHEK ftnchek-3.3.1/html/lbAE.html0000644000031000002260000003434610202535155016223 0ustar moniotstaff00000000000000 INVOKING FTNCHEK Table of Contents

Previous: DESCRIPTION


 

INVOKING FTNCHEK

ftnchek is invoked through a command of the form:

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

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

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

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

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

-arguments=list
Control warnings about subprogram type and argument mismatches. Default = turn-on = all.
-array=list
Control warnings in checking array arguments of subprograms. Default = turn-on = all.
-brief
Use shorter format for some error messages. Default = no.
-calltree=list
Produce subprogram call hierarchy in one of 3 formats: text call-tree, who-calls-who and VCG. Default = none, turn-on = tree,prune,sort.

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

-check
Perform checking. Default = yes.
-columns=num
Set maximum line length to num columns. (Beyond this is ignored.) Turn-on = max = 132. Default = 72.
-common=list
Set degree of strictness in checking COMMON blocks. Default = turn-on = all.
-crossref=list
Print cross-reference list of subprogram calls, label usage, and/or COMMON block use. Default = none.
-declare
Print a list of all identifiers whose datatype is not explicitly declared. Default = no.
-division
Warn wherever division is done (except division by a constant). Default = no.
-errors=num
Set the maximum number of error messages per cascade. Default = turn-on = 3.
-extern
Warn if external subprograms which are invoked are never defined. Default = yes.
-f77=list
Control specific warnings about supported extensions to the Fortran 77 Standard. Default = none, turn-on = all.
-f90=list
Control specific warnings about supported extensions to the Fortran 77 Standard that were not adopted as part of the Fortran 90 Standard. Default = none, turn-on = all.
-f95=list
Control specific warnings about standard Fortran 77 features that were deleted from the Fortran 95 Standard. Default = none, turn-on = all.
-help
Print command summary. Default = no.
-identifier-chars=list
Define non-alphanumeric characters that may be used in identifiers. Default = turn-on = dollar sign and underscore.
-include=path
Define a directory to search for INCLUDE files before searching in the system-wide directory. Cumulative. Default = turn-on = none.
-intrinsic=list
Control treatment of nonstandard intrinsic functions. Default = all except vms for Unix version, all except unix for VMS version, all except unix and vms for other versions. Turn-on = all.
-library
Begin library mode: do not warn about subprograms in file that are defined but never used. Default = no.
-list
Print source listing of program. Default = no.
-makedcls=list
Prepare a file of declarations. The list specifies options for the format of this file. Default = none, turn-on = declarations.
-mkhtml=list
Create individual HTML document files from ftnchek analysis and code comments. Usually you will also want to specify -call=tree to create the root HTML file CallTree.html. Default = none, turn-on = documents.
-novice
Give output suitable for novice users. Default = yes.
-output=filename
Send output to the given file. Default and turn-on sends output to the screen. (Default filename extension is .lis).
-pointersize=num
Set the size of ``Cray pointer'' variables to num bytes. Min = 1, max = 16. Default = turn-on = 4
-portability=list
Warn about non-portable usages. Default = none, turn-on = all.
-pretty=list
Give warnings for possibly misleading appearance of source code. Default = turn-on = all.
-project=list
Create project file (see explanation below). Default = no.
-pure
Assume functions are pure, i.e. have no side effects. Default = yes.
-quiet
Produce less verbose output. Default = no.
-reference
Print table of subprograms referenced by each subprogram. Default = no.
-resources
Print amount of resources used in analyzing the program. Default = no.
-sixchar
List any variable names which clash at 6 characters length. Default = no.
-sort
Print list of subprograms sorted in prerequisite order. Default = no.
-source=list
Select source formatting options: fixed or free form, DEC Fortran tab-formatted lines, VMS-style INCLUDE statement, UNIX-style backslash escape sequences, and implicit typing of parameters. Default = none, turn-on = all.
-style=list
Produce extra-picky warnings about obsolescent or old-fashioned programming constructions. Default = none, turn-on = all.
-symtab
Print symbol table and label table for each subprogram. Default = no.
-truncation=list
Check for possible loss of accuracy by truncation. Default = turn-on = all.
-usage=list
Control warnings about unused or uninitialized variables, common blocks, etc. Default = turn-on = all.
-vcg
Produce VCG format of call graph.
-version
Print version number. Default = no.
-volatile
Assume COMMON blocks lose definition between activations. Default = no. (Obsolete. Use -common=volatile instead.)
-wordsize=num
Set the default word size for numeric quantities to num bytes. Default = turn-on = 4 bytes.
-wrap=num
Set output column at which to wrap long error messages and warnings to the next line. If set to 0, turn off wrapping. Default = turn-on = 79.

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

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

help
Print out all the option keywords controlled by the setting, with a brief explanation of their meanings. This keyword cannot be given in a list with other keywords.
all
Set all options. This turns on all options controlled by the setting.
none
Clear all options. This turns off all options controlled by the setting.

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

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

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

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

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


Next: OPTIONS ftnchek-3.3.1/html/lbAF.html0000644000031000002260000000714110202535155016215 0ustar moniotstaff00000000000000 OPTIONS Table of Contents

Previous: INVOKING FTNCHEK


 

OPTIONS

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

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


Next: CHANGING THE DEFAULTS


-arguments, -array, -brief, -calltree, -check, -columns, -common, -crossref, -declare, -division, -errors, -extern, -f77, -f90, -f95, -help, -identifier-chars, -include, -intrinsic, -library, -list, -makedcls, -mkhtml, -novice, -output, -pointersize, -portability, -pretty, -project, -pure, -quiet, -reference, -resources, -sixchar, -sort, -source, -style, -symtab, -truncation, -usage, -vcg, -version, -volatile, -wordsize, -wrap. ftnchek-3.3.1/html/lbAG.html0000644000031000002260000000573110202535155016221 0ustar moniotstaff00000000000000 CHANGING THE DEFAULTS Table of Contents

Previous: OPTIONS


 

CHANGING THE DEFAULTS

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

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

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

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

>2. UNIX, C shell: >% setenv FTNCHEK_LIST YES

>3. VAX/VMS: >$ DEFINE FTNCHEK_LIST YES

>4. MSDOS: >$ SET FTNCHEK_LIST=YES

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

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

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


Next: USING PROJECT FILES ftnchek-3.3.1/html/lbAH.html0000644000031000002260000002237510202535155016225 0ustar moniotstaff00000000000000 USING PROJECT FILES Table of Contents

Previous: CHANGING THE DEFAULTS


 

USING PROJECT FILES

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


find /util/lib -name '*.f' -exec ftnchek -project '{}' ';'

(Possibly other options would be provided to ftnchek as discussed above. Also, this step could be handled instead by a revised makefile rule that would provide the complete source file path instead of just the local name when invoking ftnchek.) Next, concatenate all of these project files manually.

find /util/lib -name '*.prj' -exec cat '{}' ';' > ourlib.prj

Then a program source file can be checked by using the command

ftnchek prog.f ... -lib ourlib.prj

and an error message related to any library routine will include the full path to the routine's source file.

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


Next: AN EXAMPLE ftnchek-3.3.1/html/lbAI.html0000644000031000002260000002055110202535155016220 0ustar moniotstaff00000000000000 AN EXAMPLE Table of Contents

Previous: USING PROJECT FILES


 

AN EXAMPLE

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


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

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

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

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


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

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

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


$ run average
70
90
85
<EOF>
$

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



$ ftnchek -list -symtab average

FTNCHEK Version 3.3 November 2004

File average.f:

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

Module COMPAV: func: real

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

* Variable not declared. Type has been implicitly defined.


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

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


Statement labels defined:

    Label   Line  StmtType
     <30>     15      exec

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

Module AVENUM: prog

External subprograms referenced:

    COMPAV: real*  

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

* Variable not declared. Type has been implicitly defined.


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

I/O Operations:

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

Statement labels defined:

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


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

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

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

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

1.
SUM and COUNT should have been converted to real before doing the division.
2.
SUM should have been initialized to 0 before entering the loop.
3.
AVG was never printed out after being calculated.
4.
NUMS should have been declared INTEGER instead of REAL.

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

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


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

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


Next: INTERPRETING THE OUTPUT ftnchek-3.3.1/html/lbAJ.html0000644000031000002260000006713710202535155016234 0ustar moniotstaff00000000000000 INTERPRETING THE OUTPUT Table of Contents

Previous: AN EXAMPLE


 

INTERPRETING THE OUTPUT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Common block NAME: data type mismatch at position n
The n-th variable in the COMMON block differs in data type in two different declarations of the COMMON block. By default (-common strictness level 3), ftnchek is very picky about COMMON blocks: the variables listed in them must match exactly by data type and array dimensions. That is, the legal pair of declarations in different modules:
     COMMON /COM1/ A,B
and
     COMMON /COM1/ A(2)

will cause ftnchek to give warnings at strictness level 3. These two declarations are legal in Fortran since they both declare two real variables. At strictness level 1 or 2, no warning would be given in this example, but the warning would be given if there were a data type mismatch, for instance, if B were declared INTEGER. Controlled by -common setting.

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

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

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

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

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

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

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

Error: Parse error
This means that the parser, which analyzes the Fortran program into expressions, statements, etc., has been unable to find a valid interpretation for some portion of a statement in the program. If your compiler does not report a syntax error at the same place, the most common explanations are: (1) use of an extension to ANSI standard Fortran that is not recognized by ftnchek, or (2) the statement requires more lookahead than ftnchek uses (see section on Bugs).
NOTE: This message means that the affected statement is not interpreted. Therefore, it is possible that ftnchek's subsequent processing will be in error, if it depends on any matters affected by this statement (type declarations, etc.).

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

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

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

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

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

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

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

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

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

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

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

Subprogram NAME: argument data type mismatch at position n
The subprogram's n-th actual argument (in the CALL or the usage of a function) differs in datatype or precision from the n-th dummy argument (in the SUBROUTINE or FUNCTION declaration). For instance, if the user defines a subprogram by
     SUBROUTINE SUBA(X)
     REAL X
and elsewhere invokes SUBA by
     CALL SUBA(2)

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

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

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

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


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


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

Subprogram NAME invoked inconsistently
Here the mismatch is between the datatype of the subprogram itself as used and as defined. For instance, if the user declares
     INTEGER FUNCTION COUNT(A)
and invokes COUNT in another module as
     N = COUNT(A)

without declaring its datatype, it will default to real type, based on the first letter of its name. The calling module should have included the declaration
     INTEGER COUNT
Given for -arguments setting 2 or 3.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                      Table 1

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

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

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

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


Next: LIMITATIONS AND EXTENSIONS ftnchek-3.3.1/html/lbAK.html0000644000031000002260000003302410202535155016221 0ustar moniotstaff00000000000000 LIMITATIONS AND EXTENSIONS Table of Contents

Previous: INTERPRETING THE OUTPUT


 

LIMITATIONS AND EXTENSIONS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

The intrinsic functions that are evaluated are:

ABSIABSDIMIDIMMAX
MAX0MINMIN0MODSIGN
ISIGNLENICHARINDEX

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


Next: NEW FEATURES ftnchek-3.3.1/html/lbAL.html0000644000031000002260000000467310202535155016232 0ustar moniotstaff00000000000000 NEW FEATURES Table of Contents

Previous: LIMITATIONS AND EXTENSIONS


 

NEW FEATURES

Here are the changes from Version 3.2 to Version 3.3:
1.
Front-end has been rewritten for unlimited lookahead, eliminating the longstanding bug that caused incorrect interpretation of statements whose ambiguity was not resolved in the first line.
2.
The -mkhtml option is now available in the MS-DOS version.
3.
Added support for Fortran 90 pointer related syntax: ALLOCATE, DEALLOCATE, and NULLIFY statements; the ALLOCATABLE, POINTER and TARGET attributes in type declarations; the pointer assigment operator => and intrinsic functions ALLOCATED and ASSOCIATED; and deferred-shape array declarations. At present these new syntax features are accepted but not properly checked. This feature was added by Robert Landrito.
4.
The -f77 and -f90 pointer option controlling warnings about ``Cray pointers'' has been renamed to cray-pointer. The -f77=pointer option now instead controls warnings for code containing Fortran 90 pointer-related syntax.
5.
Re-implemented -mkhtml processing so it is now much faster on source files containing many routines.
6.
Changed the arrangement of the test directory so there is no longer any need to modify the distribution in order to run the test suite (check.bat) under MS-DOS.
7.
Fixed bug in reading numeric settings on command line when setting name abbreviated to 3 characters.
8.
Fixed bug causing spurious warning for a GOTO referring to a labeled END statement when the statement before END was a FORMAT.
9.
New flag -f77=character to control warnings about extensions to the Fortran 77 character data type. Accompanying this new flag is support for Fortran 90 rules for character variable declarations that evaluate to zero or negative length, allowing them and treating negative length values as zero.
10.
Fixed minor bug in printing of comments and blank lines following last END statement in -list mode.


Next: BUGS ftnchek-3.3.1/html/lbAM.html0000644000031000002260000001122610202535155016223 0ustar moniotstaff00000000000000 BUGS Table of Contents

Previous: NEW FEATURES


 

BUGS

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

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

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

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

1.
The operating system and CPU type on which ftnchek is running.
2.
The version of ftnchek and values of any environment options or settings defined in startup file. (Capturing the output of ftnchek -help is useful for this.)
3.
A brief description of the bug.
4.
If possible, a small sample program showing the bug.


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

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

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

The following is a list of known bugs.

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

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

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

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

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

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

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

Prognosis: unlikely to be fixed.

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

Prognosis: may be fixed someday.


Next: ACKNOWLEDGEMENTS ftnchek-3.3.1/html/lbAN.html0000644000031000002260000000557310202535155016234 0ustar moniotstaff00000000000000 ACKNOWLEDGEMENTS Table of Contents

Previous: BUGS


 

ACKNOWLEDGEMENTS

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

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


Next: INSTALLATION AND SUPPORT ftnchek-3.3.1/html/lbAO.html0000644000031000002260000000523610202535155016231 0ustar moniotstaff00000000000000 INSTALLATION AND SUPPORT Table of Contents

Previous: ACKNOWLEDGEMENTS


 

INSTALLATION AND SUPPORT

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

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

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

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


Next: SEE ALSO ftnchek-3.3.1/html/lbAP.html0000644000031000002260000000245710202535155016234 0ustar moniotstaff00000000000000 SEE ALSO Table of Contents

Previous: INSTALLATION AND SUPPORT


 

SEE ALSO

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



Next: Table of contents ftnchek-3.3.1/html/toc.html0000644000031000002260000000207510202535155016177 0ustar moniotstaff00000000000000 Table of Contents  

Index

NAME
SYNOPSIS
DESCRIPTION
INVOKING FTNCHEK
OPTIONS
CHANGING THE DEFAULTS
USING PROJECT FILES
AN EXAMPLE
INTERPRETING THE OUTPUT
LIMITATIONS AND EXTENSIONS
NEW FEATURES
BUGS
ACKNOWLEDGEMENTS
INSTALLATION AND SUPPORT
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 01:35:40 GMT, February 10, 2005 ftnchek-3.3.1/html/arguments.html0000644000031000002260000000516510202535155017422 0ustar moniotstaff00000000000000 Option: arguments Table of Contents

Previous: OPTIONS


Option: arguments

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

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

arrayness:
warn about inconsistent use of arguments that are arrays. These warnings can be further controlled by the -array option.
type:
warn about dummy arguments of a different data type from the actual arguments.
function-type:
warn if the invocation assumes the function's return value is a different type than it actually is. Also warns if a function is called as a subroutine, or vice-versa.
number:
warn about invoking a subprogram with a different number of arguments than the subprogram expects.

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

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

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


Next: -array ftnchek-3.3.1/html/array.html0000644000031000002260000000545210202535155016532 0ustar moniotstaff00000000000000 Option: array Table of Contents

Previous: -arguments


Option: array

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

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

dimensions:
warn if the arguments differ in their number of dimensions, or if the actual argument is an array element while the dummy argument is a whole array.
size:
warn if both arguments are arrays, but they differ in number of elements.

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

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

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


Next: -brief ftnchek-3.3.1/html/brief.html0000644000031000002260000000232010202535155016472 0ustar moniotstaff00000000000000 Option: brief Table of Contents

Previous: -array


Option: brief

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

See also: -quiet.


Next: -calltree ftnchek-3.3.1/html/calltree.html0000644000031000002260000001052410202535155017203 0ustar moniotstaff00000000000000 Option: calltree Table of Contents

Previous: -brief


Option: calltree

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

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

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

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

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

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

The following keywords control options affecting the output:

prune:
prune repeated subtrees (applicable only with tree). This the default.
sort:
sort children of each routine into alphabetical order. This is the default.

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

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

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

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

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

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

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


Next: -check ftnchek-3.3.1/html/check.html0000644000031000002260000000752310202535155016472 0ustar moniotstaff00000000000000 Option: check Table of Contents

Previous: -calltree


Option: check

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

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

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

o
Module contains no executable statements.
o
In free source form, missing space where space is required (e.g. between a keyword and an identifier) or space present where none is allowed (e.g. within an identifier).
o
Zero or negative length specification in a data type declaration of the form type*len.
o
Invalid operand(s) in an expression.
o
Array assigned to scalar.
o
Type mismatch between DO index and bounds.
o
Undefined common block declared in SAVE statement.
o
Intrinsic function explicitly declared with an incompatible type.
o
Unknown intrinsic function explicitly declared in an INTRINSIC statement.
o
Intrinsic function passed as a subprogram argument is not declared in an INTRINSIC statement.
o
Intrinsic function or statement function invoked incorrectly.
o
Function does not set return value prior to RETURN statement.
o
Parameter constant value not evaluated (this is ftnchek's fault, and it is just informing you of the fact).
o
Entry point of a subprogram is later used as a different subprogram's name.
o
Unknown keyword used in an I/O statement.
o
Illegal label reference (e.g. GOTO refers to a non-executable statement; I/O statement refers to a non-format statement).

See also: -errors.


Next: -columns ftnchek-3.3.1/html/columns.html0000644000031000002260000000266310202535155017075 0ustar moniotstaff00000000000000 Option: columns Table of Contents

Previous: -check


Option: columns

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

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

See also: -f77, -pretty.


Next: -common ftnchek-3.3.1/html/common.html0000644000031000002260000001114710202535155016702 0ustar moniotstaff00000000000000 Option: common Table of Contents

Previous: -columns


Option: common

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

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

dimensions:
corresponding arrays in each declaration of a block must agree in size and number of dimensions. This option only has an effect when used together with exact.
exact:
the comparison of two blocks is done variable-by-variable rather than simply requiring agreement between corresponding storage locations. Use this if all declarations of a given COMMON block are supposed to be identical, which is a good programming practice.
length:
warn if different declarations of the same block are not equal in total length. The Fortran 77 Standard requires each named common block, but not blank common, to be the same length in all modules of the program.
type:
in each declaration of a given COMMON block, corresponding memory locations (words or bytes) must agree in data type. If used together with exact, this will require that corresponding variables agree in data type.
volatile:
Assume that COMMON blocks are volatile.

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

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

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

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

See also: -library, -usage.


Next: -crossref ftnchek-3.3.1/html/crossref.html0000644000031000002260000000326210202535155017237 0ustar moniotstaff00000000000000 Option: crossref Table of Contents

Previous: -common


Option: crossref

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

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

calls:
table lists each subprogram followed by a list of routines that call it. This listing omits library modules that are not in the call tree of the main program. The list is alphabetized.
common:
table lists each COMMON block followed by a list of the routines that access it. These listed routines are those in which some variables in the COMMON block are accessed, not simply those routines that declare the block. (To find out what routines declare a COMMON block but do not use it, see the -usage flag.)
labels:
table lists each label followed by a list of all references to it. A label reference is denoted by the line number and statement type of the referring statement. The label list is in sequential order. The references are listed in the order they are encountered in the program.

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


Next: -declare ftnchek-3.3.1/html/declare.html0000644000031000002260000000140710202535155017007 0ustar moniotstaff00000000000000 Option: declare Table of Contents

Previous: -crossref


Option: declare

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

See also: -sixchar, -usage.


Next: -division ftnchek-3.3.1/html/division.html0000644000031000002260000000144410202535155017235 0ustar moniotstaff00000000000000 Option: division Table of Contents

Previous: -declare


Option: division

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

See also: -portability, -truncation.


Next: -errors ftnchek-3.3.1/html/errors.html0000644000031000002260000000277410202535156016735 0ustar moniotstaff00000000000000 Option: errors Table of Contents

Previous: -division


Option: errors

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

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

See also: -check.


Next: -extern ftnchek-3.3.1/html/extern.html0000644000031000002260000000242310202535156016715 0ustar moniotstaff00000000000000 Option: extern Table of Contents

Previous: -errors


Option: extern

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

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

See also: -library.


Next: -f77 ftnchek-3.3.1/html/f77.html0000644000031000002260000002444010202535156016016 0ustar moniotstaff00000000000000 Option: f77 Table of Contents

Previous: -extern


Option: f77

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

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

accept-type:
ACCEPT and TYPE I/O statements.
array-bounds:
Expressions defining array bounds that contain array elements or function references.
assignment-stmt:
Assignment statements involving arrays. In Fortran 90, an array can be assigned to another array of compatible shape, or a scalar can be assigned to an array. Neither of these assignments is permitted in Fortran 77.
A related warning occurs when an array is assigned to a scalar. Since this is illegal also in Fortran 90, it is always warned about regardless of the -f77 setting (unless all checking is turned off with the -nocheck flag).
attribute-based-decl:
Type declarations in the new Fortran 90 attribute-based style. This style of declaration is distinguished by the use of a double colon (::) between the list of attributes and the list of declared variables. This option also controls warnings for use of Fortran 90 length or kind specifiers in type declarations. (Although these specifiers can be used in non-attribute-based declarations, they are controlled by this option to avoid proliferation of -f77 options.)
automatic-array:
Local (not dummy) arrays which have variable size. These would correspond to arrays whose storage would have to be dynamically allocated at run time.
backslash:
Unix backslash escape in strings. This warning will be given only if the -source=unix-backslash setting is specified to cause the escape interpretation of backslash..
byte:
BYTE data type declaration.
case-construct:
The SELECT CASE construct.
character:
Extensions to the Fortran 77 standard regarding character data. At present, this only controls warnings about character variables declared with zero or negative length. In Fortran 77, all character variables must be of positive length. In Fortran 90, they can be zero length, and declarations that specify negative lengths are permitted, turning into zero for the declared length. Note: because negative length specifiers may indicate a programming error, the warning about them is given even if this option is turned off, and is suppressed only by the -nocheck flag.
common-subprog-name:
Common block and subprogram having the same name.
construct-name:
Use of a construct-name to label a control statement.
continuation:
More than 19 successive continuation lines.
cpp:
Unix C preprocessor directives in the source code.
cray-pointer:
``Cray pointer'' syntax.
cycle-exit:
The CYCLE and EXIT statements.
d-comment:
Debugging comments starting with D in the source code.
dec-tab:
DEC Fortran style tab-formatted source code. This warning will be given only if the -source=dec-tab setting is specified to cause interpretation of tabs in this style.
do-enddo:
DO loop extensions: terminal statement label omitted, END DO, and WHILE.
double-complex:
Double precision complex datatype.
format-dollarsign:
Dollar sign control code in FORMAT statements.
format-edit-descr:
Nonstandard edit descriptors in FORMAT statements.
function-noparen:
Function definition without parentheses.
implicit-none:
IMPLICIT NONE statement.
include:
INCLUDE statement.
inline-comment:
Inline comments starting with an exclamation point.
internal-list-io:
List-directed I/O to or from an internal file.
intrinsic:
Nonstandard intrinsic functions.
io-keywords
Nonstandard keywords used in I/O statements. These fall into three groups. The first group includes keywords that are accepted in Fortran 90:
ACTIONPADREADWRITE
ADVANCEPOSITIONSIZE
DELIMREADWRITE
EOR
The second group comprises the following VMS Fortran keywords:
BLOCKSIZEEXTENDSIZEREADONLY
BUFFERCOUNTINITIALSIZERECORDSIZE
CARRIAGECONTROLMAXRECRECORDTYPE
DEFAULTFILENAME (in OPEN)SHARED
DISPNOSPANBLOCKTYPE
DISPOSEORGANIZATION
(The keyword NAME is standard only in the INQUIRE statement.) The third group consists of the following IBM/MVS keyword:
NUM
This flag also controls a warning about use of ACCESS='APPEND', which is accepted by some compilers. The value of 'APPEND' is not valid for any I/O specifier in standard Fortran 77, and in Fortran 90 'APPEND' should be used as a value of the POSITION specifier, not ACCESS.
long-line:
Statements with meaningful code past 72 columns. This warning is given only if the -columns setting has been used to increase the statement field width.
long-name:
Identifiers over 6 characters long.
mixed-common:
Mixed character and noncharacter data in COMMON block.
mixed-expr:
Nonstandard type combinations in expressions, for example DOUBLE PRECISION with COMPLEX, assigning hollerith to integer, logical operations on integers.
name-dollarsign:
Dollar sign used as a character in identifiers.
name-underscore:
Underscore used as a character in identifiers.
namelist:
NAMELIST statement.
param-implicit-type:
Implicit typing of a parameter by the data type of the value assigned. This warning can only occur if implicit parameter typing has been turned on by the -source=param-implicit-type option, or if the PARAMETER statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs will be warned about. If you want to be warned only in those instances where the implicit data type differs from the default type, use -portability=param-implicit-type instead. According to the Fortran 77 standard, the data type of a parameter is given by the same rules as for a variable, and if necessary a type conversion is done when the value is assigned.
param-intrinsic:
Intrinsic function or exponentiation by a real used to define the value of a PARAMETER definition.
param-noparen:
PARAMETER statement without parentheses. The user should be aware that the semantics of this form of the statement differs from that of the standard form: in this form, the parameter takes its data type from the value assigned, rather than having its default data type based on the first letter of the parameter name. (This form of the PARAMETER statement was introduced by DEC before the Fortran 77 standard was defined, and should be avoided.)
pointer:
Fortran 90 standard pointer-related syntax, including POINTER, TARGET and ALLOCATABLE type declarations, ALLOCATE, DEALLOCATE, and NULLIFY statements, and pointer assignment using =>.
quad-constant:
Quad precision real constants, e.g. of the form 1.23Q4.
quotemark:
Strings delimited by quote marks rather than apostrophes.
relops:
Relational (comparison) operators composed of punctuation, namely: < <= == /= > >=.
semicolon:
Semicolon used as statement separator.
statement-order:
Statements out of the sequence mandated by the Standard. The allowed sequence is illustrated in Table 1 in the section on Interpreting the Output.
typeless-constant:
Typeless constants, for example Z'19AF'.
type-size:
Type declarations specifying a size, for example REAL*8.
variable-format:
Variable repeat specification or field size in FORMAT. These are of the form < expr >.
vms-io:
Obsolete. Now has the same meaning as the io-keywords keyword.

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


Next: -f90 ftnchek-3.3.1/html/f90.html0000644000031000002260000001211510202535156016005 0ustar moniotstaff00000000000000 Option: f90 Table of Contents

Previous: -f77


Option: f90

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

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

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

accept-typedouble-complexparam-noparen
backslashformat-dollarsigncray-pointer
byteformat-edit-descrquad-constant
cppfunction-noparentype-size
d-commentname-dollarsignvariable-format
dec-tabparam-implicit-typevms-io

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

continuation:
The limit on the number of continuation lines for a statement in fixed source form is the same, namely 19, in Fortran 90 as in Fortran 77. For free source form the limit is 39 continuation lines, and a line containing a continuation mark cannot be otherwise empty or contain only a comment.
intrinsic:
This is the same as for -f77 except for the intrinsic functions defined in MIL-STD 1753, which are all included in Fortran 90, and so are not warned about. (See -intrinsic for a list.)
io-keywords:
This is the same as for -f77 except that no warnings are given for the I/O keywords that are standard in Fortran 90.
long-line:
Although the Fortran 90 Standard allows lines longer than 72 characters in free source form, this restriction still applies to fixed source form. In free source form the line length limit is 132 characters, and unlike fixed form, ftnchek does not allow this limit to be increased.
mixed-expr:
This is the same as for -f77 except for expressions mixing extended precision real with complex data types, which are permitted in Fortran 90.
statement-order:
This is similar to the corresponding -f77 warning, but applies the somewhat looser restrictions on statement order of the Fortran 90 Standard. In particular, Fortran 90 allows DATA statements and statement-function definitions to be intermixed with specification statements.
typeless-constant:
In Fortran 90, binary, octal, and hexadecimal constants of the form B'ddd', O'ddd', and Z'ddd', respectively, are permitted. Here 'ddd' represents a string of digits. ftnchek recognizes these forms, as well as a variant of the form X'ddd' for a hexadecimal constant, and other variants in which the base indicator B, O, Z, or X follows the digit string. These variants were not adopted in Fortran 90, so only they are warned about when this flag is turned on.

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


Next: -f95 ftnchek-3.3.1/html/f95.html0000644000031000002260000000415510202535156016017 0ustar moniotstaff00000000000000 Option: f95 Table of Contents

Previous: -f90


Option: f95

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

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

real-do:
A DO variable of any real numeric type.
pause:
The PAUSE statement.
assign:
The ASSIGN statement, assigned GOTO, or assigned format.
h-edit:
The H edit descriptor in a format.

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

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


Next: -help ftnchek-3.3.1/html/help.html0000644000031000002260000000241110202535156016335 0ustar moniotstaff00000000000000 Option: help Table of Contents

Previous: -f95


Option: help

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

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

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

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


Next: -identifier-chars ftnchek-3.3.1/html/identifier-chars.html0000644000031000002260000000252110202535156020627 0ustar moniotstaff00000000000000 Option: identifier-chars Table of Contents

Previous: -help


Option: identifier-chars

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

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

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

See also: -source.


Next: -include ftnchek-3.3.1/html/include.html0000644000031000002260000000237310202535156017037 0ustar moniotstaff00000000000000 Option: include Table of Contents

Previous: -identifier-chars


Option: include

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

See also: -f77, -source.


Next: -intrinsic ftnchek-3.3.1/html/intrinsic.html0000644000031000002260000001576110202535156017423 0ustar moniotstaff00000000000000 Option: intrinsic Table of Contents

Previous: -include


Option: intrinsic

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

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

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

CDABSCDSQRTDREALZLOG
CDCOSDCMPLXIMAGZSIN
CDEXPDCONJGZABSZSQRT
CDLOGDIMAGZEXPZCOS
CDSIN
The intrinsics for the quad precision and quad complex types are:
CQABSQARCOSQEXTQNINT
CQCOSQARSINQEXTDQPROD
CQEXPQATANQFLOATQREAL
CQLOGQATAN2QIMAGQSIGN
CQSINQCMPLXQINTQSIN
CQSQRTQCONJGQLOGQSINH
DBLEQQCOSQLOG10QSQRT
IQINTQCOSHQMAX1QTAN
IQNINTQDIMQMIN1QTANH
QABSQEXPQMODSNGLQ
The keywords controlling recognition of other nonstandard intrinsic functions are as follows:
extra:
recognize the following commonly available nonstandard intrinsics (all except EXIT and LOC are defined in MIL-STD 1753):
BTESTIBCLRIEORISHFTC
EXITIBITSIORLOC
IANDIBSETISHFTNOT
unix:
recognize these common Unix-specific intrinsic functions:
ABORTGMTIMELTIMESRAND
ANDIARGCORSYSTEM
GETARGIRANDRANDTIME
GETENVLSHIFTRSHIFTXOR
vms:
recognize these common VMS-specific intrinsic functions:
DATEIDATESECNDSTIME
ERRSNSRANSIZEOF
iargc-no-argument:
specify that IARGC may be invoked with no arguments.
iargc-one-argument:
specify that IARGC may be invoked with one argument.
rand-no-argument:
specify that RAND and IRAND may be invoked with no arguments.
rand-one-argument:
specify that RAND and IRAND may be invoked with one argument.

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

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

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

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

See also: -f77.


Next: -library ftnchek-3.3.1/html/library.html0000644000031000002260000000460410202535156017057 0ustar moniotstaff00000000000000 Option: library Table of Contents

Previous: -intrinsic


Option: library

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

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

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

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

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


Next: -list ftnchek-3.3.1/html/list.html0000644000031000002260000000162710202535156016370 0ustar moniotstaff00000000000000 Option: list Table of Contents

Previous: -library


Option: list

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

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


Next: -makedcls ftnchek-3.3.1/html/makedcls.html0000644000031000002260000001662410202535156017203 0ustar moniotstaff00000000000000 Option: makedcls Table of Contents

Previous: -list


Option: makedcls

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

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

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

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

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

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

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

declarations (1):
Write a declaration file. (This is implied by any of the other options, and can be omitted if any other options are given.)
undeclared-only (2):
By default, all variables are included in the declaration file. With this option, include only undeclared variables. This setting is useful if you want to check for undeclared variables, since Fortran source files with all variables properly declared will not result in a .dcl file. With this option, common blocks and namelist lists will not be included in the declaration file, since by their nature they cannot be undeclared.
compact (4):
The declarations are normally prettyprinted to line up neatly in common columns, as in the declaration files output by the Extended PFORT Verifier, pfort(1L). This option value selects instead compact output, without column alignment.
use-continuation-lines (8):
Causes continuation lines to be used where permissible. The default is to begin a new declaration on each line. This option is appropriate to use together with compact.
keywords-lowercase (16):
Output Fortran keywords in lowercase, instead of the default uppercase.
vars-and-consts-lowercase (32):
Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option.
exclude-sftran3 (64):
Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, xsf3(1L), as part of the translation of structured Fortran statements to ordinary Fortran. These variables have six-character names of the form NPRddd, NXdddd, N2dddd, and N3dddd, where d is a decimal digit. Because they are invisible in the SFTRAN3 source code, and will change if the SFTRAN3 code is modified, such variables should not be explicitly declared. Instead, they should just assume the default Fortran INTEGER data type based on their initial letter, N.
asterisk-comment (128):
Use an asterisk as the comment character; the default is otherwise 'C'.
comment-char-lowercase (256):
Use 'c' instead of 'C' or '*' as the comment character.
suppress-array-dimensions (512):
Suppress dimensioning of arrays in the generated declarations. This option is for use with code lacking type declarations, to allow the declaration files to be inserted without change into the code. Since the code will have dimension statements already, dimensioning the array variables in the type statements of the declaration file is redundant. This option should be used only in conjunction with option 2 = undeclared-only because otherwise any arrays that were dimensioned in a type statement will lose their dimensioning.
free-form (1024):
Produce declarations in free source form. This mode is automatically used if the input source is free form. Use this option to produce declarations in free form even if the input is in fixed form. Free form declarations are indented only 2 columns instead of 6, use the exclamation mark as the comment character, and indicate continuation lines by an ampersand at the end of the line to be continued.

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

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

See also: -mkhtml.


Next: -mkhtml ftnchek-3.3.1/html/mkhtml.html0000644000031000002260000000730110202535156016704 0ustar moniotstaff00000000000000 Option: mkhtml Table of Contents

Previous: -makedcls


Option: mkhtml

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

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

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

documents (1):
Create the HTML documents. (This is implied by any of the other options, and can be omitted if any other options are given.)
compact (4):
The declarations are normally prettyprinted to line up neatly in common columns. This option value selects instead compact output, without column alignment.
use-continuation-lines (8):
Causes continuation lines to be used instead of beginning a new declaration on each line. This option is appropriate to use together with compact.
keywords-lowercase (16):
Output Fortran keywords in lowercase, instead of the default uppercase.
vars-and-consts-lowercase (32):
Output variables and constants in lowercase, instead of the default uppercase. Character string constants are not affected by this option.
exclude-sftran3 (64):
Omit declarations of internal integer variables produced by the SFTRAN3 preprocessor, xsf3(1L). (See -makedcls for discussion.)
suppress-array-dimensions (512):
Suppress dimensioning of arrays in the generated declarations. This is normally undesirable, but is available if for some reason you do not want the array dimensions to appear in the HTML.
free-form (1024):
Produce variable declarations in free source form. This mode is automatically used if the input source is free form. This mainly affects the form of continuation lines if they are used.

See also: -calltree, -makedcls.


Next: -novice ftnchek-3.3.1/html/novice.html0000644000031000002260000000172010202535156016672 0ustar moniotstaff00000000000000 Option: novice Table of Contents

Previous: -mkhtml


Option: novice

-novice
This flag is intended to provide more helpful output for beginners. It has two effects:
(a)
provides an extra message to the effect that a function that is used but not defined anywhere might be an array which the user forgot to declare in a DIMENSION statement (since the syntax of an array reference is the same as that of a function reference).
(b)
modifies the form of the error messages and warnings. If the flag is turned off by -nonovice, these messages are printed in a style more resembling UNIX lint.

Default = yes.


Next: -output ftnchek-3.3.1/html/output.html0000644000031000002260000000155310202535156016753 0ustar moniotstaff00000000000000 Option: output Table of Contents

Previous: -novice


Option: output

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


Next: -pointersize ftnchek-3.3.1/html/pointersize.html0000644000031000002260000000166710202535156017774 0ustar moniotstaff00000000000000 Option: pointersize Table of Contents

Previous: -output


Option: pointersize

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

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

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


Next: -portability ftnchek-3.3.1/html/portability.html0000644000031000002260000001002310202535156017745 0ustar moniotstaff00000000000000 Option: portability Table of Contents

Previous: -pointersize


Option: portability

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

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

backslash:
Backslash character in strings. Since some compilers treat the backslash as an escape character, its presence can cause problems even though it is used in a standard-conforming way.
common-alignment:
COMMON block variables not in descending order of storage size. Some compilers require this ordering because of storage alignment requirements.
hollerith:
Hollerith constants (other than within FORMAT specifications). The Hollerith data type is a feature of Fortran IV that has been deleted in the Fortran 77 standard. It is superseded by the character data type. Storing Hollerith data in variables of a numeric or logical data type is nonportable due to differing word sizes.
long-string:
String constants, variables, or expressions over 255 chars long.
mixed-equivalence:
Variables of different data types equivalenced.
mixed-size:
Variables declared with default precision used with variables given explicit precision, in expressions, assignments, or as arguments. For example, if a variable declared as REAL*8 is treated as equivalent to DOUBLE PRECISION.
real-do:
Non-integer DO loop index and bounds. These can cause a program's results to depend on the hardware characteristics of the particular computer used.
param-implicit-type:
Implicit typing of a parameter by the data type of the value assigned, if it differs from the default type. This warning can only occur if implicit parameter typing has been turned on by the -source=param-implicit-type option, or if the PARAMETER statement is of the nonstandard form without parentheses. If this option is turned on, then any instances where implicit parameter typing occurs and where the implicit type is different from the default type based on the first letter of the parameter name, will be warned about. Implicit parameter typing can change the semantics of statements where the parameter is used, causing portability problems.
tab:
Tabs in source code. Tabs are interpreted differently by different compilers. This warning will be given only once, at the end of the file.

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


Next: -pretty ftnchek-3.3.1/html/pretty.html0000644000031000002260000000574510202535156016751 0ustar moniotstaff00000000000000 Option: pretty Table of Contents

Previous: -portability


Option: pretty

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

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

alternate-return:
A RETURN statement has a constant specifying an alternate return point that is not between 0 and the number of dummy arguments that are labels. This is legal, and has the same effect as a RETURN with no alternate return expression, but suggests that the programmer intended to use an alternate return label that is not provided.
embedded-space:
Space embedded in variable names or in multi-character operators such as **.
continuation:
Continuation mark following a comment line.
long-line:
Lines (except comments) over 72 columns in width (beyond 72 is normally ignored by compiler).
missing-space:
Lack of space between variable and a preceding keyword.
multiple-common:
COMMON block declared in multiple statements. No warning is given if the statements are consecutive except for comment lines.
multiple-namelist:
NAMELIST declared in multiple statements. No warning is given if the statements are consecutive except for comment lines.
parentheses:
Parentheses around a variable by itself. As a subprogram argument, this makes the argument an expression, not modifiable by the subprogram.

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

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


Next: -project ftnchek-3.3.1/html/project.html0000644000031000002260000001016510202535156017060 0ustar moniotstaff00000000000000 Option: project Table of Contents

Previous: -pretty


Option: project

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

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

create:
Produce a project file. The default is not to produce a project file. If this option is not turned on, the other options have no effect.
trim-calls:
Trim the amount of information stored in the project file about subprogram declarations and calls. This is the default. Turn this option off only in rare situations. (See discussion below.) The amount of trimming varies depending on the -library flag. More information is trimmed if that flag is turned on.
trim-common:
Trim the number of common block declarations stored in the project file. This is the default. Turn this option off only in rare situations. (See discussion below.) This option has no effect if the -library flag is turned off: when not in library mode, no trimming of common block declarations is done regardless of this option.

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

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

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

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

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


Next: -pure ftnchek-3.3.1/html/pure.html0000644000031000002260000000243410202535156016365 0ustar moniotstaff00000000000000 Option: pure Table of Contents

Previous: -project


Option: pure

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

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


Next: -quiet ftnchek-3.3.1/html/quiet.html0000644000031000002260000000242010202535156016534 0ustar moniotstaff00000000000000 Option: quiet Table of Contents

Previous: -pure


Option: quiet

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

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

See also: -brief.


Next: -reference ftnchek-3.3.1/html/reference.html0000644000031000002260000000237410202535156017353 0ustar moniotstaff00000000000000 Option: reference Table of Contents

Previous: -quiet


Option: reference

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

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

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


Next: -resources ftnchek-3.3.1/html/resources.html0000644000031000002260000001436310202535156017430 0ustar moniotstaff00000000000000 Option: resources Table of Contents

Previous: -reference


Option: resources

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

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

Source lines processed:
Total number of lines of code, with separate totals for statement lines and comment lines. Comment lines include lines with 'C' or '*' in column 1 as well as blank lines and lines containing only an inline comment. Statement lines are all other lines, including lines that have an inline comment following some code. Continuation lines are counted as separate lines. Lines in include files are counted each time the file is included.
Total executable statements:
Number of statements in the program, other than specification, data, statement-function, FORMAT, ENTRY, and END statements.
Total number of modules:
A module is any external subprogram, including the main program, subroutines, functions, and block data units. This count is of modules defined within the source, not modules referenced. Statement functions are not included. A subprogram with multiple entry points is only counted once.
Total statement labels defined
Number of labels attached to statements (often called statement numbers). The total label count for the entire program is given, as well as the maximum number in any single subprogram.
Max identifier name chars:
Number of characters used for storing identifier names. An identifier is a variable, subprogram, or common block name. Local names are those of local variables in a subprogram, whereas global names refer to subprogram and common block names, as well as dummy argument names and common variable names. Actual argument text (up to 15 characters for each argument) is also included here. The space used for local names is not recovered at the end of each module, so this number, like global space, grows until the whole program is analyzed. Unfortunately, this figure may include some text stored more than once, although a heuristic is used that will avoid duplicates in many cases.
Max token text chars:
A token is the smallest syntactic unit of the FORTRAN language above the level of individual characters. For instance a token can be a variable name, a numerical constant, a quoted text string, or a punctuation character. Token text is stored while a module is being processed. For technical reasons, single-character tokens are not included in this total. Items that are not represented in the symbol table may be duplicated. The space for token text is recovered at the end of each module, so this figure represents the maximum for any one module.
Max local symbols:
This is the largest number of entries in the local symbol table for any module. Local symbol table entries include all variables and parameters, common block names, statement functions, external subprograms and intrinsic functions referenced by the module. Literal constants are not stored in the local symbol table.
Max global symbols:
This is the number of entries in the global symbol table at the end of processing. Global symbol table entries include external subprogram and common block names. Intrinsic functions and statement functions are not included.
Max number of tokenlists:
A token list is a sequence of tokens representing the actual or dummy argument list of a subprogram, or the list of variables in a common block or namelist. Therefore this number represents the largest sum of COMMON, CALL, NAMELIST and ENTRY statements and function invocations for any one module. The space is recovered at the end of each module.
Max token list/tree space:
This is the largest number of tokens in all the token lists and token trees of any one module. A token tree is formed when analyzing an expression: each operand is a leaf of the tree, and the operators are the nodes. Therefore this number is a measure of the maximum complexity of an individual module. For instance a module with many long arithmetic expressions will have a high number. Note that unlike token text described above, the number of tokens is independent of the length of the variable names or literal constants in the expressions.
Number of subprogram invocations:
This is the sum over all modules of the number of CALL statements and function invocations (except intrinsic functions and statement functions).
Number of common block decls:
This is the sum over all modules of the number of common block declarations. That is, each declaration of a block in a different module is counted separately. (The standard allows multiple declarations of a block within the same module; these are counted as only one declaration since they are equivalent to a single long declaration.)
Number of array dim & param ptrs:
This is the sum over all modules of the number of array dimension and parameter definition text strings saved for use by the -makedcls option. The length of the text strings is not counted. Each dimension of a multidimensional array is counted separately.

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


Next: -sixchar ftnchek-3.3.1/html/sixchar.html0000644000031000002260000000230210202535156017045 0ustar moniotstaff00000000000000 Option: sixchar Table of Contents

Previous: -resources


Option: sixchar

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

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

See also: -f77, -portability.


Next: -sort ftnchek-3.3.1/html/sort.html0000644000031000002260000000215010202535156016374 0ustar moniotstaff00000000000000 Option: sort Table of Contents

Previous: -sixchar


Option: sort

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

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


Next: -source ftnchek-3.3.1/html/source.html0000644000031000002260000001505610202535156016716 0ustar moniotstaff00000000000000 Option: source Table of Contents

Previous: -sort


Option: source

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

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

fixed:
Interpret the source as fixed form (with supported extensions such as exclamation mark for comments). Statements must be in columns 7 to 72 (unless the -cols setting has been used to change this), and blanks are not significant outside character context (but warned about under the -pretty option). This is the default mode unless the source file extension is .f90 or .F90. this option cannot be given together with -source=free.
free:
Interpret the source as free form. Statements may be anywhere in columns 1 to 132, comments can only begin with an exclamation mark, and blanks are required in some places such as between identifiers and keywords. This is the default mode if the source file extension is .f90 or .F90. This option cannot be given together with -source=fixed or -source=dec-tab
dec-tab (1):
Accept DEC-style tab-formatted source. A line beginning with an initial tab will be treated as a new statement line unless the character after the tab is a nonzero digit, in which case it is treated as a continuation line. The next column after the tab or continuation mark is taken as column 7. A warning will be given in the case where the line is a continuation, if -f77=dec-tab is in effect.
vms-include (2):
Accept VMS-style INCLUDE statements. These follow the normal syntax, but with the following additional features: (1) the file extension, if not given, defaults to the same as a normal source file extension; and (2) the option /LIST or /NOLIST can be appended to the include-file name, to control listing of its contents.
unix-backslash (4):
Handle UNIX-style backslash escapes in character strings. The escape sequence following the backslash will be evaluated according to the ANSI standard for strings in C: up to three digits signify an octal value, an x signifies the start of a hexadecimal constant, any of the letters a b f n r t signify special control codes, and any other character (including newline) signifies the character itself. When this source code option is in effect, a warning will be given if the -f77=backslash setting is specified.
The default behavior is to treat the backslash like any other normal character, but a warning about portability will be generated if the -portability flag is set. Because of the fact that some compilers treat the backslash in a nonstandard way, it is possible for standard-conforming programs to be non-portable if they use the backslash character in strings.
Since ftnchek does not do much with the interpreted string, it is seldom necessary to use this option. It is needed in order to avoid spurious warnings only if (a) the program being checked uses backslash to embed an apostrophe or quote mark in a string instead of using the standard mechanism of doubling the delimiter; (b) the backslash is used to escape the end-of-line in order to continue a string across multiple source lines; or (c) a PARAMETER definition uses an intrinsic string function such as LEN with such a string as argument, and that value is later used to define array dimensions, etc.
param-implicit-type (8):
Implicit typing of a parameter by the data type of the value assigned. Some non-standard compilers may allow the data type of the value to override the Fortran 77 default type of a parameter that is based on the first letter of the parameter name. This option only applies to PARAMETER statements of the standard form which has parentheses. A parameter that has been explicitly declared in a type statement prior to the PARAMETER statement is not affected by this option. A warning will be given under the -f77=param-implicit-type or -portability=param-implicit-type option.
Note that this implicit typing is treated as equivalent to an explicit type declaration for the parameter. Therefore, if you use -makedcls=undeclared-only to generate declarations only of undeclared variables, these parameters will not be included.
dec-param-standard-type (16):
Follow the Fortran 77 rule for data typing of DEC Fortran style parameters. These are declared using a nonstandard form of the PARAMETER statement which lacks parentheses. According to DEC Fortran, parameters defined by this form of the statement have their data type given by the data type of the value assigned. Use this option to tell ftnchek not to follow this rule but instead to use the same rule as for standard PARAMETER statements. This option does not apply to PARAMETER statements of the standard form.

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

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


Next: -style ftnchek-3.3.1/html/style.html0000644000031000002260000000711310202535156016551 0ustar moniotstaff00000000000000 Option: style Table of Contents

Previous: -source


Option: style

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

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

block-if:
Complain about arithmetic IF statement. Accept block IF or logical IF (which controls a single statement).
construct-name:
Complain about unnamed block constructs: IF, DO, and SELECT CASE. Note that if a construct name is present on the opening statement of a construct, then it is required to be present on all other component statements (ELSE, END IF, etc.) of the construct. In that case a missing construct name on those statements generates a syntax error regardless of this option. The purpose of this option is to warn if the construct completely lacks the optional name.
distinct-do:
Complain if two DO loops share a common terminator statement.
do-construct:
Complain if terminator of a DO loop is anything other than an END DO or CONTINUE statement. This is the requirement in order for the loop to meet the Fortran 90 definition of a do-construct.
do-enddo:
Complain if terminator of a DO loop is anything other than an END DO statement. (This option overrides the do-construct option, being even stricter.)
end-name:
Complain about the absence of the subprogram name on structured END statements.
format-stmt:
Complain about the presence of FORMAT statements. Only the FORMAT statements themselves are flagged, not the references to them in I/O lists.
goto:
Complain about the presence of unconditional, computed or assigned GOTO statements. Also complain about alternate returns (but not about labels as subprogram arguments).
labeled-stmt:
Complain about the presence of labels (numbers) on statements other than FORMAT statements. (Since FORMAT statements are arguably convenient and not readily abused, complaints about them are controlled by the separate format-stmt keyword.)
program-stmt:
Complain about the absence of a PROGRAM statement at the head of the main program.
structured-end:
Complain about the use of a plain END statement to end a subprogram, rather than a structured END statement (END PROGRAM, END SUBROUTINE, END FUNCTION, or END BLOCK DATA).

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


Next: -symtab ftnchek-3.3.1/html/symtab.html0000644000031000002260000000314110202535156016705 0ustar moniotstaff00000000000000 Option: symtab Table of Contents

Previous: -style


Option: symtab

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

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

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

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


Next: -truncation ftnchek-3.3.1/html/truncation.html0000644000031000002260000001021110202535156017570 0ustar moniotstaff00000000000000 Option: truncation Table of Contents

Previous: -symtab


Option: truncation

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

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

int-div-exponent:
use of the result of integer division as an exponent. This suggests that a real quotient is intended. An example would be writing X**(1/3) to evaluate the cube root of X. The correct expression is X**(1./3.).
int-div-real:
Conversion of an expression involving an integer division to real. This suggests that a real quotient is intended.
int-div-zero:
division in an integer constant expression that yields a result of zero.
int-neg-power:
exponentiation of an integer by a negative integer (which yields zero unless the base integer is 1 in magnitude). This suggests that a real base is intended.
promotion:
automatic conversion of a lower precision quantity to one of higher precision. The loss of accuracy for real variables in this process is comparable to the corresponding demotion. No warning is given for promotion of integer quantities to real since this is ordinarily exact.
real-do-index:
use of a non-integer DO index in a loop with integer bounds. An integer DO index with real bounds is always warned about regardless of this setting.
real-subscript:
use of a non-integer array subscript.
significant-figures:
overspecifying a single precision constant. This may indicate that a double precision constant was intended.
size-demotion:
automatic conversion of a higher precision quantity to one of lower precision of the same type. This warning only occurs when an explicit size is used in declaring the type of one or both operands in an assignment. For example, a warning wil be issued where a REAL*8 variable is assigned to a REAL variable, if the default wordsize of 4 is in effect. A warning is also issued if a long integer is assigned to a shorter one, for example, if an INTEGER expression is assigned to an INTEGER*2 variable. There is one exception to this last case, namely if the right hand side of the assignment is a small literal constant (less than 128). type-demotion: automatic conversion of a higher precision quantity to one of lower precision of different type. This warning includes conversion of real quantities to integer, double precision to single precision real, and assignment of a longer character string to a shorter one.

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

See also: -portability, -wordsize.


Next: -usage ftnchek-3.3.1/html/usage.html0000644000031000002260000002055710202535156016524 0ustar moniotstaff00000000000000 Option: usage Table of Contents

Previous: -truncation


Option: usage

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

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

arg-alias:
a scalar dummy argument is actually the same as another and is (or may be) modified. The Fortran 77 standard (section 15.9.3.6) prohibits modifying an argument that is aliased to another.
arg-array-alias:
a dummy argument which is an array or array element is in the same array as another and is modified. This flag is similar to arg-alias but provides separate control over array arguments. It is harder to tell if aliasing is occurring in the case of arrays, so if ftnchek gives too many false warnings, this flag allows the array-related ones to be turned off without suppressing the warnings for scalars.
arg-common-alias:
a scalar dummy argument is the same as a common variable in the subprogram, and either is modified. This is also prohibited by the Fortran 77 standard. If common checking is not exact (see the -common setting), it is harder to tell if aliasing is occurring, so the warning is given if the variable is anywhere in a common block that is declared by the subprogram.
arg-common-array-alias:
a dummy argument which is an array or array element is in the same array as a common variable, and either is modified. If common checking is not exact, the variable can be anywhere in a common block that is declared by the subprogram.
arg-const-modified:
a subprogram modifies an argument which is a constant or an expression. Such an action could cause anomalous behavior of the program.
arg-unused:
a dummy argument is declared but never used. This is similar to the var-unused keyword described below, but applies only to arguments.
com-block-unused:
a common block is declared but none of the variables in it are used by any subprogram. This warning is suppressed if the common strictness setting is 0.
com-block-volatile:
a common block may lose the definition of its contents if common blocks are volatile. This option only has an effect if the -common=volatile flag is in effect. See the discussion of the -common setting above.
com-var-set-unused:
a common variable is assigned a value, but its value is not used by any subprogram. This warning is suppressed if the common strictness setting is 0.
com-var-uninitialized:
a common variable's value is used in some subprogram, but is not set anywhere. Unfortunately, ftnchek does not do a thorough enough analysis of the calling sequence to know which routines are called before others. So warnings about this type of error will only be given for cases in which a variable is used in some routine but not set in any other routine. Checking of individual COMMON variables is done only if the -common setting is 3 (variable by variable agreement). This warning is suppressed if the common strictness setting is 0.
com-var-unused:
a common variable is declared but not used by any subprogram. This warning is suppressed if the common strictness setting is 0.
do-index-modified:
a variable that is the index of a DO loop is modified by some statement within the range of the loop. The Standard permits an active DO variable to be modified only by the incrementation mechanism of the DO statement.
ext-multiply-defined:
an external (a subroutine or function) is defined more than once. Definition of an external means providing the body of its source code.
ext-declared-only:
a name is declared in an EXTERNAL statement in some module, but is not defined or used anywhere.
ext-undefined:
an external is used (invoked) but not defined anywhere. This option is equivalent to the -external flag. If the subprogram is invoked more than once, those invocations will still be checked for consistency.
ext-unused:
an external is defined (its subprogram body is present) but it is not used. A subprogram is considered unused even if it is invoked by some other subprogram, if it cannot be called from any thread of execution starting with the main program. The agreement of the subprogram's arguments with its invocations is still checked even if this warning is turned off. If there is no main program, then this warning is issued only if the subprogram is not invoked anywhere. This warning is suppressed in library mode, but library mode has the additional effect of suppressing argument checking for unused routines.
label-undefined:
a statement refers to a label that has not been defined.
label-unused:
a statement label is defined, but never referred to.
var-set-unused:
a local variable is assigned a value, but that value is not used.
var-uninitialized:
a local variable's value may be used before it is assigned. Sometimes ftnchek makes a mistake in the warnings about local variable usage. Usually it errs on the side of giving a warning where no problem exists, but in rare cases it may fail to warn where the problem does exist. See the section on Bugs for examples. If variables are equivalenced, the rule used by ftnchek is that a reference to any variable implies the same reference to all variables it is equivalenced to. For arrays, the rule is that a reference to any array element is treated as a reference to all elements of the array.
var-unused:
a local variable is declared (for instance, in a type declaration) but is not used in the module. Does not apply to dummy arguments: warnings about them are controlled by the keyword arg-unused described above.

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

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


Next: -vcg ftnchek-3.3.1/html/vcg.html0000644000031000002260000000330410202535156016166 0ustar moniotstaff00000000000000 Option: vcg Table of Contents

Previous: -usage


Option: vcg

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

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

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

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

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


Next: -version ftnchek-3.3.1/html/version.html0000644000031000002260000000142010202535156017071 0ustar moniotstaff00000000000000 Option: version Table of Contents

Previous: -vcg


Option: version

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

See also: -help.


Next: -volatile ftnchek-3.3.1/html/volatile.html0000644000031000002260000000133710202535156017232 0ustar moniotstaff00000000000000 Option: volatile Table of Contents

Previous: -version


Option: volatile

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

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

See also: -common, -usage.


Next: -wordsize ftnchek-3.3.1/html/wordsize.html0000644000031000002260000000546610202535156017270 0ustar moniotstaff00000000000000 Option: wordsize Table of Contents

Previous: -volatile


Option: wordsize

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

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

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

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

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


Next: -wrap ftnchek-3.3.1/html/wrap.html0000644000031000002260000000140210202535156016355 0ustar moniotstaff00000000000000 Option: wrap Table of Contents

Previous: -wordsize


Option: wrap

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


Next: CHANGING THE DEFAULTS ftnchek-3.3.1/macro-doc.txt0000644000031000002260000003415507617175043016205 0ustar moniotstaff00000000000000WARNING: the information in this file is out of date, and various changes (mainly new macros) have been made since it was written. This description is provided since it does cover a lot of existing macros, and provides a starting point for understanding how ftnchek is configured. Consult the source code for the current status and meaning of the macros. This file gives details about using macro names to control the system-dependent choices available in compiling Ftnchek. NOTE: if you choose to alter the definitions of any of these macros from their default values, then "make check" will probably give some differences. You should first build ftnchek using the default definitions, run "make check" to catch any problems, then rebuild ftnchek with your preferred definitions before doing "make install". Ftnchek has a number of fixed internal parameters that affect its operation, such as the symbol table sizes and support for various extensions and particular operating systems. The following is a description of the most important of these parameters. They are implemented as C language macro names. If you wish to change a parameter defined by one of these macros, it is necessary to recompile Ftnchek with the macro definition changed to the desired value. Briefly, the effect of the macro names specifying the system is as follows: If VMS or __TURBOC__ or MSDOS is defined, then both "/" and "-" are allowed as option prefixes. Otherwise only "-" is allowed. If VMS or __TURBOC__ or MSDOS is defined, then ".FOR" will be the default extension for source files, otherwise ".f" is used. If VMS is defined, then support for VMS extensions is enabled by default: this changes the default values of options -source to 2 (VMS include syntax) and -intrinsics to 223 (VMS intrinsics set). If UNIX is defined, then only "-" is allowed as an option prefix, the default for -source is 0 and -intrinsics is 222 (UNIX intrinsic set). More detailed control over these options is possible by defining other macro names described below. This can usually be done without editing any of the source files, by specifying the macro definition on the C compiler command line. Under UNIX, this is done with the -D option. For example, to define the macro BpW that sets the default word size to be eight bytes, the compiler would be invoked with the additional option -DBpW=8. Under VMS, the corresponding option would be /DEFINE=("BpW=8"). For other systems, consult your C compiler manual. When using make, specify these definitions by setting the macro OPTIONS, e.g. make "OPTIONS= -DBpW=8" If you want to put such definitions into the Makefile, do not edit Makefile. Edit Makefile.in and re-run the configure script. Unless otherwise noted, the following macro names need not have any particular value. They only need to be defined in order to have effect. For more details on these parameters, look at ftnchek.h. These fall into three broad groups: system-dependent aspects, features and options, and table sizes. --- System-dependent defines Macro Meaning Remarks UNIX Compile Ftnchek for UNIX-like Default for most operating system choices VMS Compile Ftnchek for VAX/VMS Automatically defined operating system by VAX C compiler MSDOS Compile Ftnchek for MS-DOS Automatic if compiler operating system is Turbo C NO_PROTOTYPES Compiler does not accept Defined by configure ANSI C prototypes NO_FLOATING_POINT Suppress floating point Unimportant--define if computations internally no hardware f.p. DEC_TABS Default value of -source bit 1 Default = 0 (NO) VMS_INCLUDE Default value of -source bit 2 Default=0 for Unix, 1 for VMS UNIX_BACKSLASH Default value of -source bit 4 Default = 0 (NO) OPTION_PREFIX_SLASH Allow options to start with Implied by VMS and by either - or /. MSDOS NO_OPTION_PREFIX_SLASH Prohibit options with / To override VMS or MSDOS default SPECIAL_HOMEDIR Home directory for non-unix VMS default:"SYS$DISK:[]" UNIX_RC_FILE Name of startup file. Default: ".ftnchekrc" NONUNIX_RC_FILE Alternate startup filename. Default: "ftnchek.ini" DEF_SRC_EXTENSION Default extension expected Defaults: VMS, MSDOS: for input source files ".for" All others: ".f" DEF_LIST_EXTENSION Default extension for output Default: ".lis" list-files DEF_PROJ_EXTENSION Default extension for input Default: ".prj" and output project files DEF_DCL_EXTENSION Default extension for Default: ".dcl" declaration files DEF_INC_EXTENSION Default extension for Default: include files DEF_SRC_EXTENSION DEF_VCG_EXTENSION Default extension for VCG Default: ".vcg" output files STDIN_PROJ_FILENAME Output project-file name used Default: "ftnchek.prj" when input source is stdin ENV_PREFIX Prefix for environment Default "FTNCHEK_" variables that set options --- macros that control ftnchek behavior (syntax, options, etc.) VCG_SUPPORT Add the -vcg switch to allow Default: -vcg supported call graph to be visualized. NO_VCG_SUPPORT Suppress -vcg support VCG_GRAPH_OPTIONS Global vcg graph options. "color: lightgray\n" STRICT_SYNTAX Set default -f77=all Default is -f77=none STRICT_PORTABILITY Set default -port=all Default is -port=none UGLY_IS_OK Set default -pretty=none Default is -pretty=all LAX_TRUNCATION Set default -trunc=none Default is -trunc=all The following macros control whether ftnchek accepts certain syntax extensions. They are all defined and cannot be undefined without editing ftnchek.h. If the macros are undefined, then support for the extension is completely removed. This means that the corresponding extension will generate syntax or parse errors, not non-standard warnings. Some users might want to do this to make ftnchek smaller and more efficient, or out of a sense of fanaticism. ALLOW_CRAY_POINTERS Cray pointer syntax ALLOW_DOLLARSIGNS $ in variable names ALLOW_DO_ENDDO DO ... ENDDO and related ALLOW_INCLUDE INCLUDE statement ALLOW_QUOTEMARKS Strings delimited by " ALLOW_TYPELESS_CONSTANTS Binary, octal, hex ALLOW_UNDERSCORES _ in variable names ALLOW_UNIX_BACKSLASH Unix escape sequences in strings ALLOW_UNIX_CPP Unix C preprocessor directives ALLOW_VMS_IO VMS I/O keywords The following macros determine the default value of the -intrinsic setting. The nonstandard double complex intrinsic functions are always recognized since they are needed by the double complex datatype. Other groups of nonstandard functions can be selected to be recognized by default using these macros. STANDARD_INTRINSICS Do not recognize extended set of intrinsic functions (Set 0) NONSTD_INTRINSICS Support commonly available Default behavior intrinsic functions (Set 1) UNIX_INTRINSICS Support UNIX-specific Default if UNIX defined intrinsic functions (Set 2) NO_UNIX_INTRINSICS Do not support UNIX-specific intrinsic functions VMS_INTRINSICS Support VMS-specific Default if VMS defined intrinsic functions (Set 3) NO_VMS_INTRINSICS Do not support VMS-specific intrinsic functions DEF_INTRINSIC_SET Specify intrinsic set Override above defaults RAND_NO_ARG RAND/IRAND function has no Default behavior: argument allows both 0 argument RAND_ONE_ARG RAND/IRAND function has one and 1 argument forms argument IARGC_NO_ARG IARGC has no argument Default behavior: IARGC_ONE_ARG IARGC has 1 argument both forms allowed NO_BLANKS_IN_NUMBERS Numeric constants cannot have Default: blanks allowed embedded blanks. BLANKS_IN_NUMBERS Numeric constants may have embedded blanks. BpW Default bytes per word Default=4 (for -wordsize setting) --- Macros that set table sizes, limits, etc. MAXLINE Maximum input line length. Default 132 Ignores past this. MAXIDSIZE Longest identifier allowed Default 31 MAX_SRC_TEXT Longest text string of a token Default 20*66 MAX_CHAR_CODE Largest char value Default 255 MAX_INCLUDE_DEPTH Max nesting depth of include Default 16 files MAXEXPRTEXT Length of expr text saved in Default 15 arg lists MAX_RC_LINE Max input line in rc file Default 500 RC_COMMENT_CHAR Start of comment in rc file Default '#' ENV_INCLUDE_VAR Name of environment variable Default "INCLUDE" specifying include directory DEFAULT_INCLUDE_DIR Name of default include Defaults: directory UNIX: "/usr/include" VMS: "SYS$LIBRARY:" MSDOS: "\\include" The following macros specify various internal table sizes. If neither SMALL_MACHINE nor MEDIUM_MACHINE is defined, large table sizes will be used. In any case, individual table sizes can be chosen by defining the corresponding macro name. The defaults for the three size choices (small, medium, large) are listed in the Remarks column. Only HASHSZ, LOCSYMTABSZ, and GLOBSYMTABSZ limit the maximum size of tables. The other size parameters are chunk sizes for allocating additional space as needed. For virtual-memory machines they only affect efficiency. SMALL_MACHINE Table sizes appropriate for a PC without much memory MEDIUM_MACHINE Intermediate table sizes LARGE_MACHINE Table sizes appropriate for a mainframe or workstation small medium large HASHSZ Identifier hash table (elements) 798 2002 20930 LOCSYMTABSZ Local symbol table (entries) 300 800 8000 GLOBSYMTABSZ Global symbol table (entries) 400 1200 12000 The following sizes are *chunk sizes*, specifying the initial table size and the size of new blocks to allocate when initial amounts are used up. Optimum sizes are dependent on properties of alloc function, and do not set limits on total amounts of space. STRSPACESZ Identifier string space (bytes) 4000 10000 10000 PARAMINFOSPACESZ Parameter info field space 20 50 200 (ParamInfo's) TOKHEADSPACESZ Token list header element space 50 200 500 (TokenListHeader's) TOKENSPACESZ Token list space (tokens). Used 200 1000 10000 to store subroutine arguments and other temporary lists. ARGLISTHEADSZ Argument list header element 300 1500 15000 space (ArgListHeader's) ARGLISTELTSZ Argument list element space 1000 5000 50000 (ArgListElement's) COMLISTHEADSZ Common block list header space 200 1000 10000 (ComListHeader's) COMLISTELTSZ Common block list element space 1000 4000 50000 (ComListElement's) PTRSPACESZ Pointers to array dim text and 200 400 2000 parameter text (char *'s) WRAP_COLUMN Default value for -wrap Default=79 setting. For the truly adventurous: Ftnchek has two different memory-management schemes to choose from. In the default case, space for the hashtable and the local and global symbol tables is allocated at compile time. These tables cannot change size afterwards. Initial space for strings, tokens (in lists and trees), token list headers, token source text, pointers to array dim and parameter text is allocated at compile time. These areas can grow as needed by allocating additional chunks that are chained together in a linked-list arrangement. Space for argument list headers and elements, and common list headers and elements starts at zero and new chunks are allocated as needed. (None of the newly allocated chunks are freed, since it is considered likely that the space will be needed again.) This scheme is well suited to machines with large address spaces and virtual memory. The sizes of the fixed tables and chunk sizes for the others can be chosen in three standard sets: default, SMALL_MACHINE, and LARGE_MACHINE. The latter is preferred for any virtual-memory machine since memory does not become "really" allocated until needed. The second memory-management scheme is selected by the compile-time option DYNAMIC_TABLES. In this case, the fixed-size arrays for the hashtable and the local and global symbol tables are replaced by pointers, and the space they point to is allocated at the start of program execution. Everything else is the same. This version runs somewhat slower than the first scheme on machines I have tested. I have not proceeded to take advantage of the possibility of letting the table sizes be selected at run time by means of command-line settings. To do so would require moving the allocation step performed by init_tables() to just before the start of processing, analogously to init_typesizes(). It would also need a set of command-line options to be installed for specifying the different table sizes. ftnchek-3.3.1/project-doc.tex0000644000031000002260000004737407275045221016534 0ustar moniotstaff00000000000000% Master File: project-doc.tex % Document Type: LaTeX % Document Previewer: xdvi -margins 1.5 \documentclass{article} %\documentstyle[12pt]{article} \addtolength{\textheight}{0.5in} \addtolength{\topmargin}{-0.25in} \addtolength{\textwidth}{1.0in} \addtolength{\oddsidemargin}{-0.5in} \thispagestyle{empty} \title{%article title Project-File Format } \author{Robert K. Moniot} \date{\today} \newcommand{\OMIT}[1]{} %\pagestyle{headings} %\pagestyle{myheadings}\markright{%article running head %} \newcommand{\Line}[2]{\makebox[0pt][r]{#1: }\ \texttt{#2}\\} \begin{document} \maketitle \section{Introduction} This is a description of {\tt ftnchek} project-file format, version P3 (for {\tt ftnchek} versions 2.11 and later). This description is intended for those who want to write programs or scripts that make use of the information in project files for other purposes. This document was written fairly hastily, but care has been taken that to make sure it is accurate, even if perhaps it is not very clear or well-organized. This document is {\em not} intended to describe how to use project files when checking Fortran programs. If that is what you are interested in, see the {\tt ftnchek} documentation. The description is based on the following sample program. Line numbers are added for reference. \vspace{2ex} % Original source follows \end{document} in this file \noindent \Line{1}{C Program used as example in project-file documentation.} \Line{2}{C These comments are mainly to make the program not start on line 1.} \Line{3}{\ \ \ \ \ \ PROGRAM CALC} \Line{4}{\ \ \ \ \ \ INCLUDE 'projcom.f'} Including file projcom.f \\ \Line{1}{\ \ \ \ \ \ DOUBLE PRECISION BETA} \Line{2}{\ \ \ \ \ \ COMMON IOTA, GAMMA(3), BETA} Resuming file projex.f \\ \Line{5}{\ \ \ \ \ \ READ(*,*) NUM} \Line{6}{\ \ \ \ \ \ IOTA = NUM*NUM} \Line{7}{\ \ \ \ \ \ CALL SUMUP(NUM,GAMMA)} \Line{8}{\ \ \ \ \ \ WRITE(*,*) IOTA, (GAMMA(I),I=1,3)} \Line{9}{\ \ \ \ \ \ END} \Line{10}{\ \ \ \ \ \ SUBROUTINE SUMUP(M,XRAY)} \Line{11}{\ \ \ \ \ \ DIMENSION XRAY(M)} \Line{12}{\ \ \ \ \ \ XRAY(1) = 1.0} \Line{13}{\ \ \ \ \ \ DO 10 I=2,M} \Line{14}{\ \ \ \ \ \ \ \ XRAY(I) = XRAY(I-1)+I} \Line{15}{\ 10\ \ \ CONTINUE} \Line{16}{\ \ \ \ \ \ RETURN} \Line{17}{\ \ \ \ \ \ ENTRY SUMDOWN(M,XRAY)} \Line{18}{\ \ \ \ \ \ XRAY(M) = 1.0} \Line{19}{\ \ \ \ \ \ DO 20 I=M-1,1,-1} \Line{20}{\ \ \ \ \ \ \ \ XRAY(I) = XRAY(I-1)+I} \Line{21}{\ 20\ \ \ CONTINUE} \Line{22}{\ \ \ \ \ \ END} \section{Project files} A project file (produced when the {\tt -project} option is given) contains information from only one source file. A separate project file is created for each source file, with the extension {\tt .prj} replacing the source file extension {\tt .f} or {\tt .for}. The top-level routine in {\tt ftnchek} that is invoked to create a project file is {\tt proj\_file\_out} in file {\tt project.c}. Consult that routine to answer any detailed questions not treated here. Here is the project file produced by {\tt ftnchek} from the sample program. It will be explained line-by-line in the following sections. Line numbers have been added for reference. \vspace{2ex} % Original project file follows \end{document} in this file \noindent \Line{1}{FTNCHEK\_ P3} \Line{2}{file projex.f} \Line{3}{ entries 3} \Line{4}{ entry CALC class 1 type 12 size 0 flags 1 0 0 0 0 0 0 0} \Line{5}{ defn} \Line{6}{ module CALC file projex.f line 3 top 3 class 1 type 12 size 0 flags 1 0 0 0} \Line{7}{ args 0} \Line{8}{ end} \Line{9}{ entry SUMUP class 1 type 10 size 0 flags 1 0 0 0 0 0 0 0} \Line{10}{ defn} \Line{11}{ module SUMUP file projex.f line 10 top 10 class 1 type 10 size 0 flags 1 0 0 0} \Line{12}{ args 2} \Line{13}{ arg 1 name M} \Line{14}{ class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 0 0 1 0 0 0 0} \Line{15}{ arg 2 name XRAY} \Line{16}{ class 0 type 2 size 0 dims 1 elts 0 cblk - cndx 0 same 1 flags 1 1 1 0 1 0 0 0} \Line{17}{ end} \Line{18}{ entry SUMDOWN class 1 type 10 size 0 flags 0 0 0 0 0 0 0 0} \Line{19}{ defn} \Line{20}{ module SUMUP file projex.f line 17 top 17 class 1 type 10 size 0 flags 1 0 0 0} \Line{21}{ args 2} \Line{22}{ arg 1 name M} \Line{23}{ class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 0 0 1 0 0 0 0} \Line{24}{ arg 2 name XRAY} \Line{25}{ class 0 type 2 size 0 dims 1 elts 0 cblk - cndx 0 same 1 flags 1 1 1 0 1 0 0 0} \Line{26}{ end} \Line{27}{} \Line{28}{ externals 1} \Line{29}{ external SUMUP class 1 type 10 size 0 flags 1 0 0 0 0 0 0 0} \Line{30}{ call} \Line{31}{ module CALC file projex.f line 7 top 7 class 1 type 10 size 0 flags 0 1 0 0} \Line{32}{ args 2} \Line{33}{ arg 1 name NUM} \Line{34}{ class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 1 1 0 0 0 0 0} \Line{35}{ arg 2 name GAMMA} \Line{36}{ class 0 type 2 size 0 dims 1 elts 3 cblk \%BLANK cndx 2 same 1 flags 1 1 0 0 1 0 0 0} \Line{37}{ end} \Line{38}{} \Line{39}{ comblocks 1} \Line{40}{ block \%BLANK class 2 type 11} \Line{41}{ module CALC file projcom.f line 2 top 4 flags 1 1 0 0} \Line{42}{ vars 3} \Line{43}{ var 1 name IOTA} \Line{44}{ class 0 type 1 size 0 dims 0 elts 1 flags 1 1 0 1 0 0 0 0} \Line{45}{ var 2 name GAMMA} \Line{46}{ class 0 type 2 size 0 dims 1 elts 3 flags 1 1 0 0 0 0 0 0} \Line{47}{ var 3 name BETA} \Line{48}{ class 0 type 3 size 0 dims 0 elts 1 flags 0 0 0 0 0 0 0 0} \Line{49}{} \section{Overall structure} The project file is a plain text file. It is line-oriented. Items on a line are not organized by columns, but simply separated by blank spaces. (In the example above, some lines have been broken for printing, but they are single lines in the original. The line numbers make clear where each line actually begins.) Throughout the file, lowercase letters are used for project-file keywords, and uppercase for the names of program identifiers. File names retain the case used by the operating system to refer to them. Most numeric items can have any value greater than or equal to 0, but flags can only be 0 for false and 1 for true. The project file consists of four main sections: a {\em preamble} (lines 1--2), an {\em entries} section (lines 3--27), an {\em externals} section (lines 28--38), and a {\em common block} section (lines 39--49). (These line numbers, and all line numbers in the description below, refer to this example. For other instances, all except the preamble line numbers will vary.) \section{Preamble} Line 1 is a magic cookie to identify the file as an {\tt ftnchek} project file and to indicate the project-file version number (currently P3). The {\tt F} is in column 1. If {\tt ftnchek} reads a project file with a different version number, it prints an error message and exits. Line 2 specifies the source file name. The keyword {\tt file} is unvarying. {\em Note:} Subsequent nonblank lines of the file are all indented by one blank space. \section{Entries section} This section (lines 3--27) lists the entry points of all the subprograms defined in the source file. The first line of this section (line 3) has the keyword {\tt entries} and the number of entry points in the following list. Then for each of the entry points, there is a sequence of lines as follows: \begin{itemize} \item {\tt entry} line (lines 4, 9, 19) giving the name of the entry point, its storage {\tt class} (subprograms are always class 1), its data {\tt type} (see list of {\tt \#define type\_UNDECL} et al.\ in {\tt symtab.h}), its type {\tt size} (usually 0 for default, but may have other values from, e.g. {\tt INTEGER*8} declarations), and {\tt flags}: {\tt used\_flag} (entry is referenced in a {\tt CALL} or by use as a function anywhere in the file), {\tt set\_flag} (function name is given a value for return), {\tt invoked\_as\_func} (used as a function, i.e. in an expresssion rather than a {\tt CALL} anywhere in the file), {\tt declared\_external} (named in an {\tt EXTERNAL} statement anywhere in the file), {\tt library\_module} (processed in {\tt -library} mode). There are three additional values (all 0) to allow for future flags. This information comes from the {\tt Gsymtab} entry (in {\tt symtab.h}) for the entry point. \item {\tt defn} line (lines 5, 10, 19) with just the keyword {\tt defn}. \item {\tt module} line (lines 6, 11, 20) giving name of subprogram containing the entry point, the {\tt file} name (can be different from line 2 if include files are used), {\tt line} number of entry point in source file, line number in {\tt top}-level file (this will be the same if not in an include file, otherwise it is where the outermost {\tt INCLUDE} statement is located), storage {\tt class}, data {\tt type} and type {\tt size} of module (meanings as in {\tt entry} line, should be the same values), and {\tt flags} {\tt is\_defn}, {\tt is\_call}, {\tt external\_decl}, {\tt actual\_arg} identifying the nature of the definition ({\tt is\_defn} is always 1, and the other flags 0 for entry definitions). This information comes from the {\tt ArgListHeader} (defined in {\tt symtab.h}) for this entry-point definition. \item {\tt args} line (lines 7, 12, 21) giving the number of arguments (parameters) of this entry point. This line is the beginning of a series (lines 7--8, 12--17, 21--26) terminated by an {\tt end} line. For each argument there are two lines: \begin{itemize} \item {\tt arg} line (lines 13, 15, 22, 24) giving the position in the argument sequence and the {\tt name} of the actual argument. \item {\tt class} line (lines 14, 16, 23, 25) giving the storage {\tt class} (see list of {\tt \#define class\_VAR} et al.\ in {\tt symtab.h} for definitions), data {\tt type}, type {\tt size}, number of array {\tt dims} (0 for scalars), and number of array elements {\tt elts} (1 for scalars). Next come {\tt cblk}, {\tt cndx}, and {\tt same} which are useful only for actual arguments. For dummy arguments they are always {\tt -}, {\tt 0}, and the argument's position in the argument list, respectively. Last come the {\tt flags} {\tt is\_lvalue} (always 1 for dummy arguments), {\tt set\_flag} (variable is assigned or otherwise possibly modified, e.g.\ by being passed to a subroutine), {\tt assigned\_flag} (variable is on left side of an assignment statement), {\tt used\_before\_set} (value is used before being possibly assigned) , {\tt array\_var} (variable is an array or array element), {\tt array\_element} (variable is an array element), {\tt declared\_external} (argument is declared in an {\tt EXTERNAL} statement), and {\tt active\_do\_var} (variable is the index of a {\tt DO} loop, and call is within the range of that {\tt DO}; always 0 for dummy arguments). This information is taken from the {\tt ArgListElement} entry (defined in {\tt symtab.h}) for the argument. \end{itemize} \item {\tt end} line (lines 8, 17,26) marking the end of the list of arguments for the entry point. \end{itemize} A blank line (line 27) marks the end of the entries section. \section{Externals section} This section (lines 28--38) lists the external references made from the subprograms in the source file. It is very similar in form to the entries section (in fact they are produced by the same code, differing only in that the keyword {\tt entry} is used instead of {\tt defn} to mark successive externals. The first line of this section (line 28) has the keyword {\tt externals} and the number of external references in the following list. This number counts \emph{separate} references to an external; that is, a given external can occur several times if it is referenced several times. However, if the external reference is resolved by a subprogram defined within the same source file, only one instance (or none in {\tt -library} mode) of a reference to that external is retained for the project file. If you want all the references to each external to be retained, compile {\tt ftnchek} with the macro {\tt PROJ\_KEEPALL} defined, or split the source file into separate files, one file for each subprogram. For each of the external references, there is a sequence of lines as follows. \begin{itemize} \item {\tt external} line (line 29) giving the name of the external and other information the same as described above for {\tt entry} lines in the {\tt entries} section. \item {\tt call} line (line 30) with just the keyword {\tt call}. \item {\tt module} line (line 31) giving the name of the subprogram containing the external reference, and other information as described above for {\tt module} lines in the {\tt entries} section. The difference is that for externals, the flag {\tt is\_defn} is 0, and one of {\tt is\_call}, {\tt external\_decl}, or {\tt actual\_arg} will be 1 to indicate how the external was referenced. Here {\tt is\_call} signifies an actual {\tt CALL} or the use of a function in an expression, {\tt external\_decl} means the reference is in an {\tt EXTERNAL} declaration, and {\tt actual\_arg} means the reference was generated by passing the external as an actual argument to a subprogram. \item {\tt args} line (line 32) giving the number of actual arguments of this external reference. This line is the beginning of a series (lines 32--37) terminated by an {\tt end} line. For each argument there are two lines: \begin{itemize} \item {\tt arg} line (lines 33, 35) giving the position in the argument sequence and the name (or text if an expression) of the actual argument. (The text may be incomplete if longer than a limit {\tt MAXEXPRTEXT} set in {\tt ftnchek.h}.) \item {\tt class} line (lines 34, 36) giving the storage class and other information about the actual argument, as described above for {\tt class} lines for dummy arguments in the entries section. The differences are that for actual arguments that are common variables, {\tt cblk} gives the name of the common block containing the actual argument (the special indicator {\tt -} signifies that the variable is not in common) and {\tt cndx} the position in common (counting from 1 by variables, not by storage location). This index is 0 for variables that are not in common. Next is {\tt same} which gives the position in the argument list of an argument that is aliased to this one (equals its own index if no aliasing). \end{itemize} \item {\tt end} line (line 37) marking the end of the list of arguments for the entry point. \end{itemize} A blank line (line 38) marks the end of the entries section. \section{Common block section} This section (lines 39--49) lists common block declarations in the source file. If there are multiple subprograms in the source file declaring the same common block, all of the declarations are retained, unless the project file is created in {\tt -library} mode, in which case only one instance of a declaration is retained. The first line (line 39) of this section has the keyword {\tt comblocks} and the number of common block declarations retained from the source file. (This will be just one instance of each block if the project file was created in library mode, otherwise the number will be the sum of all declarations of all blocks.) Then for each of the entry points, there is a sequence of lines as follows: \begin{itemize} \item {\tt block} line (line 40) giving the block name, storage {\tt class} (always 2) and data {\tt type} (always 11). This information comes from the {\tt Gsymtab} entry for the block. \item {\tt module} line (line 41) giving the name of the subprogram declaring the block, the {\tt file} name, and location information. As the example illustrates, if the declaration is in an include file, the {\tt file} name on this line is the include file containing the common declaration and the {\tt line} number is the line of the declaration within the include file, while the {\tt top} line number is the location of the {\tt INCLUDE} statement in the top-level source file. After the location information there are flags {\tt any\_used} (any variable in the block is used), {\tt any\_set} (any variable in the block is possibly assigned), {\tt saved} (the block is named in a {\tt SAVE} statement), and one placeholder value for a possible future flag (always 0). This information comes from the {\tt ComListHeader} for the block declaration. \item {\tt vars} line (line 42) giving the number of variables in the block. An array counts as a single variable. This line is the beginning of a series (lines 43--48). Unlike its counterparts in the entries and externals sections, this series is \emph{not} terminated by an {\tt end} line. For each argument there are two lines: \begin{itemize} \item {\tt var} line giving the position in the block and the {\tt name} of the variable. \item {\tt class} line giving the storage {\tt class} (always 0), data {\tt type}, and {\tt size}, number of array dimensions {\tt dims} and elements {\tt elts}, and {\tt flags} {\tt used} (value is used), {\tt set} (variable is assigned or otherwise possibly modified), {\tt used\_before\_set} (value is used before being possibly assigned), {\tt assigned} (variable is on left side of an assignment statement), and four placeholding zeroes for possible future flags. This information is from the {\tt ComListElement} entry for the variable. \end{itemize} \end{itemize} The last line (line 49) of the common block section is blank. This is the last line of the project file. \end{document} Original source of projex.f C Program used as example in project-file documentation. C These comments are mainly to make the program not start on line 1. PROGRAM CALC INCLUDE 'projcom.f' READ(*,*) NUM IOTA = NUM*NUM CALL SUMUP(NUM,GAMMA) WRITE(*,*) IOTA, (GAMMA(I),I=1,3) END SUBROUTINE SUMUP(M,XRAY) DIMENSION XRAY(M) XRAY(1) = 1.0 DO 10 I=2,M XRAY(I) = XRAY(I-1)+I 10 CONTINUE RETURN ENTRY SUMDOWN(M,XRAY) XRAY(M) = 1.0 DO 20 I=M-1,1,-1 XRAY(I) = XRAY(I-1)+I 20 CONTINUE END Original projex.prj file FTNCHEK_ P3 file projex.f entries 3 entry CALC class 1 type 12 size 0 flags 1 0 0 0 0 0 0 0 defn module CALC file projex.f line 3 top 3 class 1 type 12 size 0 flags 1 0 0 0 args 0 end entry SUMUP class 1 type 10 size 0 flags 1 0 0 0 0 0 0 0 defn module SUMUP file projex.f line 10 top 10 class 1 type 10 size 0 flags 1 0 0 0 args 2 arg 1 name M class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 0 0 1 0 0 0 0 arg 2 name XRAY class 0 type 2 size 0 dims 1 elts 0 cblk - cndx 0 same 1 flags 1 1 1 0 1 0 0 0 end entry SUMDOWN class 1 type 10 size 0 flags 0 0 0 0 0 0 0 0 defn module SUMUP file projex.f line 17 top 17 class 1 type 10 size 0 flags 1 0 0 0 args 2 arg 1 name M class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 0 0 1 0 0 0 0 arg 2 name XRAY class 0 type 2 size 0 dims 1 elts 0 cblk - cndx 0 same 1 flags 1 1 1 0 1 0 0 0 end externals 1 external SUMUP class 1 type 10 size 0 flags 1 0 0 0 0 0 0 0 call module CALC file projex.f line 7 top 7 class 1 type 10 size 0 flags 0 1 0 0 args 2 arg 1 name NUM class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 0 flags 1 1 1 0 0 0 0 0 arg 2 name GAMMA class 0 type 2 size 0 dims 1 elts 3 cblk %BLANK cndx 2 same 1 flags 1 1 0 0 1 0 0 0 end comblocks 1 block %BLANK class 2 type 11 module CALC file projcom.f line 2 top 4 flags 1 1 0 0 vars 3 var 1 name IOTA class 0 type 1 size 0 dims 0 elts 1 flags 1 1 0 1 0 0 0 0 var 2 name GAMMA class 0 type 2 size 0 dims 1 elts 3 flags 1 1 0 0 0 0 0 0 var 3 name BETA class 0 type 3 size 0 dims 0 elts 1 flags 0 0 0 0 0 0 0 0 ftnchek-3.3.1/ftnchek-3.3.1.lsm0000644000031000002260000000156110201510053016343 0ustar moniotstaff00000000000000Begin3 Title: FTNCHEK Version: 3.3.1 Entered-date: 06 February 2005 Description: Static analyzer for Fortran 77 programs. It is designed to detect errors in a Fortran program that a compiler usually does not catch. Keywords: Fortran f77 checker analyzer Author: moniot@fordham.edu (Robert Moniot) Maintained-by: moniot@fordham.edu (Robert Moniot) Primary-site: ibiblio.org:/pub/Linux/devel/lang/fortran 881 bytes ftnchek-3.3.1.lsm 1028 kB ftnchek-3.3.1.tar.gz Alternate-site: ftp.netlib.org:/fortran 1028 kB ftnchek.tar.gz Original-site: ftp.dsm.fordham.edu:/pub/ftnchek 1028 kB ftnchek-3.3.1.tar.gz Platforms: (optional) xvcg to view call graphs in VCG format; gawk >= 2.0 to use dcl2inc component. Copying-policy: MIT End ftnchek-3.3.1/Makefile.in0000644000031000002260000007021310145677454015643 0ustar moniotstaff00000000000000#======================================================================= # $Id: Makefile.in,v 1.76 2004/11/14 15:52:12 moniot Exp $ # # UNIX version of Makefile for Fortran program checker ftnchek # # User target list: # all build ftnchek and its man page # blurb.txt brief descriptive document about ftnchek # check run validation test suite # clean remove unnecessary intermediate files # clobber make clean, and remove ftnchek executable # dcl2inc.doc plain text form of documentation # dcl2inc.ps PostScript form of documentation # distclean remove everything not in the distribution # docs documentation files # fortran.c translates yacc code to C (made from fortran.y) # ftnchek ftnchek executable program # ftnchek.1 UNIX manual page (made from fortran.man) # ftnchek.doc plain text form of documentation # ftnchek.hlp VMS HELP library source # ftnchek.ps PostScript form of documentation # htmlclean remove unneeded files from html directory # htmldocs hypertext form of documentation # install install ftnchek and dcl2inc and their man pages # install-exe install ftnchek and dcl2inc executables # install-lisp install emacs ftnchek-mode lisp file # install-man install man pages on most UNIX systems # install-man-sgi install man pages on SGI systems # manpage same as ftnchek.1 # mostlyclean same as clean # prog same as ftnchek # realclean same as clobber # uninstall remove everything "make install" installs # # Developer target list: # catman create "cat" format manpages # catman.tar create "cat" format manpage tar file # devel build development version (extra debugging). # lint run lint on source code # generic-config create generic config.h etc for distribution # maintainer-clean distclean, then things maintainer can rebuild # pretar get ready to make distribution tar file # spotless distclean, then remove ps, html and text docs # TAGS emacs editor tags file # tags ex and vi editor tags file # tar distribution tar file # testclean remove unnecessary files from test directory # zip distribution zip file for MS-DOS # # Not a target, made by configure: # dcl2inc Shell script to convert decls to includes # # Object file targets see list of objects at OBJS # # # # Copyright (c) 2001 by Robert K. Moniot. # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Acknowledgement: the above permission notice is what is known # as the "MIT License." # # # Acknowledgements and thanks to Nelson H. F. Beebe of the University # of Utah for improvements to this Makefile. # [25-Apr-1994] #======================================================================= # These definitions should be customized for your local conventions # if you want to do "make install" or "make uninstall". # prefix is the root of the destination for installing things. # bindir is directory for executables, mandir for man pages. # manext is the extension on man pages, including the dot. # libdir is the directory for library files (dcl2inc.awk). It must # agree with the libdir defined in dcl2inc as made by configure. # lispdir is where to put ftnchek.el. prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datadir = @datadir@ mandir = @mandir@ manext = .1 sgimansubdir = @sgimansubdir@ libdir = @libdir@/ftnchek lispdir = @lispdir@ # Define suffix for executables, for non-unix systems which have one. EXE = @EXE@ #EXE = .exe # Define suffix for scripts, to go on the end of dcl2inc script. CMD = @CMD@ #CMD = .cmd #CMD = .bat # The following definitions are set for your system by configure. # In non-generic Makefile these should all be path-qualified except # for *_NAME. If path is missing then configure didn't find it. # AWK is any awk; NAWK is the enhanced awk needed by dcl2inc. # AWK_NAME and YACC_NAME have the pathless names to simplify tests where the # particular flavor of the utility matters. NROFF is the nroff program, # NROFFPLAIN has flags to suppress escape sequences. PWD_PROG is so named # to avoid collision with shell variable PWD. ZIPTEXT is zip program # with flag for Unix->DOS line-end conversion, ZIP is default mode. AWK = @AWK@ AWK_NAME = @AWK_NAME@ CC = @CC@ CHMOD = @CHMOD@ CMP = @CMP@ CP = @CP@ DIFF = @DIFF@ EMACS = @EMACS@ EQN = @EQN@ GREP = @GREP@ LINT = @LINT@ MANtoHTML = @MANtoHTML@ MANtoPS = @MANtoPS@ MKDIR = @MKDIR@ MV = @MV@ NAWK = @AWK@ NROFF = @NROFF@ NROFFPLAIN = @NROFFPLAIN@ PATCH = @PATCH@ PWD_PROG = @PWD_PROG@ RM = @RM@ RMDIR = @RMDIR@ SED = @SED@ SHELL = @SH@ SOELIM = @SOELIM@ STRIP = @STRIP@ TAR = @TAR@ TBL = @TBL@ YACC = @YACC@ YACC_NAME = @YACC_NAME@ ZIP = @ZIP@ ZIPTEXT = $(ZIP) -l # The following is only used for targets ftnchek.doc and ftnchek.hlp # which are not needed for unix platforms. It removes control chars # and converts tabs to blanks. Normally COL=col -bx but if you don't # have it, can make do with cat. COL = @COL@ # Editor tags file support CTAGS = @CTAGS@ CTAGSFLAGS = -t ETAGS = @ETAGS@ # The following suffixes are for making various forms of documentation .SUFFIXES: .cat .catman .doc .man .ps .i # Pack is needed only for install-man-sgi target PACK = @PACK@ FTNCHEK = ./ftnchek$(EXE) # OPTIONS is used to define various characteristics. Most commonly # needed ones are given below; uncomment whichever you like. # See ftnchek.h for others, with their defaults and explanations. # OPTIONS shouldn't include things controlled by "configure". # To include your own options without touching the Makefile, say # make "OPTIONS= " # If you want -f77=all to be the default, uncomment this. #OPTIONS = -DSTRICT_SYNTAX # OPT is optimization level # CFLAGS is used to define the operating system and options # LDLIBS gives any system-specific libraries for linker # LDFLAGS gives linker options # YFLAGS specifies yacc options OPT = @OPT@ CFLAGS = @CFLAGS@ $(DEBUG_FLAGS) $(DEVEL_CFLAGS) LDLIBS = @LDLIBS@ LDFLAGS = @LDFLAGS@ $(DEBUG_FLAGS) $(DEVEL_LDFLAGS) YFLAGS = @YFLAGS@ -d # fortran.o first because of possible remake if tokdefs.h changes (see below) OBJS = fortran.o advance.o argcheck.o calltree.o comcheck.o exprtype.o \ forlex.o ftnchek.o include.o intake.o intrins.o \ iokeywds.o keywords.o labels.o \ loccheck.o makedcls.o makehtml.o message.o options.o pgsymtab.o \ plsymtab.o prlists.o prlocsym.o project.o \ symspace.o symtab.o symutils.o utils.o DOCS = README INSTALL LICENSE PATCHES FAQ ToDo project.magic \ average.f average.out correct.f \ blurb.txt dcl2inc.doc dcl2inc.man dcl2inc.ps \ ftnchek.doc ftnchek.hlp ftnchek.man ftnchek.ps html \ macro-doc.txt project-doc.tex \ $$dirname.lsm # the above expands to ftnchek-x.y.z.lsm in make tar UNIX_BUILDFILES = Makefile.in configure configure.in config.guess config.sub \ config.h.in configure.generic install-sh \ add_html_refs.sh make_html.sh \ make_blockmatch.pl make_blockmatch.pl.in VMS_BUILDFILES = build.com build-vax.com cc.com link.com check.com OS2_BUILDFILES = ftnchek.def configure_os2.cmd OTHER_BUILDFILES= makefile.bcc32 \ makefile.generic makefile.mpw \ ftnchek.dsp ftnchek.dsw BUILDFILES = $(UNIX_BUILDFILES) $(VMS_BUILDFILES) $(OS2_BUILDFILES) \ $(OTHER_BUILDFILES) SRCS = advance.c advance.h argcheck.c block_match.h \ calltree.c comcheck.c config-generic.h config-win32.h exprtype.c \ forlex.c forlex.h fortran.y fortran.c ftnchek.c ftnchek.h \ include.c intake.c intrins.c intrins.h iokeywds.h \ iokeywds_enum.h iokeywds.c \ keywords.c labels.c \ loccheck.c loccheck.h makedcls.c makehtml.c message.c options.c \ options.h pgsymtab.c pgsymtab.h plsymtab.c plsymtab.h \ prlists.c prlocsym.c project.c symspace.c \ symspace.h symtab.c symtab.h symutils.c symutils.h tokdefs.h \ utils.h utils.c SCRIPTS = dcl2inc dcl2inc.in dcl2inc.awk dcl2inc.awk.in \ man2ps ftnchek.el TESTDIR = test HTMLDIR = html # The following defines all files to go into distribution tar file DISTFILES = $(DOCS) $(BUILDFILES) $(SRCS) $(SCRIPTS) $(TESTDIR) # The following defines all files to go into MS-DOS distribution zip file. # BINARY_ZIPFILES are those that should not undergo the LF->CR-LF replacement. ZIPFILES = $(DISTFILES) BINARY_ZIPFILES= configure_os2.cmd test/*.bat test/cmp.exe # The following defines all files that go into the auxiliary catman tar file CATMAN = dcl2inc.catman ftnchek.catman # Files in the following list are created by the configure script. # Generic versions for the distribution are made by the generic-config # target. CONFIGURED_FILES = makefile.generic dcl2inc.awk dcl2inc make_blockmatch.pl \ test/Makefile test/Compare.sh config-generic.h #======================================================================= # Rule to run source thru preprocessor only; useful for tracing down # compilation problems. Blank lines are removed for convenient viewing. .c.i: $(CC) -E -I. $(DEFS) $(CPPFLAGS) $(CFLAGS) $< 2>&1 | \ grep -v '^[ ]*$$' > $@ #======================================================================= all: prog manpage # N.B. dcl2inc is also a prog but it is made by configure. A generic # copy of it is provided with the distribution also, in case the user # doesn't want to or can't use configure. prog: ftnchek$(EXE) # The manpage target is a "clean-ed up" version of the Unix man page, # with conditional text, used by developer to create other forms of # documentation, removed. manpage: ftnchek$(manext) # Development version includes debugging machinery not normally used. It # evaluates some floating-point expressions including sqrt, so needs math lib. devel: $(MAKE) prog DEVEL_CFLAGS='-DDEVELOPMENT' LDLIBS='$(LDLIBS) -lm' check: prog cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -s precheck cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -i -s check lint: $(LINT) $(LINTFLAGS) $(OBJS:.o=.c) -lm # Remove intermediate files that are not required after the program is # built. clean mostlyclean: -$(RM) *.o -$(RM) \#* -$(RM) a.out -$(RM) *~ -$(RM) core -$(RM) y.tab.h -$(RM) config.status config.log config.cache -$(RM) ftnchek.html.orig ftnchek.html.rej # Remove almost everything that make can rebuild. We do not remove # fortran.c since some places don't have yacc or bison. clobber realclean: clean -$(RM) ftnchek$(EXE) # Remove everything that make can rebuild, preparatory to making a # distribution version. We intentionally do NOT remove .ps and .doc # files, because some UNIX systems lack nroff/troff/groff. distclean: realclean testclean htmlclean -$(RM) *.dcl -$(RM) cscope.out -$(RM) tags -$(RM) TAGS -$(RM) ftnchek$(manext) -$(RM) dcl2inc.cat ftnchek.cat testclean: cd $(TESTDIR); $(MAKE) distclean htmlclean: cd $(HTMLDIR); $(MAKE) -f ../Makefile clean maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -$(RM) Makefile -$(RM) configure -$(RM) fortran.c -$(RM) *.catman ftnchek$(EXE): $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -o ftnchek$(EXE) $(OBJS) $(LDLIBS) # N.B. tokdefs.h is copy of y.tab.h used to avoid remaking stuff when # grammar changes but not tokens. If the parser is made by bison, # it is edited to make token names in "parse error" messages more readable. # Also concatenate backslash-continued #if lines, which some older # compilers don't like. # The following copies y.tab.h to tokdefs.h if changed, then aborts make, # since dependencies may have changed. fortran.c: fortran.y $(YACC) $(YFLAGS) fortran.y @if test "$(YACC_NAME)" = "bison$(EXE)" ; \ then \ $(SED) -e '/yytname\[] =/,/^};/s/tok_//g' \ -e '/yytname\[] =/,/^};/s/_/ /g' \ -e '/yytname\[] =/,/^};/s/EOS/end of statement/g' \ -e ':CAT' -e '/^# *if.*\\$$/N' -e 's/\\\n//' -e tCAT \ y.tab.c > fortran.c ; \ $(RM) y.tab.c ; \ else \ $(MV) y.tab.c fortran.c ; \ fi @if $(CMP) -s y.tab.h tokdefs.h ; then true ; else \ echo; echo tokdefs.h changed -- repeat make ; \ $(CP) y.tab.h tokdefs.h; \ false ; \ fi # If tokdefs.h changes, update the lookup table used by block-balancing code. block_match.h: tokdefs.h ./make_blockmatch.pl > block_match.h # This target makes an enum type for doing reverse lookup in the iokeywords table. # The uniq filter is needed since some keywords may have alternate definitions depending # on #defines. These are always adjacent. The last sed command removes # comma from last item in enum list, in accordance with c89. iokeywds_enum.h: iokeywds.h sed -n '/^} io_keywords\[\]={/,/^};$$/s/^{"\([^"]*\).*$$/IOKW_\1,/p' iokeywds.h \ | uniq \ | sed '$$s/,$$//' > $@ # Documentation targets: If you make changes to the documentation, # you should edit only ftnchek.man and then re-make these targets. # If ftnchek.1 fails to make, ftnchek.man is usable directly (after # applying soelim) except that some troff-like processors may not # give satisfactory results. docs: average.out blurb.txt ftnchek.doc ftnchek.hlp \ htmldocs ftnchek.ps dcl2inc.doc dcl2inc.ps # Following sed script trims out the if-else machinery contained in # ftnchek.man to produce a clean nroff document. The lines of the # sed script correspond to the following actions: # 1. remove text between lines of form ``.if \nh \{'' or .ie \nh \{'' # and lines of form ``\}'' (these are the help-related additions) # 2. remove lines of form ``.if !\nh \{'' (these preface man text) # Also remove ``.if !\nb \{'' which are for blurb. # 3. remove lines of form ``.el \{'' (start of the else sections of # the .if's of step 1) # 4. remove lines of form ``\}'' (closures of step 3 lines) # 5. remove lines of form ``.ie \nh text'' (one-liner help text) # 6. change lines of form ``.el \nh text'' to ``text'' (these are # one-liner man text) # 7. change lines of form ``.if !\nh text'' to ``text'' (ditto) ftnchek$(manext): ftnchek.man average.f average.out correct.f @if test -x $(SOELIM) ; \ then \ echo "Making cleaned-up manpage ftnchek$(manext)" ; \ $(SOELIM) ftnchek.man | \ $(SED) -e '/^\.i[fe] \\nh \\{/,/^\\}$$/d' \ -e '/^\.if !\\n[bh] \\{/d' \ -e '/^\.el \\{/d' \ -e '/^\\}/d' \ -e '/^\.i[fe] \\nh /d' \ -e 's/^\.el *\(.*\)$$/\1/' \ -e 's/^\.if !\\nh *\(.*\)$$/\1/' \ > ftnchek$(manext) ; \ else \ echo "$(SOELIM) not available: cannot make cleaned-up manpage ftnchek$(manext)." ; \ echo "You must use the catman documentation (provided separately)." ; \ fi # .doc files are ascii text form of documentation. .man.doc: $(TBL) $< | $(NROFFPLAIN) -man | $(COL) > $@ # ftnchek.ps is PostScript form of documentation. For ftnchek.ps we use # cleaner ftnchek.1 rather than ftnchek.man. ftnchek.ps: ftnchek$(manext) $(TBL) ftnchek.ps # Other man files are clean enough as they are. .man.ps: $(TBL) < $< | $(EQN) | $(MANtoPS) > $@ # $(HTMLDIR)/toc.html represents all the files in the html directory. They # are built from ftnchek.html by the script make_html.sh whenever # ftnchek.html changes. Note: edits should be done to ftnchek.man if # they affect content, to ftnchek.html if they affect html form. Do # not edit anything in html directory. htmldocs: $(HTMLDIR)/toc.html $(HTMLDIR)/toc.html: ftnchek.html ./make_html.sh ftnchek.html # ftnchek.html is produced from ftnchek.1 by MANtoHTML followed by a # simple script to add internal links to option descriptions, then # lightly edited. Edits were initially by hand, now are saved in # ftnchek.html.patch (not distributed) to be re-applied each time. # Any time new edits are done to ftnchek.html, the patch file should # be remade. Also make ftnchek.html.patch after editing ftnchek.man, # so that the patch offsets don't get too large for patch to succeed. ftnchek.html: ftnchek.html.orig $(CP) ftnchek.html.orig ftnchek.html if test -f ftnchek.html.patch ; \ then \ $(PATCH) < ftnchek.html.patch ; \ fi ftnchek.html.orig: ftnchek$(manext) $(MANtoHTML) ftnchek$(manext) | ./add_html_refs.sh > ftnchek.html.orig ftnchek.html.patch: ftnchek.html.orig ftnchek.html @echo "It is normal for the next command to report an error" -$(DIFF) -c ftnchek.html.orig ftnchek.html > ftnchek.html.patch # blurb.txt is an ascii file for informational mailings. blurb.txt: ftnchek.man $(TBL) ftnchek.man | $(NROFFPLAIN) -man -rb1 | $(COL) >blurb.txt # ftnchek.hlp is a VMS HELP library source document: # create ftnchek.hlb with $ LIBR/CREATE/HELP FTNCHEK.HLB FTNCHEK.HLP # The leading and trailing newlines in ftnchek.hlp should be removed. ftnchek.hlp: ftnchek.man $(SED) -e '1d' ftnchek.man | \ $(TBL) | $(NROFFPLAIN) -man -rh1 | $(COL) | \ $(SED) -e 's/^-\([a-zA-Z][a-zA-Z]*\)/\/\1/' \ -e 's/\([^a-zA-Z]\)-\([a-zA-Z][a-zA-Z]*\)/\1\/\2/g' \ >ftnchek.hlp # Rebuild average.out when version changes. (We don't put the # dependency on ftnchek to avoid building ftnchek just for docs.) average.out: ftnchek.h $(FTNCHEK) -list -symtab average > average.out # Install program and documentation on system. Obsolete fcl2vcg script # & doc is removed if present. Old program is first deleted, in case # it is a hard link to specific previous version, so that version does # not get overwritten. install: install-exe @INSTALL_MAN@ install-lisp install-exe: ftnchek$(EXE) dcl2inc$(CMD) -$(RM) $(bindir)/ftnchek$(EXE) -$(MKDIR) -p $(bindir) $(CP) ftnchek$(EXE) $(bindir) -$(STRIP) $(bindir)/ftnchek$(EXE) $(CHMOD) 755 $(bindir)/ftnchek$(EXE) -$(MKDIR) -p $(libdir) $(CP) dcl2inc.awk $(libdir)/dcl2inc.awk $(CHMOD) 644 $(libdir)/dcl2inc.awk $(CP) dcl2inc$(CMD) $(bindir)/dcl2inc$(CMD) $(CHMOD) 755 $(bindir)/dcl2inc$(CMD) -$(RM) $(bindir)/fcl2vcg # Install man pages, taking care to remove old formatted ones, because # many man implentations fail to compare time stamps of raw and # formatted files, and will show out-of-date formatted files. install-man: ftnchek$(manext) -$(MKDIR) -p $(mandir)/man1 $(CP) dcl2inc.man $(mandir)/man1/dcl2inc$(manext) -$(RM) $(mandir)/cat1/dcl2inc$(manext) $(CHMOD) 644 $(mandir)/man1/dcl2inc$(manext) $(CP) ftnchek$(manext) $(mandir)/man1/ftnchek$(manext) -$(RM) $(mandir)/cat1/ftnchek$(manext) $(CHMOD) 644 $(mandir)/man1/ftnchek$(manext) -$(RM) $(mandir)/man1/fcl2vcg$(manext) -$(RM) $(mandir)/cat1/fcl2vcg$(manext) # IRIX uses pre-formatted, packed man pages and nroff is not bundled with it. install-man-sgi: catman if $(PACK) dcl2inc.cat ; \ then \ $(MV) dcl2inc.cat.z $(mandir)$(sgimansubdir)/dcl2inc.z ; \ $(CHMOD) 644 $(mandir)$(sgimansubdir)/dcl2inc.z ; \ fi if $(PACK) ftnchek.cat ; \ then \ $(MV) ftnchek.cat.z $(mandir)$(sgimansubdir)/ftnchek.z ; \ $(CHMOD) 644 $(mandir)$(sgimansubdir)/ftnchek.z ; \ fi -$(RM) $(mandir)/fcl2vcg.z # The catman target makes formatted ("cat") versions of the manpages # for use in install-man-sgi. These files are not in the standard # distribution but are available separately (with suffix catman) for # sites that do not have nroff. If this Unix does not have nroff, # then if user has obtained the catman versions, use them. Otherwise # inform them and use the flat ascii files as fallback. catman: dcl2inc.cat ftnchek.cat .man.cat: @if test -x $(TBL) -a -x $(NROFF) ; then \ echo '$(TBL) $< | $(NROFF) -man > $@' ; \ $(TBL) $< | $(NROFF) -man > $@ ; \ else \ if test -f $*.catman ; then \ echo cp $*.catman $@ ; \ cp $*.catman $@ ; \ else \ echo "--> No catman documentation found -- see INSTALL." ; \ echo "Using plain text documentation instead." ; \ echo cp $*.doc $@ ; \ cp $*.doc $@ ; \ fi ; \ fi # The emacs lisp file will be installed only if lispdir exists. It will # be byte-compiled if emacs is present. install-lisp: @if test -d "$(lispdir)" ; \ then \ echo $(CP) ftnchek.el $(lispdir)/ftnchek.el ; \ if $(CP) ftnchek.el $(lispdir)/ftnchek.el ; \ then \ if test -x "$(EMACS)" ; \ then \ $(EMACS) -batch -f batch-byte-compile $(lispdir)/ftnchek.el ; \ else \ echo "If desired, use emacs to byte-compile $(lispdir)/ftnchek.el"; \ fi \ fi \ else \ echo "$(lispdir) does not exist -- ftnchek.el not installed." ; \ echo "If you want to install ftnchek.el, create $(lispdir)" ; \ echo "or re-run make install with 'lispdir=path-to-site-lisp'" ; \ fi # Remove everything that the install target installed. uninstall: -$(RM) $(bindir)/dcl2inc$(CMD) -$(RM) $(bindir)/ftnchek$(CMD) -$(RM) $(libdir)/dcl2inc.awk -$(RM) $(mandir)/cat1/dcl2inc$(manext) -$(RM) $(mandir)/cat1/ftnchek$(manext) -$(RM) $(mandir)/dcl2inc.z $(mandir)/ftnchek.z # SGI -$(RM) $(mandir)/man1/dcl2inc$(manext) -$(RM) $(mandir)/man1/ftnchek$(manext) -$(RM) $(lispdir)/ftnchek.el -$(RMDIR) $(libdir) # WARNING: do NOT execute this target, unless you have nroff/troff or groff # to recreate the formatted documentation files. spotless: distclean $(RM) blurb.txt $(RM) dcl2inc.doc ftnchek.doc $(RM) dcl2inc.ps ftnchek.ps $(RM) ftnchek.hlp # ex and vi editor tags file tags: $(SRCS) $(CTAGS) $(CTAGSFLAGS) $(SRCS) # emacs editor tags file TAGS: $(SRCS) $(ETAGS) $(SRCS) #======================================================================= # Object file dependencies on include files advance.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h argcheck.o: config.h ftnchek.h pgsymtab.h symtab.h calltree.o: config.h ftnchek.h pgsymtab.h symtab.h comcheck.o: config.h ftnchek.h pgsymtab.h symtab.h exprtype.o: config.h ftnchek.h symtab.h tokdefs.h forlex.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h fortran.o: config.h ftnchek.h symtab.h block_match.h fortran.c ftnchek.o: config.h ftnchek.h intrins.h options.h utils.h include.o: config.h ftnchek.h symtab.h forlex.h advance.h intake.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h intrins.o: config.h ftnchek.h intrins.h symtab.h iokeywds.o: config.h ftnchek.h symtab.h tokdefs.h iokeywds.h iokeywds_enum.h utils.h keywords.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h labels.o: config.h ftnchek.h plsymtab.h symtab.h loccheck.o: config.h ftnchek.h loccheck.h plsymtab.h symtab.h makedcls.o: config.h ftnchek.h plsymtab.h symtab.h makehtml.o: config.h ftnchek.h plsymtab.h symtab.h tokdefs.h advance.h message.o: config.h ftnchek.h options.o: config.h ftnchek.h options.h utils.h pgsymtab.o: config.h ftnchek.h pgsymtab.h symtab.h plsymtab.o: config.h ftnchek.h plsymtab.h symtab.h prlists.o: config.h ftnchek.h symtab.h symutils.h prlocsym.o: config.h ftnchek.h loccheck.h plsymtab.h symtab.h project.o: config.h ftnchek.h symtab.h symspace.o: config.h ftnchek.h symtab.h symspace.h symutils.h symtab.o: config.h ftnchek.h iokeywds.h intrins.h symtab.h \ symspace.h symutils.h tokdefs.h symutils.o: config.h ftnchek.h symtab.h symutils.h utils.o: config.h utils.h #======================================================================= # The configure.generic script creates generic versions of CONFIGURED_FILES # for users on deficient Unix systems or using GNU software on non-Unix # platforms. It tries to put reasonably generic values in for all the # things that the configure script is supposed to handle. Pathnames # are removed since these may vary wildly. The rule also checks for # any unsubstituted items indicating configure.generic needs to be # updated. The config-generic.h produced here should need few if any # changes to serve as config.h on most recent 32-bit systems. # This target has no dependencies since its purpose is # to replace the developer's configured versions with the generic ones, # regardless of whether the .in files have changed. Note that # makefile.generic.in and config-generic.h.in are treated specially: # they are copies of Makefile.in and config.h.in respectively, but the # generic configured versions are not named Makefile and config.h, because # these are deliberately left out of the distribution. generic-config: $(CP) Makefile.in makefile.generic.in $(CP) config.h.in config-generic.h.in ./configure.generic $(CONFIGURED_FILES) $(RM) makefile.generic.in $(RM) config-generic.h.in chmod +x dcl2inc test/Compare.sh @if $(GREP) \ '@[^*@]*@' $(CONFIGURED_FILES) ; \ then \ echo '####################################################' ; \ echo '## FIX configure.generic TO SUBSTITUTE THE ABOVE. ##' ; \ echo '####################################################' ; \ fi # Here we provide rules for making the two CONFIGURED_FILES that are # not generated by "configure". This is mainly a convenience for the # new developer since it is not so obvious where they come from. They # are not needed for development but only for the distribution. They # are normally made by generic-config. makefile.generic: Makefile.in $(CP) Makefile.in makefile.generic.in ./configure.generic makefile.generic $(RM) makefile.generic.in config-generic.h: config.h.in $(CP) config.h.in config-generic.h.in ./configure.generic config-generic.h $(RM) config-generic.h.in #======================================================================= # This target warns if VMS build command files are out of date. The sed # command concatenates continuation lines, marked by "-" as last character. checkvmsbuild: @-for obj in $(OBJS:.o=) ; \ do \ for com in build.com build-vax.com ; \ do \ if grep -q "^\$$ @CC.* $$obj[ ]" $$com ; \ then true; else \ echo "Source $$obj missing from CC in $$com" ; \ fi ; \ if sed -e ':CAT' -e '/-$$/N' -e 's/-\n//' -e tCAT \ -e s/$$/,/ $$com | \ grep -q "^\$$ @LINK.*[ ,]$$obj," ; \ then true; else \ echo "Object $$obj missing from LINK in $$com" ; \ fi ; \ done; \ done # Target to make sure the DOS versions of test master files are # up to date dosokay: cd $(TESTDIR); $(MAKE) dosokay #======================================================================= # Making the distribution tar file. Dirname is name of current # directory. Makefile is not distributed because it is supposed # to be created by local configure. Files to archive are explicitly # named so that detritus from development will not be accidentally # included. However, test files are not listed separately so one # should make clean in $(TESTDIR)/ first. # # This target assumes GNU tar for the --exclude option. If you don't # have it, remove test/Makefile manually and use ``make tar TAR_EXCLUDE='' TAR_EXCLUDE = --exclude $$dirname/$(TESTDIR)/Makefile tar: dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; cd .. ; \ $(TAR) -cf $$dirname.tar $(TAR_EXCLUDE) \ `echo " "$(DISTFILES) | $(SED) "s% % $$dirname/%g"` # This target is for maintainer: generates the catman tar file for separate # distribution. catman.tar: $(CATMAN) dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; \ $(TAR) -cf ../$$dirname.catman.tar $(CATMAN) .cat.catman: $(CP) $< $@ # Make a distribution zipfile for MS-DOS/Windows/OS2. The -l changes \n # to \r\n. Then binary files and text files that already have \r\n are # replaced in binary mode. # Note that unlike tar, zip file names are relative to current directory. # Rule renames ftnchek-x.x.x to ftnchek-x_x_x for zip and lsm files. zip: dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; \ dosname=`echo $$dirname|$(SED) -e 's/\./_/g'` ; \ $(CP) $$dirname.lsm $$dosname.lsm ; \ dirname=$$dosname ; \ $(RM) ../$$dirname.zip ; \ $(ZIPTEXT) -r ../$$dirname.zip $(ZIPFILES) ; \ $(ZIP) ../$$dirname.zip $(BINARY_ZIPFILES) # Targets that should be freshened prior to making tar (so I don't put # stale ones into the distribution). pretar: docs generic-config clean testclean checkvmsbuild dosokay ftnchek-3.3.1/configure0000755000031000002260000070274010164601024015471 0ustar moniotstaff00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="ftnchek.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os YACC AWK CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT FPVERSION CHMOD CMP CP CTAGS DIFF EQN ETAGS GREP LINT MAKE MKDIR MV PATCH PRINTENV PWD_PROG RM RMDIR SED SH SOELIM TAR TBL ZIP PACK NROFF TROFF MANtoHTMLPROG STRIP COL FTNPP PERL CPP EGREP EMACS EXE CMD NROFFPLAIN MANtoPS MANtoHTML DCL2INC_REDIRECT OPT LDLIBS INSTALL_MAN lispdir sgimansubdir AWK_NAME YACC_NAME YFLAGS FILTER_H LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-submodel provide gcc -march submodel flag yes Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" if test -z "$YACC"; then { echo "$as_me:$LINENO: WARNING: Didn't find yacc or bison" >&5 echo "$as_me: WARNING: Didn't find yacc or bison" >&2;} YACC=yacc fi YACC_NAME=`echo "$YACC" | sed 's/ .*$//'` YFLAGS=`echo "$YACC" | sed 's/^[^ ]* //'` for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done if test "$AWK" = "awk"; then case $host_os in aix*) { echo "$as_me:$LINENO: WARNING: This awk might not work in dcl2inc. Need gawk or nawk" >&5 echo "$as_me: WARNING: This awk might not work in dcl2inc. Need gawk or nawk" >&2;} ;; esac fi if test "$AWK" = "gawk"; then DCL2INC_REDIRECT='> "/dev/stderr"' else DCL2INC_REDIRECT='| "cat 1>&2"' fi AWK_NAME=${AWK=awk} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_prog in fpversion do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_FPVERSION+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$FPVERSION"; then ac_cv_prog_FPVERSION="$FPVERSION" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_FPVERSION="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi FPVERSION=$ac_cv_prog_FPVERSION if test -n "$FPVERSION"; then echo "$as_me:$LINENO: result: $FPVERSION" >&5 echo "${ECHO_T}$FPVERSION" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$FPVERSION" && break done if test "$FPVERSION" ; then echo "$as_me:$LINENO: checking for a floating point option" >&5 echo $ECHO_N "checking for a floating point option... $ECHO_C" >&6 CG_FLAG=`$FPVERSION -foption` if test "CG_FLAG"; then CG_FLAG=-$CG_FLAG; fi echo "$as_me:$LINENO: result: $CG_FLAG " >&5 echo "${ECHO_T} $CG_FLAG " >&6 fi STDPATH=/bin:/usr/bin:/usr/ucb:/usr/5bin LOCALPATH=$STDPATH:/usr/local/bin # Extract the first word of "$AWK_NAME", so it can be a program name with args. set dummy $AWK_NAME; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $AWK in [\\/]* | ?:[\\/]*) ac_cv_path_AWK="$AWK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_AWK" && ac_cv_path_AWK="$AWK_NAME" ;; esac fi AWK=$ac_cv_path_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "${CC-cc}", so it can be a program name with args. set dummy ${CC-cc}; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CC in [\\/]* | ?:[\\/]*) ac_cv_path_CC="$CC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CC="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_CC" && ac_cv_path_CC="cc" ;; esac fi CC=$ac_cv_path_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CHMOD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CHMOD in [\\/]* | ?:[\\/]*) ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_CHMOD" && ac_cv_path_CHMOD="chmod" ;; esac fi CHMOD=$ac_cv_path_CHMOD if test -n "$CHMOD"; then echo "$as_me:$LINENO: result: $CHMOD" >&5 echo "${ECHO_T}$CHMOD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "cmp", so it can be a program name with args. set dummy cmp; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CMP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CMP in [\\/]* | ?:[\\/]*) ac_cv_path_CMP="$CMP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CMP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_CMP" && ac_cv_path_CMP="cmp" ;; esac fi CMP=$ac_cv_path_CMP if test -n "$CMP"; then echo "$as_me:$LINENO: result: $CMP" >&5 echo "${ECHO_T}$CMP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "cp", so it can be a program name with args. set dummy cp; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CP in [\\/]* | ?:[\\/]*) ac_cv_path_CP="$CP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_CP" && ac_cv_path_CP="cp" ;; esac fi CP=$ac_cv_path_CP if test -n "$CP"; then echo "$as_me:$LINENO: result: $CP" >&5 echo "${ECHO_T}$CP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CTAGS in [\\/]* | ?:[\\/]*) ac_cv_path_CTAGS="$CTAGS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CTAGS="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_CTAGS" && ac_cv_path_CTAGS="ctags" ;; esac fi CTAGS=$ac_cv_path_CTAGS if test -n "$CTAGS"; then echo "$as_me:$LINENO: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "diff", so it can be a program name with args. set dummy diff; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_DIFF+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $DIFF in [\\/]* | ?:[\\/]*) ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_DIFF" && ac_cv_path_DIFF="diff" ;; esac fi DIFF=$ac_cv_path_DIFF if test -n "$DIFF"; then echo "$as_me:$LINENO: result: $DIFF" >&5 echo "${ECHO_T}$DIFF" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "eqn", so it can be a program name with args. set dummy eqn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_EQN+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $EQN in [\\/]* | ?:[\\/]*) ac_cv_path_EQN="$EQN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_EQN="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_EQN" && ac_cv_path_EQN="eqn" ;; esac fi EQN=$ac_cv_path_EQN if test -n "$EQN"; then echo "$as_me:$LINENO: result: $EQN" >&5 echo "${ECHO_T}$EQN" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "etags", so it can be a program name with args. set dummy etags; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ETAGS in [\\/]* | ?:[\\/]*) ac_cv_path_ETAGS="$ETAGS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ETAGS="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_ETAGS" && ac_cv_path_ETAGS="etags" ;; esac fi ETAGS=$ac_cv_path_ETAGS if test -n "$ETAGS"; then echo "$as_me:$LINENO: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "grep", so it can be a program name with args. set dummy grep; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GREP in [\\/]* | ?:[\\/]*) ac_cv_path_GREP="$GREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GREP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_GREP" && ac_cv_path_GREP="grep" ;; esac fi GREP=$ac_cv_path_GREP if test -n "$GREP"; then echo "$as_me:$LINENO: result: $GREP" >&5 echo "${ECHO_T}$GREP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "lint", so it can be a program name with args. set dummy lint; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_LINT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $LINT in [\\/]* | ?:[\\/]*) ac_cv_path_LINT="$LINT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LINT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_LINT" && ac_cv_path_LINT="lint" ;; esac fi LINT=$ac_cv_path_LINT if test -n "$LINT"; then echo "$as_me:$LINENO: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi for ac_prog in make do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE"; then ac_cv_prog_MAKE="$MAKE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MAKE="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi MAKE=$ac_cv_prog_MAKE if test -n "$MAKE"; then echo "$as_me:$LINENO: result: $MAKE" >&5 echo "${ECHO_T}$MAKE" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$MAKE" && break done test -n "$MAKE" || MAKE="make" # Extract the first word of "mkdir", so it can be a program name with args. set dummy mkdir; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MKDIR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MKDIR in [\\/]* | ?:[\\/]*) ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_MKDIR" && ac_cv_path_MKDIR="mkdir" ;; esac fi MKDIR=$ac_cv_path_MKDIR if test -n "$MKDIR"; then echo "$as_me:$LINENO: result: $MKDIR" >&5 echo "${ECHO_T}$MKDIR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MV in [\\/]* | ?:[\\/]*) ac_cv_path_MV="$MV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_MV" && ac_cv_path_MV="mv" ;; esac fi MV=$ac_cv_path_MV if test -n "$MV"; then echo "$as_me:$LINENO: result: $MV" >&5 echo "${ECHO_T}$MV" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "patch", so it can be a program name with args. set dummy patch; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PATCH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PATCH in [\\/]* | ?:[\\/]*) ac_cv_path_PATCH="$PATCH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PATCH="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PATCH" && ac_cv_path_PATCH="patch" ;; esac fi PATCH=$ac_cv_path_PATCH if test -n "$PATCH"; then echo "$as_me:$LINENO: result: $PATCH" >&5 echo "${ECHO_T}$PATCH" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "printenv", so it can be a program name with args. set dummy printenv; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PRINTENV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PRINTENV in [\\/]* | ?:[\\/]*) ac_cv_path_PRINTENV="$PRINTENV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PRINTENV="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PRINTENV" && ac_cv_path_PRINTENV="printenv" ;; esac fi PRINTENV=$ac_cv_path_PRINTENV if test -n "$PRINTENV"; then echo "$as_me:$LINENO: result: $PRINTENV" >&5 echo "${ECHO_T}$PRINTENV" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "pwd", so it can be a program name with args. set dummy pwd; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PWD_PROG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PWD_PROG in [\\/]* | ?:[\\/]*) ac_cv_path_PWD_PROG="$PWD_PROG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PWD_PROG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PWD_PROG" && ac_cv_path_PWD_PROG="pwd" ;; esac fi PWD_PROG=$ac_cv_path_PWD_PROG if test -n "$PWD_PROG"; then echo "$as_me:$LINENO: result: $PWD_PROG" >&5 echo "${ECHO_T}$PWD_PROG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_RM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_RM" && ac_cv_path_RM="rm" ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then echo "$as_me:$LINENO: result: $RM" >&5 echo "${ECHO_T}$RM" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "rmdir", so it can be a program name with args. set dummy rmdir; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_RMDIR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $RMDIR in [\\/]* | ?:[\\/]*) ac_cv_path_RMDIR="$RMDIR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RMDIR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_RMDIR" && ac_cv_path_RMDIR="rmdir" ;; esac fi RMDIR=$ac_cv_path_RMDIR if test -n "$RMDIR"; then echo "$as_me:$LINENO: result: $RMDIR" >&5 echo "${ECHO_T}$RMDIR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SED in [\\/]* | ?:[\\/]*) ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_SED" && ac_cv_path_SED="sed" ;; esac fi SED=$ac_cv_path_SED if test -n "$SED"; then echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_SH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SH in [\\/]* | ?:[\\/]*) ac_cv_path_SH="$SH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_SH" && ac_cv_path_SH="sh" ;; esac fi SH=$ac_cv_path_SH if test -n "$SH"; then echo "$as_me:$LINENO: result: $SH" >&5 echo "${ECHO_T}$SH" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "soelim", so it can be a program name with args. set dummy soelim; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_SOELIM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SOELIM in [\\/]* | ?:[\\/]*) ac_cv_path_SOELIM="$SOELIM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SOELIM="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_SOELIM" && ac_cv_path_SOELIM="soelim" ;; esac fi SOELIM=$ac_cv_path_SOELIM if test -n "$SOELIM"; then echo "$as_me:$LINENO: result: $SOELIM" >&5 echo "${ECHO_T}$SOELIM" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "tar", so it can be a program name with args. set dummy tar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TAR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TAR in [\\/]* | ?:[\\/]*) ac_cv_path_TAR="$TAR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_TAR" && ac_cv_path_TAR="tar" ;; esac fi TAR=$ac_cv_path_TAR if test -n "$TAR"; then echo "$as_me:$LINENO: result: $TAR" >&5 echo "${ECHO_T}$TAR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "tbl", so it can be a program name with args. set dummy tbl; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TBL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TBL in [\\/]* | ?:[\\/]*) ac_cv_path_TBL="$TBL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TBL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_TBL" && ac_cv_path_TBL="tbl" ;; esac fi TBL=$ac_cv_path_TBL if test -n "$TBL"; then echo "$as_me:$LINENO: result: $TBL" >&5 echo "${ECHO_T}$TBL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "$YACC_NAME", so it can be a program name with args. set dummy $YACC_NAME; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $YACC in [\\/]* | ?:[\\/]*) ac_cv_path_YACC="$YACC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_YACC="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_YACC" && ac_cv_path_YACC="$YACC_NAME" ;; esac fi YACC=$ac_cv_path_YACC if test -n "$YACC"; then echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "zip", so it can be a program name with args. set dummy zip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ZIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ZIP in [\\/]* | ?:[\\/]*) ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_ZIP" && ac_cv_path_ZIP="zip" ;; esac fi ZIP=$ac_cv_path_ZIP if test -n "$ZIP"; then echo "$as_me:$LINENO: result: $ZIP" >&5 echo "${ECHO_T}$ZIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RM="$RM -f" # Extract the first word of "pack", so it can be a program name with args. set dummy pack; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PACK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PACK in [\\/]* | ?:[\\/]*) ac_cv_path_PACK="$PACK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $STDPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PACK="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PACK" && ac_cv_path_PACK="pack" ;; esac fi PACK=$ac_cv_path_PACK if test -n "$PACK"; then echo "$as_me:$LINENO: result: $PACK" >&5 echo "${ECHO_T}$PACK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi for ac_prog in nroff groff do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_NROFF+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $NROFF in [\\/]* | ?:[\\/]*) ac_cv_path_NROFF="$NROFF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_NROFF="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi NROFF=$ac_cv_path_NROFF if test -n "$NROFF"; then echo "$as_me:$LINENO: result: $NROFF" >&5 echo "${ECHO_T}$NROFF" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NROFF" && break done test -n "$NROFF" || NROFF="nroff" if test -x "$NROFF" && "$NROFF" --version | grep 'GNU nroff (groff)' >/dev/null 2>/dev/null ; then NROFFPLAIN="$NROFF -c" else NROFFPLAIN="$NROFF" fi for ac_prog in groff do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TROFF+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TROFF in [\\/]* | ?:[\\/]*) ac_cv_path_TROFF="$TROFF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TROFF="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi TROFF=$ac_cv_path_TROFF if test -n "$TROFF"; then echo "$as_me:$LINENO: result: $TROFF" >&5 echo "${ECHO_T}$TROFF" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$TROFF" && break done if test -n "$TROFF" ; then MANtoPS="$TROFF -man" else for ac_prog in psroff do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TROFF+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TROFF in [\\/]* | ?:[\\/]*) ac_cv_path_TROFF="$TROFF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TROFF="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi TROFF=$ac_cv_path_TROFF if test -n "$TROFF"; then echo "$as_me:$LINENO: result: $TROFF" >&5 echo "${ECHO_T}$TROFF" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$TROFF" && break done if test -n "$TROFF" ; then MANtoPS="$TROFF -t -man" else if test -f /usr/lib/lp/postscript/dpost ; then MANtoPS='troff -man | /usr/lib/lp/postscript/dpost' else MANtoPS='groff -man' fi fi fi for ac_prog in man2html rman do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MANtoHTMLPROG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MANtoHTMLPROG in [\\/]* | ?:[\\/]*) ac_cv_path_MANtoHTMLPROG="$MANtoHTMLPROG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MANtoHTMLPROG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi MANtoHTMLPROG=$ac_cv_path_MANtoHTMLPROG if test -n "$MANtoHTMLPROG"; then echo "$as_me:$LINENO: result: $MANtoHTMLPROG" >&5 echo "${ECHO_T}$MANtoHTMLPROG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$MANtoHTMLPROG" && break done case "$MANtoHTMLPROG" in *man2html) if "$MANtoHTMLPROG" -version < /dev/null 2>&1 | grep 'Content-type: text/html' 1>/dev/null 2>&1 then true else WRONG_MANtoHTML=true fi MANtoHTML="$MANtoHTMLPROG" ;; *rman) MANtoHTML="$MANtoHTMLPROG -f HTML -r '/cgi-bin/man2html?%s&%s'" WRONG_MANtoHTML=true ;; *) MANtoHTML="man2html" { echo "$as_me:$LINENO: WARNING: man-to-html converter not found: cannot re-make htmldocs if deleted" >&5 echo "$as_me: WARNING: man-to-html converter not found: cannot re-make htmldocs if deleted" >&2;} ;; esac if test -n "$WRONG_MANtoHTML" then { echo "$as_me:$LINENO: WARNING: man-to-html converter does not appear to be the right one" >&5 echo "$as_me: WARNING: man-to-html converter does not appear to be the right one" >&2;} { echo "$as_me:$LINENO: WARNING: for re-making html docs if deleted. Need vh-man2html." >&5 echo "$as_me: WARNING: for re-making html docs if deleted. Need vh-man2html." >&2;} fi for ac_prog in strip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $STRIP in [\\/]* | ?:[\\/]*) ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi STRIP=$ac_cv_path_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$STRIP" && break done test -n "$STRIP" || STRIP="echo >/dev/null" for ac_prog in col do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_COL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $COL in [\\/]* | ?:[\\/]*) ac_cv_path_COL="$COL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_COL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi COL=$ac_cv_path_COL if test -n "$COL"; then echo "$as_me:$LINENO: result: $COL" >&5 echo "${ECHO_T}$COL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$COL" && break done if test -n "$COL" ; then COL="$COL -bx" else echo "$as_me:$LINENO: checking for /usr/5bin/col" >&5 echo $ECHO_N "checking for /usr/5bin/col... $ECHO_C" >&6 if test -f /usr/5bin/col ; then echo "$as_me:$LINENO: result: found it" >&5 echo "${ECHO_T}found it" >&6 COL='/usr/5bin/col -bx' else echo "$as_me:$LINENO: result: col not found -- using cat instead" >&5 echo "${ECHO_T}col not found -- using cat instead" >&6 COL=cat fi fi # Extract the first word of "ftnpp", so it can be a program name with args. set dummy ftnpp; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_FTNPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $FTNPP in [\\/]* | ?:[\\/]*) ac_cv_path_FTNPP="$FTNPP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $LOCALPATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FTNPP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_FTNPP" && ac_cv_path_FTNPP="ftnpp" ;; esac fi FTNPP=$ac_cv_path_FTNPP if test -n "$FTNPP"; then echo "$as_me:$LINENO: result: $FTNPP" >&5 echo "${ECHO_T}$FTNPP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PERL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then echo "$as_me:$LINENO: result: $PERL" >&5 echo "${ECHO_T}$PERL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$PERL" && break done test -n "$PERL" || PERL="perl" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for short" >&5 echo $ECHO_N "checking for short... $ECHO_C" >&6 if test "${ac_cv_type_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((short *) 0) return 0; if (sizeof (short)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_short=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_short=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 echo "${ECHO_T}$ac_cv_type_short" >&6 echo "$as_me:$LINENO: checking size of short" >&5 echo $ECHO_N "checking size of short... $ECHO_C" >&6 if test "${ac_cv_sizeof_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_short=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (short)); } unsigned long ulongval () { return (long) (sizeof (short)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (short))) < 0) { long i = longval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (short)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_short=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_short=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF if test "$ac_cv_sizeof_short" -le 2 -a "$ac_cv_sizeof_int" -le 2 -a "$ac_cv_sizeof_long" -le 2; then { { echo "$as_me:$LINENO: error: Unable to find an integer datatype with more than 16 bits" >&5 echo "$as_me: error: Unable to find an integer datatype with more than 16 bits" >&2;} { (exit 1); exit 1; }; }; fi for ac_header in unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in strings.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memset do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break else cat >>confdefs.h <<\_ACEOF #define HAVE_MEMSET 0 _ACEOF fi done for ac_func in bzero do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break else cat >>confdefs.h <<\_ACEOF #define HAVE_BZERO 0 _ACEOF fi done for ac_func in strcasecmp do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break else cat >>confdefs.h <<\_ACEOF #define HAVE_STRCASECMP 0 _ACEOF fi done for ac_func in stricmp do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break else cat >>confdefs.h <<\_ACEOF #define HAVE_STRICMP 0 _ACEOF fi done for ac_func in strcmpi do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break else cat >>confdefs.h <<\_ACEOF #define HAVE_STRCMPI 0 _ACEOF fi done if test -z "$ac_cv_func_memset" -a -z "$ac_cv_func_bzero"; then { { echo "$as_me:$LINENO: error: Unable to find if memset or bzero available" >&5 echo "$as_me: error: Unable to find if memset or bzero available" >&2;} { (exit 1); exit 1; }; }; fi lispdir='${datadir}/emacs/site-lisp' # Extract the first word of "emacs", so it can be a program name with args. set dummy emacs; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_EMACS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $EMACS in [\\/]* | ?:[\\/]*) ac_cv_path_EMACS="$EMACS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_EMACS="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_EMACS" && ac_cv_path_EMACS="emacs" ;; esac fi EMACS=$ac_cv_path_EMACS if test -n "$EMACS"; then echo "$as_me:$LINENO: result: $EMACS" >&5 echo "${ECHO_T}$EMACS" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi INSTALL_MAN='install-man' sgimansubdir="/manl" if test -n "$CC_SAVE"; then CC=$CC_SAVE fi OS_FLAGS= OPT= LDLIBS= LDFLAGS= case $host_os in aix*) if test -z "$GCC"; then if test "$CC" = cc ; then CC=c89 fi OS_FLAGS="-DAIXC -D_BSD -D_XOPEN_SOURCE" OPT="-O" else OPT="-O2" fi;; hpux*) if test -z "$GCC"; then if test "$CC" = cc ; then CC=c89 fi OPT=" +O2 +Onolimit" else OPT="-O2" fi;; irix*) if test -n "$GCC"; then OPT="-O2" else if cc -version 1>/dev/null 2>&1 ; then ccnew=`cc -version 2>&1 | awk '{if($4 >= "7.2.1") print 1; else print 0}'` else ccnew=0 fi if test "$ccnew" = "1"; then OPT="-O2 -OPT:Olimit=5000" else OPT="-O2 -Olimit 5000" fi fi INSTALL_MAN='install-man-sgi' eval MANDIR=$mandir MANDIR=`echo "$MANDIR" | sed "s%NONE%$ac_default_prefix%"` if test -d "$MANDIR/manl"; then sgimansubdir="/manl" elif test -d "$MANDIR/man1"; then sgimansubdir="/man1" else sgimansubdir="" fi;; linux*) if test -n "$GCC"; then OPT="-O2"; fi;; next*) OPT="-O2";; osf*) if test -z "$GCC"; then OS_FLAGS="-ieee_with_no_inexact" OPT="-O -Olimit 1000" else OPT="-O2" fi;; sunos*) OPT="-O2";; solaris*) cpucc="$host_cpu"-"$CC" case $cpucc in sparc-cc) OS_FLAGS="-Xc" OPT="-xO4 $CG_FLAG";; *gcc) OPT="-O2";; *cc) OPT="-O";; esac;; ultrix*) if test -z "$GCC"; then OPT="-O2 -Olimit 1000" else OPT="-O2" fi;; *) { echo "$as_me:$LINENO: WARNING: Operating system not determined. Using generic flags." >&5 echo "$as_me: WARNING: Operating system not determined. Using generic flags." >&2;} OPT="-O";; esac use_submodel_flag="yes" # Check whether --enable-submodel or --disable-submodel was given. if test "${enable_submodel+set}" = set; then enableval="$enable_submodel" use_submodel_flag="$enableval" else use_submodel_flag="yes" fi; if test "$use_submodel_flag" = "yes" -a -n "$GCC"; then case "$host_cpu" in i386*) OPT="$OPT -march=i386" ;; i486*) OPT="$OPT -march=i486" ;; i586*) OPT="$OPT -march=i586" ;; i686*) OPT="$OPT -march=i686" ;; k6*) OPT="$OPT -march=k6" ;; esac fi echo "$as_me:$LINENO: checking whether $CC accepts function prototypes" >&5 echo $ECHO_N "checking whether $CC accepts function prototypes... $ECHO_C" >&6 if test "${ac_cv_prog_CC_protos+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { extern int foo(int arg); /* basic prototype */ static int (*ii_fun[]) ( int *args )={ 0, }; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_CC_protos=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_CC_protos=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_CC_protos" >&5 echo "${ECHO_T}$ac_cv_prog_CC_protos" >&6 if test $ac_cv_prog_CC_protos = yes ; then PROTOFLAG="" else PROTOFLAG="-DNO_PROTOTYPES" fi CFLAGS="-DUNIX \$(OPT) $OS_FLAGS $PROTOFLAG \$(OPTIONS)" echo "$as_me:$LINENO: result: Compile command is $CC $CFLAGS" >&5 echo "${ECHO_T}Compile command is $CC $CFLAGS" >&6 echo "$as_me:$LINENO: result: \$(OPT) is $OPT" >&5 echo "${ECHO_T}\$(OPT) is $OPT" >&6 echo "$as_me:$LINENO: result: \$(OPTIONS) is for optional defines, normally blank" >&5 echo "${ECHO_T}\$(OPTIONS) is for optional defines, normally blank" >&6 if test $GCC; then echo "$as_me:$LINENO: result: If you prefer using cc, setenv CC cc and re-run configure" >&5 echo "${ECHO_T}If you prefer using cc, setenv CC cc and re-run configure" >&6 fi EXE= CMD= ac_config_files="$ac_config_files Makefile dcl2inc.awk dcl2inc make_blockmatch.pl test/Makefile test/Compare.sh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "dcl2inc.awk" ) CONFIG_FILES="$CONFIG_FILES dcl2inc.awk" ;; "dcl2inc" ) CONFIG_FILES="$CONFIG_FILES dcl2inc" ;; "make_blockmatch.pl" ) CONFIG_FILES="$CONFIG_FILES make_blockmatch.pl" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/Compare.sh" ) CONFIG_FILES="$CONFIG_FILES test/Compare.sh" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@YACC@,$YACC,;t t s,@AWK@,$AWK,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@FPVERSION@,$FPVERSION,;t t s,@CHMOD@,$CHMOD,;t t s,@CMP@,$CMP,;t t s,@CP@,$CP,;t t s,@CTAGS@,$CTAGS,;t t s,@DIFF@,$DIFF,;t t s,@EQN@,$EQN,;t t s,@ETAGS@,$ETAGS,;t t s,@GREP@,$GREP,;t t s,@LINT@,$LINT,;t t s,@MAKE@,$MAKE,;t t s,@MKDIR@,$MKDIR,;t t s,@MV@,$MV,;t t s,@PATCH@,$PATCH,;t t s,@PRINTENV@,$PRINTENV,;t t s,@PWD_PROG@,$PWD_PROG,;t t s,@RM@,$RM,;t t s,@RMDIR@,$RMDIR,;t t s,@SED@,$SED,;t t s,@SH@,$SH,;t t s,@SOELIM@,$SOELIM,;t t s,@TAR@,$TAR,;t t s,@TBL@,$TBL,;t t s,@ZIP@,$ZIP,;t t s,@PACK@,$PACK,;t t s,@NROFF@,$NROFF,;t t s,@TROFF@,$TROFF,;t t s,@MANtoHTMLPROG@,$MANtoHTMLPROG,;t t s,@STRIP@,$STRIP,;t t s,@COL@,$COL,;t t s,@FTNPP@,$FTNPP,;t t s,@PERL@,$PERL,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@EMACS@,$EMACS,;t t s,@EXE@,$EXE,;t t s,@CMD@,$CMD,;t t s,@NROFFPLAIN@,$NROFFPLAIN,;t t s,@MANtoPS@,$MANtoPS,;t t s,@MANtoHTML@,$MANtoHTML,;t t s,@DCL2INC_REDIRECT@,$DCL2INC_REDIRECT,;t t s,@OPT@,$OPT,;t t s,@LDLIBS@,$LDLIBS,;t t s,@INSTALL_MAN@,$INSTALL_MAN,;t t s,@lispdir@,$lispdir,;t t s,@sgimansubdir@,$sgimansubdir,;t t s,@AWK_NAME@,$AWK_NAME,;t t s,@YACC_NAME@,$YACC_NAME,;t t s,@YFLAGS@,$YFLAGS,;t t s,@FILTER_H@,$FILTER_H,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi chmod +x dcl2inc make_blockmatch.pl test/Compare.sh ftnchek-3.3.1/configure.in0000644000031000002260000003174610164601016016075 0ustar moniotstaff00000000000000dnl configure.in Process with autoconf to produce a configure script. dnl This autoconf input file is for ftnchek version 2.9, April 1996 dnl Acknowledgement and thanks to Judah Milgram for help producing this file. AC_INIT(ftnchek.c) AC_CONFIG_HEADER(config.h) AC_CANONICAL_HOST dnl Look for yacc or bison. If bison, then -y used, so don't need dnl to worry about YSTEM. (but what if it finds byacc?) dnl For consistency with all other configured programs, we eventually dnl replace YACC by a path-qualified name. Here we split the value of dnl YACC returned by this test (which may be "yacc", "bison -y", or dnl "byacc") into the program name in YACC_NAME and flags in YFLAGS. AC_PROG_YACC if test -z "$YACC"; then AC_MSG_WARN([Didn't find yacc or bison]) YACC=yacc fi YACC_NAME=`echo "$YACC" | sed 's/ .*$//'` changequote(<<, >>)dnl YFLAGS=`echo "$YACC" | sed 's/^[^ ]* //'` changequote([, ])dnl dnl Look for mawk/nawk/awk: AC_PROG_AWK if test "$AWK" = "awk"; then case $host_os in aix*) AC_MSG_WARN([This awk might not work in dcl2inc. Need gawk or nawk]) ;; esac fi dnl Provide the workaround for redirection of output with nawk as dnl described in comments at the end of dcl2inc.awk.in. if test "$AWK" = "gawk"; then DCL2INC_REDIRECT='> "/dev/stderr"' else DCL2INC_REDIRECT='| "cat 1>&2"' fi dnl The above test sets AWK to pathless name. Later we will add a path dnl and AWK_NAME will keep the pathless name to simplify flavor tests. AWK_NAME=${AWK=awk} dnl Check for gcc/cc AC_PROG_CC dnl Check for floating point option (really on applies to Suns, I dnl think, and probably only Solaris at that). AC_CHECK_PROGS(FPVERSION,fpversion) if test "$FPVERSION" ; then AC_MSG_CHECKING([for a floating point option]) CG_FLAG=`$FPVERSION -foption` if test "CG_FLAG"; then CG_FLAG=-$CG_FLAG; fi AC_MSG_RESULT([ $CG_FLAG ]) fi dnl The following system utilities should be standard on all UNIX systems. dnl If they are not found on standard path, they are left pathless. STDPATH=/bin:/usr/bin:/usr/ucb:/usr/5bin LOCALPATH=$STDPATH:/usr/local/bin AC_PATH_PROG(AWK,$AWK_NAME,$AWK_NAME,$STDPATH) AC_PATH_PROG(CC,${CC-cc},cc,$STDPATH) AC_PATH_PROG(CHMOD,chmod,chmod,$STDPATH) AC_PATH_PROG(CMP,cmp,cmp,$STDPATH) AC_PATH_PROG(CP,cp,cp,$STDPATH) AC_PATH_PROG(CTAGS,ctags,ctags,$STDPATH) AC_PATH_PROG(DIFF,diff,diff,$STDPATH) AC_PATH_PROG(EQN,eqn,eqn,$STDPATH) AC_PATH_PROG(ETAGS,etags,etags,$STDPATH) AC_PATH_PROG(GREP,grep,grep,$STDPATH) AC_PATH_PROG(LINT,lint,lint,$STDPATH) AC_CHECK_PROGS(MAKE,make,make,$STDPATH) AC_PATH_PROG(MKDIR,mkdir,mkdir,$STDPATH) AC_PATH_PROG(MV,mv,mv,$STDPATH) AC_PATH_PROG(PATCH,patch,patch,$STDPATH) AC_PATH_PROG(PRINTENV,printenv,printenv,$STDPATH) AC_PATH_PROG(PWD_PROG,pwd,pwd,$STDPATH) AC_PATH_PROG(RM,rm,rm,$STDPATH) AC_PATH_PROG(RMDIR,rmdir,rmdir,$STDPATH) AC_PATH_PROG(SED,sed,sed,$STDPATH) AC_PATH_PROG(SH,sh,sh,$STDPATH) AC_PATH_PROG(SOELIM,soelim,soelim,$STDPATH) AC_PATH_PROG(TAR,tar,tar,$STDPATH) AC_PATH_PROG(TBL,tbl,tbl,$STDPATH) AC_PATH_PROG(YACC,$YACC_NAME,$YACC_NAME,$STDPATH) AC_PATH_PROG(ZIP,zip,zip,$STDPATH) dnl Add the necessary flag to RM. RM="$RM -f" dnl Look for pack (needed only for make install-man-sgi) AC_PATH_PROG(PACK,pack,pack,$STDPATH) dnl Check for nroff; groff will do too. AC_PATH_PROGS(NROFF,nroff groff, nroff) dnl If this is GNU nroff, need to use -c flag (no colors) to get plain dnl text w/o escape codes, for VMS help document and similar things. if test -x "$NROFF" && "$NROFF" --version | grep 'GNU nroff (groff)' >/dev/null 2>/dev/null ; then NROFFPLAIN="$NROFF -c" else NROFFPLAIN="$NROFF" fi dnl Look for man-to-ps filter. Take groff if present but settle for others. AC_PATH_PROGS(TROFF,groff) if test -n "$TROFF" ; then MANtoPS="$TROFF -man" else AC_PATH_PROGS(TROFF,psroff) if test -n "$TROFF" ; then MANtoPS="$TROFF -t -man" else dnl Solaris 2.1 if test -f /usr/lib/lp/postscript/dpost ; then MANtoPS='troff -man | /usr/lib/lp/postscript/dpost' else dnl Nothing found: say groff and let them figure it out. MANtoPS='groff -man' fi fi fi dnl Look for man-to-html filter. The scripts for converting the raw html dnl into the files in the html directory depend on the specific dnl filter's output style, so another converter probably won't do. dnl At present the scripts require man2html, a.k.a. vh-man2html, which dnl is now part of the standard RedHat distribution. We won't worry much dnl about this since users generally won't be messing with the docs. AC_PATH_PROGS(MANtoHTMLPROG,man2html rman) case "$MANtoHTMLPROG" in dnl There are at least two man2html's out there, and probably many more, dnl so we try to detect whether we have the one that works with the converters. *man2html) if "$MANtoHTMLPROG" -version < /dev/null 2>&1 | grep 'Content-type: text/html' 1>/dev/null 2>&1 then true else WRONG_MANtoHTML=true fi MANtoHTML="$MANtoHTMLPROG" ;; dnl rman is ok to make ftnchek.html, but "make htmldocs" won't work *rman) MANtoHTML="$MANtoHTMLPROG -f HTML -r '/cgi-bin/man2html?%s&%s'" WRONG_MANtoHTML=true ;; *) MANtoHTML="man2html" AC_MSG_WARN([man-to-html converter not found: cannot re-make htmldocs if deleted]) ;; esac if test -n "$WRONG_MANtoHTML" then AC_MSG_WARN([man-to-html converter does not appear to be the right one]) AC_MSG_WARN([for re-making html docs if deleted. Need vh-man2html.]) fi dnl Look for strip. If not, use a harmless substitute AC_PATH_PROGS(STRIP,strip,[echo >/dev/null]) dnl See if col is on the path. If not, it may be BSD-like and user may dnl not have /usr/5bin on path. AC_PATH_PROGS(COL,col) if test -n "$COL" ; then COL="$COL -bx" else AC_MSG_CHECKING([for /usr/5bin/col]) if test -f /usr/5bin/col ; then AC_MSG_RESULT([found it]) COL='/usr/5bin/col -bx' else AC_MSG_RESULT([col not found -- using cat instead]) COL=cat fi fi dnl Look for ftnpp and if it is installed, it will be tested for compatibility dnl as a filter for ftnchek. AC_PATH_PROG(FTNPP,ftnpp,ftnpp,$LOCALPATH) dnl Look for perl AC_PATH_PROGS(PERL,perl,perl) dnl Get sizes needed for declarations of some bit vectors. dnl These tests generate autoconf warning ``AC_TRY_RUN called without dnl default to allow cross compiling.'' Ignore unless you plan to dnl cross-compile ftnchek. AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) dnl Sanity test (can fail if compiler bombs on the above tests) if test "$ac_cv_sizeof_short" -le 2 -a "$ac_cv_sizeof_int" -le 2 -a "$ac_cv_sizeof_long" -le 2; then AC_MSG_ERROR(Unable to find an integer datatype with more than 16 bits); fi dnl If unistd.h is found, it is used to define unlink(). AC_CHECK_HEADERS(unistd.h) dnl If stdlib.h is found, it is used to declare malloc() and free(). AC_CHECK_HEADERS(stdlib.h) dnl If strings.h is found, it is used to declare str[n]casecmp(). AC_CHECK_HEADERS(strings.h) dnl Check for memset. This should be pretty universal by now, but you dnl never know. The alternative is bzero. AC_CHECK_FUNCS( memset, break, AC_DEFINE(HAVE_MEMSET,0) ) AC_CHECK_FUNCS( bzero, break, AC_DEFINE(HAVE_BZERO,0) ) dnl Check for strcasecmp or its common equivalents. AC_CHECK_FUNCS( strcasecmp, break, AC_DEFINE(HAVE_STRCASECMP,0) ) AC_CHECK_FUNCS( stricmp, break, AC_DEFINE(HAVE_STRICMP,0) ) AC_CHECK_FUNCS( strcmpi, break, AC_DEFINE(HAVE_STRCMPI,0) ) dnl Sanity test (can fail if compiler bombs on the above tests) if test -z "$ac_cv_func_memset" -a -z "$ac_cv_func_bzero"; then AC_MSG_ERROR(Unable to find if memset or bzero available); fi dnl Define emacs site-lisp directory to install ftnchek.el in. lispdir='${datadir}/emacs/site-lisp' dnl Check for emacs. If it is present, ftnchek.el will be byte-compiled. AC_PATH_PROG(EMACS,emacs,emacs) dnl Set compiler options depending on operating system: dnl Here's the place to tweak compiler settings, not in dnl Makefile.in, (and certainly not in Makefile!) INSTALL_MAN='install-man' sgimansubdir="/manl" if test -n "$CC_SAVE"; then CC=$CC_SAVE fi OS_FLAGS= OPT= LDLIBS= LDFLAGS= case $host_os in aix*) if test -z "$GCC"; then if test "$CC" = cc ; then CC=c89 fi dnl _XOPEN_SOURCE seems to be needed to get pipe() properly declared. OS_FLAGS="-DAIXC -D_BSD -D_XOPEN_SOURCE" OPT="-O" else OPT="-O2" fi;; hpux*) if test -z "$GCC"; then if test "$CC" = cc ; then CC=c89 fi OPT=" +O2 +Onolimit" else OPT="-O2" fi;; irix*) dnl If gcc is being used, then all is simple. if test -n "$GCC"; then OPT="-O2" else dnl The optimization flag for IRIX changed at some point. The following dnl test for where the transition occurred is based on advice of Guido Germano. if cc -version 1>/dev/null 2>&1 ; then ccnew=`cc -version 2>&1 | awk '{if($4 >= "7.2.1") print 1; else print 0}'` else ccnew=0 fi if test "$ccnew" = "1"; then OPT="-O2 -OPT:Olimit=5000" else OPT="-O2 -Olimit 5000" fi fi INSTALL_MAN='install-man-sgi' dnl old, old SGI systems put man pages into $mandir. Recent versions use dnl $mandir/man1 or $mandir/manl. We look for these and use dnl them if they exist. eval MANDIR=$mandir MANDIR=`echo "$MANDIR" | sed "s%NONE%$ac_default_prefix%"` if test -d "$MANDIR/manl"; then sgimansubdir="/manl" elif test -d "$MANDIR/man1"; then sgimansubdir="/man1" else sgimansubdir="" fi;; linux*) if test -n "$GCC"; then OPT="-O2"; fi;; next*) OPT="-O2";; dnl OSF non-GCC options from John Faricelli of DEC: dnl The option -ieee_with_inexact will cause earlier Alpha implementations dnl to trap to software on floating operations that are not exact, dnl in the mathematical sense (e.g. 2/7). This can be a large performance dnl penalty. If all you wish to do is allow IEEE exceptional values dnl (e.g. NaN, Infinity, etc), the correct option to use is dnl -ieee_with_no_inexact. dnl Also, in Digital Unix 4.0, the default C compiler has changed. dnl The option "-Olimit 1000" is no longer needed, but is silently accepted dnl by the compiler. osf*) if test -z "$GCC"; then OS_FLAGS="-ieee_with_no_inexact" OPT="-O -Olimit 1000" else OPT="-O2" fi;; sunos*) OPT="-O2";; solaris*) cpucc="$host_cpu"-"$CC" case $cpucc in sparc-cc) OS_FLAGS="-Xc" OPT="-xO4 $CG_FLAG";; *gcc) OPT="-O2";; *cc) OPT="-O";; esac;; ultrix*) if test -z "$GCC"; then OPT="-O2 -Olimit 1000" else OPT="-O2" fi;; *) AC_MSG_WARN([Operating system not determined. Using generic flags.]) OPT="-O";; esac dnl If using gcc on Intel x86, add suitable submodel flag. dnl This can be suppressed by --disable-submodel configure option. use_submodel_flag="yes" AC_ARG_ENABLE(submodel,dnl changequote(<<, >>)dnl << --enable-submodel provide gcc -march submodel flag [yes]>>, changequote([, ])dnl use_submodel_flag="$enableval", use_submodel_flag="yes") if test "$use_submodel_flag" = "yes" -a -n "$GCC"; then case "$host_cpu" in i386*) OPT="$OPT -march=i386" ;; i486*) OPT="$OPT -march=i486" ;; i586*) OPT="$OPT -march=i586" ;; i686*) OPT="$OPT -march=i686" ;; k6*) OPT="$OPT -march=k6" ;; esac fi AC_MSG_CHECKING([whether $CC accepts function prototypes]) dnl the test prog includes specific code that chokes some compilers AC_CACHE_VAL(ac_cv_prog_CC_protos,[ AC_TRY_COMPILE([], [extern int foo(int arg); /* basic prototype */ static int (*ii_fun[]) ( int *args )={ 0, };], ac_cv_prog_CC_protos=yes,ac_cv_prog_CC_protos=no)]) AC_MSG_RESULT([$ac_cv_prog_CC_protos]) if test $ac_cv_prog_CC_protos = yes ; then PROTOFLAG="" else PROTOFLAG="-DNO_PROTOTYPES" fi CFLAGS="-DUNIX \$(OPT) $OS_FLAGS $PROTOFLAG \$(OPTIONS)" AC_MSG_RESULT([Compile command is $CC $CFLAGS]) AC_MSG_RESULT([\$(OPT) is $OPT]) AC_MSG_RESULT([\$(OPTIONS) is for optional defines, normally blank]) if test $GCC; then AC_MSG_RESULT([If you prefer using cc, setenv CC cc and re-run configure]) fi dnl Here we define EXE and CMD prefixes to be null, as needed by Unix. dnl Do this way just so they can be substituted otherwise for OS/2 et al. EXE= CMD= AC_SUBST(EXE) AC_SUBST(CMD) AC_SUBST(NROFF) AC_SUBST(NROFFPLAIN) AC_SUBST(MANtoPS) AC_SUBST(MANtoHTML) AC_SUBST(STRIP) AC_SUBST(DCL2INC_REDIRECT) AC_SUBST(COL) AC_SUBST(SED) AC_SUBST(CC) AC_SUBST(CFLAGS) AC_SUBST(OPT) AC_SUBST(LDLIBS) AC_SUBST(LDFLAGS) AC_SUBST(INSTALL_MAN) AC_SUBST(lispdir) AC_SUBST(sgimansubdir) AC_SUBST(AWK) AC_SUBST(AWK_NAME) AC_SUBST(CHMOD) AC_SUBST(CMP) AC_SUBST(CP) AC_SUBST(DIFF) AC_SUBST(EMACS) AC_SUBST(EQN) AC_SUBST(FTNPP) AC_SUBST(GREP) AC_SUBST(LINT) AC_SUBST(MAKE) AC_SUBST(MKDIR) AC_SUBST(MV) AC_SUBST(PACK) AC_SUBST(PATCH) AC_SUBST(PERL) AC_SUBST(PRINTENV) AC_SUBST(PWD_PROG) AC_SUBST(RM) AC_SUBST(RMDIR) AC_SUBST(SHELL) AC_SUBST(SOELIM) AC_SUBST(TAR) AC_SUBST(TBL) AC_SUBST(ZIP) AC_SUBST(YACC) AC_SUBST(YACC_NAME) AC_SUBST(YFLAGS) AC_SUBST(FILTER_H) AC_OUTPUT( Makefile dcl2inc.awk dcl2inc make_blockmatch.pl test/Makefile test/Compare.sh ) chmod +x dcl2inc make_blockmatch.pl test/Compare.sh ftnchek-3.3.1/config.guess0000755000031000002260000012450410166003437016104 0ustar moniotstaff00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-09-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ftnchek-3.3.1/config.sub0000755000031000002260000007511310166003437015550 0ustar moniotstaff00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-08-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ftnchek-3.3.1/config.h.in0000644000031000002260000000222710164575651015616 0ustar moniotstaff00000000000000 /* These sizeofs are used in determining what kind of int is needed to have enough bits to hold a flag field. It is OK for the sizes defined here to be smaller than the true sizes: at worst it will just use more space than necessary. The generic version uses values of 2, 4, 4 which should work fine on all recent-vintage 32-bit machines. */ #define SIZEOF_SHORT @SIZEOF_SHORT@ #define SIZEOF_INT @SIZEOF_INT@ #define SIZEOF_LONG @SIZEOF_LONG@ /* If unistd.h exists, use it to declare unlink in ftnchek.c */ #define HAVE_UNISTD_H @HAVE_UNISTD_H@ /* If stdlib.h exists, use it to declare malloc and friends */ #define HAVE_STDLIB_H @HAVE_STDLIB_H@ /* Use strings.h for strcasecmp() and strncasecmp() */ #define HAVE_STRINGS_H @HAVE_STRINGS_H@ /* Either memset or bzero is needed in forlex.c: memset is preferred. */ #define HAVE_MEMSET @HAVE_MEMSET@ #define HAVE_BZERO @HAVE_BZERO@ /* Some compilers don't have strcasecmp but have stricmp or strcmpi instead. Set up suitable defines here. */ #define HAVE_STRCASECMP @HAVE_STRCASECMP@ #define HAVE_STRICMP @HAVE_STRICMP@ #define HAVE_STRCMPI @HAVE_STRCMPI@ ftnchek-3.3.1/configure.generic0000755000031000002260000000557310164606207017114 0ustar moniotstaff00000000000000#!/bin/sh # # Simple configure script to create makefile.generic from Makefile.in # for the ftnchek distribution, so users without a real Unix system # can have a generic makefile to edit for their needs. It is run # during the creation of the distribution, not by installer. # # It just substitutes pathless version of all the system programs, # and the most commonly used values of options, into Makefile.in # and other configured files. (One exception: need a full path for # perl at head of perl scripts. Hope /usr/bin/perl will work.) # This script only needs to be changed when configure.in has new # substitutions. # # Also creates generic versions of other configured files. # # R. Moniot, 2 May 1996 Subst(){ sed -e 's%@prefix@%/usr/local%' \ -e 's%@exec_prefix@%${prefix}%' \ -e 's%@bindir@%${exec_prefix}/bin%' \ -e 's%@datadir@%${prefix}/share%' \ -e 's%@mandir@%${prefix}/man%' \ -e 's%@libdir@%${exec_prefix}/lib%' \ -e 's%@lispdir@%${datadir}/emacs/site-lisp%' \ -e 's%@sgimansubdir@%/manl%' \ -e 's%@EXE@%%' \ -e 's%@CMD@%%' \ -e 's%@AWK@%gawk%' \ -e 's%@AWK_NAME@%gawk%' \ -e 's%@NROFF@%nroff%' \ -e 's%@NROFFPLAIN@%nroff -c%' \ -e 's%@MANtoPS@%./man2ps%' \ -e 's%@STRIP@%strip%' \ -e 's%@DCL2INC_REDIRECT@%> "/dev/stderr"%' \ -e 's%@COL@%col -bx%' \ -e 's%@SED@%sed%' \ -e 's%@CC@%cc%' \ -e 's%@CFLAGS@%-DUNIX -O $(OPTIONS)%' \ -e 's%@LDFLAGS@%%' \ -e 's%@LDLIBS@%%' \ -e 's%@INSTALL_MAN@%install-man%' \ -e 's%@HAS_NROFF@%true%' \ -e 's%@CPPFLAGS@%%' \ -e 's%@CHMOD@%chmod%' \ -e 's%@CMP@%cmp%' \ -e 's%@CP@%cp%' \ -e 's%@CTAGS@%ctags%' \ -e 's%@DIFF@%diff%' \ -e 's%@EMACS@%emacs%' \ -e 's%@EQN@%eqn%' \ -e 's%@ETAGS@%etags%' \ -e 's%@FTNPP@%ftnpp%' \ -e 's%@MAKE@%make%' \ -e 's%@GREP@%grep%' \ -e 's%@LINT@%lint%' \ -e 's%@MANtoHTML@%man2html%' \ -e 's%@MKDIR@%mkdir%' \ -e 's%@MV@%mv%' \ -e 's%@OPT@%-O%' \ -e 's%@PACK@%pack%' \ -e 's%@PATCH@%patch%' \ -e 's%@PERL@%/usr/bin/perl%' \ -e 's%@PRINTENV@%printenv%' \ -e 's%@PWD_PROG@%pwd%' \ -e 's%@RM@%rm -f%' \ -e 's%@RMDIR@%rmdir%' \ -e 's%@SH@%sh%' \ -e 's%@SOELIM@%soelim%' \ -e 's%@TBL@%tbl%' \ -e 's%@TAR@%tar%' \ -e 's%@YACC@%bison%' \ -e 's%@YACC_NAME@%bison%' \ -e 's%@YFLAGS@%-y%' \ -e 's%@ZIP@%zip%' \ -e 's%@HAVE_UNISTD_H@%0%' \ -e 's%@HAVE_STDLIB_H@%1%' \ -e 's%@HAVE_STRINGS_H@%1%' \ -e 's%@HAVE_STRCASECMP@%0%' \ -e 's%@HAVE_STRICMP@%0%' \ -e 's%@HAVE_STRCMPI@%0%' \ -e 's%@SIZEOF_SHORT@%2%' \ -e 's%@SIZEOF_INT@%4%' \ -e 's%@SIZEOF_LONG@%4%' \ -e 's%@HAVE_MEMSET@%1%' \ -e 's%@HAVE_BZERO@%0%' \ -e 's%@CPP@%/lib/cpp%' \ $1 } for file in $* do echo "creating $file" Subst $file.in > $file done ftnchek-3.3.1/install-sh0000755000031000002260000002176610166004250015570 0ustar moniotstaff00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-09-10.20 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ftnchek-3.3.1/add_html_refs.sh0000755000031000002260000000356007527765311016731 0ustar moniotstaff00000000000000#!/bin/sh # # $Id: add_html_refs.sh,v 1.7 2002/08/18 18:43:21 moniot Rel $ # # Script to insert links from all occurrences of each ftnchek option # to the main description of the option in ftnchek.html. # # Author: Robert Moniot # Date: 19 Jul 1998 # Originally written for use with PolyglotMan (rman) # Modified for use with vh-man2html 22 Apr 2001 # # Get list of all ftnchek main options, excluding the leading '-'. # Turn it into a list of sed substitutions to change them into hrefs. # The href is "#option" (without the -). The substitutions look for -opt # preceded by non-letter so that, e.g. f77's param-intrinsic won't match # -intrinsic. This will fail if a real option comes at the start of a # line, but that shouldn't happen since man-to-html converter puts bolding # around them. ftnchek -help | \ awk '/^ *-/ {split($0,opt); sub(/\[no\]/,"",opt[1]); sub(/=.*$/,"",opt[1]); sub(/^-/,"",opt[1]); printf("s,\\([^a-z]\\)-%s,\\1-%s,g\n", opt[1],opt[1],opt[1]); }' \ > option_sub.sed # Now create the cross-references. # The tr command substitutes quote marks for the characters that # vh-man2html substutes for quote marks. # The first sed command deletes any Content-type header intended for cgi use, # and creates and attaches anchors to all the option descriptions in # OPTIONS section. # The second sed substitutes hot-links to these anchors at all the places # where the options occur in the entire text. # The third sed puts hot-links in for the -[no]options in SYNOPSIS section # that are not recognized by the second sed. tr '\007' '"' | sed -e '/^Content-type:/d' \ -e '/

OPTIONS<\/H2>/,/

.*<\/H2>/s,^
-\([a-z][-a-z0-9]*\)[^<]*,&,' | \ sed -f option_sub.sed | \ sed -e '/

SYNOPSIS<\/H2>/,/

.*<\/H2>/s,-\[no\]\([a-z][-a-z0-9]*\),&,g' ftnchek-3.3.1/make_html.sh0000755000031000002260000001411307275256267016100 0ustar moniotstaff00000000000000#!/bin/sh # # $Id: make_html.sh,v 1.7 2001/05/06 14:16:23 moniot Rel $ # # Script to break up ftnchek.html into separate sections in html directory. # # Author: Robert Moniot # Date: 31 Jul 1998 # Originally written for use with PolyglotMan (rman) # Modified for use with vh-man2html 22 Apr 2001 # # This function puts out header needed by all but 1st page. do_header(){ cat < $* EOF } # This function puts out ref to table of contents that # follows header for all but 1st and toc page. do_href_toc(){ cat <Table of Contents

EOF } # This function puts out ref to previous section do_href_prev(){ echo "

Previous: $2


" } # This function puts out footer needed by all but last page. do_footer(){ cat < EOF } # This function changes the trailing NAME anchor # of a page into an href to the next page. # The first edit is for links to section pages. The second edit is # for the link to table of contents. The third edit is # for links to option pages. href_next(){ sed -e '$s,^.*[^<]*

\([^<]*\)

*$,


Next: \2,' \ -e '$s,^.*$,


Next: Table of contents,' \ -e '$s,^.*


Next: -\1,' } # This function adapts internal refs from one-big-file # form into multi-file format. # First edit changes "#lbAB" and "#lbAC" (refs to 1st two sections) # into "index.html#lb[BC]" (where they are combined). # Next changes all other "lbXX" hrefs to into "lbXX.html#lbXX". # Third edit changes "#option" into "option.html" change_hrefs(){ sed -e 's,HREF="#\(lbA[BC]\)",HREF="index.html#\1",g' \ -e 's,HREF="#\(lb[A-Z][A-Z]\)",HREF="\1.html#\1",g' \ -e 's,HREF="#\([^"]*\)",HREF="\1.html",g' } # Execution begins here. # Filter the input (file arg or stdin) thru a sed script # that concatenates section NAME tags with the H2 titles # on following line, to associate section name with title. # It also changes the name "index" to "toc" to avoid # confusion with index.html, which is the first page, not # the table of contents page. # Put the input in a tmp file so it can be re-read. filename="/tmp/html_split_$$.html" trap "rm -f $filename" 0 sed -e '/^IndexTable of Contents]*>Return to Main Contents/d' \ $1 > $filename # Get a list of all ftnchek main options, excluding the # leading '-'. Sort them for use on Options page. options=`ftnchek -help | \ awk '/^ *-/ {split($0,command); sub(/\[no\]/,"",command[1]); sub(/=.*$/,"",command[1]); sub(/^-/,"",command[1]); print command[1]; }' | sort` # Get a list of all the sections excluding special ones. # Sections are named "lbAB" "lbAC" ... by vh-man2html. # (As of v1.5.3 it doesn't use lbAA.) sectlist=`sed -n -e 's,^.*/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi # Create html directory if it does not exist. if [ -d html ] then echo "Re-using directory html." else echo "Creating directory html..." if mkdir html then true else echo "Failed!" exit 1 fi fi echo "Creating section pages..." # Produce index.html page. It is special, since it combines # NAME and SYNOPSIS and uses the man2html-generated header. # Also make sure the background color is same as the rest. echo $ac_n "lbAB lbAC $ac_c" (sed -n -e 's///' \ -e '1,/^ html/index.html # Produce pages for all other sections except last (toc). # Section for options gets special treatment since # individual options will be split off into separate files, # and links to all options are placed at end of page. prevsect='index' prevtext=`sed -n 's,^ 

\([^<]*\)

$,\1,p' $filename` for sect in $sectlist; do echo $ac_n "$sect $ac_c" headtext=`sed -n 's,^ 

\([^<]*\)

$,\1,p' $filename` # save section name of OPTIONS section for use by first option. if [ "$headtext" = "OPTIONS" ] then optsect="$sect" fi (do_header $headtext ; do_href_toc ; do_href_prev "$prevsect" "$prevtext" ; if [ "$headtext" = "OPTIONS" ] then (sed -n -e '/

" ; echo $options | \ sed -e 's@\([^ ][^ ]*\)@\ -\1,@g' \ -e 's@, *$@.@' ) else sed -n -e '/ html/$sect.html prevsect="$sect" prevtext="$headtext" done # Produce table of contents echo "toc" (do_header Table of Contents ; sed -n -e '//,$p' $filename | \ change_hrefs ; ) > html/toc.html # Now produce pages for all the options echo "Creating option pages..." prevsect="$optsect" prevtext="OPTIONS" for opt in $options do echo $ac_n "$opt $ac_c" (do_header "Option: $opt" ; do_href_toc ; do_href_prev "$prevsect" "$prevtext" ; echo "

Option: $opt

" ; sed -n -e '/ html/$opt.html prevsect="$opt" prevtext="-$opt" done echo "" ftnchek-3.3.1/make_blockmatch.pl0000755000031000002260000000724710202535157017234 0ustar moniotstaff00000000000000#!/usr/bin/perl # $Id: make_blockmatch.pl.in,v 1.3 2001/05/27 14:28:48 moniot Rel $ # Script to generate block_match.h file from tokdefs.h. The result is # the contents of an array to map from block-closing tokens to the # required block-opening tokens. It is used by fortran.y in pop_block # routine to check proper balancing of structured control forms. %block_opener = ( 'ELSE' => 'IF', 'ENDIF' => 'IF', 'ENDDO' => 'DO', 'CASE' => 'SELECTCASE', 'ENDSELECT' => 'SELECTCASE', 'ENDSUBROUTINE' => 'SUBROUTINE', 'ENDFUNCTION' => 'FUNCTION', 'ENDPROGRAM' => 'PROGRAM', 'ENDBLOCKDATA' => 'BLOCKDATA' ); # Read the token definitions. Find the defs corresponding # to block oeners and closers, and save them in hashes. open(TOKDEFS,"tokdefs.h") || die "Can't open tokdefs.h: $!"; $min_block_token = -1; $max_block_token = -1; foreach () { if( /^\#\s*define\s+tok_(\S*)\s*(\d+)/ ) { $name = $1; $number = $2; if( grep(/^$name$/,values(%block_opener) ) ) { $opener_number{$name} = $number; } if( grep(/^$name$/,keys(%block_opener) ) ) { $closer_name{$number} = $name; } # keep track of min and max block tokens if( $opener_number{$name} || $closer_name{$number} ) { if( $min_block_token == -1 ) { $min_block_token = $number; } if( $max_block_token == -1 ) { $max_block_token = $number; } if( $number < $min_block_token ) { $min_block_token = $number; } if( $number > $max_block_token ) { $max_block_token = $number; } } } } close(TOKDEFS); # Make sure tokdefs.h was parsed OK. All the token names # in the %block_opener table above must be defined. foreach ( (keys %block_opener) ) { $key = $_; if( ! grep(/^$key$/, values(%closer_name) ) ) { not_found($key); } } foreach ( (values %block_opener) ) { $val = $_; if( ! defined($opener_number{$val}) ) { not_found($val); } } # Find range of token values used to index array $min_closer = (sort keys %closer_name)[0]; $max_closer = (reverse sort keys %closer_name)[0]; # Print initializer for the C lookup table that gives # matching opener for any closer. This initializer is # to be included like so: # int block_opener[] = { # #include "blockmatch.h" # }; # It also defines range and offset of index values. # Look up a value as # matching_token = block_opener[closer_token-MIN_CLOSER] print < ERROR: tok_$_[0] not found in tokdefs.h <=== This probably means that the regular expression in the first foreach of $0 is not correct for the tokdefs.h file produced using the local parser generator. Please send a copy of the tokdefs.h file, along with information identifying the operating system and the name and version number of the parser generator (probably bison) to the ftnchek maintainer listed in README. END_ERROR_MESSAGE exit(1); } ftnchek-3.3.1/make_blockmatch.pl.in0000644000031000002260000000724107304207440017630 0ustar moniotstaff00000000000000#!@PERL@ # $Id: make_blockmatch.pl.in,v 1.3 2001/05/27 14:28:48 moniot Rel $ # Script to generate block_match.h file from tokdefs.h. The result is # the contents of an array to map from block-closing tokens to the # required block-opening tokens. It is used by fortran.y in pop_block # routine to check proper balancing of structured control forms. %block_opener = ( 'ELSE' => 'IF', 'ENDIF' => 'IF', 'ENDDO' => 'DO', 'CASE' => 'SELECTCASE', 'ENDSELECT' => 'SELECTCASE', 'ENDSUBROUTINE' => 'SUBROUTINE', 'ENDFUNCTION' => 'FUNCTION', 'ENDPROGRAM' => 'PROGRAM', 'ENDBLOCKDATA' => 'BLOCKDATA' ); # Read the token definitions. Find the defs corresponding # to block oeners and closers, and save them in hashes. open(TOKDEFS,"tokdefs.h") || die "Can't open tokdefs.h: $!"; $min_block_token = -1; $max_block_token = -1; foreach () { if( /^\#\s*define\s+tok_(\S*)\s*(\d+)/ ) { $name = $1; $number = $2; if( grep(/^$name$/,values(%block_opener) ) ) { $opener_number{$name} = $number; } if( grep(/^$name$/,keys(%block_opener) ) ) { $closer_name{$number} = $name; } # keep track of min and max block tokens if( $opener_number{$name} || $closer_name{$number} ) { if( $min_block_token == -1 ) { $min_block_token = $number; } if( $max_block_token == -1 ) { $max_block_token = $number; } if( $number < $min_block_token ) { $min_block_token = $number; } if( $number > $max_block_token ) { $max_block_token = $number; } } } } close(TOKDEFS); # Make sure tokdefs.h was parsed OK. All the token names # in the %block_opener table above must be defined. foreach ( (keys %block_opener) ) { $key = $_; if( ! grep(/^$key$/, values(%closer_name) ) ) { not_found($key); } } foreach ( (values %block_opener) ) { $val = $_; if( ! defined($opener_number{$val}) ) { not_found($val); } } # Find range of token values used to index array $min_closer = (sort keys %closer_name)[0]; $max_closer = (reverse sort keys %closer_name)[0]; # Print initializer for the C lookup table that gives # matching opener for any closer. This initializer is # to be included like so: # int block_opener[] = { # #include "blockmatch.h" # }; # It also defines range and offset of index values. # Look up a value as # matching_token = block_opener[closer_token-MIN_CLOSER] print < ERROR: tok_$_[0] not found in tokdefs.h <=== This probably means that the regular expression in the first foreach of $0 is not correct for the tokdefs.h file produced using the local parser generator. Please send a copy of the tokdefs.h file, along with information identifying the operating system and the name and version number of the parser generator (probably @YACC@) to the ftnchek maintainer listed in README. END_ERROR_MESSAGE exit(1); } ftnchek-3.3.1/build.com0000644000031000002260000001053307745352100015362 0ustar moniotstaff00000000000000$! BUILD.COM $! Creates Ftnchek from source code for Alpha VMS systems $! $ On Control_Y Then GoTo The_Exit $ On Warning Then GoTo The_Exit $! $! $! Now compile everything and link it all. $! If you have xmalloc/xrealloc, remove the /DEFINE from shell_mung $! line and add them to the list of objs to link. $! The CC.COM script is used in place of CC command so that if something $! is changed, BUILD can be re-run and only re-compiles what changed. $! Invocation: @CC PROG DEPENDENCIES [/CFLAGS...] $ IF F$SEARCH("shell_mung.c") .EQS. "" $ THEN! If shell_mung not found, work around it and tell the user $ WRITE SYS$OUTPUT "SHELL_MUNG.C not found: wildcard expansion will not be" $ WRITE SYS$OUTPUT "done. SHELL_MUNG.C is distributed separately." $ @CC ftnchek config.h,ftnchek.h,intrins.h,options.h /STANDARD=RELAXED_ANSI89 $ ELSE $ @CC ftnchek config.h,ftnchek.h,intrins.h,options.h /STANDARD=RELAXED_ANSI89/DEFINE=(USE_SHELL_MUNG) $ @CC shell_mung "" /STANDARD=VAXC/DEFINE=("xmalloc=malloc","xrealloc=realloc") $ ENDIF $ @CC advance config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h /STANDARD=RELAXED_ANSI89 $ @CC argcheck config.h,ftnchek.h,pgsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC calltree config.h,ftnchek.h,pgsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC comcheck config.h,ftnchek.h,pgsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC exprtype config.h,ftnchek.h,symtab.h,tokdefs.h /STANDARD=RELAXED_ANSI89 $ @CC forlex config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h /STANDARD=RELAXED_ANSI89 $ @CC fortran config.h,ftnchek.h,symtab.h,fortran.c /STANDARD=RELAXED_ANSI89 $ @CC include config.h,ftnchek.h,symtab.h,forlex.h,advance.h /STANDARD=RELAXED_ANSI89 $ @CC intake config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h /STANDARD=RELAXED_ANSI89 $ @CC intrins config.h,ftnchek.h,intrins.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC iokeywds config.h,ftnchek.h,symtab.h,tokdefs.h,iokeywds.h /STANDARD=RELAXED_ANSI89 $ @CC keywords config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h /STANDARD=RELAXED_ANSI89 $ @CC labels config.h,ftnchek.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC loccheck config.h,ftnchek.h,loccheck.h,plsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC makedcls config.h,ftnchek.h,plsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC makehtml config.h,ftnchek.h,symtab.h,plsymtab.h,tokdefs.h /STANDARD=RELAXED_ANSI89 $ @CC message config.h,ftnchek.h /STANDARD=RELAXED_ANSI89 $ @CC options config.h,ftnchek.h,options.h /STANDARD=RELAXED_ANSI89 $ @CC pgsymtab config.h,ftnchek.h,pgsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC plsymtab config.h,ftnchek.h,plsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC prlists config.h,ftnchek.h,symtab.h,symutils.h /STANDARD=RELAXED_ANSI89 $ @CC prlocsym config.h,ftnchek.h,loccheck.h,plsymtab.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC project config.h,ftnchek.h,symtab.h /STANDARD=RELAXED_ANSI89 $ @CC symspace config.h,ftnchek.h,symtab.h,symspace.h,symutils.h /STANDARD=RELAXED_ANSI89 $ @CC symtab config.h,ftnchek.h,iokeywds.h,intrins.h,symtab.h,tokdefs.h /STANDARD=RELAXED_ANSI89 $ @CC symutils config.h,ftnchek.h,symtab.h,symutils.h /STANDARD=RELAXED_ANSI89 $ @CC utils config.h,utils.h /STANDARD=RELAXED_ANSI89 $ IF F$SEARCH("shell_mung.obj") .EQS. "" $ THEN $ @LINK ftnchek,advance,argcheck,calltree,comcheck,exprtype,forlex,fortran,include,- intake,intrins,iokeywds,keywords,labels,loccheck,makedcls,makehtml,message,options,- pgsymtab,plsymtab,prlists,prlocsym,project,symspace,symtab,symutils,utils $ ELSE $ @LINK ftnchek,advance,argcheck,calltree,comcheck,exprtype,forlex,fortran,include,- intake,intrins,iokeywds,keywords,labels,loccheck,makedcls,makehtml,message,options,- pgsymtab,plsymtab,prlists,prlocsym,project,symspace,symtab,symutils,utils,- shell_mung $ ENDIF $ Set NoVerify $ WRITE SYS$OUTPUT "Ftnchek created" $ WRITE SYS$OUTPUT "To make it runnable as a command" $ WRITE SYS$OUTPUT "say $ FTNCHEK :== $diskname:[pathname]FTNCHEK" $ On Control_Y Then GoTo Help_Exit $ On Warning Then GoTo Help_Exit $! Create the help library. $ LIBR/CREATE/HELP FTNCHEK.HLB FTNCHEK.HLP $ WRITE SYS$OUTPUT "Help library created -- to access it via HELP" $ WRITE SYS$OUTPUT "say $ DEFINE HLP$LIBRARY diskname:[pathname]FTNCHEK.HLB" $ EXIT $ Help_Exit: $ Set NoVerify $ WRITE SYS$OUTPUT "Error- help library not created" $ EXIT $ The_Exit: $ Set NoVerify $ WRITE SYS$OUTPUT "Error- BUILD failed." $ EXIT ftnchek-3.3.1/build-vax.com0000644000031000002260000001043307745352240016162 0ustar moniotstaff00000000000000$! BUILD-VAX.COM $! Creates Ftnchek from source code for VAX/VMS systems. $! This script uses CC.COM and LINK.COM to check whether target $! is up to date, giving effect of a crude make utility. $! The CC.COM script is used in place of CC command so that if something $! is changed, BUILD can be re-run and only re-compiles what changed. $! Invocation: @CC PROG DEPENDENCIES [/CFLAGS...] $! $! This version of the build script is for older VAX systems. For $! more recent Alpha systems, use BUILD.COM instead. $! $ On Control_Y Then GoTo The_Exit $ On Error Then GoTo The_Exit $! DISABLED at ftnchek 2.8: On Warning Then GoTo The_Exit $! $! First, create the right environment for compilation. $ IF F$SEARCH("vaxc.opt") .EQS. "" $ THEN! Create option file for shareable image: makes executable smaller $ COPY SYS$INPUT vaxc.opt sys$library:vaxcrtl/share $ ENDIF $ DEFINE lnk$library sys$library:vaxcrtl ! simplest runtime library $! $! Now compile everything and link it all. $! If you have xmalloc/xrealloc, remove the /DEFINE from shell_mung $! line and add them to the list of objs to link. $! If your compiler requires the /VAXC or other option, add it to CC.COM $! at line 44. $! $ IF F$SEARCH("shell_mung.c") .EQS. "" $ THEN! If shell_mung not found, work around it and tell the user $ WRITE SYS$OUTPUT "SHELL_MUNG.C not found: wildcard expansion will not be" $ WRITE SYS$OUTPUT "done. SHELL_MUNG.C is distributed separately." $ @CC ftnchek config.h,ftnchek.h,intrins.h,options.h $ ELSE $ @CC ftnchek config.h,ftnchek.h,intrins.h,options.h /DEFINE=(USE_SHELL_MUNG) $ @CC shell_mung "" /DEFINE=("xmalloc=malloc","xrealloc=realloc") $ ENDIF $ @CC advance config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h $ @CC argcheck config.h,ftnchek.h,pgsymtab.h,symtab.h $ @CC calltree config.h,ftnchek.h,pgsymtab.h,symtab.h $ @CC comcheck config.h,ftnchek.h,pgsymtab.h,symtab.h $ @CC exprtype config.h,ftnchek.h,symtab.h,tokdefs.h $ @CC forlex config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h $ @CC fortran config.h,ftnchek.h,symtab.h,fortran.c $ @CC include config.h,ftnchek.h,symtab.h,forlex.h,advance.h $ @CC intake config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h,advance.h $ @CC intrins config.h,ftnchek.h,intrins.h,symtab.h $ @CC iokeywds config.h,ftnchek.h,symtab.h,tokdefs.h,iokeywds.h $ @CC keywords config.h,ftnchek.h,symtab.h,tokdefs.h,forlex.h $ @CC labels config.h,ftnchek.h,symtab.h $ @CC loccheck config.h,ftnchek.h,loccheck.h,plsymtab.h,symtab.h $ @CC makedcls config.h,ftnchek.h,plsymtab.h,symtab.h $ @CC makehtml config.h,ftnchek.h,symtab.h,plsymtab.h,tokdefs.h $ @CC message config.h,ftnchek.h $ @CC options config.h,ftnchek.h,options.h $ @CC pgsymtab config.h,ftnchek.h,pgsymtab.h,symtab.h $ @CC plsymtab config.h,ftnchek.h,plsymtab.h,symtab.h $ @CC prlists config.h,ftnchek.h,symtab.h,symutils.h $ @CC prlocsym config.h,ftnchek.h,loccheck.h,plsymtab.h,symtab.h $ @CC project config.h,ftnchek.h,symtab.h $ @CC symspace config.h,ftnchek.h,symtab.h,symspace.h,symutils.h $ @CC symtab config.h,ftnchek.h,iokeywds.h,intrins.h,symtab.h,tokdefs.h $ @CC symutils config.h,ftnchek.h,symtab.h,symutils.h $ @CC utils config.h,utils.h $ IF F$SEARCH("shell_mung.obj") .EQS. "" $ THEN $ @LINK ftnchek,advance,argcheck,calltree,comcheck,exprtype,forlex,fortran,include,- intake,intrins,iokeywds,keywords,labels,loccheck,makedcls,makehtml,message,options,- pgsymtab,plsymtab,prlists,prlocsym,project,symspace,symtab,symutils,utils,- vaxc/opt $ ELSE $ @LINK ftnchek,advance,argcheck,calltree,comcheck,exprtype,forlex,fortran,include,- intake,intrins,iokeywds,keywords,labels,loccheck,makedcls,makehtml,message,options,- pgsymtab,plsymtab,prlists,prlocsym,project,symspace,symtab,symutils,utils,- shell_mung,vaxc/opt $ ENDIF $ WRITE SYS$OUTPUT "Ftnchek created" $ WRITE SYS$OUTPUT "To make it runnable as a command" $ WRITE SYS$OUTPUT "say $ FTNCHEK :== $diskname:[pathname]FTNCHEK" $ On Control_Y Then GoTo Help_Exit $ On Warning Then GoTo Help_Exit $! Create the help library. $ LIBR/CREATE/HELP FTNCHEK.HLB FTNCHEK.HLP $ WRITE SYS$OUTPUT "Help library created -- to access it via HELP" $ WRITE SYS$OUTPUT "say $ DEFINE HLP$LIBRARY diskname:[pathname]FTNCHEK.HLB" $ EXIT $ Help_Exit: $ Set NoVerify $ WRITE SYS$OUTPUT "Error- help library not created" $ EXIT $ The_Exit: $ Set NoVerify $ WRITE SYS$OUTPUT "Error- BUILD failed." ftnchek-3.3.1/cc.com0000644000031000002260000000334307072736255014663 0ustar moniotstaff00000000000000$! name: CC.COM $! author: R. Moniot $! date: 14-Apr-87 $! purpose: bring C object module up to date with its source. $! usage: @CC PROG DEPENDENCIES [/CFLAGS...] $! Where PROG is source filename (OMIT extension .C), and $! DEPENDENCIES is comma-separated list (possibly null) of $! files (WITH their extensions) on which PROG depends, other $! than the source file. Optional compiler flags must come $! last. $! $! Look for .C file and .OBJ file, and do the right things. $! $ On Control_Y Then Exit 2 $ On Warning Then Exit 2 $ dependency = p1 + ".C" $ if f$search(dependency) .eqs. "" then goto NoSuchFile $ if f$search(p1 + ".OBJ") .eqs. "" then goto Compile $! $! If both exist, look at creation dates to see if compilation needed $! $ srcdate = f$cvtime(f$file_attributes(p1+".C","cdt")) $ objdate = f$cvtime(f$file_attributes(p1+".OBJ","cdt")) $ if objdate .lts. srcdate then goto Compile $! $! check dependencies. rest holds remainder of string. $ rest = p2 $ Loop: $ len = f$length(rest) $ pos = f$locate(",",rest) $ dependency = f$extract(0,pos,rest) $ if dependency .eqs. "" then goto Exit $ if f$search(dependency) .eqs. "" then goto NoSuchFile $ depdate = f$cvtime(f$file_attributes(dependency,"cdt")) $ if objdate .lts. depdate then goto Compile $ if pos .eq. len then goto Exit $ rest = f$extract(pos+1,len-pos-1,rest) $ goto Loop $! $! Object does not exist or is older than source: recompile $! $ Compile: $ write sys$output "CC " + p1+" "+p3+p4+p5+p6+p7+p8 $ cc 'p1' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' $ exit $! $! Source is older than object: all is OK $! $ Exit: $ write sys$output p1 + ".OBJ is up to date." $ exit $! $ NoSuchFile: $ write sys$output dependency + " does not exist" $! exit, and return control to command level $ stop ftnchek-3.3.1/link.com0000644000031000002260000000252007072736270015224 0ustar moniotstaff00000000000000$! name: LINK.COM $! author: R. Moniot $! date: 14-Apr-87 $! purpose: bring C image up to date with its objects $! usage: @LINK OBJLIST $! Where OBJLIST is a comma-separated list of object files, $! OMITTING the extension .OBJ. $! $! Pick main module name from front of the list. If .EXE file does not exist, $! go to link. $! $ On Control_Y Then Exit 2 $ On Warning Then Exit 2 $ len = f$length(p1) $ pos = f$locate(",",p1) $ main = f$extract(0,pos,p1) $ if f$search(main + ".EXE") .eqs. "" then goto Link $! $ exedate = f$cvtime(f$file_attributes(main + ".EXE","cdt")) $! $! Check against object module dates $! $ rest = p1 $ Loop: $ len = f$length(rest) $ pos = f$locate(",",rest) $ module = f$extract(0,pos,rest) $ if module .eqs. "" then goto Exit $ if f$search(module + ".OBJ") .eqs. "" then goto NoSuchFile $ objdate = f$cvtime(f$file_attributes(module + ".OBJ","cdt")) $ if exedate .lts. objdate then goto Link $ rest = f$extract(pos+1,len-pos-1,rest) $ goto Loop $! $! Image does not exist or is older than some objects: link $! $ Link: $ write sys$output "LINK " + p1 $ on warning then exit $ link 'p1' $ exit $! $! object is older than executable: all is OK $! $ Exit: $ write sys$output main + ".EXE is up to date." $ exit $! $ NoSuchFile: $ write sys$output module + ".OBJ does not exist" $! exit, and return control to command level $ stop ftnchek-3.3.1/check.com0000644000031000002260000004563707306032352015352 0ustar moniotstaff00000000000000$! Name: CHECK.COM $! Author: Bob Wells (wells@atm.ox.ac.uk) $! Date: 14-Mar-00 $! $Id: check.com,v 1.11 2001/06/02 00:35:54 moniot Rel $ $! Purpose: To provide some checking of the VMS FTNCHEK distribution $! as in the unix distribution make check. $! Most of the prolems arise from the different way in which $! files are named and some effort is needed to to produce output $! identical to that of unix systems. $! MAKEDCL2INC involves the use of AWK which is not provided in the $! standard VMS distribution. It can be obtained from the Freeware CD $! or downloaded from http://www.openvms.digital.com/freeware $! Usage: @CHECK $! $ Noadwrite: Subroutine ! P1= Text to be output $! Purpose: perform non-advancing write to screen $! Special case: terminates with newline if P1 = "done" $ If P1 .NES. "done" $ Then $ Read/Time=0/Error=Next SYS$COMMAND Line/Prompt="''P1'" $ Else $ Read/Time=0/Error=Next SYS$COMMAND Line/Prompt="''F$FAO("!AS!/","done")'" $ Endif $ Next: $ EndSubroutine $! $ Doedit: Subroutine ! P1=Filename P2=string P3=substitute string $! Purpose: replace all occurrences of a string in a file $ Open/Write TMP REPLACE.EDT $ Write TMP "substitute\" + P2 + "\" + F$Edit(P3,"LOWERCASE") + "\ 1:999999 /notype" $ Write TMP "ex" $ Close TMP $ Assign NLA0: SYS$OUTPUT $ Edit/EDT/NOJOURNAL/Command=REPLACE.EDT 'P1' $ Deassign SYS$OUTPUT $ Delete/Noconfirm REPLACE.EDT; $ EndSubroutine $! $ Doftnchek: Subroutine ! P1=FTNCHEK argument list P2=Output file $! Purpose: run FTNCHEK with specified arguments and redirect output to a file $ Open/Write TMP 'P2' $ Set Noon $ Assign/User TMP SYS$OUTPUT $ Assign/User TMP SYS$ERROR $ Ftnchek 'P1' $ Close TMP $ Set On $ EndSubroutine $! $ Compare: Subroutine ! P1=filename P2=Unix extension $! Purpose: compare two FTNCHEK output files for differences $ Char = F$Extract ( F$Locate(".",P1)-1, 1, P1 ) + P2 $ Vary = "[.VARY]" + P1 $ Okay = "[.OKAY]" + P1 $ Call Doedit 'Vary' .;9 'Char' $ Differences/Ignore=(Spacing,Blank)/Output=F1.TMP 'Vary' 'Okay' $ Open/Read TMP F1.TMP $ Read TMP Line $ Close TMP $ Delete/Noconfirm F1.TMP; $ If Line .EQS. "Number of difference sections found: 0" $ Then $ Call Noadwrite "." $ Delete/Noconfirm 'Vary';* $ Else $ Write SYS$OUTPUT "====> Differences found in " + P1 + " test <====" $ Write SYS$OUTPUT "Master: " + F$Search(Okay) $ Write SYS$OUTPUT "Test: " + F$Search(Vary) $ Write SYS$OUTPUT "---------------------------------------------------------" $ Purge 'Vary' $ EndIf $ EndSubroutine $! $ Check: Subroutine ! P1=file P2=.ext of output P3=options $! Purpose: run FTNCHEK with specified options and compare output with master $ Tmpfil = F$Extract ( 0, F$Length(P1)-1, P1 ) + ".;9" $ Cffil = P1 + "." + P2 $ Params = P3 + " " + Tmpfil $ IF F$Search ("''P1'.F") .NES. "" Then Rename 'P1'.F 'Tmpfil' $ Call Doftnchek "''Params'" [.VARY]'Cffil' $ IF F$Search (Tmpfil) .NES. "" Then Rename 'Tmpfil' 'P1'.F $ Call Compare 'Cffil' ".f" $ EndSubroutine $ $ Checklist: Subroutine ! P1=file $! Purpose: run FTNCHEK with list checks using the .OPT files $ Optfil = "''P1'.OPT" $ If F$Search(Optfil) .NES. "" $ Then $ Copy 'Optfil' F1.TMP $ Call Doedit F1.TMP "''P1'.f" " " $ Open/Read TMP F1.TMP $ Read TMP Params $ Close TMP $ Delete/Noconfirm F1.TMP;* $ Else $ Params = "-list -symt -port" $ Endif $ Call Check 'P1' FCL "''Params'" $ EndSubroutine $!------------------------------------------------------------------------------ $ CheckF90: Subroutine ! P1=file P2=.ext of output P3=options $! Purpose: like Check but for .F90 file extension $ Tmpfil = F$Extract ( 0, F$Length(P1)-1, P1 ) + ".;9" $ Cffil = P1 + "." + P2 $ Params = P3 + " " + Tmpfil $ IF F$Search ("''P1'.F90") .NES. "" Then Rename 'P1'.F90 'Tmpfil' $ Call Doftnchek "''Params'" [.VARY]'Cffil' $ IF F$Search (Tmpfil) .NES. "" Then Rename 'Tmpfil' 'P1'.F90 $ Call Compare 'Cffil' ".f90" $ EndSubroutine $ $ Checkfreeform: Subroutine ! P1=file $! Purpose: run FTNCHEK with freeform checks using the .OPT files $ Optfil = "''P1'.OPT" $ If F$Search(Optfil) .NES. "" $ Then $ Copy 'Optfil' F1.TMP $ Call Doedit F1.TMP "''P1'.f90" " " $ Open/Read TMP F1.TMP $ Read TMP Params $ Close TMP $ Delete/Noconfirm F1.TMP;* $ Else $ Params = "-list -symt -port" $ Endif $ Call CheckF90 'P1' FCL "''Params'" $ EndSubroutine $!------------------------------------------------------------------------------ $ Checkexpert: Subroutine ! P1=file $! Purpose: run FTNCHEK with list checks using the .OPT files and -nonovice $! Adapted from Checklist by R. Moniot. $ Optfil = "''P1'.OPT" $ If F$Search(Optfil) .NES. "" $ Then $ Copy 'Optfil' F1.TMP $ Call Doedit F1.TMP "''P1'.f" " " $ Open/Read TMP F1.TMP $ Read TMP Params $ Close TMP $ Delete/Noconfirm F1.TMP;* $ Else $ Params = "-list -symt -port" $ Endif $ Params = "-nonovice " + Params $ Call Check 'P1' FCX "''Params'" $ EndSubroutine $! $!------------------------------------------------------------------------------ $ On Control_Y Then GoTo Finish $ On Warning Then GoTo Finish $ On Error Then GoTo Finish $ Setverify = 'F$Verify(0)' $ Startdir = F$Environment("DEFAULT") $ Comma = "," ! For use as a list separator $! $! Set up FTNCHEK command $ File = F$Search("FTNCHEK.EXE") $ If File .EQS. "" $ Then $ Write SYS$OUTPUT "ERROR ===> Cannot run checks: no FTNCHEK found <===" $ GoTo Finish $ Else $ FTNCHEK := $'File' $ EndIf $! $ Set Default [.TEST] $! $! Check for pre-defined logical (environment) variables $ Assign F1.TMP SYS$OUTPUT $ Show Logical $ Deassign SYS$OUTPUT $ Search/Nowarning/Output=F2.TMP F1.TMP FTNCHEK_ $ Delete/Noconfirm F1.TMP; $ Open/Read TMP F2.TMP $ Read/End_Of_File=Empty_Logical TMP Line $ Close TMP $ Write SYS$OUTPUT "WARNING ===> Logical names are defined <=== $ Type F2.TMP $ Write SYS$OUTPUT "These need to be DEASSIGNed before running CHECK" $ Delete/Noconfirm F2.TMP; $ GoTo Finish $ Empty_Logical: $ Close TMP $ Delete/Noconfirm F2.TMP; $! $! Check for existing default configuration files $ If F$Search("SYS$LOGIN:.FTNCHEKRC") .NES. "" $ Then $ Write SYS$OUTPUT "WARNING ===> SYS$LOGIN:.FTNCHEKRC exists <===" $ Write SYS$OUTPUT "delete or rename it before running check" $ GoTo Finish $ EndIf $ If F$Search("SYS$LOGIN:FTNCHEK.INI") .NES. "" $ Then $ Write SYS$OUTPUT "WARNING ===> SYS$LOGIN:FTNCHEK.INI exists <===" $ Write SYS$OUTPUT "delete or rename it before running check" $ GoTo Finish $ EndIf $! $! Check for [.VARY] subdirectory and create it if it does not exist $ If F$Search("VARY.DIR") .EQS. "" $ Then $ Write SYS$OUTPUT "NOTE: [.VARY] subdirectory does not exist: creating it now." $ Create/Dir [.VARY] $ Endif $! $ Write SYS$OUTPUT "================================================================" $ Write SYS$OUTPUT "There should be no file differences reported by these tests." $ Write SYS$OUTPUT "Output files matching master output files will be removed," $ Write SYS$OUTPUT "leaving any erroneous output files in the subdirectory" $ Write SYS$OUTPUT "[.TEST.VARY] for manual examination. If you built FTNCHEK with" $ Write SYS$OUTPUT "non-standard compilation options, there may be some differences." $ Write SYS$OUTPUT "================================================================" $! $!------------------------------------------------------------------------------ $ List: Call Noadwrite "checking listing output: " $ Filelist = "AVERAGE,BACKSLASH,CHESTNUTS,COMCLASH,COMCMP,COMPLEX,COMTEST," + - "COMUSAGE,CORRECT,DIMS,DO_ENDDO,NAMELIST,NOBLANKS,STRINGS,UNIXINCLUDED," + - "DECTAB,QUAD,SEQUENCE,SUBSTR,AUTOARRAY,CYCLE-EXIT,RELOPS,EMBEDDED-SPACE," + - "ARG-ALIAS,COMMON-ALIAS,DEC-PARAMETER,IFFY,PURE-FUNCTION,PRIMES,LABELTEST," + - "CASE,BLOCKERRORS,T208F" $! HELP omitted as VMS prints / instead of - switches and has different defaults $! INCLUDE omitted. VMS output is different for include files $! ALLKEYWORDS omitted. VMS output is different for include files $ Define FTNCHEK_F77 YES $ M = 0 $ List1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endlist1 $ Call Checklist 'File' $ M = M + 1 $ Goto List1 $ Endlist1: Call Noadwrite "done" $! Repeat for expert mode $ Expert: Call Noadwrite "checking expert-mode output: " $ M = 0 $ Expert1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endexpert1 $ Call Checkexpert 'File' $ M = M + 1 $ Goto Expert1 $ Endexpert1: Call Noadwrite "done" $ Deassign FTNCHEK_F77 $! $!------------------------------------------------------------------------------ $ Freeform: Call Noadwrite "checking free-form output: " $ Filelist = "MODEL,BLOCKCHECK" $ Define FTNCHEK_F90 YES $ Define FTNCHEK_SOURCE "free" $ M = 0 $ Freeform1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endfreeform1 $ Call Checkfreeform 'File' $ M = M + 1 $ Goto Freeform1 $ Endfreeform1: Call Noadwrite "done" $ Deassign FTNCHEK_F90 $ Deassign FTNCHEK_SOURCE $! $!------------------------------------------------------------------------------ $ Standard: Call Noadwrite "checking standard-compliance warnings: " $ Filelist = "IOKEYWORDS,F95DELETED" $ M = 0 $ Standard1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endstandard1 $ Call Check 'File' FC0 "-nof77 -nof90 -nof95" $ Call Check 'File' FC1 " -f77 -nof90 -nof95" $ Call Check 'File' FC2 "-nof77 -f90 -nof95" $ Call Check 'File' FC3 "-nof77 -nof90 -f95" $ M = M + 1 $ Goto Standard1 $ Endstandard1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Size: Call Noadwrite "checking size and type mismatch: " $ Filelist = "ASSIGN,WORDSIZE,MIXED-EQUIV" $ M = 0 $ Size1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endsize1 $ Call Check 'File' FC1 "-notrun -noport -nof77 -lis" $ Call Check 'File' FC2 "-notrun -noport -f77" $ Call Check 'File' FC3 "-notrun -port -nof77" $ Call Check 'File' FC4 "-notrun -port -f77" $ Call Check 'File' FC5 " -trun -noport -nof77" $ Call Check 'File' FC6 " -trun -noport -f77" $ Call Check 'File' FC7 " -trun -port -nof77" $ Call Check 'File' FC8 " -trun -port -f77" $ Call Check 'File' FCA " -trun -port -nof77 -word=2" $ Call Check 'File' FCB " -trun -port -nof77 -word=4" $ Call Check 'File' FCC " -trun -port -nof77 -word=8" $ Call Check 'File' FCD " -trun -noport -nof77 -word=2" $ Call Check 'File' FCE " -trun -noport -nof77 -word=4" $ Call Check 'File' FCF " -trun -noport -nof77 -word=8" $ M = M + 1 $ Goto Size1 $ Endsize1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Args: Call Noadwrite "checking -args setting: " $ Filelist = "01,02,03,04,05,06,07,08,09,10,11,12,13,14,15" $ M = 0 $ Args1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endargs1 $ N = 0 $ Args2: Call Check "ARGS''File'" "FC''N'" "-args=''N'" $ N = N + 1 $ If N .LT. 4 Then Goto Args2 $ M = M + 1 $ Goto Args1 $ Endargs1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Array: Call Noadwrite "checking -array setting: " $ Filelist = "ARRAYCLASH" $ M = 0 $ Array1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endarray1 $ N = 0 $ Array2: Call Check 'File' "FC''N'" "-array=''N' -port" $ N = N + 1 $ If N .LT. 4 Then Goto Array2 $ M = M + 1 $ Goto Array1 $ Endarray1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Common: Call Noadwrite "checking -common setting: " $ Filelist = "COMCMP,COMUSAGE" $ M = 0 $ Common1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endcommon1 $ N = 0 $ Common2: Call Check 'File' "FC''N'" "-common=''N' -nof77" $ N = N + 1 $ If N .LT. 4 Then Goto Common2 $ M = M + 1 $ Goto Common1 $ Endcommon1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Intrinsic: Call Noadwrite "checking -intrinsic setting: " $ Filelist = "INTRINSTEST" $ M = 0 $ Intrinsic1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endintrinsic1 $ Call Check 'File' FC0 "-intrinsic=none" $ Call Check 'File' FC1 "-intrinsic=none,extra" $ Call Check 'File' FC2 "-intrinsic=none,unix" $ Call Check 'File' FC3 "-intrinsic=none,vms" $ Call Check 'File' FC4 "-intrinsic=no-rand-no-arg,no-vms,unix" $ Call Check 'File' FC5 "-intrinsic=no-rand-one-arg,no-vms,unix" $ Call Check 'File' FC6 "-intrinsic=no-iargc-no-arg,no-vms,unix" $ Call Check 'File' FC7 "-intrinsic=no-iargc-one-arg,no-vms,unix" $ Call Check 'File' FC8 "-intrinsic=all" $ M = M + 1 $ Goto Intrinsic1 $ Endintrinsic1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Output: Call Noadwrite "checking -output setting: " $ Call Check AVERAGE FC2 "-symt -list -port -out=average.out" $ Rename AVERAGE.OUT [.VARY] $ Call Compare AVERAGE.OUT ".f" $ Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Usage: Call Noadwrite "checking -usage setting: " $ Filelist = "USAGE" $ M = 0 $ Usage1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endusage1 $ Call Check 'File' FC0 "-usage=none" $ Call Check 'File' FC1 "-usage=none,com-var-uninitialized,var-uninitialized" $ Call Check 'File' FC2 "-usage=none,com-block-unused,com-var-set-unused,com-var-unused,ext-unused,var-set-unused,var-unused" $ Call Check 'File' FC3 "-usage=all" $ M = M + 1 $ Goto Usage1 $ Endusage1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Project: Call Noadwrite "checking project files: " $ Rename CORRECT.F CORREC.;9 $ Call Doftnchek "-project correc.;9" "[.VARY]CORRECT.FC1" $ Rename CORREC.;9 CORRECT.F $ Call Doedit [.VARY]CORRECT.FC1 correc.prj correct.prj $ Call Doftnchek "CORREC.PRJ;1" "[.VARY]CORRECT.PCL" $ Rename CORREC.PRJ [.VARY]CORRECT.PRJ $ Call Doedit [.VARY]CORRECT.PCL correc.prj;1 correct.prj $ Call Compare CORRECT.FC1 ".f" $ Call Compare CORRECT.PRJ ".f" $ Call Compare CORRECT.PCL ".f" $ Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Rc: Call Noadwrite "checking reading rc file: " $ Open/Write TMP FTNCHEK.INI $ Write TMP "f77=all" $ Write TMP "symtab" $ Close TMP $ Rename DO_ENDDO.F DO_ENDD.;9 $ Call Doftnchek "-f77=no-long-names,no-name-underscore do_endd.;9" [.VARY]RC.FCL $ Rename DO_ENDD.;9 DO_ENDDO.F $ Call Doedit [.VARY]RC.FCL .;9 o.f $ Call Compare RC.FCL ".f" $ Delete/Noconfirm FTNCHEK.INI; $ Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Wildcard: Call Noadwrite "check interpreting wildcards: " $ Call Doftnchek "-port=mixed* -port=help" "[.VARY]WILDCARD.FC1" $ Call Doedit [.VARY]WILDCARD.FC1 "/port" "-port" $ Call Compare WILDCARD.FC1 ".f" $ Call Doftnchek "-usage=no-*var* -usage=help" "[.VARY]WILDCARD.FC2" $ Call Doedit [.VARY]WILDCARD.FC2 "/usage" "-usage" $ Call Compare WILDCARD.FC2 ".f" $ Call Doftnchek "-usage=no-var* -usage=help" "[.VARY]WILDCARD.FC3" $ Call Doedit [.VARY]WILDCARD.FC3 "/usage" "-usage" $ Call Compare WILDCARD.FC3 ".f" $ Call Doftnchek "-f77=*array*,format* -f77=help" "[.VARY]WILDCARD.FC4" $ Call Doedit [.VARY]WILDCARD.FC4 "/f77" "-f77" $ Call Compare WILDCARD.FC4 ".f" $ Call Doftnchek "-pretty=*ugly* -pretty=help" "[.VARY]WILDCARD.FC5" $ Call Doedit [.VARY]WILDCARD.FC5 "/pretty" "-pretty" $ Call Compare WILDCARD.FC5 ".f" $ Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Makedcls: Call Noadwrite "checking -makedcls setting: " $ Filelist = "BUILTIN,DCLTEST,DIMS,NAMELIST,PARAMS,T208A,T208B,T208C,T208D," + - "T208E,T208F,T208G,T208H,T208I,T208J,T208K,T208L,T208M,T208N,T208O,T208P," + - "T208Q,T208R,T208S,T208T,T208U,T208V,T208W,T208X" $ M = 0 $ Makedcls1: File = F$element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endmakedcls1 $ Tmpfil = F$Extract ( 0, F$Length(File)-1, File ) $ Rename 'File'.F 'Tmpfil'.;9 $ N = 0 $ P = 1 $ Makedcls2: Call Doftnchek "-nocheck -makedcls=''P' ''Tmpfil'.;9" NLA0: $ If F$Search("''Tmpfil'.DCL") .NES. "" $ Then $ Rename 'Tmpfil'.DCL [.VARY]'File'.DC'N' $ Open/Read TMP '[.VARY]'File'.DC'N' $ Read/End_Of_File=Dclsempty TMP Line $ Close TMP $ Call Compare 'File'.DC'N' ".f" $ Goto Makedclsnext $ Dclsempty: WRITE SYS$OUTPUT "Empty declarations file "+ F$Search("[.VARY]''Cffil'") + " should have been deleted" $ Endif $ Makedclsnext: P = P + P $ N = N + 1 $ If N .LT. 10 Then Goto Makedcls2 $ Rename 'Tmpfil'.;9 'File'.F $ M = M + 1 $ Goto Makedcls1 $ Endmakedcls1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $ Vcg: Call Noadwrite "checking -vcg setting: " $ filelist = "COMCMP,COMUSAGE" $ M = 0 $ Vcg1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Endvcg1 $ Tmpfil = F$Extract ( 0, F$Length(File)-1, File ) $ Rename 'File'.f 'Tmpfil'.;9 $ Call Doftnchek "-vcg ''Tmpfil'.;9" NLA0: $ Rename 'Tmpfil'.;9 'File'.f $ Rename 'Tmpfil'.VCG [.VARY]'File'.VCG $ Call Compare 'File'.VCG ".f" $ M = M + 1 $ Goto Vcg1 $ Endvcg1: Call Noadwrite "done" $! $!------------------------------------------------------------------------------ $! Check for GAWK - needed for dcl2inc processing $ Dcl2inc: Filelist = "T208X" $ Assign F1.TMP SYS$OUTPUT $ Show Symbol GAWK $ Deassign SYS$OUTPUT $ Open/Read TMP F1.TMP $ Read TMP Line $ Close TMP $ Delete/Noconfirm F1.TMP; $ If Line .NES. "%DCL-W-UNDSYM, undefined symbol - check validity and spelling" $ Then $ Call Noadwrite "checking dcl2inc processing: " $ M = 0 $ Dcl2inc1: File = F$Element(M,Comma,Filelist) $ If File .EQS. Comma Then Goto Enddcl2inc1 $ Tmpfil = F$Extract ( 0, F$Length(File)-1, File ) $ Rename 'File'.f 'Tmpfil'.;9 $ Call Doftnchek "-nocheck -makedcl=1 ''Tmpfil'.;9" NLA0: $ Rename 'Tmpfil'.;9 'File'.f $ Assign/User 'File'.ERR SYS$ERROR $ Assign/User [.VARY]'File'.MAK SYS$OUTPUT $ Gawk -f [-]DCL2INC.AWK 'Tmpfil'.DCL $ Deassign SYS$OUTPUT $ Rename 'Tmpfil'.DCL [.VARY]'File'.DCL $ Call Compare 'File'.DCL ".f" $ Rename 'Tmpfil'.DCN [.VARY]'File'.DCN $ Call Compare 'File'.DCN ".f" $ Call Doedit [.VARY]'File'.MAK 'Tmpfil'. 'File'. $ Call Compare 'File'.MAK ".f" $ Rename 'File'.ERR [.VARY] $ Call Doedit [.VARY]'File'.ERR 'Tmpfil'. 'File'. $ Call Compare 'File'.ERR ".f" $ Dcl2inc2: File = F$Search("*.INC") $ If File .EQS. "" Then Goto Enddcl2inc2 $ Cffil = F$Parse(File,,,"NAME") + ".INC" $ Rename 'Cffil' [.VARY] $ Call Compare 'Cffil' ".f" $ Goto Dcl2inc2 $ Enddcl2inc2: M = M + 1 $ Goto Dcl2inc1 $ Enddcl2inc1: Call Noadwrite "done" $ Else $ Write SYS$OUTPUT "WARNING ===> dcl2inc processing not checked <=== $ Write SYS$OUTPUT "Unable to locate GAWK on this system" $ Endif $! $ Finish: $ Set Default 'Startdir' $ If Setverify Then Set Verify $ EXIT ftnchek-3.3.1/ftnchek.def0000644000031000002260000000131207617175043015667 0ustar moniotstaff00000000000000;---------------------------------------------------------------------- ; FTNCHEK.DEF module definition file for OS/2 ; Author: J.Ftacnik, 1993 ; Modified: Fabio Mariotti, March 1995, S. A. Deutscher, March 1996 ;---------------------------------------------------------------------- NAME FTNCHEK WINDOWCOMPAT DESCRIPTION 'OS2 version of FTNCHEK program' PROTMODE ;---------------------------------------------------------------------- ; commented out and given explicitly as 64 kB with a command line ; switch to the linker. 32 kB is too small on some settings and causes ; traps. S. A. Deutscher ;---------------------------------------------------------------------- ; STACKSIZE 0x8000 ftnchek-3.3.1/configure_os2.cmd0000644000031000002260000005146507656271074017040 0ustar moniotstaff00000000000000/* configure_os2.cmd -- Christian Bartels, 1996 A REXX script to create an OS/2 specific makefile for FTNCHEK using the file 'Makefile.in' as input. This script is based on ideas of: Jan Ftacnik, 1993 Stefan A. Deutscher, 1996 (sad@utk.edu) The building of the makefile is a five phase process: 1) Parsing the command line arguments 2) Checking of the system configuration 3) Building of the actual substitutes for some variables 4) Processing of Makefile.in 5) Processing of config-generic.h to write config.h Extended by Stefan A. Deutscher to also generate stuff in test/ directory automagically. 10/1996 until 05/2003 6) Processing of test/Makefile.in 7) Processing of test/Compare.sh.in Updated by R. Moniot for changes in 2.11. (Not tested.) 10/99 Updated by Stefan A. Deutscher for changes in 3.0.0, tested. 11/2000 Updated by Stefan A. Deutscher for changes in 3.1.0, tested. 06/2001 Updated by Stefan A. Deutscher for changes in 3.2.2, tested. 05/2003 */ /* load library REXXUTIL */ call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' call SysLoadFuncs /* get the command line arguments */ parse arg argv argc = words(argv) /* set some constants */ InputFile = 'Makefile.in' TmpFile = SysTempFileName('Makefile.???') OutputFile = 'Makefile' ConfigGenericFile = 'config-generic.h' ConfigOS2File = 'config-os2.h' TestDir = 'test' TestInputFile = 'Makefile.in' TestOutputFile = 'Makefile' CompInputFile = 'Compare.sh.in' CompOutputFile = 'Compare.sh' ObjectStyle = 'aout' Linking = 'dynamic' PrefixDir = 'c:\usr\local' UseRegex = 'no' RegexDef = '0' /*******************************************/ /* parse command line arguments */ /*******************************************/ i = 1 do while (i <= argc) argum = word(argv,i) i = i + 1 /* check whether program options start correctly with '-' */ c = substr(argum,1,1) if (c \= '-') then call Usage /* select the appropriate action for commandline options */ c = substr(argum,2,1) select when (c = 'f') then do ObjectStyle = ToLower( word(argv,i) ) if (ObjectStyle \= 'omf') & (ObjectStyle \= 'aout') then do say " Error: Only supported object formats are omf and aout." say exit 1 end i = i + 1 end when (c = 'h') then do call Usage end when (c = 'l') then do Linking = ToLower( word(argv,i) ) if (Linking \= 'static') & (Linking \= 'dynamic') then do say " Error: Only static or dynamic linking is supported." say exit 1 end i = i + 1 end when (c = 'o') then do OutputFile = word(argv,i) i = i + 1 end when (c = 'p') then do PrefixDir = word(argv,i) i = i + 1 end when (c = 'r') then do UseRegex = 'yes' i = i + 1 end otherwise do say ' Error: Argument -'c' is unknown.' say call Usage end end end /*******************************************/ /* check the system configuration */ /*******************************************/ say ' Checking system configuration ....' /* Check if sed is installed */ SedProg = IsProgramInPath( 'sed.exe' ) if (SedProg = '') then do say " Error: In order to run this procedure, 'sed.exe' has", "to be installed." say exit 1 end /* Check if make is installed */ MakeProg = IsProgramInPath( 'make.exe' ) if (MakeProg = '') then do say " Error: In order to build this code, 'make.exe' has", "to be installed." say " Your best option is to get and install a port of", " GNU make." say exit 1 end /* Man is not too critical: used only in install */ ManProg = IsProgramInPath( 'man.exe' ) /* Grep is not too critical: used only in make precheck */ GrepProg = IsProgramInPath( 'grep.exe' ) /* Check if pwd is installed: */ PwdProg = IsProgramInPath( 'pwd.exe' ) /* Zip is not too critical: used only to make distribution zipfile for MS-DOS/Windows/OS2 */ ZipProg = IsProgramInPath( 'zip.exe' ) /* Check if printenv is installed */ PrintenvProg = IsProgramInPath( 'printenv.exe' ) /* Check if emx+gcc is installed */ CCompiler = IsProgramInPath( 'gcc.exe' ) if (CCompiler = '') then do say ' Error: To build FTNCHEK you will have to install the', 'EMX program' say ' development package including the GNU C compiler.' end /* Check which port of a new awk is installed */ AwkProg = SearchProgramFromList( "gawk.exe mawk.exe" ) /* No port of strip to OS/2 allows stripping of debug information or local symbols from an executable (neither EMX-bound nor LX). Therefore under OS/2 the stripping is done while producing the object files and during the link stage. Fill in a dummy for strip */ StripProg = 'echo Requested: strip' /* Check which yacc is installed */ YaccProg = SearchProgramFromList( "bison.exe yacc.exe") if ( YaccProg = 'yacc.exe' ) then do say ' Warning: If the installed yacc is not bison, then if fortran.c', ' is remade make check will report (minor) differences.' end else do if ( YaccProg = 'bison.exe' ) then YaccProg = YaccProg '-y' end /* Check if tar.exe is installed */ TarProg = IsProgramInPath( 'tar.exe' ) /* To my knowledge no port of col to OS/2 exists, but check anyway */ ColProg = IsProgramInPath( 'col.exe' ) /* Check if the groff port to OS/2 is fully installed */ NroffProg = IsProgramInPath( 'groff.exe' ) SoelimProg = IsProgramInPath( 'soelim.exe' ) EqnProg = IsProgramInPath( 'eqn.exe' ) TblProg = IsProgramInPath( 'tbl.exe' ) /* Check if a unix sh-like shell is installed */ CmdShell = SearchProgramFromList( "sh.exe ksh.exe bash.exe cmd.exe" ) /* Check which basic file utilities are installed */ /* --- chmod */ ChmodCmd = IsProgramInPath( 'chmod.exe' ) if (ChmodCmd = '') then ChmodCmd = 'echo Requested: chmod' /* --- cmp */ CmpCmd = SearchProgramFromList( "diff.exe cmp.exe comp.com" ) if (CmpCmd \= 'diff.exe') then do say ' Warning: 'CmpCmd' claims that files are different even if only' say ' the OS/2 EOL sequence CRLF is used instead of LF.' end /* --- cp */ CpCmd = IsProgramInPath( 'cp.exe' ) if (CpCmd = '') & (CmdShell = 'cmd.exe') then CpCmd = 'copy' /* use built-in command of cmd.exe */ /* --- diff */ DiffCmd = SearchProgramFromList( "diff.exe cmp.exe comp.com" ) if (DiffCmd \= 'diff.exe') then do say ' Warning: 'DiffCmd' claims that files are different even if only' say ' the OS/2 EOL sequence CRLF is used instead of LF.' end /* --- mkdir */ MkdirCmd = IsProgramInPath( 'mkdir.exe' ) if (MkdirCmd = '') & (CmdShell = 'cmd.exe') then MkdirCmd = 'mkdir' /* use built-in command of cmd.exe */ /* --- mv */ MvCmd = IsProgramInPath( 'mv.exe' ) if (MvCmd = '') & (CmdShell = 'cmd.exe') then do MvCmd = 'move' /* use built-in command of cmd.exe */ say ' Warning: The OS/2 command MOVE cannot move files across drives.' end /* --- rm */ RmCmd = IsProgramInPath( 'rm.exe' ) if (RmCmd = '') & (CmdShell = 'cmd.exe') then do RmCmd = 'del' /* use built-in command of cmd.exe */ say ' Warning: The OS/2 command DEL cannot remove read-only files.' end if (RmCmd = 'rm.exe') then RmCmd = RmCmd '-f' /* --- rmdir */ RmdirCmd = IsProgramInPath( 'rmdir.exe' ) if (RmdirCmd = '') & (CmdShell = 'cmd.exe') then RmdirCmd = 'rmdir' /* use built-in command of cmd.exe */ /* --- sh */ ShPath = Translate(SysSearchPath('PATH', 'sh.exe'), '/', '\') if (ShPath = '') then do say ' Warning: sh.exe was not found. make check will not work.' say ' Setting path to UNIX default: /bin/sh' ShPath = '/bin/sh' end /* Check if omf type libraries are installed */ if ObjectStyle = 'omf' then do CLibraryPath = value( 'library_path',, 'OS2ENVIRONMENT' ) CLibraryPath = translate( CLibraryPath, ' \', ';/' ) emx2lib = '' gcclib = '' do i = 1 to words( CLibraryPath ) CurSearchDir = word( CLibraryPath, i ) if ( right( CurSearchDir, 1) \= '\' ) then CurSearchDir = CurSearchDir'\' test = stream( CurSearchDir'emx2.lib', 'C', 'QUERY EXIST' ) if ( test \= '' ) then emx2lib = test test = stream( CurSearchDir'gcc.lib', 'C', 'QUERY EXIST' ) if ( test \= '' ) then gcclib = test end if (emx2lib = '') | (gcclib = '') then do say ' Warning: The libraries necessary for linking with object', 'files in' say ' OMF format do not exist. Object format reset to AOUT.' ObjectStyle = 'aout' end end /****************************************************/ /* build the substitutes for some strings */ /****************************************************/ /* Cflags */ Cflags = '-DUNIX -O2 -m486' /* PrefixDir */ if CmdShell = 'cmd.exe' then do PrefixDir = translate( PrefixDir, '\', '/') if ( right( PrefixDir, 1 ) = '\' ) then PrefixDir = left( PrefixDir, length(PrefixDir)-1 ) j = LastPos('\', PrefixDir) do while (j \= 0) j = j - 1 PrefixDir = insert('\\\', PrefixDir , j) j = LastPos('\', SubStr( PrefixDir, 1, j )) end end else do PrefixDir = translate( PrefixDir, '/', '\') if ( right( PrefixDir, 1 ) = '/' ) then PrefixDir = left( PrefixDir, length(PrefixDir)- 1 ) j = LastPos('/', PrefixDir) do while (j \= 0) j = j - 1 PrefixDir = insert('\', PrefixDir , j) j = LastPos('/', SubStr( PrefixDir, 1, j )) end end /* Ldflags */ if ObjectStyle = 'omf' then do if Linking = 'dynamic' then Ldflags = '-s -Zomf -Zcrtdll -Zstack 8192 -Zlinker \/pm:vio' else Ldflags = '-s -Zomf -Zsys -Zstack 8192 -Zlinker \/pm:vio' end else do if Linking = 'dynamic' then do Ldflags = '-s' if UseRegex = 'yes' then do Ldflags = '-s' Ldlibs = '-lregex' RegexDef = '1' end else Ldlibs = '' end else say ' Error: Static linking is not possible for ', 'aout object file format.' end /* ObjectsListName, ObjectsToDelete */ if ObjectStyle = 'omf' then do ObjectsListName = '$(OBJS:.o=.obj)' ObjectsToDelete = '*.o *.obj' end else do ObjectsListName = '$(OBJS)' ObjectsToDelete = '*.o' end say ' Generating Makefiles : ' /****************************************/ /* process Makefile.in */ /****************************************/ say ' Processing Makefile.in ...' '@echo off' 'sed -e "s/\/usr\/local/'PrefixDir'/" ', '-e "s/@EXE@/.exe/" ', '-e "s/@CMD@/.cmd/" ', '-e "s/@CC@/'CCompiler'/" ', '-e "s/@MANtoPS@//" ', '-e "s/@AWK@/'AwkProg'/" ', '-e "s/@NROFF@/'NroffProg'/" ', '-e "s/@SED@/'SedProg'/" ', '-e "s/@STRIP@/'StripProg'/" ', '-e "s/@YACC@/'YaccProg'/" ', '-e "s/@COL@/'ColProg'/" ', '-e "s/@CHMOD@/'ChmodCmd'/" ', '-e "s/@CMP@/'CmpCmd'/" ', '-e "s/@CP@/'CpCmd'/" ', '-e "s/@DIFF@/'DiffCmd'/" ', '-e "s/@EQN@/'EqnProg'/" ', '-e "s/@GREP@/'GrepProg'/" ', '-e "s/@PWD_PROG@/'PwdProg'/" ', '-e "s/@ZIP@/'ZipProg'/" ', '-e "s/@PRINTENV@/'PrintenvProg'/" ', '-e "s/@MKDIR@/'MkdirCmd'/" ', '-e "s/@MV@/'MvCmd'/" ', '-e "s/@RM@/'RmCmd'/" ', '-e "s/@RMDIR@/'RmdirCmd'/" ', '-e "s/@SH@/'CmdShell'/" ', '-e "s/@SOELIM@/'SoelimProg'/" ', '-e "s/@TBL@/'TblProg'/" ', '-e "s/@TAR@/'TarProg'/" ', '-e "s/@CFLAGS@/'Cflags'/" ', '-e "s/@LDFLAGS@/'Ldflags'/" ', '-e "s/@LDLIBS@/'Ldlibs'/" ', '-e "s/@INSTALL_MAN@//" ', '-e "s/@FTNPP@//" ', '-e "s/@CPPFLAGS@//" ', '<'InputFile ' >'TmpFile 'sed -e "s/$(OBJS)/'ObjectsListName'/" ', '-e "s/(RM) \*\.o/(RM) 'ObjectsToDelete'/" ', '<'TmpFile ' >'OutputFile if ObjectStyle = 'omf' then do call lineout OutputFile, "" call lineout OutputFile, "# Target to convert object files from", "a.out format to OMF format" call lineout OutputFile, "%.obj: %.o" call lineout OutputFile," emxomf -s $?" call lineout OutputFile end if CmdShell = 'cmd.exe' then do 'copy 'OutputFile TmpFile '>nul:' 'sed -e "s/X)\/bin/X)\\bin/" ', '-e "s/X)\/man/X)\\man/" ', '-e "s/X)\/lib\/ftnchek/X)\\\\lib\\\\ftnchek/" ', '-e "s/DIR)\//DIR)\\/" ', '-e "s/cat1\//cat1\\/" ', '-e "s/man1\//man1\\/" ', '-e "s/= \.\//= \.\\/" ', '-e "s/^fortran.c:/fortran.c.unx:/" ', ' <'TmpFile ' > ' OutputFile call lineout OutputFile, '' call lineout OutputFile, '# Build dcl2inc.cmd using the local', 'values for NAWK and LIBDIR.' call lineout OutputFile, 'dcl2inc.cmd: dcl2inc.in' OutputFile call lineout OutputFile, ' sed -e "s%#!/bin/sh%@echo off%" \' call lineout OutputFile, ' -e "s%#%rem %" \' call lineout OutputFile, ' dcl2inc.in > dcl2inc.cmd' call lineout OutputFile, ' echo $(NAWK) -f $(LIBDIR)\\dcl2inc.awk', '%1 >> dcl2inc.cmd' call lineout OutputFile, '' call lineout OutputFile, '# N.B. tokdefs.h is copy of y.tab.h used', 'to avoid remaking stuff when' call lineout OutputFile, '# grammar changes but not tokens.' call lineout OutputFile, '# The following copies y.tab.h to', 'tokdefs.h if changed, then aborts make,' call lineout OutputFile, '# since dependencies may have changed.' call lineout OutputFile, 'fortran.c: fortran.y' call lineout OutputFile, ' $(YACC) $(YFLAGS) fortran.y' call lineout OutputFile, ' $(MV) y.tab.c fortran.c' call lineout OutputFile, ' $(CMP) y.tab.h tokdefs.h || \' call lineout OutputFile, ' (echo tokdefs.h changed -- repeat make & \' call lineout OutputFile, ' $(CP) y.tab.h tokdefs.h)' call lineout OutputFile end 'del ' TmpFile say ' Makefile written.' /****************************************/ /* process config-generic.h */ /****************************************/ /* emx09d on OS/2 has unistd.h, stdlib.h. regex.h. is available from GNU libregex-0_12 port, which must be installed. To do so, one needs to fetch both http://ftp-os2.nmsu.edu/pub/os2/dev/unix/libregex-0_12-bin.zip http://ftp-os2.nmsu.edu/pub/os2/dev/unix/libregex-0_12.zip as bin contains the actual library but the header file is in the source archive emx09d also has both memset and bzero, and stricmp instead of strcasecmp */ say ' Processing ' ConfigGenericFile ' ...' '@echo off' 'sed -e "s/#define HAVE_UNISTD_H.*0$/#define HAVE_UNISTD_H 1/" ', '-e "s/#define HAVE_STRCASECMP.*1/#define HAVE_STRCASECMP 0/" ', '-e "s/#define HAVE_STRICMP.*0/#define HAVE_STRICMP 1/" ', '-e "s/#define HAVE_REGEX_H.*[01]/#define HAVE_REGEX_H 'RegexDef'/" ', ConfigGenericFile ' > ' ConfigOS2File say ' ' ConfigOS2File ' written.' /** weiter hier ***/ /****************************************/ /* process files in test directory: */ /****************************************/ 'cd 'TestDir /****************************************/ /* process test/Makefile.in */ /****************************************/ say ' Processing test/Makefile.in ...' '@echo off' 'sed -e "s/\/usr\/local/'PrefixDir'/" ', '-e "s/@EXE@/.exe/" ', '-e "s/@CMD@/.cmd/" ', '-e "s/@CC@/'CCompiler'/" ', '-e "s/@MAKE@/'MakeProg'/" ', '-e "s/@AWK@/'AwkProg'/" ', '-e "s/@NROFF@/'NroffProg'/" ', '-e "s/@SED@/'SedProg'/" ', '-e "s/@STRIP@/'StripProg'/" ', '-e "s/@YACC@/'YaccProg'/" ', '-e "s/@COL@/'ColProg'/" ', '-e "s/@CHMOD@/'ChmodCmd'/" ', '-e "s/@CMP@/'CmpCmd'/" ', '-e "s/@CP@/'CpCmd'/" ', '-e "s/@DIFF@/'DiffCmd'/" ', '-e "s/@EQN@/'EqnProg'/" ', '-e "s/@GREP@/'GrepProg'/" ', '-e "s/@PWD_PROG@/'PwdProg'/" ', '-e "s/@ZIP@/'ZipProg'/" ', '-e "s/@PRINTENV@/'PrintenvProg'/" ', '-e "s/@MKDIR@/'MkdirCmd'/" ', '-e "s/@MV@/'MvCmd'/" ', '-e "s/@RM@/'RmCmd'/" ', '-e "s/@RMDIR@/'RmdirCmd'/" ', '-e "s/@SH@/'CmdShell'/" ', '-e "s/@SOELIM@/'SoelimProg'/" ', '-e "s/@TBL@/'TblProg'/" ', '-e "s/@TAR@/'TarProg'/" ', '-e "s/@CFLAGS@/'Cflags'/" ', '-e "s/@LDFLAGS@/'Ldflags'/" ', '-e "s/@CPPFLAGS@//" ', '<'TestInputFile ' >'TestOutputFile say ' test/Makefile written.' /****************************************/ /* process test/Compare.sh.in */ /****************************************/ say ' Processing test/Compare.sh.in ...' '@echo off' 'sed -e "s/\/usr\/local/'PrefixDir'/" ', '-e "s/@EXE@/.exe/" ', '-e "s/@CMD@/.cmd/" ', '-e "s/@CC@/'CCompiler'/" ', '-e "s/@MANtoPS@//" ', '-e "s/@AWK@/'AwkProg'/" ', '-e "s/@NROFF@/'NroffProg'/" ', '-e "s/@SED@/'SedProg'/" ', '-e "s/@STRIP@/'StripProg'/" ', '-e "s/@YACC@/'YaccProg'/" ', '-e "s/@COL@/'ColProg'/" ', '-e "s/@CHMOD@/'ChmodCmd'/" ', '-e "s/@CMP@/'CmpCmd'/" ', '-e "s/@CP@/'CpCmd'/" ', '-e "s/@DIFF@/'DiffCmd'/" ', '-e "s/@EQN@/'EqnProg'/" ', '-e "s/@GREP@/'GrepProg'/" ', '-e "s/@PWD_PROG@/'PwdProg'/" ', '-e "s/@ZIP@/'ZipProg'/" ', '-e "s/@MKDIR@/'MkdirCmd'/" ', '-e "s/@MV@/'MvCmd'/" ', '-e "s/@RM@/'RmCmd'/" ', '-e "s/@RMDIR@/'RmdirCmd'/" ', '-e "s/@SH@/'CmdShell'/" ', '-e "s/@SOELIM@/'SoelimProg'/" ', '-e "s/@TBL@/'TblProg'/" ', '-e "s/@TAR@/'TarProg'/" ', '-e "s/@CFLAGS@/'Cflags'/" ', '-e "s/@LDFLAGS@/'Ldflags'/" ', '-e "s;/bin/sh;'ShPath';" ', '<'CompInputFile ' >'CompOutputFile say ' test/Compare.sh written. ' /* -------------------------------------------------------------- */ /* Note: This can be done by REXX: */ /* -------------------------------------------------------------- */ if (ShPath = '/bin/sh') then do say ' Note: Edit first line by hand to point to sh.exe!' end 'cd ..' say ' Done. Now copy ' ConfigOS2File ' onto config.h and run make' say ' ' say ' copy ' ConfigOS2File ' config.h' say ' make to make ftnchek.exe and the manual page ftnchek.1' say ' make check to run the tests (that takes time)' say say ' In case you have the GNU regex library (*.h, *.a) installed, you' say ' may wish to enable also the -makehtml option of ftnchek. To do so,' say ' rerun configure_os2.cmd -r before the above four steps.' say ' To save about 80kB, you can compress the executable with LxLite,' say ' if you have it installed:' say ' lxlite ftnchek.exe' exit 0 /* PROCEDURE Usage */ Usage: PROCEDURE say ' Usage: configure_os2 [options]' say say ' Options:' say ' -f format of object files: omf, aout' say ' -l linking: static, dynamic' say ' -o name of newly created Makefile' say ' -p prefix directory' say ' -r build using GNU regex library' say ' -h show this help' exit 1 /* PROCEDURE ToLower */ ToLower: PROCEDURE parse arg OldString NewString = translate(OldString, xrange('a','z'), xrange('A','Z')) return NewString /* PROCEDURE IsProgramInPath */ IsProgramInPath: PROCEDURE parse arg ProgramName Answer = FileSpec('name', SysSearchPath('PATH', ProgramName)) return Answer /* PROCEDURE SearchProgramFromList */ SearchProgramFromList: PROCEDURE parse arg ProgramList NumberInList = words( ProgramList ) FirstFound = '' i = 1 do while (i <= NumberInList) & (FirstFound = '') Program = word( ProgramList, i ) i = i + 1 FirstFound = IsProgramInPath( Program ) end return FirstFound ftnchek-3.3.1/makefile.bcc320000755000031000002260000000667207745352577016214 0ustar moniotstaff00000000000000# Borland C++ Win32 (BCC32) version of Makefile for Fortran program checker # # NOTE: For simplicity and to avoid a possibly overly long command line, # the linker links "*.obj". Therefore, make in a directory with no # extraneous .obj files. Alternatively, a response file could be used. # # (gunnar.duus@epost.de) # Name of C compiler CC=BCC32 # Name of directory where WILDARGS.OBJ is located (required to correctly # handle wildcards in arguments). Adapt this to your installation. CLIB="C:\Program Files\Borland\CBuilder5\Lib" # Command to execute to make .obj file from .c file .c.obj: $(CC) $(CFLAGS) $(OPTIONS) $< # No additional options at this time. OPTIONS= # Compiler flags, choose additional options by modifying OPTIONS above. # -c: compile only -O: optimise -w-: no warnings # -v- -l-v: turn off debugging CFLAGS= -c -O -w- -v- -l-v # Object files OBJS = fortran.obj advance.obj argcheck.obj calltree.obj comcheck.obj exprtype.obj \ forlex.obj ftnchek.obj include.obj intake.obj intrins.obj iokeywds.obj \ keywords.obj labels.obj loccheck.obj makedcls.obj makehtml.obj message.obj \ options.obj pgsymtab.obj plsymtab.obj prlists.obj prlocsym.obj \ project.obj symspace.obj symtab.obj symutils.obj utils.obj # Command to build ftnchek from object files. ftnchek.exe: $(OBJS) $(CC) -eFTNCHEK.EXE *.obj $(CLIB)\wildargs.obj # dependencies advance.obj: advance.c config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h argcheck.obj: argcheck.c config.h ftnchek.h pgsymtab.h symtab.h calltree.obj: calltree.c config.h ftnchek.h pgsymtab.h symtab.h comcheck.obj: comcheck.c config.h ftnchek.h pgsymtab.h symtab.h exprtype.obj: exprtype.c config.h ftnchek.h symtab.h tokdefs.h forlex.obj: forlex.c config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h fortran.obj: fortran.c config.h ftnchek.h symtab.h block_match.h fortran.c ftnchek.obj: ftnchek.c config.h ftnchek.h intrins.h options.h utils.h include.obj: include.c config.h ftnchek.h symtab.h forlex.h advance.h intake.obj: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h intrins.obj: intrins.c config.h ftnchek.h intrins.h symtab.h iokeywds.obj: iokeywds.c config.h ftnchek.h symtab.h tokdefs.h iokeywds.h iokeywds_enum.h utils.h keywords.obj: keywords.c config.h ftnchek.h symtab.h tokdefs.h forlex.h labels.obj: labels.c config.h ftnchek.h plsymtab.h symtab.h loccheck.obj: loccheck.c config.h ftnchek.h loccheck.h plsymtab.h symtab.h makedcls.obj: makedcls.c config.h ftnchek.h plsymtab.h symtab.h makehtml.obj: makehtml.c config.h ftnchek.h plsymtab.h symtab.h message.obj: message.c config.h ftnchek.h options.obj: options.c config.h ftnchek.h options.h utils.h pgsymtab.obj: pgsymtab.c config.h ftnchek.h pgsymtab.h symtab.h plsymtab.obj: plsymtab.c config.h ftnchek.h plsymtab.h symtab.h prlists.obj: prlists.c config.h ftnchek.h symtab.h symutils.h prlocsym.obj: prlocsym.c config.h ftnchek.h loccheck.h plsymtab.h symtab.h project.obj: project.c config.h ftnchek.h symtab.h symspace.obj: symspace.c config.h ftnchek.h symtab.h symspace.h symutils.h symtab.obj: symtab.c config.h ftnchek.h iokeywds.h intrins.h symtab.h \ symspace.h symutils.h tokdefs.h symutils.obj: symutils.c config.h ftnchek.h symtab.h symutils.h utils.obj: utils.c config.h utils.h # Command to clean up after building ftnchek. clean: del ftnchek.tds del *.obj ftnchek-3.3.1/makefile.generic0000644000031000002260000007011310202535157016673 0ustar moniotstaff00000000000000#======================================================================= # $Id: Makefile.in,v 1.76 2004/11/14 15:52:12 moniot Exp $ # # UNIX version of Makefile for Fortran program checker ftnchek # # User target list: # all build ftnchek and its man page # blurb.txt brief descriptive document about ftnchek # check run validation test suite # clean remove unnecessary intermediate files # clobber make clean, and remove ftnchek executable # dcl2inc.doc plain text form of documentation # dcl2inc.ps PostScript form of documentation # distclean remove everything not in the distribution # docs documentation files # fortran.c translates yacc code to C (made from fortran.y) # ftnchek ftnchek executable program # ftnchek.1 UNIX manual page (made from fortran.man) # ftnchek.doc plain text form of documentation # ftnchek.hlp VMS HELP library source # ftnchek.ps PostScript form of documentation # htmlclean remove unneeded files from html directory # htmldocs hypertext form of documentation # install install ftnchek and dcl2inc and their man pages # install-exe install ftnchek and dcl2inc executables # install-lisp install emacs ftnchek-mode lisp file # install-man install man pages on most UNIX systems # install-man-sgi install man pages on SGI systems # manpage same as ftnchek.1 # mostlyclean same as clean # prog same as ftnchek # realclean same as clobber # uninstall remove everything "make install" installs # # Developer target list: # catman create "cat" format manpages # catman.tar create "cat" format manpage tar file # devel build development version (extra debugging). # lint run lint on source code # generic-config create generic config.h etc for distribution # maintainer-clean distclean, then things maintainer can rebuild # pretar get ready to make distribution tar file # spotless distclean, then remove ps, html and text docs # TAGS emacs editor tags file # tags ex and vi editor tags file # tar distribution tar file # testclean remove unnecessary files from test directory # zip distribution zip file for MS-DOS # # Not a target, made by configure: # dcl2inc Shell script to convert decls to includes # # Object file targets see list of objects at OBJS # # # # Copyright (c) 2001 by Robert K. Moniot. # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Acknowledgement: the above permission notice is what is known # as the "MIT License." # # # Acknowledgements and thanks to Nelson H. F. Beebe of the University # of Utah for improvements to this Makefile. # [25-Apr-1994] #======================================================================= # These definitions should be customized for your local conventions # if you want to do "make install" or "make uninstall". # prefix is the root of the destination for installing things. # bindir is directory for executables, mandir for man pages. # manext is the extension on man pages, including the dot. # libdir is the directory for library files (dcl2inc.awk). It must # agree with the libdir defined in dcl2inc as made by configure. # lispdir is where to put ftnchek.el. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin datadir = ${prefix}/share mandir = ${prefix}/man manext = .1 sgimansubdir = /manl libdir = ${exec_prefix}/lib/ftnchek lispdir = ${datadir}/emacs/site-lisp # Define suffix for executables, for non-unix systems which have one. EXE = #EXE = .exe # Define suffix for scripts, to go on the end of dcl2inc script. CMD = #CMD = .cmd #CMD = .bat # The following definitions are set for your system by configure. # In non-generic Makefile these should all be path-qualified except # for *_NAME. If path is missing then configure didn't find it. # AWK is any awk; NAWK is the enhanced awk needed by dcl2inc. # AWK_NAME and YACC_NAME have the pathless names to simplify tests where the # particular flavor of the utility matters. NROFF is the nroff program, # NROFFPLAIN has flags to suppress escape sequences. PWD_PROG is so named # to avoid collision with shell variable PWD. ZIPTEXT is zip program # with flag for Unix->DOS line-end conversion, ZIP is default mode. AWK = gawk AWK_NAME = gawk CC = cc CHMOD = chmod CMP = cmp CP = cp DIFF = diff EMACS = emacs EQN = eqn GREP = grep LINT = lint MANtoHTML = man2html MANtoPS = ./man2ps MKDIR = mkdir MV = mv NAWK = gawk NROFF = nroff NROFFPLAIN = nroff -c PATCH = patch PWD_PROG = pwd RM = rm -f RMDIR = rmdir SED = sed SHELL = sh SOELIM = soelim STRIP = strip TAR = tar TBL = tbl YACC = bison YACC_NAME = bison ZIP = zip ZIPTEXT = $(ZIP) -l # The following is only used for targets ftnchek.doc and ftnchek.hlp # which are not needed for unix platforms. It removes control chars # and converts tabs to blanks. Normally COL=col -bx but if you don't # have it, can make do with cat. COL = col -bx # Editor tags file support CTAGS = ctags CTAGSFLAGS = -t ETAGS = etags # The following suffixes are for making various forms of documentation .SUFFIXES: .cat .catman .doc .man .ps .i # Pack is needed only for install-man-sgi target PACK = pack FTNCHEK = ./ftnchek$(EXE) # OPTIONS is used to define various characteristics. Most commonly # needed ones are given below; uncomment whichever you like. # See ftnchek.h for others, with their defaults and explanations. # OPTIONS shouldn't include things controlled by "configure". # To include your own options without touching the Makefile, say # make "OPTIONS= " # If you want -f77=all to be the default, uncomment this. #OPTIONS = -DSTRICT_SYNTAX # OPT is optimization level # CFLAGS is used to define the operating system and options # LDLIBS gives any system-specific libraries for linker # LDFLAGS gives linker options # YFLAGS specifies yacc options OPT = -O CFLAGS = -DUNIX -O $(OPTIONS) $(DEBUG_FLAGS) $(DEVEL_CFLAGS) LDLIBS = LDFLAGS = $(DEBUG_FLAGS) $(DEVEL_LDFLAGS) YFLAGS = -y -d # fortran.o first because of possible remake if tokdefs.h changes (see below) OBJS = fortran.o advance.o argcheck.o calltree.o comcheck.o exprtype.o \ forlex.o ftnchek.o include.o intake.o intrins.o \ iokeywds.o keywords.o labels.o \ loccheck.o makedcls.o makehtml.o message.o options.o pgsymtab.o \ plsymtab.o prlists.o prlocsym.o project.o \ symspace.o symtab.o symutils.o utils.o DOCS = README INSTALL LICENSE PATCHES FAQ ToDo project.magic \ average.f average.out correct.f \ blurb.txt dcl2inc.doc dcl2inc.man dcl2inc.ps \ ftnchek.doc ftnchek.hlp ftnchek.man ftnchek.ps html \ macro-doc.txt project-doc.tex \ $$dirname.lsm # the above expands to ftnchek-x.y.z.lsm in make tar UNIX_BUILDFILES = Makefile.in configure configure.in config.guess config.sub \ config.h.in configure.generic install-sh \ add_html_refs.sh make_html.sh \ make_blockmatch.pl make_blockmatch.pl.in VMS_BUILDFILES = build.com build-vax.com cc.com link.com check.com OS2_BUILDFILES = ftnchek.def configure_os2.cmd OTHER_BUILDFILES= makefile.bcc32 \ makefile.generic makefile.mpw \ ftnchek.dsp ftnchek.dsw BUILDFILES = $(UNIX_BUILDFILES) $(VMS_BUILDFILES) $(OS2_BUILDFILES) \ $(OTHER_BUILDFILES) SRCS = advance.c advance.h argcheck.c block_match.h \ calltree.c comcheck.c config-generic.h config-win32.h exprtype.c \ forlex.c forlex.h fortran.y fortran.c ftnchek.c ftnchek.h \ include.c intake.c intrins.c intrins.h iokeywds.h \ iokeywds_enum.h iokeywds.c \ keywords.c labels.c \ loccheck.c loccheck.h makedcls.c makehtml.c message.c options.c \ options.h pgsymtab.c pgsymtab.h plsymtab.c plsymtab.h \ prlists.c prlocsym.c project.c symspace.c \ symspace.h symtab.c symtab.h symutils.c symutils.h tokdefs.h \ utils.h utils.c SCRIPTS = dcl2inc dcl2inc.in dcl2inc.awk dcl2inc.awk.in \ man2ps ftnchek.el TESTDIR = test HTMLDIR = html # The following defines all files to go into distribution tar file DISTFILES = $(DOCS) $(BUILDFILES) $(SRCS) $(SCRIPTS) $(TESTDIR) # The following defines all files to go into MS-DOS distribution zip file. # BINARY_ZIPFILES are those that should not undergo the LF->CR-LF replacement. ZIPFILES = $(DISTFILES) BINARY_ZIPFILES= configure_os2.cmd test/*.bat test/cmp.exe # The following defines all files that go into the auxiliary catman tar file CATMAN = dcl2inc.catman ftnchek.catman # Files in the following list are created by the configure script. # Generic versions for the distribution are made by the generic-config # target. CONFIGURED_FILES = makefile.generic dcl2inc.awk dcl2inc make_blockmatch.pl \ test/Makefile test/Compare.sh config-generic.h #======================================================================= # Rule to run source thru preprocessor only; useful for tracing down # compilation problems. Blank lines are removed for convenient viewing. .c.i: $(CC) -E -I. $(DEFS) $(CPPFLAGS) $(CFLAGS) $< 2>&1 | \ grep -v '^[ ]*$$' > $@ #======================================================================= all: prog manpage # N.B. dcl2inc is also a prog but it is made by configure. A generic # copy of it is provided with the distribution also, in case the user # doesn't want to or can't use configure. prog: ftnchek$(EXE) # The manpage target is a "clean-ed up" version of the Unix man page, # with conditional text, used by developer to create other forms of # documentation, removed. manpage: ftnchek$(manext) # Development version includes debugging machinery not normally used. It # evaluates some floating-point expressions including sqrt, so needs math lib. devel: $(MAKE) prog DEVEL_CFLAGS='-DDEVELOPMENT' LDLIBS='$(LDLIBS) -lm' check: prog cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -s precheck cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -i -s check lint: $(LINT) $(LINTFLAGS) $(OBJS:.o=.c) -lm # Remove intermediate files that are not required after the program is # built. clean mostlyclean: -$(RM) *.o -$(RM) \#* -$(RM) a.out -$(RM) *~ -$(RM) core -$(RM) y.tab.h -$(RM) config.status config.log config.cache -$(RM) ftnchek.html.orig ftnchek.html.rej # Remove almost everything that make can rebuild. We do not remove # fortran.c since some places don't have yacc or bison. clobber realclean: clean -$(RM) ftnchek$(EXE) # Remove everything that make can rebuild, preparatory to making a # distribution version. We intentionally do NOT remove .ps and .doc # files, because some UNIX systems lack nroff/troff/groff. distclean: realclean testclean htmlclean -$(RM) *.dcl -$(RM) cscope.out -$(RM) tags -$(RM) TAGS -$(RM) ftnchek$(manext) -$(RM) dcl2inc.cat ftnchek.cat testclean: cd $(TESTDIR); $(MAKE) distclean htmlclean: cd $(HTMLDIR); $(MAKE) -f ../Makefile clean maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -$(RM) Makefile -$(RM) configure -$(RM) fortran.c -$(RM) *.catman ftnchek$(EXE): $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -o ftnchek$(EXE) $(OBJS) $(LDLIBS) # N.B. tokdefs.h is copy of y.tab.h used to avoid remaking stuff when # grammar changes but not tokens. If the parser is made by bison, # it is edited to make token names in "parse error" messages more readable. # Also concatenate backslash-continued #if lines, which some older # compilers don't like. # The following copies y.tab.h to tokdefs.h if changed, then aborts make, # since dependencies may have changed. fortran.c: fortran.y $(YACC) $(YFLAGS) fortran.y @if test "$(YACC_NAME)" = "bison$(EXE)" ; \ then \ $(SED) -e '/yytname\[] =/,/^};/s/tok_//g' \ -e '/yytname\[] =/,/^};/s/_/ /g' \ -e '/yytname\[] =/,/^};/s/EOS/end of statement/g' \ -e ':CAT' -e '/^# *if.*\\$$/N' -e 's/\\\n//' -e tCAT \ y.tab.c > fortran.c ; \ $(RM) y.tab.c ; \ else \ $(MV) y.tab.c fortran.c ; \ fi @if $(CMP) -s y.tab.h tokdefs.h ; then true ; else \ echo; echo tokdefs.h changed -- repeat make ; \ $(CP) y.tab.h tokdefs.h; \ false ; \ fi # If tokdefs.h changes, update the lookup table used by block-balancing code. block_match.h: tokdefs.h ./make_blockmatch.pl > block_match.h # This target makes an enum type for doing reverse lookup in the iokeywords table. # The uniq filter is needed since some keywords may have alternate definitions depending # on #defines. These are always adjacent. The last sed command removes # comma from last item in enum list, in accordance with c89. iokeywds_enum.h: iokeywds.h sed -n '/^} io_keywords\[\]={/,/^};$$/s/^{"\([^"]*\).*$$/IOKW_\1,/p' iokeywds.h \ | uniq \ | sed '$$s/,$$//' > $@ # Documentation targets: If you make changes to the documentation, # you should edit only ftnchek.man and then re-make these targets. # If ftnchek.1 fails to make, ftnchek.man is usable directly (after # applying soelim) except that some troff-like processors may not # give satisfactory results. docs: average.out blurb.txt ftnchek.doc ftnchek.hlp \ htmldocs ftnchek.ps dcl2inc.doc dcl2inc.ps # Following sed script trims out the if-else machinery contained in # ftnchek.man to produce a clean nroff document. The lines of the # sed script correspond to the following actions: # 1. remove text between lines of form ``.if \nh \{'' or .ie \nh \{'' # and lines of form ``\}'' (these are the help-related additions) # 2. remove lines of form ``.if !\nh \{'' (these preface man text) # Also remove ``.if !\nb \{'' which are for blurb. # 3. remove lines of form ``.el \{'' (start of the else sections of # the .if's of step 1) # 4. remove lines of form ``\}'' (closures of step 3 lines) # 5. remove lines of form ``.ie \nh text'' (one-liner help text) # 6. change lines of form ``.el \nh text'' to ``text'' (these are # one-liner man text) # 7. change lines of form ``.if !\nh text'' to ``text'' (ditto) ftnchek$(manext): ftnchek.man average.f average.out correct.f @if test -x $(SOELIM) ; \ then \ echo "Making cleaned-up manpage ftnchek$(manext)" ; \ $(SOELIM) ftnchek.man | \ $(SED) -e '/^\.i[fe] \\nh \\{/,/^\\}$$/d' \ -e '/^\.if !\\n[bh] \\{/d' \ -e '/^\.el \\{/d' \ -e '/^\\}/d' \ -e '/^\.i[fe] \\nh /d' \ -e 's/^\.el *\(.*\)$$/\1/' \ -e 's/^\.if !\\nh *\(.*\)$$/\1/' \ > ftnchek$(manext) ; \ else \ echo "$(SOELIM) not available: cannot make cleaned-up manpage ftnchek$(manext)." ; \ echo "You must use the catman documentation (provided separately)." ; \ fi # .doc files are ascii text form of documentation. .man.doc: $(TBL) $< | $(NROFFPLAIN) -man | $(COL) > $@ # ftnchek.ps is PostScript form of documentation. For ftnchek.ps we use # cleaner ftnchek.1 rather than ftnchek.man. ftnchek.ps: ftnchek$(manext) $(TBL) ftnchek.ps # Other man files are clean enough as they are. .man.ps: $(TBL) < $< | $(EQN) | $(MANtoPS) > $@ # $(HTMLDIR)/toc.html represents all the files in the html directory. They # are built from ftnchek.html by the script make_html.sh whenever # ftnchek.html changes. Note: edits should be done to ftnchek.man if # they affect content, to ftnchek.html if they affect html form. Do # not edit anything in html directory. htmldocs: $(HTMLDIR)/toc.html $(HTMLDIR)/toc.html: ftnchek.html ./make_html.sh ftnchek.html # ftnchek.html is produced from ftnchek.1 by MANtoHTML followed by a # simple script to add internal links to option descriptions, then # lightly edited. Edits were initially by hand, now are saved in # ftnchek.html.patch (not distributed) to be re-applied each time. # Any time new edits are done to ftnchek.html, the patch file should # be remade. Also make ftnchek.html.patch after editing ftnchek.man, # so that the patch offsets don't get too large for patch to succeed. ftnchek.html: ftnchek.html.orig $(CP) ftnchek.html.orig ftnchek.html if test -f ftnchek.html.patch ; \ then \ $(PATCH) < ftnchek.html.patch ; \ fi ftnchek.html.orig: ftnchek$(manext) $(MANtoHTML) ftnchek$(manext) | ./add_html_refs.sh > ftnchek.html.orig ftnchek.html.patch: ftnchek.html.orig ftnchek.html @echo "It is normal for the next command to report an error" -$(DIFF) -c ftnchek.html.orig ftnchek.html > ftnchek.html.patch # blurb.txt is an ascii file for informational mailings. blurb.txt: ftnchek.man $(TBL) ftnchek.man | $(NROFFPLAIN) -man -rb1 | $(COL) >blurb.txt # ftnchek.hlp is a VMS HELP library source document: # create ftnchek.hlb with $ LIBR/CREATE/HELP FTNCHEK.HLB FTNCHEK.HLP # The leading and trailing newlines in ftnchek.hlp should be removed. ftnchek.hlp: ftnchek.man $(SED) -e '1d' ftnchek.man | \ $(TBL) | $(NROFFPLAIN) -man -rh1 | $(COL) | \ $(SED) -e 's/^-\([a-zA-Z][a-zA-Z]*\)/\/\1/' \ -e 's/\([^a-zA-Z]\)-\([a-zA-Z][a-zA-Z]*\)/\1\/\2/g' \ >ftnchek.hlp # Rebuild average.out when version changes. (We don't put the # dependency on ftnchek to avoid building ftnchek just for docs.) average.out: ftnchek.h $(FTNCHEK) -list -symtab average > average.out # Install program and documentation on system. Obsolete fcl2vcg script # & doc is removed if present. Old program is first deleted, in case # it is a hard link to specific previous version, so that version does # not get overwritten. install: install-exe install-man install-lisp install-exe: ftnchek$(EXE) dcl2inc$(CMD) -$(RM) $(bindir)/ftnchek$(EXE) -$(MKDIR) -p $(bindir) $(CP) ftnchek$(EXE) $(bindir) -$(STRIP) $(bindir)/ftnchek$(EXE) $(CHMOD) 755 $(bindir)/ftnchek$(EXE) -$(MKDIR) -p $(libdir) $(CP) dcl2inc.awk $(libdir)/dcl2inc.awk $(CHMOD) 644 $(libdir)/dcl2inc.awk $(CP) dcl2inc$(CMD) $(bindir)/dcl2inc$(CMD) $(CHMOD) 755 $(bindir)/dcl2inc$(CMD) -$(RM) $(bindir)/fcl2vcg # Install man pages, taking care to remove old formatted ones, because # many man implentations fail to compare time stamps of raw and # formatted files, and will show out-of-date formatted files. install-man: ftnchek$(manext) -$(MKDIR) -p $(mandir)/man1 $(CP) dcl2inc.man $(mandir)/man1/dcl2inc$(manext) -$(RM) $(mandir)/cat1/dcl2inc$(manext) $(CHMOD) 644 $(mandir)/man1/dcl2inc$(manext) $(CP) ftnchek$(manext) $(mandir)/man1/ftnchek$(manext) -$(RM) $(mandir)/cat1/ftnchek$(manext) $(CHMOD) 644 $(mandir)/man1/ftnchek$(manext) -$(RM) $(mandir)/man1/fcl2vcg$(manext) -$(RM) $(mandir)/cat1/fcl2vcg$(manext) # IRIX uses pre-formatted, packed man pages and nroff is not bundled with it. install-man-sgi: catman if $(PACK) dcl2inc.cat ; \ then \ $(MV) dcl2inc.cat.z $(mandir)$(sgimansubdir)/dcl2inc.z ; \ $(CHMOD) 644 $(mandir)$(sgimansubdir)/dcl2inc.z ; \ fi if $(PACK) ftnchek.cat ; \ then \ $(MV) ftnchek.cat.z $(mandir)$(sgimansubdir)/ftnchek.z ; \ $(CHMOD) 644 $(mandir)$(sgimansubdir)/ftnchek.z ; \ fi -$(RM) $(mandir)/fcl2vcg.z # The catman target makes formatted ("cat") versions of the manpages # for use in install-man-sgi. These files are not in the standard # distribution but are available separately (with suffix catman) for # sites that do not have nroff. If this Unix does not have nroff, # then if user has obtained the catman versions, use them. Otherwise # inform them and use the flat ascii files as fallback. catman: dcl2inc.cat ftnchek.cat .man.cat: @if test -x $(TBL) -a -x $(NROFF) ; then \ echo '$(TBL) $< | $(NROFF) -man > $@' ; \ $(TBL) $< | $(NROFF) -man > $@ ; \ else \ if test -f $*.catman ; then \ echo cp $*.catman $@ ; \ cp $*.catman $@ ; \ else \ echo "--> No catman documentation found -- see INSTALL." ; \ echo "Using plain text documentation instead." ; \ echo cp $*.doc $@ ; \ cp $*.doc $@ ; \ fi ; \ fi # The emacs lisp file will be installed only if lispdir exists. It will # be byte-compiled if emacs is present. install-lisp: @if test -d "$(lispdir)" ; \ then \ echo $(CP) ftnchek.el $(lispdir)/ftnchek.el ; \ if $(CP) ftnchek.el $(lispdir)/ftnchek.el ; \ then \ if test -x "$(EMACS)" ; \ then \ $(EMACS) -batch -f batch-byte-compile $(lispdir)/ftnchek.el ; \ else \ echo "If desired, use emacs to byte-compile $(lispdir)/ftnchek.el"; \ fi \ fi \ else \ echo "$(lispdir) does not exist -- ftnchek.el not installed." ; \ echo "If you want to install ftnchek.el, create $(lispdir)" ; \ echo "or re-run make install with 'lispdir=path-to-site-lisp'" ; \ fi # Remove everything that the install target installed. uninstall: -$(RM) $(bindir)/dcl2inc$(CMD) -$(RM) $(bindir)/ftnchek$(CMD) -$(RM) $(libdir)/dcl2inc.awk -$(RM) $(mandir)/cat1/dcl2inc$(manext) -$(RM) $(mandir)/cat1/ftnchek$(manext) -$(RM) $(mandir)/dcl2inc.z $(mandir)/ftnchek.z # SGI -$(RM) $(mandir)/man1/dcl2inc$(manext) -$(RM) $(mandir)/man1/ftnchek$(manext) -$(RM) $(lispdir)/ftnchek.el -$(RMDIR) $(libdir) # WARNING: do NOT execute this target, unless you have nroff/troff or groff # to recreate the formatted documentation files. spotless: distclean $(RM) blurb.txt $(RM) dcl2inc.doc ftnchek.doc $(RM) dcl2inc.ps ftnchek.ps $(RM) ftnchek.hlp # ex and vi editor tags file tags: $(SRCS) $(CTAGS) $(CTAGSFLAGS) $(SRCS) # emacs editor tags file TAGS: $(SRCS) $(ETAGS) $(SRCS) #======================================================================= # Object file dependencies on include files advance.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h argcheck.o: config.h ftnchek.h pgsymtab.h symtab.h calltree.o: config.h ftnchek.h pgsymtab.h symtab.h comcheck.o: config.h ftnchek.h pgsymtab.h symtab.h exprtype.o: config.h ftnchek.h symtab.h tokdefs.h forlex.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h fortran.o: config.h ftnchek.h symtab.h block_match.h fortran.c ftnchek.o: config.h ftnchek.h intrins.h options.h utils.h include.o: config.h ftnchek.h symtab.h forlex.h advance.h intake.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h advance.h intrins.o: config.h ftnchek.h intrins.h symtab.h iokeywds.o: config.h ftnchek.h symtab.h tokdefs.h iokeywds.h iokeywds_enum.h utils.h keywords.o: config.h ftnchek.h symtab.h tokdefs.h forlex.h labels.o: config.h ftnchek.h plsymtab.h symtab.h loccheck.o: config.h ftnchek.h loccheck.h plsymtab.h symtab.h makedcls.o: config.h ftnchek.h plsymtab.h symtab.h makehtml.o: config.h ftnchek.h plsymtab.h symtab.h tokdefs.h advance.h message.o: config.h ftnchek.h options.o: config.h ftnchek.h options.h utils.h pgsymtab.o: config.h ftnchek.h pgsymtab.h symtab.h plsymtab.o: config.h ftnchek.h plsymtab.h symtab.h prlists.o: config.h ftnchek.h symtab.h symutils.h prlocsym.o: config.h ftnchek.h loccheck.h plsymtab.h symtab.h project.o: config.h ftnchek.h symtab.h symspace.o: config.h ftnchek.h symtab.h symspace.h symutils.h symtab.o: config.h ftnchek.h iokeywds.h intrins.h symtab.h \ symspace.h symutils.h tokdefs.h symutils.o: config.h ftnchek.h symtab.h symutils.h utils.o: config.h utils.h #======================================================================= # The configure.generic script creates generic versions of CONFIGURED_FILES # for users on deficient Unix systems or using GNU software on non-Unix # platforms. It tries to put reasonably generic values in for all the # things that the configure script is supposed to handle. Pathnames # are removed since these may vary wildly. The rule also checks for # any unsubstituted items indicating configure.generic needs to be # updated. The config-generic.h produced here should need few if any # changes to serve as config.h on most recent 32-bit systems. # This target has no dependencies since its purpose is # to replace the developer's configured versions with the generic ones, # regardless of whether the .in files have changed. Note that # makefile.generic.in and config-generic.h.in are treated specially: # they are copies of Makefile.in and config.h.in respectively, but the # generic configured versions are not named Makefile and config.h, because # these are deliberately left out of the distribution. generic-config: $(CP) Makefile.in makefile.generic.in $(CP) config.h.in config-generic.h.in ./configure.generic $(CONFIGURED_FILES) $(RM) makefile.generic.in $(RM) config-generic.h.in chmod +x dcl2inc test/Compare.sh @if $(GREP) \ '@[^*@]*@' $(CONFIGURED_FILES) ; \ then \ echo '####################################################' ; \ echo '## FIX configure.generic TO SUBSTITUTE THE ABOVE. ##' ; \ echo '####################################################' ; \ fi # Here we provide rules for making the two CONFIGURED_FILES that are # not generated by "configure". This is mainly a convenience for the # new developer since it is not so obvious where they come from. They # are not needed for development but only for the distribution. They # are normally made by generic-config. makefile.generic: Makefile.in $(CP) Makefile.in makefile.generic.in ./configure.generic makefile.generic $(RM) makefile.generic.in config-generic.h: config.h.in $(CP) config.h.in config-generic.h.in ./configure.generic config-generic.h $(RM) config-generic.h.in #======================================================================= # This target warns if VMS build command files are out of date. The sed # command concatenates continuation lines, marked by "-" as last character. checkvmsbuild: @-for obj in $(OBJS:.o=) ; \ do \ for com in build.com build-vax.com ; \ do \ if grep -q "^\$$ @CC.* $$obj[ ]" $$com ; \ then true; else \ echo "Source $$obj missing from CC in $$com" ; \ fi ; \ if sed -e ':CAT' -e '/-$$/N' -e 's/-\n//' -e tCAT \ -e s/$$/,/ $$com | \ grep -q "^\$$ @LINK.*[ ,]$$obj," ; \ then true; else \ echo "Object $$obj missing from LINK in $$com" ; \ fi ; \ done; \ done # Target to make sure the DOS versions of test master files are # up to date dosokay: cd $(TESTDIR); $(MAKE) dosokay #======================================================================= # Making the distribution tar file. Dirname is name of current # directory. Makefile is not distributed because it is supposed # to be created by local configure. Files to archive are explicitly # named so that detritus from development will not be accidentally # included. However, test files are not listed separately so one # should make clean in $(TESTDIR)/ first. # # This target assumes GNU tar for the --exclude option. If you don't # have it, remove test/Makefile manually and use ``make tar TAR_EXCLUDE='' TAR_EXCLUDE = --exclude $$dirname/$(TESTDIR)/Makefile tar: dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; cd .. ; \ $(TAR) -cf $$dirname.tar $(TAR_EXCLUDE) \ `echo " "$(DISTFILES) | $(SED) "s% % $$dirname/%g"` # This target is for maintainer: generates the catman tar file for separate # distribution. catman.tar: $(CATMAN) dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; \ $(TAR) -cf ../$$dirname.catman.tar $(CATMAN) .cat.catman: $(CP) $< $@ # Make a distribution zipfile for MS-DOS/Windows/OS2. The -l changes \n # to \r\n. Then binary files and text files that already have \r\n are # replaced in binary mode. # Note that unlike tar, zip file names are relative to current directory. # Rule renames ftnchek-x.x.x to ftnchek-x_x_x for zip and lsm files. zip: dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; \ dosname=`echo $$dirname|$(SED) -e 's/\./_/g'` ; \ $(CP) $$dirname.lsm $$dosname.lsm ; \ dirname=$$dosname ; \ $(RM) ../$$dirname.zip ; \ $(ZIPTEXT) -r ../$$dirname.zip $(ZIPFILES) ; \ $(ZIP) ../$$dirname.zip $(BINARY_ZIPFILES) # Targets that should be freshened prior to making tar (so I don't put # stale ones into the distribution). pretar: docs generic-config clean testclean checkvmsbuild dosokay ftnchek-3.3.1/makefile.mpw0000644000031000002260000001014007745352777016103 0ustar moniotstaff00000000000000# Macintosh Programmer's Workshop (MPW) version of Makefile # for Fortran program checker. Execution requires Absoft C compiler. # Should be easy to convert to MPW C. # For shipping purposes, Mac special characters have been changed, and # must be restored as follows # Replace \ with option-d # Replace : with option-f # Copyright (C) 1991-2001 by Robert K. Moniot. # This program is free software. Permission is granted to # modify it and/or redistribute it, retaining this notice. # No guarantees accompany this software. ### MAKEFILE PREAMBLE ### TargetName = ftnchek Makefile = Makefile # Power Macintosh tools and default settings c_ppc = "{AbsoftTools}ACC" -A -c c_ppc_opts = -O -N92 # Object and resource files used for this build PPC_LIBS = \ "{AbsoftLibraries}mrwe_stubs.o" \ "{AbsoftLibraries}libfio.o" \ "{AbsoftLibraries}libfmath.o" PPC_OBJECTS = \ "fortran.o" \ "advance.o" \ "argcheck.o" \ "calltree.o" \ "comcheck.o" \ "exprtype.o" \ "forlex.o" \ "ftnchek.o" \ "include.o" \ "intake.o" \ "intrins.o" \ "iokeywds.o" \ "keywords.o" \ "labels.o" \ "loccheck.o" \ "makedcls.o" \ "makehtml.o" \ "message.o" \ "options.o" \ "pgsymtab.o" \ "plsymtab.o" \ "prlists.o" \ "prlocsym.o" \ "project.o" \ "symspace.o" \ "symtab.o" \ "symutils.o \ "utils.o" # Linkage rule "{TargetName}" :: {PPC_OBJECTS} {makefile} lnk -O -aliases "{AbsoftLibraries}"absoft_aliases \ -o "{TargetName}" {PPC_OBJECTS} {PPC_LIBS} \ -c 'MPS ' -t MPST \ "{AbsoftLibraries}absoft_init.o" \ "{AbsoftLibraries}ACLib.o" \ "{PPCLibraries}StdCRuntime.o" \ "{SharedLibraries}StdCLib" \ "{SharedLibraries}InterfaceLib" # Compilation rules "fortran.o" : "fortran.c" {makefile} {c_ppc} {c_ppc_opts} -o "fortran.o" fortran.c "advance.o" : "advance.c" {makefile} {c_ppc} {c_ppc_opts} -o "advance.o" advance.c "argcheck.o" : "argcheck.c" {makefile} {c_ppc} {c_ppc_opts} -o "argcheck.o" argcheck.c "calltree.o" : "calltree.c" {makefile} {c_ppc} {c_ppc_opts} -o "calltree.o" calltree.c "comcheck.o" : "comcheck.c" {makefile} {c_ppc} {c_ppc_opts} -o "comcheck.o" comcheck.c "exprtype.o" : "exprtype.c" {makefile} {c_ppc} {c_ppc_opts} -o "exprtype.o" exprtype.c "forlex.o" : "forlex.c" {makefile} {c_ppc} {c_ppc_opts} -o "forlex.o" forlex.c "ftnchek.o" : "ftnchek.c" {makefile} {c_ppc} {c_ppc_opts} -o "ftnchek.o" ftnchek.c "include.o" : "include.c" {makefile} {c_ppc} {c_ppc_opts} -o "include.o" include.c "intake.o" : "intake.c" {makefile} {c_ppc} {c_ppc_opts} -o "intake.o" intake.c "intrins.o" : "intrins.c" {makefile} {c_ppc} {c_ppc_opts} -o "intrins.o" intrins.c "iokeywds.o:" : "iokeywds.c" {makefile} {c_ppc} {c_ppc_opts} -o "iokeywds.o" iokeywds.c "keywords.o" : "keywords.c" {makefile} {c_ppc} {c_ppc_opts} -o "keywords.o" keywords.c "labels.o" : "labels.c" {makefile} {c_ppc} {c_ppc_opts} -o "labels.o" labels.c "loccheck.o" : "loccheck.c" {makefile} {c_ppc} {c_ppc_opts} -o "loccheck.o" loccheck.c "makedcls.o" : "makedcls.c" {makefile} {c_ppc} {c_ppc_opts} -o "makedcls.o" makedcls.c "makehtml.o" : "makehtml.c" {makefile} {c_ppc} {c_ppc_opts} -o "makehtml.o" makehtml.c "message.o" : "message.c" {makefile} {c_ppc} {c_ppc_opts} -o "message.o" message.c "options.o" : "options.c" {makefile} {c_ppc} {c_ppc_opts} -o "options.o" options.c "pgsymtab.o" : "pgsymtab.c" {makefile} {c_ppc} {c_ppc_opts} -o "pgsymtab.o" pgsymtab.c "plsymtab.o" : "plsymtab.c" {makefile} {c_ppc} {c_ppc_opts} -o "plsymtab.o" plsymtab.c "prlists.o" : "prlists.c" {makefile} {c_ppc} {c_ppc_opts} -o "prlists.o" prlists.c "prlocsym.o" : "prlocsym.c" {makefile} {c_ppc} {c_ppc_opts} -o "prlocsym.o" prlocsym.c "project.o" : "project.c" {makefile} {c_ppc} {c_ppc_opts} -o "project.o" project.c "symspace.o" : "symspace.c" {makefile} {c_ppc} {c_ppc_opts} -o "symspace.o" symspace.c "symtab.o" : "symtab.c" {makefile} {c_ppc} {c_ppc_opts} -o "symtab.o" symtab.c "symutils.o" : "symutils.c" {makefile} {c_ppc} {c_ppc_opts} -o "symutils.o" symutils.c "utils.o" : "utils.c" {makefile} {c_ppc} {c_ppc_opts} -o "utils.o" utils.c clean : Delete -i "{TargetName}" {PPC_OBJECTS} ftnchek-3.3.1/ftnchek.dsp0000644000031000002260000001561407745352422015731 0ustar moniotstaff00000000000000# Microsoft Developer Studio Project File - Name="ftnchek" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=ftnchek - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "ftnchek.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "ftnchek.mak" CFG="ftnchek - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "ftnchek - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "ftnchek - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "ftnchek - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" F90=df.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /machine:I386 !ELSEIF "$(CFG)" == "ftnchek - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" F90=df.exe # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "ftnchek - Win32 Release" # Name "ftnchek - Win32 Debug" # Begin Group "Quellcodedateien" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\advance.c # End Source File # Begin Source File SOURCE=.\argcheck.c # End Source File # Begin Source File SOURCE=.\calltree.c # End Source File # Begin Source File SOURCE=.\comcheck.c # End Source File # Begin Source File SOURCE=.\exprtype.c # End Source File # Begin Source File SOURCE=.\forlex.c # End Source File # Begin Source File SOURCE=.\fortran.c # End Source File # Begin Source File SOURCE=.\ftnchek.c # End Source File # Begin Source File SOURCE=.\include.c # End Source File # Begin Source File SOURCE=.\intake.c # End Source File # Begin Source File SOURCE=.\intrins.c # End Source File # Begin Source File SOURCE=.\iokeywds.c # End Source File # Begin Source File SOURCE=.\keywords.c # End Source File # Begin Source File SOURCE=.\labels.c # End Source File # Begin Source File SOURCE=.\loccheck.c # End Source File # Begin Source File SOURCE=.\makedcls.c # End Source File # Begin Source File SOURCE=.\makehtml.c # End Source File # Begin Source File SOURCE=.\message.c # End Source File # Begin Source File SOURCE=.\options.c # End Source File # Begin Source File SOURCE=.\pgsymtab.c # End Source File # Begin Source File SOURCE=.\plsymtab.c # End Source File # Begin Source File SOURCE=.\prlists.c # End Source File # Begin Source File SOURCE=.\prlocsym.c # End Source File # Begin Source File SOURCE=.\project.c # End Source File # Begin Source File SOURCE=.\symspace.c # End Source File # Begin Source File SOURCE=.\symtab.c # End Source File # Begin Source File SOURCE=.\symutils.c # End Source File # Begin Source File SOURCE=.\utils.c # End Source File # End Group # Begin Group "Header-Dateien" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\advance.h # End Source File # Begin Source File SOURCE=.\block_match.h # End Source File # Begin Source File SOURCE=.\config.h # End Source File # Begin Source File SOURCE=.\forlex.h # End Source File # Begin Source File SOURCE=.\ftnchek.h # End Source File # Begin Source File SOURCE=.\intrins.h # End Source File # Begin Source File SOURCE=.\iokeywds.h # End Source File # Begin Source File SOURCE=.\loccheck.h # End Source File # Begin Source File SOURCE=.\options.h # End Source File # Begin Source File SOURCE=.\pgsymtab.h # End Source File # Begin Source File SOURCE=.\plsymtab.h # End Source File # Begin Source File SOURCE=.\symspace.h # End Source File # Begin Source File SOURCE=.\symtab.h # End Source File # Begin Source File SOURCE=.\symutils.h # End Source File # Begin Source File SOURCE=.\tokdefs.h # End Source File # Begin Source File SOURCE=.\utils.h # End Source File # End Group # Begin Group "Ressourcendateien" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project ftnchek-3.3.1/ftnchek.dsw0000644000031000002260000000106507617175043015733 0ustar moniotstaff00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELSCHT WERDEN! ############################################################################### Project: "ftnchek"=.\ftnchek.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### ftnchek-3.3.1/advance.c0000644000031000002260000012550310201506660015325 0ustar moniotstaff00000000000000/* $Id: advance.c,v 1.30 2005/02/06 21:35:44 moniot Exp $ Low-level input routines for Fortran program checker. Shared functions defined: init_scan() Initializes an input stream. finish_scan() Finishes processing an input stream. advance() Reads next char, removing comments and handling continuation lines. looking_at_x Handles lookahead up to end of line: looking_at_cplx() Identifies complex constant. looking_at_keywd() Identifies assgnmt stmts vs keywords. looking_at_relop() Distinguishes .EQ. from .Eexp . flush_line_out(n) Prints lines up to line n if not already printed, so error messages come out looking OK. Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include #include "ftnchek.h" #include "symtab.h" #include "tokdefs.h" #include "forlex.h" #define ADVANCE #include "advance.h" /* Note: beginning with rev 1.15 (July 2003) this code is somewhat * schizophrenic. The source file is now read entirely into an * internal buffer before lexing starts. Much code still assumes the * old method of reading just one line ahead, and there is duplicate * bookkeeping with respect to line numbers and to identifying comments * and continuations. Hopefully in the course of time we will change * over completely so as to take full advantage of the new method. * Note added Oct 2003: as of rev 1.26 the changeover is complete. */ /* Lookahead routines that scan the input line for various things. The ones that need not look ahead past end of line take a string as argument, but most take a srcPosn struct. This struct contains a pointer to the source buffer where the line being scanned is located and an index in the line of the point at which to start looking for the desired entity. The is_whatever routines return TRUE if the entity at the given srcPosn satisfies the criterion. The skip_whatever routines return index of the next nonspace character after the expected thing, which must be there in a syntactically correct program. They also update the srcPosn struct. The given index points at the character after a known lead-in (except for see_a_number, which can be given the index of 1st char of number). The see_whatever routines are similar but return -1 if the expected thing is not seen, which it need not be. */ typedef struct posn_struct { srcLine *Line; /* ptr to the source buffer line struct */ int idx; /* index of location in Line->line[] */ } srcPosn; PROTO(PRIVATE void finish_off_srcLine,( srcLine *Line )); PROTO(PRIVATE COLNO_t colno_of,(char *s, int c, COLNO_t startcol )); PROTO(PRIVATE srcPosn see_a_number,( srcPosn pos, int can_be_holl )); PROTO(PRIVATE srcPosn see_dowhile,( srcPosn pos )); PROTO(PRIVATE srcPosn see_expression,( srcPosn pos )); PROTO(PRIVATE srcPosn see_keyword,(srcPosn pos, char *matchstr )); PROTO(PRIVATE srcPosn skip_balanced_parens,( srcPosn pos )); PROTO(PRIVATE srcPosn skip_idletters,( srcPosn pos )); PROTO(PRIVATE srcPosn skip_quoted_string,( srcPosn pos )); PROTO(PRIVATE srcPosn skip_hollerith,( srcPosn pos )); #ifdef ALLOW_UNIX_CPP PROTO(PRIVATE int take_cpp_line,( srcLine *Buf )); #endif void init_scan(VOID) /* Starts reading a file */ { tab_filename = NULL; incdepth = 0; inctable_index = -1; #ifdef ALLOW_UNIX_CPP cpp_inc_depth = 0; cpp_start_of_file = TRUE; #endif /* Choose source form based on filename extension, unless overridden by -source=fixed or free. */ if(source_free_form) { free_form = TRUE; } else if(source_fixed_form) { free_form = FALSE; } else { /* For *.f90, or *.f95 use free form. For all others, use fixed form. */ if( has_extension(top_filename,".f90") || has_extension(top_filename,".f95") ) { free_form = TRUE; } else { free_form = FALSE; } } /* Set max line length according to source form */ if( free_form ) { max_stmt_col = (COLNO_t)132; /* not adjustable */ std_max_stmt_col = (COLNO_t)132; } else { max_stmt_col = (COLNO_t)fixed_max_stmt_col; /* may be changed by -column */ std_max_stmt_col = (COLNO_t)72; } free_srcBuffer(srcBuffer); /* free up memory from previous */ mkhtml_bookmark = (srcLine *)NULL; /* invalidate mkhtml bookmark */ srcBuffer = gulp_srcfile(input_fd); /* read the input file */ if( srcBuffer != (srcLine *)NULL ) top_file_line_num = srcBuffer->line_num; else top_file_line_num = 1; init_stream(); } void init_stream(VOID) /* Initializes a new input stream */ { inside_string = FALSE; inside_hollerith = FALSE; noncomment_line_count = 0; /* Start up with next_char pointing at first significant character of source. If source starts with a comment, act as if at end of a line so readahead will pull in the next noncomment line. This will insert an extra EOS at start up, but it is not counted as a statement, so it will be OK. If buffer is empty, treat as EOF. */ curr_srcLine = (srcLine *)NULL; curr_char = EOS; line_num = NO_LINE_NUM; col_num = NO_COL_NUM; next_srcLine = srcBuffer; if( next_srcLine == (srcLine *)NULL ) { next_char = EOF; next_line_num = 1; } else { next_line_num = next_srcLine->line_num; if( next_srcLine->comment ) { next_index = next_srcLine->end_index + 1; next_char = EOS; } else { /* the usual case */ next_index = next_srcLine->start_index; next_col_num = next_srcLine->start_col; next_char = next_srcLine->line[next_index]; } } prev_stmt_line_num = 0; sticky_EOF = TRUE; contin_count = 0; advance(); /* put 1st char in the pipeline */ } void finish_scan(VOID) { /* clean up if no END statement at EOF */ check_seq_header((Token *)NULL); } /* next_up(c) is true if next_char == c outside of character or hollerith context. Must look at curr_char to avoid being fooled by '!' without messing up on 'xxx'! either. Also don't be fooled by '''!''' which is the string '!' Note that inside_string does not yet reflect curr_char. Test is that inside_string is true but about to become false, or false and not about to become true. Think about it. */ #define next_up(c) ( (next_char==(c)) &&\ (inside_string? (curr_char == quote_char) : !isaquote(curr_char)) &&\ (!inside_hollerith) ) /* char_context() is true if next_char is inside character string. */ #define char_context() (inside_string?(curr_char!=quote_char):isaquote(curr_char)) /* Routine to move forward one character in source. Invariants that hold on entry and on exit: curr_char = current significant character of source. On entry, it is the char just lexed, on exit it is the next one to be lexed. (Blanks are considered significant, but comments are not.) On startup, it is EOS as if a statement had just been finished. The actual char in source buffer may be substituted by something else, e.g. EOS replaces actual stmt-end. curr_srcLine = source line-buffer record containing curr_char. col_num = column number of curr_char (accounting for tabs). line_num = line of source containing curr_char. next_char = next significant character following curr_char. next_srcLine = source line-buffer record containing next_char. next_index = cursor into line buffer, location of next_char next_line_num = line of source containing next_char. */ void advance(VOID) { prev_char = curr_char; if(next_char == EOF) { /* Don't advance past EOF */ if(curr_char == EOS || curr_char == EOF) { /* Pause to allow parse actions at end of stmt to have correct file context before popping the include file. Effect is to send an extra EOS to parser at end of file. */ if(sticky_EOF) { sticky_EOF = FALSE; return; } /* At EOF: close include file if any, otherwise yield an EOF character. */ if( ! pop_include_file() ) { curr_char = EOF; } return; } else { curr_char = EOS; return; } } if(curr_char == EOS) initial_flag = TRUE; curr_char = next_char; /* Step to next char of input */ col_num = next_col_num; line_num = next_line_num; curr_srcLine = next_srcLine; /* # line directives take effect here, changing the value of next_filename. The line number was already set in gulp_srcfile. */ #ifdef ALLOW_UNIX_CPP if(next_index == 0 && next_char == '#') cpp_handled = take_cpp_line(next_srcLine); #endif next_col_num = NXTCOL(next_char,next_col_num); next_index++; /* advance to next char of input line */ /* See if end of line has been reached. If so, then insert EOS for end of statement or EOL if stmt is continued and gap is not escaped by reaching max_stmt_col (fixed form) or by pair of '&' (free form). */ while( next_index > next_srcLine->end_index ) { /* If we were here before, next_char is EOL (for continued stmt) or EOS (for end of statement). In that case, advance to next noncomment line. */ if( next_char == EOS || next_char == EOL ) { /* this may not be needed now that EOS is on same line as stmt */ if( curr_srcLine != (srcLine *)NULL ) prev_stmt_line_num = curr_srcLine->line_num; do { /* loop till noncomment found */ /* Print line about to be discarded & handle warnings deferred till now. Then skip over subsequent comments to next statement line. */ /* Keep count of consecutive continuations */ if( next_srcLine->contin ) contin_count++; else contin_count = 0; finish_off_srcLine(next_srcLine); /* Get the next line */ next_srcLine = next_srcLine->next; if( next_srcLine == (srcLine *)NULL ) { /* End of source buffer reached */ next_char = EOF; return; } /* A new source line has been obtained. */ next_line_num = next_srcLine->line_num; ++tot_line_count; /* count global lines processed */ if( ! next_srcLine->comment ) { ++tot_stmt_line_count; /* global noncomment lines */ ++noncomment_line_count; /* those in just this file */ } } while( next_srcLine->comment ); next_index = next_srcLine->start_index; next_col_num = next_srcLine->start_col; /* Obscure case of a blank continuation line */ if( next_srcLine->contin && next_srcLine->line[next_index] == '\0' ) { next_char = EOL; return; } } /* end if next_char == EOS or EOL */ else { /* Scan ahead to see if the next noncomment line is a continuation, to tell whether to insert an EOL or an EOS. */ srcLine *p = next_srcLine->next; while( p != NULL && p->comment ) { p = p->next; } if( p != NULL && p->contin ) { int i = p->start_index; /* Here is where we insert an EOL between last char of a stmt line and first char of continuation on next line unless elided by free-form '&' pair or fixed-form running right up to column 72. The EOL is sent so that there will be an embedded space at that point. */ next_char = EOL; if( free_form ) { if( i <= p->end_index && (i == 0 || p->line[i-1] != '&') ) { return; } } else { /* fixed form */ if( col_num < max_stmt_col ) { return; } } /* This point is reached only if EOL is elided. The code will now drop to end of the while loop, with next_index unchanged, so it will re-enter the loop instead of sending next_char = EOL to caller. It will therefore get a new line and next_char will be the first significant character of the continuation line. In all other situations the while is effectively an if. */ } /* end contin */ else { /* not a contin */ /* If statement is not continued, send an EOS. */ next_char = EOS; return; } } /* end else next_char != EOS or EOL */ } /* end while next_index > end_index */ /* We now have a significant character to advance to. */ next_char = next_srcLine->line[next_index]; /* Handle semicolon statement separator. It has to be looked for ahead and changed to EOS so lexer code watching for end of line coming doesn't need to deal with it. */ /* I'm not sure this is correct */ if(next_up(';')) { next_char = EOS; if(f77_semicolon) { nonstandard(next_line_num,next_col_num,0,0); msg_tail("semicolon statement separator"); } } }/* end advance */ /* Routine to make sure that line gets printed if -list option in effect, and issue misc warnings about the line that has just finished being lexed. These are low-level matters that were identified by first pass after gulping the source. */ PRIVATE void finish_off_srcLine( srcLine *Line ) { if( Line != (srcLine *)NULL ) { /* When debugging lexer, it is helpful to have lines flushed early. Normally, it is best to defer flushing lines to as late a stage as possible so that errors uncovered late in processing can still be printed next to the source lines that produced them. */ #ifdef DEBUG_FORLEX if(debug_lexer) { flush_line_out(Line->line_num); } #endif if( ! Line->comment ) { /* Warn if stmt field has been extended and the extended part has been used. */ if( ((f77_overlength || f90_overlength) && max_stmt_col>std_max_stmt_col) && Line->overlength){ nonstandard(Line->line_num,(std_max_stmt_col+1), f90_overlength,0); msg_tail(": significant characters past"); if( !free_form ) { msg_tail("72 columns"); if(f90_overlength) { /* explain still wrong */ msg_tail("in fixed source form"); } } else { msg_tail("132 columns in free source form"); } } /* Otherwise warn if any chars past 72 cols, fixed format only */ else if(pretty_overlength && !free_form && Line->overlength ) { ugly_code(Line->line_num,(COLNO_t)73, "characters past 72 columns"); } /* Issue warnings related to continuations */ if( Line->contin ) { if( free_form ) { /* free form cases */ if( Line->contin_wo_amp ) { COLNO_t col = colno_of(Line->line,'&',(COLNO_t)1); syntax_error(Line->line_num,col, "Continuation in character context must resume with '&'"); } if(contin_count == 40) { if(f90_continue) { COLNO_t col = colno_of(Line->line,'&',(COLNO_t)1); nonstandard(next_line_num,col,0,0); msg_tail(": more than 39 continuation lines"); } } } else { /* fixed form cases */ if(noncomment_line_count == 0) warning(Line->line_num,(COLNO_t)6, "Continuation mark found in first line of file"); if( pretty_contin && curr_srcLine->prev != NULL && curr_srcLine->prev->comment ) ugly_code(Line->line_num,(COLNO_t)6, "Continuation follows comment or blank line"); /* DEC tab continuation convention */ if( source_dec_tab && Line->line[0] == '\t' ) { if(f77_dec_tabs || f90_dec_tabs) { nonstandard(Line->line_num,(COLNO_t)7,f90_dec_tabs,0); msg_tail(": continuation mark not in column 6"); } } if(contin_count == 20) { if(f77_20_continue || f90_continue) { nonstandard(Line->line_num,(COLNO_t)6,0,0); msg_tail(": more than 19 continuation lines"); if(f90_continue) msg_tail("in fixed source form"); } } } } } /* end of handling non-comment line warnings & errors */ /* Warn under -f77 if ! comment is used. */ if( f77_inline_comment && Line->f90_comment) { int bang_col_num; /* column of the '!' */ if( Line->comment ) bang_col_num = colno_of(Line->line,'!',(COLNO_t)1); else bang_col_num = colno_of(&Line->line[next_index],'!',next_col_num); nonstandard(Line->line_num,bang_col_num,0,0); msg_tail(": inline comment"); } } /* end if Line not NULL */ } /* Function which returns column number of character c in line s. Similar to (strchr(s,c)-s)+1 but accounts for tabs, and returns NO_COL_NUM if c not found. */ PRIVATE COLNO_t colno_of(char *s, int c, COLNO_t startcol) { int i; COLNO_t col; for(i=0,col=startcol; s[i] != '\0'; i++) { if( s[i] == c ) return col; col = NXTCOL(s[i],col); } return NO_COL_NUM; } /* Here we handle Unix preprocessor lines. The only ones processed now are those that set the line number and filename. Form 1: # line 10 "filename" Form 2: # 10 "filename" We replace next_filename and next_line_num by the given values. */ #ifdef ALLOW_UNIX_CPP PRIVATE int take_cpp_line(srcLine *Buf) { int nchars, handled; char *filename; char *s = Buf->line; handled = FALSE; /* Deal only with # line directives */ if( Buf->cpp_line_directive ) { handled = TRUE; do { ++s; } while( isspace(*s) ); /* Skip space after the '#' */ if(strncmp(s,"line",4) == 0) { /* Look for the keyword "line" */ s += 4; /* Skip the word "line" */ while( isspace(*s) ) ++s; /* Skip space after the word "line" */ } while( isdigit(*s) ) ++s; /* skip the line number (already used) */ while( isspace(*s) ) ++s; /* Skip space after the line number */ /* Now find the filename */ filename = (char *)NULL; if( *s == '"') { /* Filename must be preceded by " */ ++s; /* Skip the " */ nchars = 0; /* Count chars in the filename */ while( s[nchars] != '"' && s[nchars] != '\0') ++nchars; if( s[nchars] == '"') { /* Filename must be followed by " */ s[nchars] = '\0';/* terminate it temporarily */ /* See if this filename is on cpp_include_stack at the previous level, and if so, re-use it. If not, make new global space for it. */ if( cpp_inc_depth > 0 && strcmp(s,cpp_include_stack[cpp_inc_depth-1].filename) == 0 ) { filename = cpp_include_stack[cpp_inc_depth-1].filename; } else if( strcmp(s,top_filename) == 0 ) { filename = top_filename; } else { filename = new_global_string(s); /* put it in permanent space */ } s[nchars] = '"'; /* restore line as it was */ } } }/*end handling #line */ if(handled) { next_top_file_line_num = next_line_num; /* save this in case it's needed */ next_filename = filename; } else { next_filename = (char *)NULL; } return handled; /* Return TRUE if it was interpreted */ }/*take_cpp_line*/ #endif int #if HAVE_STDC flush_line_out(LINENO_t n) /* Prints lines up to line #n if not yet printed */ /* Returns TRUE if line was printed, else FALSE */ #else /* K&R style */ flush_line_out(n) /* Prints lines up to line #n if not yet printed */ LINENO_t n; /* Returns TRUE if line was printed, else FALSE */ #endif /* HAVE_STDC */ { srcLine *p = curr_srcLine; if( p != (srcLine *)NULL ) { /* For some low-level warnings that happen early, the right place to start may be next_srcLine. */ if( p->line_num < n && p->next != (srcLine *)NULL ) { p = p->next; } /* First, back up if necessary to the * indicated line. Preprocessor # line directives * can cause confusion since line numbers not * monotonic: don't back up in that case. */ while( p->prev != (srcLine *)NULL && p->prev->line_num >= n) { if( p->prev->line_num >= p->line_num ) { break; } p = p->prev; } if( do_list ) { /* Print previous lines only if do_list TRUE. * Back up to last non-printed line. */ while( p->prev != (srcLine *)NULL && ! p->prev->printed ) { p = p->prev; } while( p != (srcLine *)NULL && p->line_num < n ) { if( ! p->printed ) { print_a_line(list_fd,p->line,p->line_num); p->printed = TRUE; } p = p->next; } } /* At this point we have p->line_num <= n, but * line may have been printed already. If not, * then print it. */ if( p != (srcLine *)NULL && p->line_num == n ) { if( ! p->printed ) { print_a_line(list_fd,p->line,p->line_num); p->printed = TRUE; } return TRUE; /* at this point it is definitely printed */ } } return FALSE; } /* Routine used by END_processing to print the END statement and also, if this is the last statement of the file, any blank and comment lines that follow it. */ int flush_end_stmt(LINENO_t n) { srcLine *p = curr_srcLine; LINENO_t last_line_num = n; /* this will be used if END is last line */ /* Scan ahead to see if only comments from here to end of file. */ if( p != (srcLine *)NULL ) { for(p=p->next; p != (srcLine*)NULL && p->comment; p = p->next) { last_line_num = p->line_num; } } return flush_line_out( p == (srcLine *)NULL? last_line_num: n); } /* Function to free up all memory allocated in a srcLine buffer. */ void free_srcBuffer(srcLine *srcBuf) { while( srcBuf != (srcLine *)NULL ) { srcLine *nextLine = srcBuf->next; if(srcBuf->line != (char *)NULL) free(srcBuf->line); free(srcBuf); srcBuf = nextLine; } } /* Functions which look ahead as far as end of line to see if input cursor is sitting at start of a token of the given class. Used to resolve ambiguities that need more than one token of lookahead. */ /* Function to advance a srcPosn location by one character. Normally this just increments the index into the line. If end of line is reached and statement is continued, the location will move to the first significant character of the continuation line. The argument p must not be NULL. */ PRIVATE void stepPosn(srcPosn* p) { srcLine *L = p->Line; /* convenience variable */ p->idx++; /* Usual case: step to next character */ if( L->line[p->idx] == '\0' ) { /* Reached end of line? */ /* If stmt is continued, move to next line. First, skip over intervening comments. */ for( L=L->next; L != (srcLine *)NULL && L->comment; L=L->next ) continue; /* Now, if it is a continuation, move to beginning of significant text. */ if( L != (srcLine *)NULL && L->contin ) { p->Line = L; p->idx = L->start_index; } } } int looking_at_cplx(VOID) { srcPosn pos; if( next_char != EOS && /* Looking at next line already */ curr_srcLine != (srcLine *)NULL ) /* (rare but possible after include file) */ { pos.Line = next_srcLine; /* starting position of lookahead text */ pos.idx = next_index; if( (pos = see_a_number(pos,FALSE)), pos.idx < 0 ) return FALSE; while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos); if( pos.Line->line[pos.idx] != ',' ) return FALSE; stepPosn(&pos); if( (pos = see_a_number(pos,FALSE)), pos.idx < 0 ) return FALSE; while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos); if(pos.Line->line[pos.idx] != ')') return FALSE; } #ifdef DEBUG_IS_KEYWORD else { if(debug_lexer && getenv("VERBOSE")) { (void)fprintf(list_fd,"\nlooking_at_cplx:"); if(next_char == EOS)(void)fprintf(list_fd," at EOS"); else (void)fprintf(list_fd," curr_srcLine = NULL"); } } #endif return TRUE; /* passed all the tests */ } int #if HAVE_STDC looking_at_keywd(int token_class) /* Keyword class to be checked out */ #else /* K&R style */ looking_at_keywd(token_class) int token_class; /* Keyword class to be checked out */ #endif /* HAVE_STDC */ { /* Distinguishing identifier from keyword. If not sure, assumes true. Ambiguity must be resolved in current line. */ int c; srcPosn pos; pos.Line = next_srcLine; /* starting position of lookahead text */ pos.idx = next_index; if( next_char != EOS && /* Looking at next line already */ pos.Line != (srcLine *)NULL ) { #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,"\nlooking_at: curr_char=%c then %c", curr_char,pos.Line->line[next_index]); #endif /* Skip over leading stuff that could be rest of identifier */ if(isidletter(curr_char) || isdigit(curr_char) || isspace(curr_char)){ pos = skip_idletters( pos ); c = pos.Line->line[pos.idx]; /* Store following character in c */ stepPosn(&pos); /* Leave index pointing at char after c */ } else { c = curr_char; /* Otherwise next input char is c */ } #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd," c=%c then %c",c,pos.Line->line[pos.idx]); #endif /* An initial identifier followed by single : has to be a construct name, followed by :: has to be a keyword. However, if we are testing for DO, fail here since it cannot be followed by any colons and is probably DOUBLE which will be matched later. */ if( c == ':' ) { while( isspace( (c=pos.Line->line[pos.idx]) ) ) stepPosn(&pos); return (c == ':' && token_class != tok_DO ); } if(token_class == tok_DO) { int opt_comma = FALSE; /* DO: we must by now have skipped over optional label to optional comma or over optional label and variable name to = sign. Look for expression and comma. DOWHILE will be found as single keyword, but we have to spot DO label WHILE(expr) here. DO of END DO is not seen here. */ WHILE_expected = FALSE; /* most cases do not use it */ if(c == ',' && isdigit(curr_char)) { /* Skip optional comma after label. First, back up and check that we saw only digits so far. Do it here since this is rare and not worth cluttering the foregoing code. */ srcPosn p; /* temporary position variable for rescan */ p.Line = next_srcLine; p.idx = next_index; while( isdigit(p.Line->line[p.idx]) || isspace(p.Line->line[p.idx]) ) stepPosn(&p); if(p.Line->line[p.idx] != ',') return FALSE; /* Checks out OK: */ pos = skip_idletters(pos); /* skip DO index or WHILE */ c = pos.Line->line[pos.idx]; stepPosn(&pos); opt_comma = TRUE; } if(c == '=') { /* Traditional DO form */ pos = see_expression(pos); return (pos.idx != -1 && pos.Line->line[pos.idx] == ',') || opt_comma; } else { /* Nonstandard variants */ if(c == '(') { /* DO label WHILE (expr): rescan from the word DO to see if it fits. */ pos.Line = next_srcLine; pos.idx = next_index; if( (pos = see_dowhile(pos)), pos.idx != -1 ) WHILE_expected = TRUE; return WHILE_expected || opt_comma; } else return opt_comma; /* The comma is found only in DO forms */ } }/* end of tok_DO forms */ /* Otherwise, look for an assignment statement. If there is no left paren, then must be an equals sign here if it is an assignment statement. */ if(c != '(') { #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,"\n Conclude %s", (c != '=')? "keyword": "assignment stmt"); #endif return (c != '='); } else { /* sitting at parenthesis */ /* Skip to end of balancing parenthesis. Then if = sign, it must be an assignment statement. If ( is found, presumably it is an array substring assignment. So skip once more to check for the = sign.) */ pos = skip_balanced_parens(pos); #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd," to %c",pos.Line->line[pos.idx]); #endif if(pos.Line->line[pos.idx] == '(') { stepPosn(&pos); /* Move past the paren */ pos = skip_balanced_parens(pos); #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd," to %c",pos.Line->line[pos.idx]); #endif } #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd," conclude %s",pos.Line->line[pos.idx]!= '='?"keyword":"variable"); #endif return (pos.Line->line[pos.idx] != '='); } } #ifdef DEBUG_IS_KEYWORD else { if(debug_lexer && getenv("VERBOSE")) { (void)fprintf(list_fd,"\nlooking_at_keywod(%s):",keytok_name(token_class)); if(next_char == EOS)(void)fprintf(list_fd," at EOS"); else (void)fprintf(list_fd," curr_srcLine = NULL"); } } #endif /* End of line: must be a keyword */ return TRUE; }/*looking_at_keywd*/ /* This guy is called when an integer is followed by '.' in cases where a real number or expression is allowed. When an integer is followed by .E, it can either be a real like 1.E10, or a comparison like (1.EQ.I). This requires looking for the 'Q' after the 'E'. The other cases, like ... 1.AND. ... are resolved by looking at next_char to see if it is the 'D' of a d.p. constant or not. */ int looking_at_relop(VOID) { int c; srcPosn pos; if( next_char != EOS && /* Looking at next line already */ curr_srcLine != (srcLine *)NULL ) { pos.Line = next_srcLine; /* starting position of lookahead text */ pos.idx = next_index; while( (c=pos.Line->line[pos.idx]) != '\0' && isspace(c)) stepPosn(&pos); if( !isaletter( c ) ) /* next char must be letter */ return FALSE; c = makeupper(c); if( c == 'D' ) /* D.P. exponent */ return FALSE; /* No dotted keywords start with D */ if( c == 'Q' ) /* Q.P. exponent */ return FALSE; /* No dotted keywords start with Q */ /* If next char is any other letter but 'E', cannot be exponent. If it is 'E', must be EQ or EQV to be a relop. So look ahead for the 'Q'. */ else if( c == 'E' ) { do { stepPosn(&pos); } while( (c=pos.Line->line[pos.idx]) != '\0' && isspace(c)); c = makeupper(c); return (c == 'Q'); } else /* Next char not D or E: must be a dotted keyword */ return TRUE; } #ifdef DEBUG_IS_KEYWORD else { if(debug_lexer && getenv("VERBOSE")) { (void)fprintf(list_fd,"\nlooking_at_relop:"); if(next_char == EOS)(void)fprintf(list_fd," at EOS"); else (void)fprintf(list_fd," curr_srcLine = NULL"); } } #endif /* If EOS, then it is stmt like x=1. */ return FALSE; } /* This routine is called for an IMPLICIT statement if the type keyword is followed by a left parenthesis, and returns TRUE if what follows is a letter list and not an F90 length-selector or kind-selector. If insufficient lookahead to tell, it returns TRUE as more likely. */ int looking_at_implicit_list(VOID) { int c; srcPosn pos; if( next_char != EOS && /* Looking at next line already */ curr_srcLine != (srcLine *)NULL ) { int letter_next_up; pos.Line = next_srcLine; /* starting position of lookahead text */ pos.idx = next_index; /* scan across a letter-list inside parentheses */ letter_next_up = TRUE; while( (c=pos.Line->line[pos.idx]) != '\0' && c != ')' ) { if(! isspace(c) ) { if(letter_next_up) { if(! isaletter(c) ) return FALSE; /* can't be letter-list */ letter_next_up = FALSE; } else { if( c == ',' ) return TRUE; /* can't be length or kind selector */ if( c != '-' ) return FALSE; /* can't be letter-list */ letter_next_up = TRUE; } } stepPosn(&pos); } if( c == ')' ) /* skip past closing paren */ stepPosn(&pos); /* Having scanned what might be a letter-list, it still could be an expression e.g. M-N where M and N are parameters. If we are looking at a len or kind spec, then next nonblank must be the left paren of the letter list. */ while( (c=pos.Line->line[pos.idx]) != '\0' && isspace(c) ) stepPosn(&pos); if(c != '\0') return (c != '('); } #ifdef DEBUG_IS_KEYWORD else { if(debug_lexer && getenv("VERBOSE")) { (void)fprintf(list_fd,"\nlooking_at_implicit_list:"); if(next_char == EOS)(void)fprintf(list_fd," at EOS"); else (void)fprintf(list_fd," curr_srcLine = NULL"); } } #endif return TRUE; /* End of line: guess that it isn't len/kind spec */ } /* see_a_number returns srcPosn with index -1 if there is no valid numeric constant in stmt starting at index i. If valid number found, it returns the index of the next character after the constant. Leading whitespace in s is skipped.*/ #define SKIP_SPACE while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos) PRIVATE srcPosn see_a_number(srcPosn pos, /* location in source buffer */ int can_be_holl) /* context indication */ { int digit_seen = FALSE; int isave; while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos); /* move past optional preceding sign */ if(pos.Line->line[pos.idx] == '-' || pos.Line->line[pos.idx] == '+' ) { stepPosn(&pos); SKIP_SPACE; can_be_holl = FALSE; } isave=pos.idx; /* move past ddd or ddd. or .ddd or ddd.ddd */ if(isdigit(pos.Line->line[pos.idx])) digit_seen = TRUE; while(isdigit(pos.Line->line[pos.idx])) { stepPosn(&pos); SKIP_SPACE; } if(pos.Line->line[pos.idx] == 'H' && can_be_holl) { pos.idx = isave; pos = skip_hollerith(pos); return pos; } if(pos.Line->line[pos.idx] == '.') { stepPosn(&pos); SKIP_SPACE; if(isdigit(pos.Line->line[pos.idx])) digit_seen = TRUE; while(isdigit(pos.Line->line[pos.idx])) { stepPosn(&pos); SKIP_SPACE; } } /* no digits seen: bail out now */ if(! digit_seen) { pos.idx = -1; return pos; } /* look for exponential part. The standard does not allow D or Q, but we will, just in case. */ if(makeupper(pos.Line->line[pos.idx]) == 'E' || makeupper(pos.Line->line[pos.idx]) == 'D' || makeupper(pos.Line->line[pos.idx]) == 'Q') { stepPosn(&pos); SKIP_SPACE; if(pos.Line->line[pos.idx] == '+' || pos.Line->line[pos.idx] == '-') { stepPosn(&pos); SKIP_SPACE; } if(!isdigit(pos.Line->line[pos.idx])) { pos.idx = -1; return pos; } while(isdigit(pos.Line->line[pos.idx]) || isspace(pos.Line->line[pos.idx])) stepPosn(&pos); } return pos; }/*see_a_number*/ /* see_dowhile looks ahead to see if the stuff following the initial DO is a label and the word WHILE followed by a parenthesized expr. Returns position following the DO n WHILE( ... ) if found. If it fails to find that pattern, index of returned position is set to -1. Note that the "DO WHILE" form without a DO label is not accepted here so that DOWHILE will be gotten as a single token later. */ PRIVATE srcPosn see_dowhile(srcPosn pos) { int c; /* Skip over the label */ while( isdigit(c=pos.Line->line[pos.idx]) || isspace(c) ) stepPosn(&pos); if(c == ',') /* Skip optional comma */ stepPosn(&pos); pos = see_keyword(pos,"WHILE"); if( pos.idx == -1 || pos.Line->line[pos.idx] != '(') /* Look for the opening paren */ { pos.idx = -1; return pos; } stepPosn(&pos); /* skip the opening paren */ pos = skip_balanced_parens(pos); /* Only = sign can follow the parens if this is not a do-while. */ if( pos.Line->line[pos.idx] == '=' ) pos.idx = -1; return pos; }/*see_dowhile*/ /* Routine to look ahead for the double colon that signals an F90 form of declaration. */ int see_double_colon(VOID) { srcPosn pos; if( next_char != EOS && /* Looking at next line already */ curr_srcLine != (srcLine *)NULL ) { pos.Line = next_srcLine; pos.idx = next_index; while(pos.Line->line[pos.idx] != '\0') { /* Skip past commas */ if(pos.Line->line[pos.idx] == ',') stepPosn(&pos); /* Check for a double colon */ else if(pos.Line->line[pos.idx] == ':') { do { stepPosn(&pos); } while(isspace(pos.Line->line[pos.idx])); if(pos.Line->line[pos.idx] == ':') return TRUE; } /* Other possible things look like exprs */ else { int old_indx = pos.idx; pos = see_expression(pos); if( old_indx == pos.idx ) /* if no expr there, give up */ break; } } } return FALSE; } /* Crude routine to scan forward past arithmetic expressions. Function invocations and array or character elements will have their parentheses skipped by skip_balanced_parens; outside parens a comma will cause a halt. Returns the index of the nonblank character following the expression, or -1 if something non-kosher was found (e.g. a faulty number) It can be confused by holleriths containing significant characters, i.e. ( ) ' ! and occurring outside parentheses. */ PRIVATE srcPosn see_expression(srcPosn pos) { int c; while(pos.idx != -1 && (c=pos.Line->line[pos.idx]) != '=' && c != '\0') { if(isidletter(c)) pos = skip_idletters(pos); else if(isdigit(c)) pos = see_a_number(pos,TRUE); else if(isspace(c)) stepPosn(&pos); else if(c == '(') { stepPosn(&pos); pos = skip_balanced_parens(pos); } else if(c == '+' || c == '-' || c == '/' || c == '*' || c == '.') stepPosn(&pos); else if(c == '\'' || c == '"') /* embedded strings confuse things */ pos = skip_quoted_string(pos); else break; } return pos; }/*see_expression*/ /* see_keyword returns -1 if the line (ignoring blanks and uppercasing alphabetics) does not match the given string matchstr. If it does match, returns index of next nonspace character. Note that index must be at start of keyword. */ PRIVATE srcPosn see_keyword(srcPosn pos, char *matchstr) { int c; while(*matchstr != 0 && (c=pos.Line->line[pos.idx]) != '\0') { if(! isspace(c) ) { if(makeupper(c) != *matchstr++) { pos.idx = -1; return pos; } } stepPosn(&pos); } if(*matchstr == '\0') { /* Match found */ while(isspace(pos.Line->line[pos.idx])) stepPosn(&pos); return pos; } else { /* No match */ pos.idx = -1; return pos; } }/*see_keyword*/ /* skip_balanced_parens returns index of the nonspace character following the closing ')' that balances the opening '(' preceding pos.Line->line[pos.idx], or of final nul if the parentheses are not balanced within the line. */ PRIVATE srcPosn skip_balanced_parens(srcPosn pos) { int depth=1; /* nesting depth in parens */ int prevchar = '+'; /* arbitrary punctuation */ #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,"\nskipping ()..."); #endif while(pos.Line->line[pos.idx] != '\0' && depth > 0) { #ifdef INLINE_COMMENT_CHAR if(pos.Line->line[pos.idx] == INLINE_COMMENT_CHAR) /* inline comment ends line */ break; #endif if(pos.Line->line[pos.idx] == '\'' || pos.Line->line[pos.idx] == '"') { /* embedded strings confuse things */ pos = skip_quoted_string(pos); prevchar = 'X'; /* Arbitrary non punctuation */ } else if(ispunct(prevchar) && isdigit(pos.Line->line[pos.idx])) { pos = skip_hollerith(pos); /* Skip hollerith or number */ prevchar = pos.Line->line[pos.idx]; } else { /* Keep track of nesting */ if (pos.Line->line[pos.idx] == '(') ++depth; else if(pos.Line->line[pos.idx] == ')') --depth; if(! isspace(pos.Line->line[pos.idx]) ) prevchar = pos.Line->line[pos.idx]; stepPosn(&pos); } } /* We are now past the closing paren */ while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos); /* skip trailing space */ return pos; }/*skip_balanced_parens*/ /* skip_idletters returns index of the nonspace character following a string of idletters: alphabetic characters or digits, or underscore or dollar if those options are enabled. It does not look out for hollerith constants. */ PRIVATE srcPosn skip_idletters(srcPosn pos) { int c; #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,": skipping letters..."); #endif while(c=pos.Line->line[pos.idx], (isidletter(c) || isadigit(c) || isspace(c))) stepPosn(&pos); return pos; }/*skip_idletters*/ /* Returns index of nonspace character following quote mark that closes string whose opening quote mark is before index. */ PRIVATE srcPosn skip_quoted_string(srcPosn pos) { int c; int start_quote_char = pos.Line->line[pos.idx]; /* get opening quote char: ' or " */ stepPosn(&pos); while( (c=pos.Line->line[pos.idx]) != '\0') { if( source_unix_backslash && c == '\\' ) { /* skip any escaped char */ stepPosn(&pos); if(pos.Line->line[pos.idx] == '\0') /* (check just in case) */ break; } if(c == start_quote_char) { /* Closing quote? */ stepPosn(&pos); if(pos.Line->line[pos.idx] != start_quote_char) /* Quoted quote? */ break; } stepPosn(&pos); } /* We are now past the closing quote mark */ while(pos.Line->line[pos.idx] != '\0' && isspace(pos.Line->line[pos.idx])) stepPosn(&pos); /* skip trailing space */ return pos; }/*skip_quoted_string*/ /* Skips holleriths. Note: treats tabs within hollerith as single characters. */ PRIVATE srcPosn skip_hollerith(srcPosn pos) { int len=0; int c; while(isdigit(c=pos.Line->line[pos.idx])) { len = len*10 + BCD(c); stepPosn(&pos); SKIP_SPACE; } #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,"\nskip_hollerith: %d then %c:", len,pos.Line->line[pos.idx]); #endif if(makeupper(pos.Line->line[pos.idx]) != 'H') return pos; stepPosn(&pos); /* Skip the 'H' */ while(pos.Line->line[pos.idx] != '\0' && len > 0){ /* Move forward len characters */ #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd,"%c",pos.Line->line[pos.idx]); #endif --len; stepPosn(&pos); } #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("VERBOSE")) (void)fprintf(list_fd," to %c",pos.Line->line[pos.idx]); #endif return pos; }/*skip_hollerith*/ /* get_comments() in makehtml.c needs to be able to locate * the source line where the current module is defined. * This routine saves a bookmark for it. Called by * def_curr_module() in symtab.c. Location can be wrong on * source with #line making nonmonotonic line numbers. */ void mark_module_srcline( LINENO_t line_num ) { mkhtml_bookmark = curr_srcLine; /* due to readahead, curr_srcLine may be after declaration */ while( mkhtml_bookmark != (srcLine *)NULL && mkhtml_bookmark->line_num > line_num) mkhtml_bookmark = mkhtml_bookmark->prev; } /* End of module Advance */ ftnchek-3.3.1/advance.h0000644000031000002260000001012407743066564015347 0ustar moniotstaff00000000000000/* $Id: advance.h,v 1.10 2003/10/14 21:41:08 moniot Exp $ Declarations shared between advance.c and include.c Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #ifdef ADVANCE #define ADVANCE_SHARED #else #define ADVANCE_SHARED extern #endif ADVANCE_SHARED int next_index, /* Index in line of next_char */ noncomment_line_count, /* Number of noncomment lines read so far */ sticky_EOF; /* Signal to delay EOF a bit for sake of error messages in include files. */ ADVANCE_SHARED LINENO_t prev_line_num; /* line number of previous input line */ /* Standard maximum line length depends on source form. */ ADVANCE_SHARED COLNO_t std_max_stmt_col; /* Define tab stops: NXTCOL(c,col_num) is next column after col_num. This formula maps [1-8]->9, [9-16]->17, etc. if C is a tab, otherwise just adds 1 to COL. */ #define NXTCOL(C,COL) ((C)=='\t'?( (((COL)-1)/8+1)*8+1 ):COL+1) /* This is the same but counts tabs, for support of -port=tab warning */ #define PORT_NXTCOL(C,COL) ((C)=='\t'?(++tab_count, (((COL)-1)/8+1)*8+1 ):COL+1) /* Definition of source-line buffer structure. Source file is read in entirely before processing begins. */ struct src_line { char *line; /* buffer holding source code of line */ struct src_line *next, /* link to next line */ *prev; /* link to prev line */ LINENO_t line_num; /* number of line within source file */ int start_index, end_index; /* span containing interesting source */ COLNO_t start_col; /* like start_index but accounts for tabs */ unsigned printed: 1, /* line has been printed */ /* Flags indicating categories of lines */ contin: 1, /* line is a continuation line */ comment: 1, /* line is a comment line */ blank: 1, /* line is blank (implies comment) */ cpp_line_directive: 1, /* Unix #line directive */ /* the next flags are for f77 or f90 warnings */ d_comment: 1, /* line is a 'D' comment */ f90_comment: 1, /* line is or has an '!' comment */ overlength: 1, /* line exceeds std max length */ empty_contin: 1, /* line is an '&' on otherwise comment line */ contin_wo_amp: 1; /* freeform continued line lacks initial '&' */ }; typedef struct src_line srcLine; ADVANCE_SHARED LINENO_t prev_stmt_line_num; /* line number of previous noncomment */ #if 0 /* this approach would require sharing advance.h just for this */ ADVANCE_SHARED srcLine *prev_stmt_srcLine; /* source line of previous noncomment */ /* macro to yield line number of previous noncomment. */ #define prev_stmt_line_num (prev_stmt_srcLine?prev_stmt_srcLine->line_num:(LINENO_t)1) #endif ADVANCE_SHARED srcLine *curr_srcLine, /* rec of line being lexed */ *next_srcLine, /* rec of line on deck */ *srcBuffer /* 1st rec of source buffer for current file */ #ifdef ADVANCE = (srcLine *)NULL #endif ; ADVANCE_SHARED srcLine *mkhtml_bookmark; /* used by mkhtml to find start of subprog */ PROTO(srcLine * gulp_srcfile,(FILE *fd)); PROTO(void free_srcBuffer, (srcLine *srcBuffer)); #ifdef MACINTOSH #define ENDL '\r' #else #define ENDL '\n' #endif ftnchek-3.3.1/argcheck.c0000644000031000002260000005622407577155523015522 0ustar moniotstaff00000000000000/* $Id: argcheck.c,v 1.10 2002/12/15 19:43:15 moniot Rel $ Routines to check subprogram type and argument agreement */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: check_arglists() Scans global symbol table for subprograms and finds subprogram defn if it exists. */ #include #include #include "ftnchek.h" #include "symtab.h" #include "pgsymtab.h" /* Local functions defined */ PROTO(PRIVATE void arg_array_cmp,( char *name, ArgListHeader *args1, ArgListHeader *args2 )); /* Compares subprogram calls with definition */ PRIVATE void #if HAVE_STDC arg_array_cmp(char *name, ArgListHeader *args1, ArgListHeader *args2) #else /* K&R style */ arg_array_cmp(name,args1,args2) char *name; ArgListHeader *args1, *args2; #endif /* HAVE_STDC */ { int i; int n, n1 = args1->numargs, n2 = args2->numargs; ArgListElement *a1 = args1->arg_array, *a2 = args2->arg_array; n = (n1 > n2) ? n2: n1; /* n = min(n1,n2) */ if (argcheck_argnumber && n1 != n2){ cmp_error_count = 0; (void) argcmp_error_head(name,args1,"varying number of arguments:"); sub_error_report(args1,args1->is_defn? "Defined":"Invoked"); msg_tail("with"); msg_tail(ulongtostr((unsigned long)n1)); msg_tail(n1==1?"argument":"arguments"); sub_error_report(args2,args2->is_defn? "Defined":"Invoked"); msg_tail("with"); msg_tail(ulongtostr((unsigned long)n2)); msg_tail(n2==1?"argument":"arguments"); } if(argcheck_argtype) { /* Look for type mismatches */ cmp_error_count = 0; for (i=0; iis_defn? "Dummy arg": "Actual arg",i, "is type"); if( t1 != type_LABEL ) /*label arg: only print storage class*/ msg_tail(typespec(t1,!defsize1,(long)s1,FALSE,0)); msg_tail(class_name[storage_class_of(a1[i].type)]); arg_error_report(args2,args2->is_defn? "Dummy arg": "Actual arg",i, "is type"); if( t2 != type_LABEL ) /*label arg: only print storage class*/ msg_tail(typespec(t2,!defsize2,(long)s2,FALSE,0L)); msg_tail(class_name[storage_class_of(a2[i].type)]); if(args1->is_defn && storage_class_of(a1[i].type) == class_SUBPROGRAM && storage_class_of(a2[i].type) != class_SUBPROGRAM && datatype_of(a1[i].type) != type_SUBROUTINE && ! a1[i].declared_external ) (void)fprintf(list_fd, "\n (possibly it is an array which was not declared)"); } /* If no class/type/elementsize clash, and if comparing dummy vs. actual, check character and hollerith sizes */ else if(args1->is_defn) { /* Character: check size but skip *(*) and dummy array vs. actual array element. */ if(t1 == type_STRING && s1 > 0 && s2 > 0 && !(a1[i].array_var && a2[i].array_element)) { long dims1,dims2,size1,size2; if(a1[i].array_var) { dims1 = array_dims(a1[i].info.array_dim); size1 = array_size(a1[i].info.array_dim); } else { dims1 = 0; size1 = 1; } if(a2[i].array_var && !a2[i].array_element) { dims2 = array_dims(a2[i].info.array_dim); size2 = array_size(a2[i].info.array_dim); } else { dims2 = 0; size2 = 1; } /* standard requires dummy <= actual size. */ if( (s1*size1 > s2*size2 && (dims1==0 || size1>1) && (dims2==0 || size2>1)) ) { if(argcmp_error_head(name,args1,"argument mismatch")) break; arg_error_report(args1,"Dummy arg",i,"is type"); msg_tail(typespec(t1,TRUE,(long)s1,dims1>0,size1)); arg_error_report(args2,"Actual arg",i,"is type"); msg_tail(typespec(t2,TRUE,(long)s2,dims2>0,size2)); }/*end if char size mismatch*/ }/*end if type==char*/ else if(t2 == type_HOLLERITH) { /* Allow hollerith to match any noncharacter type of at least equal aggregate size. */ long dims1,size1; if(a1[i].array_var) { dims1 = array_dims(a1[i].info.array_dim); size1 = array_size(a1[i].info.array_dim); } else { dims1 = 0; size1 = 1; } if(s2 > s1*size1 && (dims1==0 || size1>1)) { if(argcmp_error_head(name,args1,"argument mismatch")) break; arg_error_report(args1,"Dummy arg",i,"is type"); msg_tail(typespec(t1,!defsize1,(long)s1,dims1>0,size1)); arg_error_report(args2,"Actual arg",i,"is type"); msg_tail(typespec(t2,TRUE,(long)s2,FALSE,0L)); }/*end if holl size mismatch*/ }/*end if type==holl*/ } }/*end for i*/ }/* end look for type && size mismatches */ /* Check arrayness of args only if defn exists */ if(argcheck_arrayness && args1->is_defn ) { cmp_error_count = 0; for (i=0; i 0 && a2[i].size > 0) { cmpsize1 *= a1[i].size; cmpsize2 *= a2[i].size; } /* size = 0 or 1 means variable-dim: OK to differ */ if( (arraycheck_size && (size1>1 && size2>1 && cmpsize1 != cmpsize2)) || (arraycheck_dims && (dims1 != dims2)) ) { char sizebuf[2+2*MAX_ULONGTOSTR]; if(argcmp_error_head( name,args1,"argument arrayness mismatch")) break; arg_error_report(args1,"Dummy arg",i,"has"); msg_tail(ulongtostr((unsigned long)dims1)); msg_tail(dims1==1?"dim":"dims"); msg_tail("size"); strcpy(sizebuf,ulongtostr((unsigned long)size1)); if(datatype_of(a1[i].type) == type_STRING && a1[i].size > 0) { strcat(sizebuf,"*"); strcat(sizebuf,ulongtostr((unsigned long)(a1[i].size))); } msg_tail(sizebuf); arg_error_report(args2,"Actual arg",i,"has"); msg_tail(ulongtostr((unsigned long)dims2)); msg_tail(dims2==1?"dim":"dims"); msg_tail("size"); strcpy(sizebuf,ulongtostr((unsigned long)size2)); if(datatype_of(a2[i].type) == type_STRING && a2[i].size > 0) { strcat(sizebuf,"*"); strcat(sizebuf,ulongtostr((unsigned long)(a2[i].size))); } msg_tail(sizebuf); }/* end if size mismatch */ }/* end case I.B. */ } else { /* C. Actual arg is scalar */ /* Warn in all cases */ if(argcmp_error_head( name,args1,"argument arrayness mismatch")) break; arg_error_report(args1,"Dummy arg",i,"is array"); arg_error_report(args2,"Actual arg",i,"is scalar"); }/* end case I.C. */ } /* end dummy is array, case I. */ else { /* II. Dummy arg is scalar */ if( a2[i].array_var ) { if( a2[i].array_element ) { /* A. Actual arg is array elt */ /* OK */ } else { /* B. Actual arg is whole array */ /* Warn in all cases */ if(argcmp_error_head( name,args1,"argument arrayness mismatch")) break; arg_error_report(args1,"Dummy arg",i,"is scalar"); arg_error_report(args2,"Actual arg",i,"is whole array"); }/* end case II.B. */ } else { /* C. Actual arg is scalar */ /* OK */ } } /* end dummy is scalar, case II */ } /* end if class_VAR */ }/* end for (i=0; iis_defn ) */ /* Check usage of args only if defn exists. Arg array 1 is dummy args, array 2 is actual args. */ if( (usage_arg_modified || usage_arg_alias_modified || usage_array_alias_modified || usage_var_uninitialized || usage_arg_common_modified || usage_array_common_modified || usage_do_var_modified) && args1->is_defn ) { cmp_error_count = 0; for (i=0; iinfo.comlist; while( clist != NULL ) { if( clist->module == args1->module ) { break; /* found it */ } clist = clist->next; } if( clist != NULL ) { /* block is defined in called module */ if( comcheck_by_name ) { /* Exact common: find the var */ /* It is not yet an error unless the block is also long enough to include the variable and the variable is modified in either place. */ if( a2[i].common_index <= clist->numargs ) { /* Don't forget that index goes from 1 to numargs.*/ int j = a2[i].common_index - 1; common_alias_name = clist->com_list_array[j].name; common_modified_as_arg = a1[i].set_flag; common_assigned_as_arg = a1[i].assigned_flag; common_modified_as_com = clist->com_list_array[j].set; common_assigned_as_com = clist->com_list_array[j].assigned; } } else { /* Inexact common: just see if block or variable is modified. Don't set assigned_as_com to always say "may be". */ common_modified_as_arg = a1[i].set_flag; common_assigned_as_arg = a1[i].assigned_flag; common_modified_as_com = clist->any_set; common_assigned_as_com = FALSE; } } /* clist != NULL */ } /* a2[i].common_block != 0 */ arg_common_modified = ((common_modified_as_arg || common_modified_as_com) && !a2[i].array_var); array_common_modified = ((common_modified_as_arg || common_modified_as_com) && a2[i].array_var); #ifdef DEBUG_PGSYMTAB if(debug_latest) { (void)fprintf(list_fd, "\nUsage check: %s[%d] dummy asgnd %d ubs %d actual lvalue %d set %d do %d", args1->module->name, i+1, a1[i].assigned_flag, a1[i].used_before_set, a2[i].is_lvalue, a2[i].set_flag, a2[i].active_do_var); } #endif if( (usage_arg_modified && nonlvalue_out) || (usage_var_uninitialized && nonset_in)|| (usage_arg_alias_modified && arg_alias_modified)|| (usage_array_alias_modified && array_alias_modified)|| (usage_arg_common_modified && arg_common_modified)|| (usage_array_common_modified && array_common_modified)|| (usage_do_var_modified && do_var_modified) ) { if(argcmp_error_head(name,args1,"argument usage mismatch")) break; /* Usage case 1: Modifying arg that is constant or expression. */ if(usage_arg_modified && nonlvalue_out) { arg_error_report(args1,"Dummy arg",i,"is modified"); arg_error_report(args2,"Actual arg",i,"is const or expr"); } /* Usage case 2: Using arg that is not set. */ if(usage_var_uninitialized && nonset_in) { arg_error_report(args1,"Dummy arg",i,"is used before set"); arg_error_report(args2,"Actual arg",i,"is not set"); } /* Usage case 3: Modifying arg that is the same as another arg. */ if((usage_arg_alias_modified && arg_alias_modified)|| (usage_array_alias_modified && array_alias_modified)) { arg_error_report(args1,"Dummy arg",i, a1[i].assigned_flag? "is modified": "may be modified"); arg_error_report(args2,"Actual arg",i, a2[i].array_var? "may be same as arg": "same as arg"); msg_tail(ulongtostr((unsigned long)(long)(a2[i].same_as+1))); msg_tail(":"); msg_tail(a2[a2[i].same_as].name); } /* Usage case 4: Modifying arg that is the same as a variable in common. */ if((usage_arg_common_modified && arg_common_modified)|| (usage_array_common_modified && array_common_modified)) { char locspec[10+3*sizeof(a2[i].common_index)]; if( comcheck_by_name ) { (void)sprintf(locspec,"%ld:",a2[i].common_index); } else { (void)sprintf(locspec,"somewhere"); } arg_error_report(args1,"Dummy arg",i,"is aliased to common var"); msg_tail(locspec); msg_tail(comcheck_by_name?common_alias_name: ""); msg_tail("in block"); msg_tail(a2[i].common_block->name); msg_tail(common_modified_as_com? (common_assigned_as_com? "which is modified": "which may be modified"): ""); if( common_modified_as_arg ) { arg_error_report(args1,"Dummy arg",i, common_assigned_as_arg? "is modified": "may be modified"); } arg_error_report(args2,"Actual arg",i,"is in common block"); msg_tail(a2[i].common_block->name); } /* Usage case 5: Modifying arg that is an active DO index variable. */ if( usage_do_var_modified && do_var_modified ) { arg_error_report(args1,"Dummy arg",i, a1[i].assigned_flag? "is modified": "may be modified"); arg_error_report(args2,"Actual arg",i, "is active DO index"); } } } } }/*end if( (usage_arg...) && args->is_defn) */ }/* arg_array_cmp */ void check_arglists(VOID) /* Scans global symbol table for subprograms */ { /* and finds subprogram defn if it exists */ int i; ArgListHeader *defn_list, *alist; for (i=0; iis_defn){ /* report multiple defns */ if(usage_ext_multiply_defined && num_defns > 0) { if(num_defns == 1) { cmp_error_count = 0; (void)argcmp_error_head(glob_symtab[i].name, defn_list, "multiply defined"); sub_error_report(defn_list,"Defined"); } sub_error_report(list_item,"Defined"); } ++num_defns; defn_list = list_item; /* Use last defn found */ } else { /* ! list_item->is_defn */ /* Here treat use as actual arg like call */ if(list_item->is_call || list_item->actual_arg){ /* Use last call by a visited or nonlibrary module as defn if no defn found */ if(!defn_list->is_defn && !irrelevant(list_item) ) defn_list = list_item; } } list_item = list_item->next; } if(num_defns == 0){ /* If no defn found, and all calls are from unvisited library modules, skip. */ if(irrelevant(defn_list)) continue; /* If no definitions found, report error */ if( (usage_ext_undefined && glob_symtab[i].used_flag) || (usage_ext_declared_only && !glob_symtab[i].used_flag) ) { cmp_error_count = 0; (void)argcmp_error_head(glob_symtab[i].name, defn_list, glob_symtab[i].used_flag? "never defined": "never defined nor invoked"); sub_error_report(defn_list, (defn_list->external_decl)?"Declared":"Invoked"); /* Warn if it seems it may just be an array they forgot to declare */ if(defn_list->numargs != 0 && datatype_of(defn_list->type) != type_SUBROUTINE && ! glob_symtab[i].declared_external) { if(novice_help) (void)fprintf(list_fd, "\n (possibly it is an array which was not declared)"); } } } /* If definition is found but module is not in call tree, report it unless -lib */ else{ /* num_defns != 0 */ if(!glob_symtab[i].visited && datatype_of(glob_symtab[i].type) != type_BLOCK_DATA && !glob_symtab[i].library_module && usage_ext_unused ) { cmp_error_count = 0; (void)argcmp_error_head(glob_symtab[i].name, defn_list, "never invoked"); sub_error_report(defn_list,"Defined"); } } /* Now check defns/invocations for consistency. If no defn, 1st invocation will serve. Here treat use as actual arg like call. Ignore calls & defns in unvisited library modules. */ if( argcheck_functype && (defn_list->is_defn || !defn_list->external_decl)) { cmp_error_count = 0; while(alist != NULL){ if(alist != defn_list && !alist->external_decl && !irrelevant(alist)) { int c1 = storage_class_of(defn_list->type), c2 = storage_class_of(alist->type), t1 = datatype_of(defn_list->type), t2 = datatype_of(alist->type), s1 = defn_list->size, s2 = alist->size, defsize1 = (s1 == size_DEFAULT), defsize2 = (s2 == size_DEFAULT), cmptype1= type_category[t1], cmptype2= type_category[t2]; /* If -portability, do not translate default sizes so they will never match explicit sizes. */ if(!(port_mixed_size || local_wordsize==0)) { if(defsize1) s1 = type_size[t1]; if(defsize2) s2 = type_size[t2]; } if(s1 < 0 || s2 < 0){ /*size_ADJUSTABLE or UNKNOWN*/ s1 = s2 = size_DEFAULT;/* suppress size warnings */ defsize1 = defsize2 = TRUE; } /* Check class, type, and size */ if( (c1 != c2) || (cmptype1 != cmptype2) || ( (s1 != s2) && /*exclude char size-only mismatch betw calls */ (t1 != type_STRING || defn_list->is_defn || alist->is_defn )) ){ if(argcmp_error_head(glob_symtab[i].name, defn_list, "invoked inconsistently")) break; if(cmp_error_count == 1) { sub_error_report(defn_list, defn_list->is_defn? "Defined": "Invoked"); msg_tail("as type"); msg_tail(typespec(t1,!defsize1,(long)s1, FALSE, 0L)); } sub_error_report(alist, alist->is_defn? "Defined": "Invoked"); msg_tail("as type"); msg_tail(typespec(t2,!defsize2,(long)s2, FALSE, 0L)); } } alist = alist->next; }/* end while(alist != NULL) */ }/* end if(defn) */ alist = glob_symtab[i].info.arglist; while(alist != NULL){ /* Here we require true call, not use as actual arg. Also, do not compare multiple defns against each other. */ if(alist != defn_list && (defn_list->is_defn || defn_list->is_call) && (alist->is_call && !irrelevant(alist)) ){ arg_array_cmp(glob_symtab[i].name,defn_list,alist); } alist = alist->next; }/* end while(alist != NULL) */ }/* end else */ }/* end for (i=0; i #include #include "ftnchek.h" #include "symtab.h" #include "pgsymtab.h" /* Local routines defined. */ PROTO(PRIVATE int block_is_volatile,( ComListHeader *clist, Gsymtab *main_module )); PROTO(PRIVATE ComListHeader * com_tree_check,( Gsymtab *comblock, Gsymtab *module, int level )); PROTO(PRIVATE void visit_child,( Gsymtab *gsymt, int level )); PROTO(PRIVATE void visit_child_reflist,( Gsymtab *gsymt )); #ifdef VCG_SUPPORT PROTO(PRIVATE void visit_child_vcg,( Gsymtab *gsymt, int level )); #endif PROTO(PRIVATE ChildList * sort_child_list,( ChildList *child_list )); PROTO(PRIVATE void print_crossrefs,( void )); PROTO(PRIVATE void print_cycle_nodes,( Gsymtab gsymt[], int nsym, Gsymtab *node_list[], int node_count, int parent_count[] )); PROTO(PRIVATE int toposort,( Gsymtab gsymt[], int nsym )); PROTO(PRIVATE ComListHeader * com_declared_by,( Gsymtab *comblock, Gsymtab *module )); PROTO(PRIVATE void print_modules,( unsigned n, Gsymtab *list[] )); /* Things used for common undef check */ PRIVATE int com_tree_error; PRIVATE int numvisited; /********************************************************************************** * * append_extension (imported as-is from ftnchek.c ftnchek 3.1.1) * * MODE_DEFAULT_EXT: Adds extension to file name s if * none is present, and returns a pointer to the * new name. If extension was added, space is allocated * for the new name. If not, simply returns pointer * to original name. * MODE_REPLACE_EXT: same, except given extension replaces given one if any. * * Returns char * to newly allocated name string. * **********************************************************************************/ #define MODE_DEFAULT_EXT 1 #define MODE_REPLACE_EXT 2 PRIVATE char * #if HAVE_STDC append_extension( char *s, char *ext, int mode ) #else /* K&R style */ append_extension( s, ext, mode ) char *s, *ext; int mode; #endif /* HAVE_STDC */ { int i, len; char *newname; #ifdef OPTION_PREFIX_SLASH /* set len=chars to NUL or start * of /opt */ for ( len = 0; s[len] != '\0' && s[len] != '/'; len++ ) continue; #else len = ( unsigned ) strlen( s ); #endif /* * Search backwards till find the dot, but do not search past directory * delimiter */ for ( i = len - 1; i > 0; i-- ) { if ( s[i] == '.' #ifdef UNIX || s[i] == '/' #endif #ifdef VMS || s[i] == ']' || s[i] == ':' #endif #ifdef MSDOS || s[i] == '\\' || s[i] == ':' #endif ) break; } if ( mode == MODE_REPLACE_EXT ) { if ( s[i] == '.' ) /* declare length = up to the dot */ len = i; newname = ( char * ) malloc( ( unsigned ) ( len + ( unsigned ) strlen( ext ) + 1 ) ); ( void ) strncpy( newname, s, len ); ( void ) strcpy( newname + len, ext ); } else { /* MODE_DEFAULT_EXT */ #ifdef OPTION_PREFIX_SLASH /* * create new string if new ext or trailing /option */ if ( s[i] != '.' || s[len] != '\0' ) { if ( s[i] != '.' ) { /* no extension given */ newname = ( char * ) malloc( ( unsigned ) ( len + ( unsigned ) strlen( ext ) + 1 ) ); ( void ) strncpy( newname, s, len ); ( void ) strcpy( newname + len, ext ); } else { /* extension given but /option * follows */ newname = ( char * ) malloc( ( unsigned ) ( len + 1 ) ); ( void ) strncpy( newname, s, len ); } } #else if ( s[i] != '.' ) { newname = ( char * ) malloc( ( unsigned ) ( len + ( unsigned ) strlen( ext ) + 1 ) ); ( void ) strcpy( newname, s ); ( void ) strcat( newname, ext ); } #endif else { newname = s; /* use as is */ } } return newname; } void com_xref_list(VOID) /* Print cross-reference list of com blocks */ { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ Gsymtab **gsymlist,**blocklist; #else Gsymtab *gsymlist[GLOBSYMTABSZ],*blocklist[GLOBSYMTABSZ]; #endif int i,numentries,numblocks; ComListHeader *cmlist; #ifdef DYNAMIC_TABLES if( (gsymlist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL ||(blocklist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL ) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for common block list"); } #endif for(i=numblocks=0;i 0) { sort_gsymbols(blocklist,numblocks); /* Sort the common block list */ (void)fprintf(list_fd, "\n Common block cross-reference list:\n"); for(i=0; iinfo.comlist; numentries=0; #ifdef DEBUG_COM_USAGE (void)fprintf(list_fd, "\n Common Block %s:\n",blocklist[i]->name ); #endif while (cmlist != NULL){ /* loop thru declarations */ if(! irrelevant(cmlist) && (cmlist->any_used || cmlist->any_set)) gsymlist[numentries++] = cmlist->module; #ifdef DEBUG_COM_USAGE print_comvar_usage(cmlist); #endif cmlist = cmlist->next; } /* end of while */ if (numentries >0){ /* print modules that declare this block*/ (void)fprintf(list_fd, "\nCommon Block %s used in:\n" , blocklist[i]->name ); /* Sort modules that declare this block */ sort_gsymbols(gsymlist,numentries); print_modules((unsigned)numentries,gsymlist); } /* end of if numentries >0 */ } /* end of for i = 0 to numblocks */ (void)fprintf(list_fd,"\n"); } /* end of if numblocks > 0*/ } void visit_children(VOID) { int i, num_mains, /* number of main programs */ num_roots; /* number of uncalled nonlibrary modules */ Gsymtab* main_module; num_roots = 0; for(i=0; isaved || (t=datatype_of(clist->module->type)) == type_BLOCK_DATA || (t == type_PROGRAM && clist->module == main_module)) { return FALSE; } clist = clist->next; } return TRUE; } /* If block declared by module, returns pointer to the comlist header which describes it. Otherwise returns NULL. */ PRIVATE ComListHeader * #if HAVE_STDC com_declared_by(Gsymtab *comblock, Gsymtab *module) #else /* K&R style */ com_declared_by(comblock,module) Gsymtab *comblock,*module; #endif /* HAVE_STDC */ { ComListHeader *clist=comblock->info.comlist; while(clist != NULL) { if(clist->module == module) { if(clist->saved) { com_tree_error = TRUE; /* not so, but causes bailout */ } return clist; } clist = clist->next; } return NULL; } /* Checks whether common block can become undefined between activations of some module that declares it. Should only be done for blocks that are volatile, i.e. that are not SAVED or declared in main or block_data. Rules used are: (1) Block is declared in two subtrees whose roots are called by a given module, and not in the given module itself or above. (2) Block is declared and elements accessed in a module called by a given module, and not declared in the module itself or above. (Module that declares it but does not access elements, can be holding the block active for its children.) Since Rule 2 is likely to be wrong often due to Ftnchek's lack of knowledge about whether a routine is invoked more than once, it is suppressed for now. */ PRIVATE ComListHeader * #if HAVE_STDC com_tree_check(Gsymtab *comblock, Gsymtab *module, int level) #else /* K&R style */ com_tree_check(comblock,module,level) Gsymtab *comblock,*module; int level; #endif /* HAVE_STDC */ { ComListHeader *clist; /* The following only protects against recursion. It is not a full-fledged cycle detector just a stopper. */ if(level > numvisited) { (void)fprintf(list_fd, "\nWarning: Call tree has a cycle containing module %s\n", module->name); com_tree_error = TRUE; return NULL; } /* If this module declares the block, return its clist */ if( (clist=com_declared_by(comblock,module)) != NULL) { #ifdef DEBUG_SAVE (void)fprintf(list_fd,"\n%s declared by %s",comblock->name,module->name); #endif return clist; } else { /* Otherwise see if it is declared in subtree */ int any_child_declares_it; ComListHeader *declaring_clist, *this_clist; ChildList *child_list; any_child_declares_it=FALSE; declaring_clist=NULL; /* Scan list of children */ child_list = (module->internal_entry?module->link.module:module) ->link.child_list; while(child_list != NULL) { this_clist = com_tree_check(comblock,child_list->child,level+1); /* Error was detected below: bail out */ if(com_tree_error) { return NULL; } else if(this_clist != NULL) { /* Subtree contains the block */ if(any_child_declares_it /* Rule 1 */ #ifdef COMTREE_RULE_2 || (this_clist->any_used || this_clist->any_set) /* Rule 2 */ #endif ){ cmp_error_count = 0; (void)comcmp_error_head(comblock->name,this_clist, "may become undefined between activations"); com_error_report(this_clist,"Declared"); if(declaring_clist != NULL && declaring_clist != this_clist) { com_error_report(declaring_clist,"Declared"); } (void)fprintf(list_fd,"\n "); (void)fprintf(list_fd, "Not declared in parent module %s", module->name); com_tree_error = TRUE; return NULL; } else { any_child_declares_it = TRUE; declaring_clist = this_clist; } } child_list = child_list->next; } /* If any subtree declares it, say so */ return declaring_clist; } } /* Depth-first search of call tree */ PRIVATE void #if HAVE_STDC visit_child(Gsymtab *gsymt, int level) #else /* K&R style */ visit_child(gsymt,level) Gsymtab *gsymt; int level; #endif /* HAVE_STDC */ { static char fmt[]="%000s"; /* Variable format for indenting names */ ChildList *child_list; static int terminate_href = 0; char *fname=NULL; ArgListHeader *arghdr; if(print_call_tree) { if ( htmlcalltree_fd ) { /* Look up defn arglist entry to find the filename where this guy is defined. */ for ( arghdr = gsymt->info.arglist; arghdr; arghdr=arghdr->next ) { if ( arghdr->is_defn && arghdr->filename ) { fname = append_extension( arghdr->filename, DEF_HTML_EXTENSION, MODE_REPLACE_EXT ); } } if ( terminate_href ) { terminate_href = 0; ( void ) fprintf( htmlcalltree_fd, "" ); } ( void ) fprintf( htmlcalltree_fd, "\n" ); } (void)fprintf(list_fd,"\n"); if(level > 0) { (void)sprintf(fmt,"%%%ds",level*4); /* indent 4 spaces per nesting level */ (void)fprintf(list_fd,fmt,""); if ( htmlcalltree_fd ) { if ( fname ) { if ( ! gsymt->internal_entry ) ( void ) fprintf( htmlcalltree_fd, "%*.*s", level * 4, level * 4, " ", fname, gsymt->name ); else ( void ) fprintf( htmlcalltree_fd, "%*.*s", level * 4, level * 4, " ", fname, gsymt->link.module->name ); terminate_href = 1; } else { ( void ) fprintf( htmlcalltree_fd, "%*.*s", level * 4, level * 4, " " ); terminate_href = 0; } } } if(gsymt->internal_entry) { (void)fprintf(list_fd,"%s entry ",gsymt->link.module->name); if ( htmlcalltree_fd ) ( void ) fprintf( htmlcalltree_fd, "%s entry ", gsymt->link.module->name ); } (void)fprintf(list_fd,"%s",gsymt->name); if ( htmlcalltree_fd ) { if ( level == 0 ) { if ( gsymt->internal_entry ) { if(fname) ( void ) fprintf( htmlcalltree_fd, "%s", fname, gsymt->link.module->name, gsymt->name ); } else { ( void ) fprintf( htmlcalltree_fd, "%s", fname, gsymt->name, gsymt->name ); } terminate_href = 1; } else ( void ) fprintf( htmlcalltree_fd, "%s", gsymt->name ); } if(fname) free( fname ); } /* Visit its unvisited children. Note that children of internal entry are taken as those of its superior module. */ child_list = (gsymt->internal_entry?gsymt->link.module:gsymt) ->link.child_list; /* If already visited, do not visit its children, but give note to reader if it has some. */ if(call_tree_prune && gsymt->visited) { if(print_call_tree && child_list != NULL) { (void)fprintf(list_fd," (see above)"); if ( htmlcalltree_fd ) { if ( terminate_href ) { ( void )fprintf( htmlcalltree_fd, "" ); terminate_href=0; } ( void ) fprintf( htmlcalltree_fd, " (see above)" ); } } } else { /* Mark node as visited */ gsymt->visited = TRUE; /* Record that containing module is visited via this entry point*/ if(gsymt->internal_entry) gsymt->link.module->visited_somewhere = TRUE; else gsymt->visited_somewhere = TRUE; if ( print_call_tree ) { if ( terminate_href ) { ( void ) fprintf( htmlcalltree_fd, "" ); terminate_href = 0; } } ++level; /* move to next level */ while(child_list != NULL) { visit_child(child_list->child,level); child_list = child_list->next; } } if ( terminate_href ) { ( void ) fprintf( htmlcalltree_fd, "" ); terminate_href = 0; } } /*** visit_child_reflist Same as visit_child, except it does a breadth-first search of the call tree, and prints the results in the form of a who-calls-who list. Contributed by: Gerome Emmanuel : Esial Troisieme annee Projet commun Esial / Ecole des mines INERIS E-mail: gerome@mines.u-nancy.fr Date received: 20-APR-1993 Modified slightly to make it compatible as alternative to call-tree and to make output format consistent. ***/ PRIVATE void #if HAVE_STDC visit_child_reflist(Gsymtab *gsymt) #else /* K&R style */ visit_child_reflist(gsymt) Gsymtab *gsymt; #endif /* HAVE_STDC */ { ChildList *child_list; child_list = (gsymt->internal_entry?gsymt->link.module:gsymt) ->link.child_list; /* If already visited, do not visit its children, but give note to reader if it has some. */ if(!gsymt->visited) { /* Mark node as visited */ gsymt->visited = TRUE; /* Record that containing module is visited via this entry point*/ if(gsymt->internal_entry) gsymt->link.module->visited_somewhere = TRUE; else gsymt->visited_somewhere = TRUE; if(print_ref_list) /* Print callees neatly if desired */ { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ Gsymtab **gsymlist; #else Gsymtab *gsymlist[GLOBSYMTABSZ]; #endif ChildList *child_list2; unsigned numcalls; #ifdef DYNAMIC_TABLES if( (gsymlist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for reference list"); } #endif (void)fprintf(list_fd,"\n%s calls:",gsymt->name); numcalls = 0; child_list2 = child_list; while(child_list2 != NULL) { gsymlist[numcalls++] = child_list2->child; child_list2 = child_list2->next; } if(numcalls == (unsigned)0) (void)fprintf(list_fd," none"); else { (void)fprintf(list_fd,"\n"); print_modules(numcalls,gsymlist); } #ifdef DYNAMIC_TABLES (void) cfree(gsymlist); #endif } while(child_list != NULL) { visit_child_reflist(child_list->child); child_list = child_list->next; } } } /* visit_child_vcg: Same as visit_child_reflist except it provides output suitable for visualisation of the call graph, using the vcg graph visualisation program. VCG is freely available from ftp.cs.uni-sb.de and elsewhere. It was written by G. Sander of the University of Saarland, Germany. Contributed by: P.A.Rubini@cranfield.ac.uk Date: 3-APR-1995 */ #ifdef VCG_SUPPORT PRIVATE void #if HAVE_STDC visit_child_vcg(Gsymtab *gsymt, int level) #else /* K&R style */ visit_child_vcg(gsymt,level) Gsymtab *gsymt; int level; #endif /* HAVE_STDC */ { ArgListHeader *arglist; ChildList *child_list; child_list = (gsymt->internal_entry?gsymt->link.module:gsymt) ->link.child_list; /* If already visited, do not visit its children, but give note to reader if it has some. */ if(!gsymt->visited) { /* Mark node as visited */ gsymt->visited = TRUE; /* Record that containing module is visited via this entry point*/ if(gsymt->internal_entry) gsymt->link.module->visited_somewhere = TRUE; else gsymt->visited_somewhere = TRUE; if(print_vcg_list) /* Print callees neatly if desired */ { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ Gsymtab **gsymlist; #else Gsymtab *gsymlist[GLOBSYMTABSZ]; #endif ChildList *child_list2; int j; int numcalls; #ifdef DYNAMIC_TABLES if( (gsymlist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for reference list"); } #endif numcalls = 0; child_list2 = child_list; while(child_list2 != NULL) { gsymlist[numcalls++] = child_list2->child; child_list2 = child_list2->next; } arglist = gsymt->info.arglist; while(arglist != NULL) { if ( arglist->is_defn ) { (void)fprintf(vcg_fd,"\ngraph: {\ntitle:\"[%s]\"\n",gsymt->name); (void)fprintf(vcg_fd, "node: { title: \"%s\" label: \"%s \\n (%s)\" info1:\"%d\" }\n", gsymt->name,gsymt->name, arglist->filename, level ); if(numcalls != 0) { for (j=0;jinfo.arglist; while(arglist != NULL) { if ( arglist->is_defn ) { (void)fprintf(vcg_fd, "edge: { sourcename: \"%s\" targetname: \"%s\" class:%d} \n", gsymt->name,gsymlist[j]->name, level ); break ; } arglist = arglist->next; } } } break; } arglist = arglist->next; } #ifdef DYNAMIC_TABLES (void) cfree(gsymlist); #endif ++level; /* move to next level */ /* while(child_list != NULL) { visit_child_vcg(child_list->child,level); child_list = child_list->next; } */ for (j=0;jinfo.arglist; while(arglist != NULL) { if ( arglist->is_defn ) { visit_child_vcg(gsymlist[j],level); break ; } arglist = arglist->next; } } (void)fprintf(vcg_fd,"}\n"); } } } #endif /* VCG_SUPPORT */ PRIVATE void print_crossrefs(VOID) { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ Gsymtab **gsymlist, **modulelist; #else Gsymtab *gsymlist[GLOBSYMTABSZ], *modulelist[GLOBSYMTABSZ]; #endif ArgListHeader *args; int i,numentries; int numcalls; #ifdef DYNAMIC_TABLES if( (gsymlist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL || (modulelist=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for crossref list"); } #endif /* Gather up all relevant subprograms */ for(i=0,numentries=0; i 0) { (void)fprintf(list_fd,"\n\n Cross-reference list:\n"); /* Sort the subprograms */ sort_gsymbols(gsymlist,numentries); /* Print their callers */ for(i=0; iinternal_entry) (void)fprintf(list_fd,"%s entry ",gsymlist[i]->link.module->name); (void)fprintf(list_fd,"%s",gsymlist[i]->name); numcalls=0; args = gsymlist[i]->info.arglist; while(args != NULL) { /* Gather up callers */ if(!args->is_defn) { /* (eliminate duplicates) */ if(numcalls==0 || args->module != modulelist[numcalls-1]) modulelist[numcalls++] = args->module; } args = args->next; } if(numcalls == 0) { (void)fprintf(list_fd," not called"); if(datatype_of(gsymlist[i]->type) == type_PROGRAM) (void)fprintf(list_fd," (main program)"); } else { (void)fprintf(list_fd," called by:\n"); sort_gsymbols(modulelist,numcalls); /* Sort the callers */ print_modules(numcalls,modulelist); } } (void)fprintf(list_fd,"\n"); } #ifdef DYNAMIC_TABLES (void) cfree(gsymlist); (void) cfree(modulelist); #endif } /* Topological sort of the call tree. Based closely on algorithm on page 314 of Horowitz and Sahni, Fundamentals of Data Structures. Returns TRUE if successful, FALSE if failed due to a cycle being detected. */ PRIVATE int #if HAVE_STDC toposort(Gsymtab *gsymt, int nsym) #else /* K&R style */ toposort(gsymt,nsym) Gsymtab gsymt[]; int nsym; #endif /* HAVE_STDC */ { int i,num_nodes, node_count; ChildList *child_list; Gsymtab *child_module; /* Called module's top entry point */ #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ int *parent_count; Gsymtab **node_list; #else int parent_count[GLOBSYMTABSZ]; Gsymtab *node_list[GLOBSYMTABSZ]; #endif #ifdef DYNAMIC_TABLES if( (parent_count=(int *)calloc(glob_symtab_top,sizeof(int))) == (int *)NULL || (node_list=(Gsymtab **)calloc(glob_symtab_top,sizeof(Gsymtab *))) == (Gsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for module sort"); } #endif /* Initialize array of links/counts */ for(i=0; ichild)->internal_entry ) child_module = child_module->link.module; ++parent_count[child_module - gsymt]; /* index into table */ child_list = child_list->next; } } } { /* Start of the sort */ int top=0; int j,k; for(i=0; ichild)->internal_entry ) child_module = child_module->link.module; k = child_module - gsymt; if(--parent_count[k] == 0) { /* Now parentless? Stack it*/ parent_count[k] = top; top = k+1; } child_list = child_list->next; } } }/*end sort*/ if(print_topo_sort && node_count > 0) { (void)fprintf(list_fd,"\nList of called modules in prerequisite order:\n"); print_modules(node_count,node_list); (void)fprintf(list_fd,"\n"); } #ifdef DYNAMIC_TABLES (void) cfree(parent_count); (void) cfree(node_list); #endif return (node_count==num_nodes); /* Success = TRUE */ } /* Traces back to find nodes not listed in topological sort. They are the cycle nodes and their descendants. */ PRIVATE void #if HAVE_STDC print_cycle_nodes(Gsymtab *gsymt, int nsym, Gsymtab **node_list, int node_count, int *parent_count) #else /* K&R style */ print_cycle_nodes(gsymt,nsym,node_list,node_count,parent_count) Gsymtab gsymt[]; int nsym; Gsymtab *node_list[]; int node_count; int parent_count[]; #endif /* HAVE_STDC */ { int i; int k=node_count; for(i=0; i node_count) (void)fprintf(list_fd," containing some of the following modules:\n"); print_modules(k-node_count,node_list+node_count); } /* Insertion sort of child list. Also removes duplicates which can be introduced via multiple defns or via project files. */ PRIVATE ChildList * #if HAVE_STDC sort_child_list(ChildList *child_list) #else /* K&R style */ sort_child_list(child_list) ChildList *child_list; #endif /* HAVE_STDC */ { if( call_tree_sort ) { ChildList *front,*prev,*next,*cl=child_list; Gsymtab *temp; prev = NULL; while(cl != NULL) { /* Scan thru list for lexicographically lowest name */ front=cl; for(next=cl->next; next != NULL; next = next->next) { if(strcmp(front->child->name,next->child->name) > 0) { front = next; } } /* Swap child pointers so front is first */ if(front != cl) { temp = front->child; front->child = cl->child; cl->child = temp; } /* If duplicate, remove from list */ if(prev != NULL && prev->child == cl->child) prev->next = cl->next; else prev = cl; cl = cl->next; } return child_list; } else /* put children in program order, i.e. reverse the list */ { ChildList *curr,*next,*temp; if(child_list == NULL) return child_list; curr = child_list; next = curr->next; while(next != NULL) { temp = next->next; next->next = curr; /* switch the pointers to point in reverse */ curr = next; next = temp; } child_list->next = NULL; /* former head is now tail */ return curr; /* and curr now points to new head */ } } PRIVATE void #if HAVE_STDC print_modules(unsigned int n, Gsymtab **list) /* formatting of module names */ #else /* K&R style */ print_modules(n,list) /* formatting of module names */ unsigned n; Gsymtab *list[]; #endif /* HAVE_STDC */ { COLNO_t col=0; unsigned len,j; for (j=0;jinternal_entry) { len=strlen(list[j]->link.module->name); col+= len= (len<=10? 10:len) +9; if (col >78){ fprintf(list_fd, "\n"); col = len; } /* end of if */ fprintf(list_fd," %10s entry",list[j]->link.module->name); len=strlen(list[j]->name)+1; col+= len; if (col >78){ fprintf(list_fd, "\n"); col = len; } /* end of if */ fprintf(list_fd," %s",list[j]->name); } else { len=strlen(list[j]->name); col+= len= (len<=10? 10:len) +3; if (col >78){ (void)fprintf(list_fd, "\n"); col = len; } /* end of if */ (void)fprintf(list_fd," %10s",list[j]->name); } } /* end of for */ } /** End of common block and variable usage checks **/ ftnchek-3.3.1/comcheck.c0000644000031000002260000005512607342221254015510 0ustar moniotstaff00000000000000/* $Id: comcheck.c,v 1.8 2001/08/26 16:24:12 moniot Rel $ Routines to check common block agreement */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: check_com_usage() Checks usage status of common blocks & vars */ #include #include #include "ftnchek.h" #include "symtab.h" #include "pgsymtab.h" /* Local routines defined. */ PROTO(PRIVATE void check_nameclash,(void)); PROTO(PRIVATE void com_block_usage,( char *name, ComListHeader *cl1 )); PROTO(PRIVATE void com_cmp_lax,( char *name, ComListHeader *c1, ComListHeader *c2 )); PROTO(PRIVATE void com_cmp_strict,( char *name, ComListHeader *c1, ComListHeader *c2 )); PROTO(PRIVATE void com_element_usage,( char *name, ComListHeader *r_cl, ComListElement *r_list, int r_num )); PROTO(PRIVATE void print_marked_com_elts,(ComListElement *r_list, int r_num)); #ifdef DEBUG_COM_USAGE PROTO(PRIVATE void print_comvar_usage,( ComListHeader *comlist )); #endif #define pluralize(n) ((n)==1? "":"s") /* singular/plural suffix for n */ void check_comlists(VOID) /* Scans global symbol table for common blocks */ { int i; int model_n; ComListHeader *first_list, *model, *clist; /* Check for name clashes with subprograms */ if(f77_common_subprog_name) { check_nameclash(); } if(COMCHECK_OFF) return; for (i=0; inumargs; clist = model; while( (clist=clist->next) != NULL ){ if(clist->numargs >= model_n /* if tie, use earlier */ /* also if model is from an unvisited library module, take another */ || irrelevant(model) ) { model = clist; model_n = clist->numargs; } } if( irrelevant(model) ) continue; /* skip if irrelevant */ /* Check consistent SAVEing of block: If SAVEd in one module, must be SAVEd in all. Main prog is an exception: SAVE ignored there. */ { ComListHeader *saved_list, *unsaved_list; saved_list = unsaved_list = (ComListHeader *)NULL; clist = first_list; while( clist != NULL ){ if(!irrelevant(clist) && clist->module->type != type_byte(class_SUBPROGRAM,type_PROGRAM) ) { if(clist->saved) saved_list = clist; else unsaved_list = clist; } clist = clist->next; } if(saved_list != (ComListHeader *)NULL && unsaved_list != (ComListHeader *)NULL) { cmp_error_count = 0; (void)comcmp_error_head(glob_symtab[i].name, saved_list, "not SAVED consistently"); com_error_report(saved_list,"is SAVED"); com_error_report(unsaved_list,"is not SAVED"); } } /* Now check agreement of common lists */ clist = first_list; while( clist != NULL ){ if(clist != model && !irrelevant(clist)) { if(comcheck_by_name) com_cmp_strict(glob_symtab[i].name,model,clist); else com_cmp_lax(glob_symtab[i].name,model,clist); } clist = clist->next; } } } } /* check_comlists */ /* Common-list check for comcheck_type or comcheck_length (formerly strictness levels 1 & 2) */ PRIVATE void #if HAVE_STDC com_cmp_lax(char *name, ComListHeader *c1, ComListHeader *c2) #else /* K&R style */ com_cmp_lax(name,c1,c2) char *name; ComListHeader *c1,*c2; #endif /* HAVE_STDC */ { int i1,i2, /* count of common variables in each block */ done1,done2, /* true when end of block reached */ type1,type2; /* type of variable presently in scan */ unsigned long len1,len2, /* length of variable remaining */ size1,size2, /* unit size of variable */ word1,word2, /* number of "words" scanned */ words1,words2, /* number of "words" in block */ defsize1,defsize2, /* default size used? */ jump; /* number of words to skip next in scan */ int byte_oriented=FALSE, /* character vs numeric block */ type_clash; /* flag for catching clashes */ int n1=c1->numargs,n2=c2->numargs; /* variable count for each block */ ComListElement *a1=c1->com_list_array, *a2=c2->com_list_array; /* Count words in each list */ words1=words2=0; for(i1=0; i1numargs, n2 = c2->numargs; ComListElement *a1 = c1->com_list_array, *a2 = c2->com_list_array; if(comcheck_length) { n = (n1 > n2) ? n2: n1; if(n1 != n2){ char msg[15+3*sizeof(n1)]; cmp_error_count = 0; (void)comcmp_error_head(name,c1,"varying length:"); (void)sprintf(msg,"Has %d variable%s", n1,pluralize(n1)); com_error_report(c1,msg); (void)sprintf(msg,"Has %d variable%s", n2,pluralize(n2)); com_error_report(c2,msg); } } #ifdef DEBUG_PGSYMTAB if(debug_latest){ (void)fprintf(list_fd,"block %s",name); (void)fprintf(list_fd,"\n\t1=in module %s line %u file %s (%s)", c1->module->name, c1->line_num, c1->topfile c1->filename); (void)fprintf(list_fd,"\n\t2=in module %s line %u file %s (%s)", c2->module->name, c2->line_num, c2->topfile, c2->filename); } #endif if(comcheck_type) { cmp_error_count = 0; for (i=0; iinfo.comlist; cmp_error_count = 0; (void)comcmp_error_head(hashtab[i].name,clh, "has same name as a subprogram (nonstandard)"); com_error_report(clh,"Declared as common block"); for(alist=hashtab[i].glob_symtab->info.arglist;alist!=NULL; alist=alist->next) { if(alist->is_defn) { break; } } /* if not declared: use first reference */ if(alist==NULL) { sub_error_report( hashtab[i].glob_symtab->info.arglist, "Referenced as subprogram"); } else { sub_error_report(alist, "Declared as subprogram"); } } } } #ifdef DEBUG_COM_USAGE PRIVATE void print_comvar_usage(comlist) ComListHeader *comlist; { int i, count; ComListElement *c; count = comlist->numargs; c = comlist->com_list_array; /* prints out caller module and any_used, any_set flags in CLhead */ (void)fprintf(list_fd, "\nModule %s any_used %u any_set %u\n", comlist->module->name, comlist->any_used, comlist->any_set); if((comlist->any_used || comlist-> any_set||1) ){ for (i=0; inumargs; ref_cl= cl1; cur_cl = cl1; while (cur_cl!=NULL){ /* traverses CLheads */ if(! irrelevant(cur_cl) ) { if (cur_cl->any_used){ /* stores TRUE if any are TRUE */ block_any_used = TRUE; } if (cur_cl->any_set){ /* stores TRUE if any are TRUE */ block_any_set = TRUE; } if( ! (cur_cl->any_used || cur_cl->any_set) && ! cur_cl->module->defined_in_include ) { block_unused_somewhere = TRUE; } /* if any_set and any_used false after this loop block never used */ if (cur_cl->numargs > ref_n){ /* find largest array */ ref_cl = cur_cl; ref_n = cur_cl->numargs; } /* end of if */ }/* end if not irrelevant */ cur_cl = cur_cl->next; } if(irrelevant(ref_cl)) /* Block not declared by modules in calltree */ return; if(! (block_any_used || block_any_set) ) { /* Totally unused */ if(usage_com_block_unused) { cmp_error_count = 0; (void)comcmp_error_head(name,ref_cl,"unused anywhere"); } } else { /* If block used somewhere but not everywhere, report it. */ if(block_unused_somewhere && usage_com_block_unused) { cmp_error_count = 0; (void)comcmp_error_head(name,ref_cl, "unused in the following modules:"); cur_cl = cl1; while (cur_cl!=NULL){ /* traverses CLheads */ if(! irrelevant(cur_cl) ) { if( ! (cur_cl->any_used || cur_cl->any_set) && ! cur_cl->module->defined_in_include ) { com_error_report(cur_cl,"Unused"); } } cur_cl = cur_cl->next; } }/* end if block_unused_somewhere */ if(! comcheck_by_name) { /* If not variablewise checking, just give general warnings. */ if (!block_any_set){ if(usage_com_var_uninitialized) { cmp_error_count = 0; (void)comcmp_error_head(name,ref_cl, "No elements are set, but some are used."); } } if (!block_any_used){ if(usage_com_var_set_unused) { cmp_error_count = 0; (void)comcmp_error_head(name,ref_cl, "No elements are used, but some are set."); } } } else { /* strictness == 3 */ /* Now go thru the details for each element */ /* First, malloc up a temporary list and copy ref_cl and its list there so the original is not clobbered (used later in arg usage checks for common aliasing) */ ComListHeader *new_ref_cl; ComListElement *new_ref_list; if( (new_ref_cl=(ComListHeader *)calloc(1,sizeof(ComListHeader))) == (ComListHeader *)NULL || (new_ref_list=(ComListElement *)calloc(ref_cl->numargs,sizeof(ComListElement))) == (ComListElement *)NULL ) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot alloc space for common block ref list"); } *new_ref_cl = *ref_cl; /* Copy the header over to temporary */ ref_list = ref_cl->com_list_array; for(j=0; jnumargs; j++) { /* Copy the array as well */ new_ref_list[j] = ref_list[j]; } ref_cl = new_ref_cl; /* Now make the temporary the one we use */ ref_list = new_ref_list; ref_cl->any_used = block_any_used; ref_cl->any_set = block_any_set; /* traversing elements in arrays and storing OR'd values in largest array*/ cur_cl = cl1; while (cur_cl!=NULL){ if(! irrelevant(cur_cl) ) { c = cur_cl->com_list_array; n = cur_cl->numargs; for (j=0; jnext; } com_element_usage(name, ref_cl, ref_list, ref_n); /* Free up the temporary ref list */ free(new_ref_cl); free(new_ref_list); } } } /* Routine to print a list of common-block elements whose marked flag has been set. */ PRIVATE void #if HAVE_STDC print_marked_com_elts(ComListElement *r_list, int r_num) #else /* K&R style */ print_marked_com_elts(r_list, r_num) ComListElement *r_list; /* list of elements, some marked */ int r_num; /* number of elements in whole list */ #endif /* HAVE_STDC */ { int i; COLNO_t col; for (i=0,col=78; i 78 ) { (void)fprintf(list_fd,"\n "); col = 4+(int)strlen(r_list[i].name); } (void)fprintf(list_fd, " %s", r_list[i].name); } } } PRIVATE void #if HAVE_STDC com_element_usage(char *name, ComListHeader *r_cl, ComListElement *r_list, int r_num) #else /* K&R style */ com_element_usage(name, r_cl, r_list, r_num) char *name; ComListHeader *r_cl; ComListElement *r_list; int r_num; #endif /* HAVE_STDC */ { int i, warnings; if (r_cl->any_used || r_cl->any_set){ /* if false block not used */ if(usage_com_var_uninitialized) { warnings = 0; for (i=0; i 0) { cmp_error_count = 0; (void)comcmp_error_head(name,r_cl, "Elements used but never set:"); if(warnings == r_num) { (void)fprintf(list_fd," all"); } else { print_marked_com_elts(r_list, r_num); } } } if(usage_com_var_set_unused) { warnings = 0; for (i=0; i 0) { cmp_error_count = 0; (void)comcmp_error_head(name,r_cl, "Elements set but never used:"); if(warnings == r_num) { (void)fprintf(list_fd," all"); } else { print_marked_com_elts(r_list, r_num); } } } if(usage_com_var_unused) { warnings = 0; for (i=0; i 0) { cmp_error_count = 0; (void)comcmp_error_head(name,r_cl, "Elements never used, never set:"); if(warnings == r_num) { /* can't happen but keeps code alike */ (void)fprintf(list_fd," all"); } else { print_marked_com_elts(r_list, r_num); } } } } else{ /* This cannot be reached if called only when block is used */ if(usage_com_block_unused) { cmp_error_count = 0; (void)comcmp_error_head(name,r_cl, "not used."); } } /* any_used and any_set are both false */ } ftnchek-3.3.1/config-generic.h0000644000031000002260000000200710202535160016577 0ustar moniotstaff00000000000000 /* These sizeofs are used in determining what kind of int is needed to have enough bits to hold a flag field. It is OK for the sizes defined here to be smaller than the true sizes: at worst it will just use more space than necessary. The generic version uses values of 2, 4, 4 which should work fine on all recent-vintage 32-bit machines. */ #define SIZEOF_SHORT 2 #define SIZEOF_INT 4 #define SIZEOF_LONG 4 /* If unistd.h exists, use it to declare unlink in ftnchek.c */ #define HAVE_UNISTD_H 0 /* If stdlib.h exists, use it to declare malloc and friends */ #define HAVE_STDLIB_H 1 /* Use strings.h for strcasecmp() and strncasecmp() */ #define HAVE_STRINGS_H 1 /* Either memset or bzero is needed in forlex.c: memset is preferred. */ #define HAVE_MEMSET 1 #define HAVE_BZERO 0 /* Some compilers don't have strcasecmp but have stricmp or strcmpi instead. Set up suitable defines here. */ #define HAVE_STRCASECMP 0 #define HAVE_STRICMP 0 #define HAVE_STRCMPI 0 ftnchek-3.3.1/config-win32.h0000644000031000002260000000205707756000240016140 0ustar moniotstaff00000000000000/* config.h for some Windows-32 compilers. This works for Borland C/C++ Builder 5.0 and Microsoft Visual C++ 6.0. */ /* These sizeofs are used in determining what kind of int is needed to have enough bits to hold a flag field. It is OK for the sizes defined here to be smaller than the true sizes: at worst it will just use more space than necessary. The generic version uses values of 2, 4, 4 which should work fine on all recent-vintage 32-bit machines. */ #define SIZEOF_SHORT 2 #define SIZEOF_INT 4 #define SIZEOF_LONG 4 /* If unistd.h exists, use it to declare unlink in ftnchek.c */ #define HAVE_UNISTD_H 0 /* If stdlib.h exists, use it to declare malloc and friends */ #define HAVE_STDLIB_H 1 /* Either memset or bzero is needed in forlex.c: memset is preferred. */ #define HAVE_MEMSET 1 #define HAVE_BZERO 0 /* Some compilers don't have strcasecmp but have stricmp or strcmpi instead. Set up suitable defines here. */ #define HAVE_STRCASECMP 0 #define HAVE_STRICMP 1 #define HAVE_STRCMPI 1 ftnchek-3.3.1/exprtype.c0000644000031000002260000014040310201534151015574 0ustar moniotstaff00000000000000/* exprtype.c -- propagates datatype thru expressions. Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* I. */ /* $Id: exprtype.c,v 1.15 2005/02/07 00:38:01 moniot Exp $ Routines to propagate datatype through expressions. binexpr_type() Yields result type of binary expression. unexpr_type() Yields result type of unary expression. assignment_stmt_type() Checks assignment statement type. func_ref_expr(id,args,result) Forms token for a function invocation. primary_id_expr() Forms token for primary which is an identifier. stmt_fun_arg_cmp(t1,t2) Checks agreement between stmt func args. int int_power(x,n) Computes x**n for value propagation. init_typesizes(wdsize) Sets standard type sizes */ #include #include #include #include "ftnchek.h" #define EXPRTYPE #include "symtab.h" #include "symutils.h" #include "tokdefs.h" PROTO(PRIVATE char* sized_typename,( int type, long size )); PROTO(PRIVATE void report_mismatch,( const Token *term1, const Token *op, const Token *term2 )); PROTO(PRIVATE void report_type,( const Token *t )); PROTO(PRIVATE int int_power,( int x, int n )); PROTO(PRIVATE int eval_intrins,( IntrinsInfo *defn, Token *args )); /* shorthand for datatypes. must match those in symtab.h */ /* N.B. Also, the fact that type_DEFAULT=0 is assumed in size propagation code. */ #define E 0 /* Error for invalid type combos */ #define I 1 #define R 2 #define D 3 #define C 4 #define Z 5 #define L 6 #define S 7 #define H 8 #define NumT (H+1) /* number of types in tables below */ #define W 10 /* Warning for nonstandard type combos: W>NumT */ /* for + - / * ** ANSI book pp. 6-5,6-6 */ /* Mixed double+complex = double complex with warning, double + double complex is OK */ PRIVATE unsigned char arith_expr_type[NumT][NumT]={ /*E I R D C Z L S H */ { E, E, E, E, E, E, E, E, E }, /* E */ { E, I, R, D, C, Z, E, E, E }, /* I */ { E, R, R, D, C, Z, E, E, E }, /* R */ { E, D, D, D,W+Z, Z, E, E, E }, /* D */ { E, C, C,W+Z, C, Z, E, E, E }, /* C */ { E, Z, Z, Z, Z, Z, E, E, E }, /* Z */ { E, E, E, E, E, E, E, E, E }, /* L */ { E, E, E, E, E, E, E, E, E }, /* S */ { E, E, E, E, E, E, E, E, E } /* H */ }; /* for relops. Corresponds to arith type table except that nonstandard comparisons of like types have warning, not error. */ PRIVATE unsigned char rel_expr_type[NumT][NumT]={ /*E I R D C Z L S H */ { E, E, E, E, E, E, E, E, E }, /* E */ { E, L, L, L, L, L, E, E,W+L }, /* I */ { E, L, L, L, L, L, E, E, E }, /* R */ { E, L, L, L,W+L, L, E, E, E }, /* D */ { E, L, L,W+L, L, L, E, E, E }, /* C */ { E, L, L, L, L, L, E, E, E }, /* Z */ { E, E, E, E, E, E,W+L, E,W+L }, /* L */ { E, E, E, E, E, E, E, L, E }, /* S */ { E,W+L, E, E, E, E,W+L, E,W+L } /* H */ }; /* Result of assignment: lvalue = expr. Here rows correspond to type of lvalue, columns to type of expr */ PRIVATE unsigned char assignment_type[NumT][NumT]={ /*E I R D C Z L S H */ { E, E, E, E, E, E, E, E, E }, /* E */ { E, I, I, I, I, I, E, E,W+I }, /* I */ { E, R, R, R, R, R, E, E,W+R }, /* R */ { E, D, D, D, D, D, E, E,W+D }, /* D */ { E, C, C, C, C, C, E, E,W+C }, /* C */ { E, Z, Z, Z, Z, Z, E, E,W+Z }, /* Z */ { E, E, E, E, E, E, L, E,W+L }, /* L */ { E, E, E, E, E, E, E, S, E }, /* S */ { E, E, E, E, E, E, E, E, E } /* H not possible for lvalue */ }; #define INTRINS_ARGS (opclass == ',') /* Flag to modify behavior of binexpr_type */ /* Routine used in printing diagnostics: returns string "type" for unsized objects, "type*size" for explicitly sized things. Due to use of local static variable, cannot be invoked twice in the same expression. */ PRIVATE char* #if HAVE_STDC sized_typename(int type, long int size) #else /* K&R style */ sized_typename(type,size) int type; long size; #endif /* HAVE_STDC */ { static char strbuf[]="type*000000"; /* template */ static char *char_unk="char*(?)"; static char *char_adj="char*(*)"; if(size == size_DEFAULT) { return type_name[type]; /* no explicit size */ } else { if(type != S || size > 0) { (void)sprintf(strbuf,"%4s*%ld", /* type*size */ type_name[type], size%1000000); } else { /* handle special character size codes */ if(size == size_ADJUSTABLE) return char_adj; else /*size_UNKNOWN*/ return char_unk; } } return strbuf; } void init_typesizes(VOID) /* Only executes once. Thus cannot change wordsize after processing starts. */ { static int trapdoor=FALSE, ptr_trapdoor=FALSE; if(trapdoor) { if(given_wordsize != local_wordsize) { (void)fprintf(stderr, "\nSorry-Cannot change wordsize after processing starts"); } given_wordsize = local_wordsize; } else { trapdoor = TRUE; local_wordsize = given_wordsize; if(given_wordsize != 0) { if(given_wordsize != BpW) { type_size[I] = type_size[R] = type_size[L] = (BYTE)given_wordsize; type_size[D] = type_size[C] = (BYTE)(2*given_wordsize); type_size[Z] = (BYTE)(4*given_wordsize); } } } /* Cray pointer size is set separately */ if(ptr_trapdoor) { if(given_ptrsize != local_ptrsize) { (void)fprintf(stderr, "\nSorry-Cannot change pointer size after processing starts"); } given_ptrsize = local_ptrsize; } else { ptr_trapdoor = TRUE; local_ptrsize = given_ptrsize; } } /* this routine propagates type in binary expressions */ void #if HAVE_STDC binexpr_type(Token *term1, Token *op, Token *term2, Token *result) #else /* K&R style */ binexpr_type(term1,op,term2,result) Token *term1, *op, *term2, *result; #endif /* HAVE_STDC */ { int opclass = op->tclass, type1 = datatype_of(term1->TOK_type), type2 = datatype_of(term2->TOK_type), result_type; long size1 = term1->size, size2 = term2->size, result_size; int I_logop_I=FALSE; /* for f90_mixed_type warning */ if( ! is_computational_type(type1) ) { if( misc_warn ) { syntax_error(term1->line_num,term1->col_num, "numeric or character quantity expected:"); report_type(term1); } result_type = E; } else if( ! is_computational_type(type2) ) { if( misc_warn ) { syntax_error(term2->line_num,term2->col_num, "numeric or character quantity expected:"); report_type(term2); } result_type = E; } else { switch(opclass) { /* arithmetic operators: use lookup table */ case '+': case '-': case '*': case '/': case tok_power: result_type = (unsigned)arith_expr_type[type1][type2]; break; /* relational operators: use lookup table */ case tok_relop: result_type = (unsigned)rel_expr_type[type1][type2]; break; /* logical operators: operands should be logical, but allow integers with a warning. */ case tok_AND: case tok_OR: case tok_EQV: case tok_NEQV: if(type1 == L && type2 == L) result_type = L; else if(type1 == I && type2 == I) { result_type = W+I; I_logop_I = TRUE; } else result_type = E; break; /* // operator: operands must be strings */ case tok_concat: if(type1 == S && type2 == S) result_type = S; else result_type = E; break; /* Intrinsic function argument list: no promotion across type categories. Accept matching type categories: size match will be checked later. */ case ',': /* INTRINS_ARGS */ if( type_category[type1] != type_category[type2] ) result_type = E; else if(type1 == S) result_type = S; else result_type = (unsigned)arith_expr_type[type1][type2]; break; default: oops_message(OOPS_NONFATAL, op->line_num,op->col_num, "operator unknown: type not propagated"); result_type = type1; break; } if( (type1 != E && type2 != E) ) { if( result_type == E) { if(INTRINS_ARGS) { syntax_error(op->line_num,op->col_num, "type mismatch between intrinsic function arguments:"); report_mismatch(term1,op,term2); } else if( misc_warn ) { syntax_error(op->line_num,op->col_num, "operands cannot be combined in expression:"); report_mismatch(term1,op,term2); } } else if(result_type >= W) { /* W result */ /* F90 warning suppressed for numeric exprs */ if(f77_mixed_expr || (f90_mixed_expr && ((type1>=L || type2>=L) || I_logop_I)) ) { nonstandard(op->line_num,op->col_num,f90_mixed_expr,0); msg_tail(": incompatible type combination in expression:"); report_mismatch(term1,op,term2); } result_type -= W; } /* Obscure standard rule 6.2.2. We have to look for IN_ASSIGN flag in any of 3 places, since it gets prematurely turned off in fun_or_substr_handle production if one of operands is a substring expression. */ else if( f77_mixed_expr && opclass == tok_concat && !is_true(IN_ASSIGN, (term1->TOK_flags|op->TOK_flags|term2->TOK_flags)) && ((size1==size_ADJUSTABLE && !is_true(CONST_EXPR,term1->TOK_flags)) || (size2==size_ADJUSTABLE && !is_true(CONST_EXPR,term2->TOK_flags))) ) { nonstandard(op->line_num,op->col_num,0,0); msg_tail(": adjustable size cannot be concatenated here"); } } } /* Figure out the size of result */ result_size = size_DEFAULT; if(result_type != E ) { /* Error type gets DEFAULT size */ if(opclass == tok_concat) { /* string//string yields sum of lengths */ if(size1 == size_UNKNOWN || size2 == size_UNKNOWN) result_size = size_UNKNOWN; else if(size1 == size_ADJUSTABLE || size2 == size_ADJUSTABLE) result_size = size_ADJUSTABLE; else { result_size = size1 + size2; if(port_long_string && result_size > 255) nonportable(op->line_num,op->col_num, "character expression length exceeds 255"); } } /* DEFAULT op DEFAULT always yields DEFAULT. So need to handle only explicitly sized expressions, except intrinsic arglists, where no promotion of plain real to dble or plain complex to dcpx, and check for promotions of real types. */ else if(INTRINS_ARGS? (type1 != type2 || (type1 == type2 && is_numeric_type(type1) && (size1 != size_DEFAULT || size2 != size_DEFAULT))) : ((size1 != size_DEFAULT || size2 != size_DEFAULT) || (trunc_promotion && is_float_type(type1) && is_float_type(type2)))) { /* Local variables for convenience. N.B. Use tc1/2,ls1/2 for tests, t1/2,s1/2 for assigning result. */ int t1,t2; /* sorted types: t1 <= t2. */ long s1,s2; /* sizes of t1 and t2. */ int tc1,tc2; /* type categories: D->R and Z->C */ long ls1,ls2; /* local sizes = declared size else type_size */ int defsize1,defsize2; /* flags for default size */ /* Sort so that t1 <= t2 */ if(type1 <= type2) { t1 = type1; s1 = size1; t2 = type2; s2 = size2; } else { t1 = type2; s1 = size2; t2 = type1; s2 = size1; } /* Assign type categories and local sizes */ tc1 = type_category[t1]; tc2 = type_category[t2]; defsize1 = (s1 == size_DEFAULT); defsize2 = (s2 == size_DEFAULT); ls1 = (defsize1? type_size[t1]: s1); ls2 = (defsize2? type_size[t2]: s2); #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,"\nt1=%s s1=%d ls1=%d t2=%s s2=%d ls2=%d", type_name[t1],s1,ls1, type_name[t2], s2, ls2); #endif if(tc1 == tc2) {/* same type category */ /* Intrins args: size promotion illegal */ if(INTRINS_ARGS && ls1 != ls2) { syntax_error(op->line_num,op->col_num, "precision mismatch in intrinsic argument list:"); report_mismatch(term1,op,term2); } /* Give -port warning if e.g. plain I+I*2 (variables only) */ else if(port_mixed_size || local_wordsize==0) { if(defsize1 != defsize2 && !is_true(CONST_EXPR,term1->TOK_flags) && !is_true(CONST_EXPR,term2->TOK_flags)) { nonportable(op->line_num,op->col_num, INTRINS_ARGS?"intrinsic argument list":"expr"); msg_tail("mixes default and explicit"); msg_tail((is_numeric_type(t1)&&is_numeric_type(t2))? "precision":"size"); msg_tail("operands:"); report_mismatch(term1,op,term2); } } /* If same type category, use the larger of the two sizes if both declared. If only one size declared, use the larger of the declared size and the default size. If result is equal in size to default, use size_DEFAULT. */ if(ls1 > ls2) { result_size = s1; } else if(ls2 > ls1) { result_size = s2; } else /*ls1 == ls2*/{ if(!defsize1 && !defsize2) result_size = s1; /* otherwise DEFAULT */ } }/* end(tc1==tc2) */ else /* tc1!=tc2 */ { /* Differing type categories: only two cases. */ /* Case 1: I + R|D|C|Z Result: size of dominant type */ if(tc1 == I) { result_size = s2; } /* Case 2: R|D + C|Z Result: larger of C|Z and 2*size of R|D */ else { if(ls2 >= 2*ls1) result_size = s2; else result_size = 2*s1; /* 2*size_DEFAULT = 0 is still DEFAULT */ } }/* end tc1 != tc2 */ /* change D or Z to default size or else to explicitly sized R or C */ if(result_type == D || result_type == Z) { if(result_size != size_DEFAULT && result_size != type_size[result_type]) result_type = (result_type==D)?R:C; else result_size = size_DEFAULT; } /* Give -trunc warning if a real or complex type is promoted to double. */ if(trunc_promotion && !INTRINS_ARGS && is_float_type(t1) ) { /* First clause checks R+R size agreement */ if( (type_category[result_type] == R && ls1 != ls2) /* Second clause checks R+C and C+C */ || (type_category[result_type] == C && (type_category[t1] == R? ls2 != 2*ls1 : ls2 != ls1)) ){ warning(op->line_num,op->col_num, "promotion may not give desired precision:"); report_mismatch(term1,op,term2); } /* For comparisons we have R==R, C==C, or R==C. */ if( opclass == tok_relop && (type_category[t1] == type_category[t2]? ls2 != ls1:ls2 != 2*ls1) ) { warning(op->line_num,op->col_num, "comparison mixes terms of different precision:"); report_mismatch(term1,op,term2); } } }/*end if(non-DEFAULT sizes)*/ /* Result of compare gets DEFAULT size. However, we want to go thru the above code for relops in case of type/size mismatches that should be reported. Here for relops we replace any result_size that got set above by DEFAULT size. */ if( opclass == tok_relop) { result_size = size_DEFAULT; } }/*end if(result_type != E)*/ #ifdef DEBUG_EXPRTYPE if(debug_latest) { (void)fprintf(list_fd,"\nsize of %s %c",sized_typename(type1,size1), ispunct(opclass)?opclass:'~'); (void)fprintf(list_fd," %s = ",sized_typename(type2,size2)); (void)fprintf(list_fd,"%s",sized_typename(result_type,result_size)); } #endif result->TOK_type = type_byte(class_VAR, result_type); result->TOK_flags = 0; /* clear all flags */ result->size = result_size; /* Keep track of constant expressions */ if( is_true(CONST_EXPR,term1->TOK_flags) && is_true(CONST_EXPR,term2->TOK_flags) && !(opclass==tok_power && type2!=I) ) { /* exclude **REAL */ make_true(CONST_EXPR,result->TOK_flags); } /* Parameter expressions are like constant exprs except we bend the rules to allow intrinsic functions and **REAL */ if( is_true(PARAMETER_EXPR,term1->TOK_flags) && is_true(PARAMETER_EXPR,term2->TOK_flags) ) { make_true(PARAMETER_EXPR,result->TOK_flags); } /* Keep track of dimension bound expressions */ if( is_true(DIM_BOUND_EXPR,term1->TOK_flags) && is_true(DIM_BOUND_EXPR,term2->TOK_flags) ) { make_true(DIM_BOUND_EXPR,result->TOK_flags); } if( is_true(EVALUATED_EXPR,term1->TOK_flags) && is_true(EVALUATED_EXPR,term2->TOK_flags) ) { make_true(EVALUATED_EXPR,result->TOK_flags); } #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,"\nconst param eval: (%d %d %d) %s (%d %d %d) = (%d %d %d)", is_true(CONST_EXPR,term1->TOK_flags), is_true(PARAMETER_EXPR,term1->TOK_flags), is_true(EVALUATED_EXPR,term1->TOK_flags), operator->src_text, is_true(CONST_EXPR,term2->TOK_flags), is_true(PARAMETER_EXPR,term2->TOK_flags), is_true(EVALUATED_EXPR,term2->TOK_flags), is_true(CONST_EXPR,result->TOK_flags), is_true(PARAMETER_EXPR,result->TOK_flags), is_true(EVALUATED_EXPR,result->TOK_flags)); #endif if(! INTRINS_ARGS) { /* Remaining steps only applicable to exprs */ /* Remember if integer division was used */ if(result_type == type_INTEGER && (opclass == '/' || (is_true(INT_QUOTIENT_EXPR,term1->TOK_flags) || is_true(INT_QUOTIENT_EXPR,term2->TOK_flags))) ) { make_true(INT_QUOTIENT_EXPR,result->TOK_flags); } /* Issue warning if integer expr involving division is later converted to any real type, or if it is used as an exponent. */ if( is_true(INT_QUOTIENT_EXPR,term1->TOK_flags) || is_true(INT_QUOTIENT_EXPR,term2->TOK_flags) ) { int r=result_type; if(r == type_LOGICAL) /* relational tests are equivalent */ r = arith_expr_type[type1][type2]; /* to subtraction */ if(opclass == tok_power && is_true(INT_QUOTIENT_EXPR,term2->TOK_flags) ) { if(trunc_int_div_exponent) { warning(op->line_num,op->col_num, "integer quotient expr"); msg_expr_tree(term2); msg_tail("used in exponent"); } if( ! is_true(INT_QUOTIENT_EXPR,term1->TOK_flags) ) make_false(INT_QUOTIENT_EXPR,result->TOK_flags); } else if( r == type_REAL || r == type_DP || r == type_COMPLEX) { if(trunc_int_div_real) { warning(op->line_num,op->col_num, "integer quotient expr"); msg_expr_tree(is_true(INT_QUOTIENT_EXPR,term1->TOK_flags)? term1:term2); msg_tail(" converted to real"); } } } /* If either term is an identifier, set use flag */ if(is_true(ID_EXPR,term1->TOK_flags)) use_variable(term1); if(is_true(ID_EXPR,term2->TOK_flags)) use_variable(term2); /* Propagate the value of integer constant expressions */ if(is_true(EVALUATED_EXPR,result->TOK_flags)) { if(result_type == type_INTEGER) { /* Only ints propagated */ int a = int_expr_value(term1), b = int_expr_value(term2), c; switch(opclass) { case '+': c = a+b; break; case '-': c = a-b; break; case '*': c = a*b; break; case '/': if(b == 0) { if(misc_warn) { syntax_error(term2->line_num,term2->col_num, "division by zero attempted"); } c = 0; } else { c = a/b; } break; case tok_power: c = int_power(a,b); break; case tok_AND: c = a&b; break; case tok_OR: c = a|b; break; case tok_EQV: c = ~(a^b); break; case tok_NEQV: c = a^b; break; default: oops_message(OOPS_NONFATAL, op->line_num,op->col_num, "invalid int expr operator"); c = 0; break; } make_true(EVALUATED_EXPR,result->TOK_flags); result->value.integer = c; /* Result goes into token value */ /* Integer division (including i**neg) that yields 0 is suspicious. */ if(trunc_int_div_zero) if(c==0 && (opclass=='/' || opclass==tok_power)) { warning(op->line_num,op->col_num, "integer const expr yields result of 0"); } } } /* Also nonconstant**neg is 0 unless nonconstant=1 */ else if(trunc_int_neg_power) if(result_type == type_INTEGER && opclass == tok_power && is_true(EVALUATED_EXPR,term2->TOK_flags) && int_expr_value(term2) < 0) { warning(op->line_num,op->col_num, "integer to negative power usually yields 0"); } }/* end if !INTRINS_ARGS */ }/*binexpr_type*/ /* this routine propagates type in unary expressions */ void #if HAVE_STDC unexpr_type(Token *op, Token *term1, Token *result) #else /* K&R style */ unexpr_type(op,term1,result) Token *term1, *op, *result; #endif /* HAVE_STDC */ { int opclass = op->tclass, type1 = datatype_of(term1->TOK_type), result_type; if( ! is_computational_type(type1) ) { if( misc_warn ) { syntax_error(term1->line_num,term1->col_num, "numeric quantity expected:"); report_type(term1); } result_type = E; } else { switch(opclass) { /* arith operators: use diagonal of lookup table */ case '+': case '-': result_type = arith_expr_type[type1][type1]; break; /* NOT: operand should be logical, but allow integers with a warning. */ case tok_NOT: if(type1 == L) result_type = L; else if(type1 == I) result_type = W+I; else result_type = E; break; default: oops_message(OOPS_NONFATAL, op->line_num,op->col_num, "unary operator type not propagated"); result_type = type1; break; } if( type1 != E ) { if( result_type == E) { if( misc_warn ) { syntax_error(op->line_num,op->col_num, "expression incompatible with operator:"); msg_tail(op->src_text); msg_tail("used with"); report_type(term1); } } else if(result_type >= W) { if(f77_mixed_expr || f90_mixed_expr) { nonstandard(op->line_num,op->col_num,f90_mixed_expr,0); msg_tail(": incompatible type used with operator:"); msg_tail(op->src_text); msg_tail("used with"); report_type(term1); } result_type -= W; } } } result->TOK_type = type_byte(class_VAR, result_type); result->TOK_flags = 0; /* clear all flags */ result->size = term1->size; /* result is same size as operand */ /* Keep track of constant expressions */ copy_flag(CONST_EXPR,result->TOK_flags,term1->TOK_flags); copy_flag(PARAMETER_EXPR,result->TOK_flags,term1->TOK_flags); copy_flag(DIM_BOUND_EXPR,result->TOK_flags,term1->TOK_flags); /* Remember if integer division was used */ if(result_type == type_INTEGER) copy_flag(INT_QUOTIENT_EXPR,result->TOK_flags,term1->TOK_flags); if(is_true(ID_EXPR,term1->TOK_flags)) use_variable(term1); /* Propagate the value of integer constant expressions */ if(is_true(EVALUATED_EXPR,term1->TOK_flags)) { if(result_type == type_INTEGER) { /* Only ints propagated */ int a = int_expr_value(term1), c; switch(opclass) { case '+': c = a; break; case '-': c = -a; break; case tok_NOT: c = ~a; break; default: oops_message(OOPS_NONFATAL, op->line_num,op->col_num, "invalid int expr operator"); c = 0; break; } make_true(EVALUATED_EXPR,result->TOK_flags); result->value.integer = c; /* Result goes into token value */ } } } /* this routine checks type and size match in assignment statements and in parameter assignments */ void #if HAVE_STDC assignment_stmt_type(Token *term1, Token *equals, Token *term2) #else /* K&R style */ assignment_stmt_type(term1,equals,term2) Token *term1, *equals, *term2; #endif /* HAVE_STDC */ { int type1 = datatype_of(term1->TOK_type), type2 = datatype_of(term2->TOK_type), result_type; if( ! is_computational_type(type1) ) { if( misc_warn ) { syntax_error(term1->line_num,term1->col_num, "numeric or character quantity expected:"); report_type(term1); } result_type = E; } else if( ! is_computational_type(type2) ) { if( misc_warn ) { syntax_error(term2->line_num,term2->col_num, "numeric or character quantity expected:"); report_type(term2); } result_type = E; } else { result_type = (unsigned)assignment_type[type1][type2]; if( (type1 != E && type2 != E) ) { if( result_type == E) { if( misc_warn ) { syntax_error(equals->line_num,equals->col_num, "type mismatch:"); report_type(term2); msg_tail("assigned to"); report_type(term1); } } else { if(result_type >= W) { /* W result */ if(f77_mixed_expr || f90_mixed_expr) { nonstandard(equals->line_num,equals->col_num,f90_mixed_expr,0); msg_tail(": incompatible type combination:"); report_type(term2); msg_tail("assigned to"); report_type(term1); } result_type -= W; } /* Watch for truncation to lower precision type */ if(trunc_precision || port_mixed_size || local_wordsize==0) { long size1 = term1->size; long size2 = term2->size; int type_trunc=FALSE, /* flags for kind of truncation */ size_trunc=FALSE, mixed_size=FALSE, promotion=FALSE, trunc_warn,mixed_warn; if(size1 == size_DEFAULT && size2 == size_DEFAULT) { type_trunc = ( is_numeric_type(type1) && is_numeric_type(type2) && (type1 < type2 || /* C = D truncates precision of D */ (type1 == C && type2 == D)) ); /* Watch for promotions also */ if(type_category[type2] == R) { if(type_category[type1] == R) /* R|D = R|D */ promotion = (type1 > type2); else if(type_category[type1] == C) /* C|Z = R|D */ promotion = ((int)type_size[type1] > 2*(int)type_size[type2]); } else if(type_category[type2] == C) /* any = C|Z */ promotion = (type1 > type2); } else if(type1 == S) { /* character strings */ if(size1>0 && size2>0) /* ignore ADJUSTABLE and UNKNOWN */ size_trunc = size1 < size2; } else { int tc1,tc2;/* type categories: D->R, Z->C, H->I */ int ls1,ls2;/* local sizes */ /* Assign type categories and local sizes */ tc1 = type_category[type1]; tc2 = type_category[type2]; ls1 = size1; if(ls1 == size_DEFAULT) ls1 = type_size[type1]; ls2 = size2; if(ls2 == size_DEFAULT) ls2 = type_size[type2]; /* type truncation: any numeric type category to a lower category. */ type_trunc = ( /***is_numeric_type(type1) && is_numeric_type(type2) &&***/ tc1 < tc2 ); /* size truncation: assigned to smaller local size. For C = R correct test is Csize < 2*Rsize */ if(tc1 == C && tc2 == R) { size_trunc = (ls1 < ls2*2); promotion = (ls1 > ls2*2); } else { /* Suppress size truncation warning if rhs is a literal constant that is sure to fit. For logicals this is always the case; for integers we use a suitable threshold. */ if( (size_trunc = (ls1 < ls2)) && is_true(LIT_CONST,term2->TOK_flags) ){ switch(tc2) { case L: size_trunc = FALSE; break; case I: if( term2->value.integer <= SMALL_INT_VALUE ) size_trunc = FALSE; break; } } promotion = ((tc2 == R || tc2 == C) && (ls1 > ls2)); } /* mixed size: default size assigned to declared size of like type category or vice-versa. -port only, and superseded by truncation warning if any. */ mixed_size = (tc1 == tc2) && (size1==size_DEFAULT || (size2==size_DEFAULT && !is_true(CONST_EXPR,term2->TOK_flags))); } /* Under -trunc, report type truncation or size truncation. Say "possibly" if -nowordsize. Also report promotions under -trunc. If no truncation warning given and under -port, report mixed assignment */ #ifdef DEBUG_EXPRTYPE #define TorF(x) ((x)?"":"no") if(debug_latest) { (void)fprintf(list_fd,"\nassign %s =",sized_typename(type1,size1)); (void)fprintf(list_fd," %s : ",sized_typename(type2,size2)); (void)fprintf(list_fd,"%s type %s size %s mixed", TorF(type_trunc), TorF(size_trunc), TorF(mixed_size)); } #endif trunc_warn = (trunc_promotion && promotion) || (trunc_type_demotion && type_trunc) || (trunc_size_demotion && size_trunc); mixed_warn = ((port_mixed_size || local_wordsize==0) && mixed_size); if( trunc_warn ) { warning(equals->line_num,equals->col_num,""); report_type(term2); if(trunc_warn && !type_trunc && mixed_size && local_wordsize == 0) msg_tail("possibly"); if(promotion) msg_tail("promoted to"); else msg_tail("truncated to"); report_type(term1); if(promotion) msg_tail(": may not give desired precision"); } else if(mixed_warn) { nonportable(equals->line_num,equals->col_num, "mixed default and explicit"); msg_tail((is_numeric_type(type1)&&is_numeric_type(type2))? "precision":"size"); msg_tail("items:"); report_type(term2); msg_tail("assigned to"); report_type(term1); } } }/*end else (result_type != E)*/ }/*end if (type1,type2 != E)*/ }/*end else (is_computational_type(type2))*/ /* Issue warning if integer expr involving division is later converted to any real type. */ if(trunc_int_div_real) if( is_true(INT_QUOTIENT_EXPR,term2->TOK_flags) ) { int r=result_type; if( r == type_REAL || r == type_DP || r == type_COMPLEX) { warning(equals->line_num,equals->col_num, "integer quotient expr"); msg_expr_tree(term2); msg_tail(" converted to real"); } } if(is_true(ID_EXPR,term2->TOK_flags)) use_variable(term2); use_lvalue(term1); } void check_initializer_type(Token *assignee_list, Token *equals, Token *expr_list) { Token *t; if( expr_list->next_token == (Token*)NULL ) { t = expr_list; /* simple token, not a list */ } else { /* token lists are built in reverse, so restore to order in source statement */ t = expr_list->next_token = reverse_tokenlist(expr_list->next_token); } /* Go thru list, checking match. At this time, assignee can only be a single variable */ while( t!=NULL ) { assignment_stmt_type(assignee_list,t,t); t = t->next_token; } } /* Make an expression-token for a function invocation */ void #if HAVE_STDC func_ref_expr(Token *id, Token *args, Token *result) #else /* K&R style */ func_ref_expr(id,args,result) Token *id,*args,*result; #endif /* HAVE_STDC */ { Lsymtab *symt; IntrinsInfo *defn; int rettype, retsize; symt = hashtab[id->value.integer].loc_symtab; if( symt->intrinsic ) { defn = symt->info.intrins_info; /* Intrinsic functions: type stored in info field */ rettype = defn->result_type; retsize = size_DEFAULT; if( defn->intrins_flags & I_QUAD ) { /* Quad intrinsic */ /* These are either R*16 or X*32 */ retsize = ((rettype==type_QUAD)? size_QUAD: size_CQUAD); } /* Generic Intrinsic functions: use propagated arg type */ if(rettype == type_GENERIC) { if(args->next_token == NULL) { rettype = type_UNDECL; retsize = size_DEFAULT; } else { #ifdef OLDSTUFF rettype = args->next_token->TOK_type; retsize = args->next_token->size; #else rettype = args->TOK_type; retsize = args->size; #endif } /* special case: REAL(integer|[d]real) -> real */ if((defn->intrins_flags&I_SP_R) && (rettype != type_COMPLEX) && (rettype != type_DCOMPLEX)) { rettype = type_REAL; retsize = size_DEFAULT; } /* special cases: */ /* ABS([d]complex) -> [d]real */ /* IMAG([d]complex) -> [d]real */ /* REAL([d]complex) -> [d]real */ if(rettype == type_COMPLEX && (defn->intrins_flags&I_C_TO_R)) { rettype = type_REAL; retsize = retsize/2; } if(rettype == type_DCOMPLEX &&(defn->intrins_flags&I_C_TO_R)) { rettype = type_DP; retsize = size_DEFAULT; } } else { /* non-generic */ /* special case: CHAR(code): size=1 */ if(defn->intrins_flags&I_CHAR) { retsize = 1; } } } else { /* non-intrinsic */ rettype = get_type(symt); retsize = get_size(symt,rettype); } /* referencing function makes it no longer a class_SUBPROGRAM but an expression. */ #ifndef TOK_type result->tclass = id->tclass; #endif result->tsubclass = 0; result->TOK_type = type_byte(class_VAR,rettype); #ifndef TOK_flags result->TOK_flags = 0; /* clear all flags */ #endif result->size = retsize; result->next_token = (Token *)NULL; #ifdef DEBUG_EXPRTYPE if(debug_latest) { (void)fprintf(list_fd,"\n%sFunction %s() = %s", symt->intrinsic?"Intrinsic ":"", symt->name,sized_typename(rettype,retsize)); } #endif /* If intrinsic and all arguments are PARAMETER_EXPRs, then result is one too. */ if( symt->intrinsic ) { /* Evaluate intrinsic if result is integer, the args are const (except for LEN), and a handler is defined. */ if(rettype == type_INTEGER && (defn->intrins_flags&I_EVALUATED) ) { result->value.integer = eval_intrins(defn,args); /* Evaluation routines can affect the flags */ copy_flag(EVALUATED_EXPR,result->TOK_flags,args->TOK_flags); } copy_flag(PARAMETER_EXPR,result->TOK_flags,args->TOK_flags); #ifdef DEBUG_EXPRTYPE if(debug_latest) { (void)fprintf(list_fd,"\n%s(...) ",defn->name); if(is_true(EVALUATED_EXPR,args->TOK_flags)) (void)fprintf(list_fd,"=%d",result->value.integer); else (void)fprintf(list_fd,"not evaluated"); (void)fprintf(list_fd,": const param eval=(%d %d %d)", is_true(CONST_EXPR,result->TOK_flags), is_true(PARAMETER_EXPR,result->TOK_flags), is_true(EVALUATED_EXPR,result->TOK_flags)); } #endif } }/*func_ref_expr*/ /* Make an expression-token for primary consisting of a symbolic name */ void #if HAVE_STDC primary_id_expr(Token *id, Token *primary) #else /* K&R style */ primary_id_expr(id,primary) Token *id,*primary; #endif /* HAVE_STDC */ { Lsymtab *symt; int id_type; symt = hashtab[id->value.integer].loc_symtab; id_type=get_type(symt); #ifndef TOK_type primary->tclass = id->tclass; #endif primary->tsubclass = 0; primary->TOK_type = type_byte(storage_class_of(symt->type),id_type); #ifndef TOK_flags primary->TOK_flags = 0; #endif primary->size =get_size(symt,id_type); primary->left_token = (Token *) NULL; make_true(ID_EXPR,primary->TOK_flags); if( storage_class_of(symt->type) == class_VAR) { if(symt->parameter) { make_true(CONST_EXPR,primary->TOK_flags); make_true(PARAMETER_EXPR,primary->TOK_flags); make_true(EVALUATED_EXPR,primary->TOK_flags); } else { make_true(LVALUE_EXPR,primary->TOK_flags); } if(symt->active_do_var) { make_true(DO_VARIABLE,primary->TOK_flags); } if(symt->array_var) make_true(ARRAY_ID_EXPR,primary->TOK_flags); if(symt->set_flag || symt->common_var || symt->parameter || symt->argument) make_true(SET_FLAG,primary->TOK_flags); if(symt->assigned_flag) make_true(ASSIGNED_FLAG,primary->TOK_flags); if(symt->used_before_set) make_true(USED_BEFORE_SET,primary->TOK_flags); } else if(storage_class_of(symt->type) == class_STMT_FUNCTION) { make_true(STMT_FUNCTION_EXPR,primary->TOK_flags); } #ifdef DEBUG_PARSER if(debug_parser){ (void)fprintf(list_fd,"\nprimary %s: TOK_type=0x%x TOK_flags=0x%x", symt->name,primary->TOK_type,primary->TOK_flags); } #endif }/*primary_id_expr*/ int #if HAVE_STDC intrins_arg_cmp(IntrinsInfo *defn, Token *t) /* Definition */ /* Argument */ #else /* K&R style */ intrins_arg_cmp(defn,t) IntrinsInfo *defn; /* Definition */ Token *t; /* Argument */ #endif /* HAVE_STDC */ { int defn_types=defn->arg_type; int a_type = datatype_of(t->TOK_type); int type_OK; /* Check for argument type mismatch. */ type_OK = ( (1<size==type_size[ct] )){ syntax_error(t->line_num,t->col_num, "illegal argument data type for intrinsic function"); msg_tail(defn->name); msg_tail(":"); report_type(t); } else { if(port_mixed_size || local_wordsize==0) { nonportable(t->line_num,t->col_num, "argument precision may not be correct for intrinsic function"); msg_tail(defn->name); msg_tail(":"); report_type(t); } type_OK = TRUE; /* Acceptable after all */ } }/* end if(! type_OK) */ /* Quad intrinsics need a special check to verify that real or cplx arg size is right. */ else if(defn->intrins_flags & I_QARG) { if(t->size != ((a_type==type_REAL)? size_QUAD: size_CQUAD)) { syntax_error(t->line_num,t->col_num, "illegal argument data type for intrinsic function"); msg_tail(defn->name); msg_tail(":"); report_type(t); } } return type_OK; }/*intrins_arg_cmp*/ /* Check agreement between statement function dummy (t1) and actual (t2) args. At this time, checks only class, type and size, not arrayness. */ void #if HAVE_STDC stmt_fun_arg_cmp(const Lsymtab *symt, const Token *d_arg, const Token *a_arg) #else /* K&R style */ stmt_fun_arg_cmp(symt,d_arg,a_arg) Lsymtab *symt; Token *d_arg,*a_arg; #endif /* HAVE_STDC */ { int d_class = class_VAR, a_class = storage_class_of(a_arg->TOK_type), d_type = datatype_of(d_arg->TOK_type), a_type = datatype_of(a_arg->TOK_type), d_size = d_arg->size, a_size = a_arg->size, d_defsize = (d_size == size_DEFAULT), a_defsize = (a_size == size_DEFAULT); int d_cmptype= (d_type==type_HOLLERITH && a_type!=type_STRING)? a_type:type_category[d_type]; int a_cmptype= (a_type==type_HOLLERITH && d_type!=type_STRING)? d_type:type_category[a_type]; if(!(port_mixed_size || local_wordsize==0)) { if(d_defsize) d_size = type_size[d_type]; if(a_defsize) a_size = type_size[a_type]; } if(d_size < 0 || a_size < 0) { /* char size_ADJUSTABLE or UNKNOWN */ d_size = a_size = size_DEFAULT; /* suppress warnings on size */ d_defsize = a_defsize = TRUE; /* these are not used at present */ } if(d_class != a_class || d_cmptype != a_cmptype || (d_type == type_STRING? d_size > a_size: d_size != a_size) ) { syntax_error(a_arg->line_num,a_arg->col_num, "argument mismatch in stmt function"); msg_tail(symt->name); /* Give the stmt func name */ msg_tail(": dummy"); report_type(d_arg); /* Dummy arg type */ msg_tail("vs actual"); report_type(a_arg); } }/*stmt_fun_arg_cmp*/ /* Routine to document the types of two terms and their operator */ PRIVATE void #if HAVE_STDC report_mismatch(const Token *term1, const Token *op, const Token *term2) #else /* K&R style */ report_mismatch(term1,op,term2) Token *term1,*op,*term2; #endif /* HAVE_STDC */ { report_type(term1); msg_tail(op->src_text); report_type(term2); } /* Routine to document the type of a token, with its name if it has one. */ PRIVATE void #if HAVE_STDC report_type(const Token *t) #else /* K&R style */ report_type(t) Token *t; #endif /* HAVE_STDC */ { msg_tail(sized_typename((int)datatype_of(t->TOK_type),t->size)); if(is_true(ID_EXPR,t->TOK_flags)) msg_tail(hashtab[t->value.integer].name); else if(is_true(LIT_CONST,t->TOK_flags)) { msg_tail("const"); msg_expr_tree(t); } else { msg_tail("expr"); msg_expr_tree(t); } } int #if HAVE_STDC substring_size(Token *id, Token *limits) #else /* K&R style */ substring_size(id,limits) Token *id,*limits; #endif /* HAVE_STDC */ { int id_type,id_len; int startindex,endindex,substr_len; #ifdef DEBUG_EXPRTREES Lsymtab *symt = hashtab[id->value.integer].loc_symtab; #endif /*** id_type=get_type(symt); **/ id_type = datatype_of(id->TOK_type); substr_len=size_UNKNOWN; if(id_type != type_STRING) { syntax_error(id->line_num,id->col_num, "string variable expected"); } else { id_len = id->size; #ifdef DEBUG_EXPRTREES if(debug_latest) { fprintf(list_fd,"\nSubstring %s :: ",symt->name); print_expr_list(limits); } #endif /* fortran.y stores (startindex:endindex) in TOK_start, Tok_end */ startindex = limits->TOK_start; endindex = limits->TOK_end; if(startindex != size_UNKNOWN && endindex != size_UNKNOWN) { /* Check limits unless endindex=0 */ if( startindex > endindex && endindex > 0 ) { syntax_error(limits->line_num,limits->col_num, "invalid substring limits"); } else { if(endindex == 0) /* 0 means it was (startindex: ) */ endindex=id_len; substr_len = endindex-startindex+1; if(id_len > 0 && substr_len > id_len) syntax_error(limits->line_num,limits->col_num, "substring size exceeds string size"); } } } return substr_len; } /* Integer power: uses recursion x**n = (x**(n/2))**2 */ PRIVATE int #if HAVE_STDC int_power(int x, int n) #else /* K&R style */ int_power(x,n) int x,n; #endif /* HAVE_STDC */ { int temp; /* Order of tests puts commonest cases first */ if(n > 1) { temp = int_power(x,n>>1); temp *= temp; if(n&1) return temp*x; /* Odd n */ else return temp; /* Even n */ } else if(n == 1) return x; else if(n < 0) return 1/int_power(x,-n); /* Usually 0 */ else return 1; } /* Intrinsic function handlers */ PROTO(PRIVATE int ii_abs,( Token *args )); PROTO(PRIVATE int ii_dim,( Token *args )); PROTO(PRIVATE int ii_ichar,( Token *args )); PROTO(PRIVATE int ii_index,( Token *args )); PROTO(PRIVATE int ii_len,( Token *args )); PROTO(PRIVATE int ii_max,( Token *args )); PROTO(PRIVATE int ii_min,( Token *args )); PROTO(PRIVATE int ii_mod,( Token *args )); PROTO(PRIVATE int ii_sign,( Token *args )); /* Array of pointers to functions for evaluating integer-valued intrinsic functions. The order matches definitions of I_ABS thru I_INDEX in symtab.h */ PROTO(PRIVATE int (*ii_fun[]),( Token *args )) ={ NULL, ii_abs, ii_sign, ii_dim, ii_mod, ii_max, ii_min, ii_ichar, ii_len, ii_index, }; PRIVATE int #if HAVE_STDC eval_intrins(IntrinsInfo *defn, Token *args) #else /* K&R style */ eval_intrins(defn,args) IntrinsInfo *defn; Token *args; #endif /* HAVE_STDC */ { intrins_flags_t fun_num; fun_num = (defn->intrins_flags & I_EVALUATED); /* Args must be evaluated, except for LEN */ if( (is_true(EVALUATED_EXPR,args->TOK_flags) || fun_num==I_LEN) && fun_num > 0 && fun_num < (sizeof(ii_fun)/sizeof(ii_fun[0])) ) { return (*ii_fun[fun_num])(args); } else { #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,"\nIntrinsic %s not handled",defn->name); make_false(EVALUATED_EXPR,args->TOK_flags); #endif return 0; } } PRIVATE int #if HAVE_STDC ii_abs(Token *args) #else /* K&R style */ ii_abs(args) Token *args; #endif /* HAVE_STDC */ { Token *t; int val, result=0; t = args->next_token; if(t->TOK_type != type_INTEGER) {/* wrong arg type: message given elsewhere */ make_false(EVALUATED_EXPR,args->TOK_flags); } else { val = int_expr_value(t); result = (val >= 0? val: -val); } return result; } PRIVATE int #if HAVE_STDC ii_sign(Token *args) /* SIGN(value,sign) */ #else /* K&R style */ ii_sign(args) /* SIGN(value,sign) */ Token *args; #endif /* HAVE_STDC */ { Token *t1,*t2; int val1,val2, result=0; t1 = args->next_token; t2 = t1->next_token; if(t2 == NULL || t1->TOK_type != type_INTEGER || t2->TOK_type != type_INTEGER) {/* wrong arg type: message given elswr */ make_false(EVALUATED_EXPR,args->TOK_flags); } else { val1 = int_expr_value(t1); if(val1 < 0) val1 = -val1; val2 = int_expr_value(t2); result = (val2 >= 0? val1: -val1); } return result; } PRIVATE int #if HAVE_STDC ii_dim(Token *args) /* DIM(int,int) */ #else /* K&R style */ ii_dim(args) /* DIM(int,int) */ Token *args; #endif /* HAVE_STDC */ { Token *t1,*t2; int val, result=0; t1 = args->next_token; t2 = t1->next_token; if(t2 == NULL || t1->TOK_type != type_INTEGER || t2->TOK_type != type_INTEGER) {/* wrong arg type: message given elswr */ make_false(EVALUATED_EXPR,args->TOK_flags); } else { val = int_expr_value(t1)-int_expr_value(t2); result = (val >= 0? val: 0); } return result; } PRIVATE int #if HAVE_STDC ii_mod(Token *args) /* MOD(int,int) */ #else /* K&R style */ ii_mod(args) /* MOD(int,int) */ Token *args; #endif /* HAVE_STDC */ { Token *t1,*t2; int val1,val2,quotient, result=0; t1 = args->next_token; t2 = t1->next_token; if(t2 == NULL || t1->TOK_type != type_INTEGER || t2->TOK_type != type_INTEGER) {/* wrong arg type: message given elswr */ make_false(EVALUATED_EXPR,args->TOK_flags); } else { val1 = int_expr_value(t1); val2 = int_expr_value(t2); if((val1 < 0) == (val2 < 0)) { quotient = val1/val2; /* Both positive or both negative*/ } else { quotient = -(-val1/val2); /* Unlike signs */ } result = val1 - quotient*val2; } return result; } PRIVATE int #if HAVE_STDC ii_max(Token *args) /* MAX(int,int,...) */ #else /* K&R style */ ii_max(args) /* MAX(int,int,...) */ Token *args; #endif /* HAVE_STDC */ { Token *t=args; int val,result=0,n=0; #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,"\nEvaluating MAX("); #endif while( (t=t->next_token) != NULL) { if(t->TOK_type != type_INTEGER) {/* wrong arg type: message given elswr */ make_false(EVALUATED_EXPR,args->TOK_flags); break; } else { val = int_expr_value(t); if(n++ == 0 || val > result) result = val; #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,"%d ",val); #endif } } #ifdef DEBUG_EXPRTYPE if(debug_latest) (void)fprintf(list_fd,") = %d",result); #endif return result; } PRIVATE int #if HAVE_STDC ii_min(Token *args) /* MIN(int,int,...) */ #else /* K&R style */ ii_min(args) /* MIN(int,int,...) */ Token *args; #endif /* HAVE_STDC */ { Token *t=args; int val,result=0,n=0; while( (t=t->next_token) != NULL) { if(t->TOK_type != type_INTEGER) {/* wrong arg type: message given elswr */ make_false(EVALUATED_EXPR,args->TOK_flags); break; } else { val = int_expr_value(t); if(n++ == 0 || val < result) result = val; } } return result; } PRIVATE int #if HAVE_STDC ii_ichar(Token *args) /* ICHAR(string) */ #else /* K&R style */ ii_ichar(args) /* ICHAR(string) */ Token *args; #endif /* HAVE_STDC */ { Token *t=args->next_token; if(t->TOK_type != type_STRING || !is_true(LIT_CONST,t->TOK_flags)) { make_false(EVALUATED_EXPR,args->TOK_flags); } else { return t->value.string[0]; /* Processor collating sequence is used */ } return 0; } PRIVATE int #if HAVE_STDC ii_len(Token *args) /* LEN(string) */ #else /* K&R style */ ii_len(args) /* LEN(string) */ Token *args; #endif /* HAVE_STDC */ { Token *t=args->next_token; int val,result=0; /* Set the PARAMETER_EXPR flag since LEN of string does not require contents to be known */ if( t->TOK_type == type_STRING && (val = t->size) > 0 ) { make_true(PARAMETER_EXPR,args->TOK_flags); make_true(EVALUATED_EXPR,args->TOK_flags); result = val; } else { /* nonstring or adjustable or unknown */ make_false(PARAMETER_EXPR,args->TOK_flags); make_false(EVALUATED_EXPR,args->TOK_flags); } return result; } PRIVATE int #if HAVE_STDC ii_index(Token *args) /* INDEX(str1,str2) */ #else /* K&R style */ ii_index(args) /* INDEX(str1,str2) */ Token *args; #endif /* HAVE_STDC */ { Token *t1,*t2; t1=args->next_token; t2=t1->next_token; if(t2 == NULL || t1->TOK_type != type_STRING || t2->TOK_type != type_STRING || !is_true(LIT_CONST,t1->TOK_flags) || !is_true(LIT_CONST,t2->TOK_flags)) { make_false(EVALUATED_EXPR,args->TOK_flags); } else { int i; char *s1=t1->value.string; char *s2=t2->value.string; int n1=strlen(s1), n2=strlen(s2); for(i=1; n1 > 0 && n1 >= n2; i++,s1++,n1--) { if(strncmp(s1,s2,n2) == 0) return i; } } return 0; } /* Undefine special macros */ #undef E #undef I #undef R #undef D #undef C #undef L #undef S #undef H #undef W ftnchek-3.3.1/forlex.c0000644000031000002260000014371410165305310015225 0ustar moniotstaff00000000000000/* $Id: forlex.c,v 1.46 2004/12/31 17:22:16 moniot Exp $ Tokenizing routines for Fortran program checker. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include /* Some older mac compilers need compat.h to use memset. If needed, add `` -d MAC_MPW '' to compilation options. */ #ifdef MAC_MPW #include #endif #include "ftnchek.h" #define FORLEX #include "symtab.h" #include "tokdefs.h" #include "forlex.h" /* toascii() is widely supported, but in case it isn't, define it here. We need it mainly in order to avoid bounds violation in legal_chars array. On EBCDIC systems, toascii() should convert from an EBCDIC code to the ASCII code for the same character, because the legal_chars array is ordered according to the ASCII collating sequence. */ #ifndef toascii #define toascii(C) ((C) & 0177) #endif extern int complex_const_allowed, /* shared flags operated by fortran.y */ inside_format, integer_context; PROTO(PRIVATE void make_legal_char,( char *s )); /* Part I. yylex() Shared functions defined: yylex() Returns next token. Called from yyparse(). implied_id_token(t,s) Creates token for blank common declaration. get_binary_const(t, c ) Creates token for binary constant get_string(t) Creates token for a string Note: compilation options LEX_STORE_STRINGS and LEX_STORE_HOLLERITHS: Define the macro name LEX_STORE_STRINGS to build a version of ftnchek that stores string constants, and LEX_STORE_HOLLERITHS to store hollerith constants. Now that INCLUDE statements are supported, strings must be stored. Holleriths are not used, so they need not be stored. */ #ifndef LEX_STORE_STRINGS #define LEX_STORE_STRINGS #endif #ifdef DEBUG_FORLEX /* For maintaining the program */ #define LEX_STORE_HOLLERITHS #endif #ifdef DEBUG_FORLEX #include /* Only used for pow() in debug mode */ #endif PRIVATE int closeup_saw_whitespace; /* The following macro says whether a given character is legal, * i.e. one of the stream control chars or a valid ANSI Fortran * character. Lower case letters are considered legal too. * Nondigits in columns 1-6 (except EOF,EOS) are illegal in fixed form. * Hopefully this works for EBCDIC too. */ #define islegal(C) ( ((C) == EOF) || ((C) == EOS) || \ ( (col_num >= 6 || free_form || isdigit(C)) && \ (toascii((int)(C)) >= toascii(' ') && \ legal_chars[toascii((int)(C))-toascii(' ')] == (C))) ) /* Array has x where ASCII character is not valid. This defn is not exactly standard f77, since it includes supported extensions: $ in format, <> in variable formats, and " in strings. Since strlen of array is 96, indexing by [toascii(c)-32] is always in bounds. */ PRIVATE char f77_legal_chars[]= " x\"x$xx'()*+,-./0123456789:x<=>xx\ ABCDEFGHIJKLMNOPQRSTUVWXYZxxxxxxabcdefghijklmnopqrstuvwxyzxxxxx"; /* This is the working copy of list of legal chars, with < any chars in idletter_list made legal. */ PRIVATE char legal_chars[sizeof(f77_legal_chars)]; /* Routine to fix up list of legal chars */ void make_legal_char_list(VOID) { int i; /* Start with the f77 list */ (void)strcpy(legal_chars,f77_legal_chars); /* Verify idletter_list has only punctuation chars. If violators, reset to default of "$_" */ for(i=0; idletter_list[i] != '\0'; i++) { if( !ispunct(idletter_list[i]) ) { (void)fprintf(stderr, "\n%cidentifier setting specifies invalid character %c: setting ignored", #ifdef OPTION_PREFIX_SLASH '/', #else '-', #endif idletter_list[i]); idletter_list = DEF_IDLETTER_LIST; /* restore to default */ break; } } /* Add nonstd nonalpha chars allowed in identifiers */ make_legal_char(idletter_list); } /* Routines to alter the default status of characters, to support various extensions to f77. */ PRIVATE void #if HAVE_STDC make_legal_char(char *s) #else /* K&R style */ make_legal_char(s) char *s; /* List of legal chars */ #endif /* HAVE_STDC */ { int i; while( *s != '\0' ) { i = toascii((int)(*s)); if(i >= toascii(' ') && i <= toascii('~')) { legal_chars[i-toascii(' ')] = *s; } s++; } } #if 0 /* Routines to alter the default status of characters, to support various extensions to f77. Not used now.*/ PROTO(void make_illegal_char,( char *s )); void make_illegal_char(s) char *s; /* List of illegal chars */ { int i; while( *s != '\0' ) { i = toascii((int)(*s)); if(i >= toascii(' ') && i <= toascii('~')) { legal_chars[i-toascii(' ')] = ( (*s != 'x')? 'x': 'X'); } s++; } } #endif /* local functions defined */ PROTO(PRIVATE void closeup,( void )); PROTO(PRIVATE void get_complex_const,( Token *token )); #ifdef ALLOW_UNIX_CPP PROTO(PRIVATE void get_cpp_directive,( void )); #endif PROTO(PRIVATE void get_dot,( Token *token )); PROTO(PRIVATE void get_dotted_keyword,( Token *token)); PROTO(PRIVATE void get_edit_descriptor,( Token *token )); PROTO(PRIVATE void get_hollerith,( Token *token, int n )); PROTO(PRIVATE void get_illegal_token,( Token *token )); PROTO(PRIVATE void get_label,( Token *token )); PROTO(PRIVATE void get_letter,( Token *token )); PROTO(PRIVATE void get_number,( Token *token )); PROTO(PRIVATE void get_punctuation,( Token *token )); PROTO(PRIVATE void get_simple_punctuation,( Token *token )); PROTO(PRIVATE int f90_relop, ( Token *token, int *multichar ) ); /* Define zero_struct to set a struct to zero. It works around the differing availability of memset and bzero. This is used to initialize a token. */ #if HAVE_MEMSET #define zero_struct(sptr,struct_size) (void)memset((sptr),0,struct_size) #else #if HAVE_BZERO #define zero_struct(sptr,struct_size) bzero((char *)(sptr),struct_size) #else PROTO(PRIVATE void zero_struct, (void *sptr, int struct_size) ); PRIVATE void zero_struct(void *sptr, int struct_size) { int i; for(i=0; itclass = tok_identifier; t->value.integer = h; t->src_text = new_src_text("",0); } /* implied_id_token */ #ifdef ALLOW_UNIX_CPP /* This does not create a token but just performs the actions needed when a cpp directive is seen. It advances curr_char to the EOS. The setting of filename is delayed to this point because it is not stored in tokens but is external, so changing it must wait till the previous statement is fully parsed and any error messages printed and arg or com list headers completed. */ PRIVATE void get_cpp_directive(VOID) { if(next_filename != (char *)NULL) { /* A #line directive on first line of toplevel source file gives name of real original file. Replace our idea of top_filename with that. But ignore an initial # 1 "" since that means cpp was working with stdin, probably from ftnpp. Likewise ignore # 1 "stdin" which is a variant form, e.g. from fpp. Nowadays cpp may indicate stdin by "" or suchlike, which we also ignore. */ if( cpp_start_of_file ) { if( next_filename[0] != '\0' && next_filename[0] != '<' && strcmp(next_filename,"stdin") != 0 ) { top_filename = next_filename; current_filename = next_filename; cpp_start_of_file = FALSE; } } else { if( cpp_inc_depth > 0 && next_filename == cpp_include_stack[cpp_inc_depth-1].filename ) { --cpp_inc_depth; } else { if( cpp_inc_depth == 0 ) { top_file_line_num = next_top_file_line_num; } /* Avoid overrun, but it will recover even if max depth is exceeded. */ if(cpp_inc_depth < MAX_INCLUDE_DEPTH) cpp_include_stack[cpp_inc_depth++].filename = current_filename; } current_filename = next_filename; } } if(f77_unix_cpp || f90_unix_cpp || !cpp_handled) { nonstandard(line_num,col_num,f90_unix_cpp,0); msg_tail(": preprocessor directive"); if(!cpp_handled) msg_tail("(not processed)"); } do { /* Skip to end of directive. It will become an EOS */ advance(); } while( curr_char != EOS); }/*get_cpp_directive*/ #endif PRIVATE void #if HAVE_STDC get_dot(Token *token) #else /* K&R style */ get_dot(token) Token *token; #endif /* HAVE_STDC */ { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; closeup(); /* Advance till nonspace char in next_char */ if(isadigit(next_char)) get_number(token); /* Numeric const */ else if(isaletter(next_char)) get_dotted_keyword(token); /* .EQ. etc. */ else get_simple_punctuation(token); /* "." out of place */ } PRIVATE const struct { char *name; int tclass,tsubclass; } dotted_keywords[]={ {".EQ.",tok_relop,relop_EQ}, {".NE.",tok_relop,relop_NE}, {".LE.",tok_relop,relop_LE}, {".LT.",tok_relop,relop_LT}, {".GE.",tok_relop,relop_GE}, {".GT.",tok_relop,relop_GT}, {".AND.",tok_AND,0}, {".OR.",tok_OR,0}, {".NOT.",tok_NOT,0}, {".FALSE.",tok_logical_const,FALSE}, {".TRUE.",tok_logical_const,TRUE}, {".EQV.",tok_EQV,0}, {".NEQV.",tok_NEQV,0}, {NULL,0,0} }; PRIVATE void #if HAVE_STDC get_dotted_keyword(Token *token) #else /* K&R style */ get_dotted_keyword(token) Token *token; #endif /* HAVE_STDC */ { int i, has_embedded_space, /* Spaces inside keyword */ space_seen_lately; /* Flag for catching embedded space */ initial_flag = FALSE; /* Watch for embedded space, but not (in fixed form) between dots and letters of keyword. I.e. ". eq ." is OK, but not ".e q." */ has_embedded_space = FALSE; bi_advance(); /* gobble the initial '.' */ space_seen_lately = (!free_form? FALSE: closeup_saw_whitespace); while(isaletter(curr_char)) { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = (char)makeupper(curr_char); if(space_seen_lately) has_embedded_space = TRUE; bi_advance(); space_seen_lately = iswhitespace(prev_char); } /* Free form complains about space before last dot */ if(free_form && space_seen_lately) has_embedded_space = TRUE; if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = '.'; /* make it complete */ if(curr_char != '.') { lex_error("Badly formed logical/relational operator or constant"); } else { advance(); /* gobble the final '.' */ } if( (pretty_extra_space || (free_form && f90_freeform_space)) && has_embedded_space) { space_violation(token->line_num,token->col_num, "keyword has embedded space"); } for(i=0; dotted_keywords[i].name != NULL; i++) { if(strncmp(src_text_buf+1, /* only compare the significant parts */ dotted_keywords[i].name+1, src_text_len-2) == 0) { token->tclass = dotted_keywords[i].tclass; token->tsubclass = dotted_keywords[i].tsubclass; token->value.string = token->src_text = dotted_keywords[i].name; #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nDotted keyword:\t\t%s", token->src_text); #endif return; } } /* Match not found: signal an error */ lex_error("Unknown logical/relational operator or constant"); get_illegal_token(token); } /* get_dotted_keyword */ PRIVATE void #if HAVE_STDC get_edit_descriptor(Token *token) #else /* K&R style */ get_edit_descriptor(token) Token *token; #endif /* HAVE_STDC */ { int c; long repeat_spec; int Ee_allowed=FALSE; /* true if edit descr can have Ee after w.d */ if(isadigit(curr_char)) { /* Digit: repeat spec or holl or kP or nX */ repeat_spec = 0; do { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; repeat_spec = repeat_spec*10L + (long)BCD(curr_char); if( makeupper(next_char) == 'H' ) inside_hollerith = TRUE;/* get ready for hollerith*/ bi_advance(); } while(isadigit(curr_char)); if( makeupper(curr_char) == 'H' ) { /* nH... pass off to hollerith routine */ get_hollerith(token, (int)repeat_spec); return; } else { /* Otherwise it is a repeat spec or the numeric part of kP or nX which we treat as repeat specs too */ token->tclass = tok_integer_const; token->value.integer = repeat_spec; token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nInteger const:\t\t%ld (from %s)", repeat_spec, token->src_text); #endif } }/* end if digit */ else if(isaletter(curr_char)) { c = makeupper(curr_char); if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); switch(c) { case 'P': /* P of kP k seen previously */ if(prev_token_class != tok_integer_const) { if(f77_format_extensions || f90_format_extensions){ nonstandard(token->line_num,token->col_num,f90_format_extensions,0); msg_tail(": P must follow a number"); } } break; case 'X': /* X or nX */ break; case 'S': /* S or SP or SS */ c = makeupper(curr_char); if(c == 'S' || c == 'P') { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); } break; case 'B': /* BN or BZ */ c = makeupper(curr_char); if(c == 'N' || c == 'Z') { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); } else { if(f77_format_extensions){ nonstandard(token->line_num,token->col_num,0,0); msg_tail(": N or Z expected after B"); } goto get_w_d; /* F90 has Bw.d: allow that */ } break; case 'T': /* Tc or TLc or TRc */ c = makeupper(curr_char); if(c == 'L' || c == 'R') { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); } case 'E': /* In F90, E can be followed by N or S */ c = makeupper(curr_char); if( c == 'N' || c == 'S' ) { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); if(f77_format_extensions){ nonstandard(token->line_num,token->col_num,0,0); } } Ee_allowed = TRUE; goto get_w_d; case 'O': /* These are OK in f90 but not f77 */ case 'Z': if(f77_format_extensions){ nonstandard(token->line_num,token->col_num,0,0); } goto get_w_d; /* Iw, Fw.c and similar forms */ case 'G': Ee_allowed = TRUE; /* OK in F90 to have Ee trailer */ /*FALLTHRU*/ case 'A': case 'D': case 'F': case 'I': case 'L': get_w_d: /* Get the w field if any */ while( isadigit(curr_char) ){ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); } /* Include any dot followed by number (e.g. F10.5) */ if( curr_char == '.' ) { do { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); } while( isadigit(curr_char) ); } /* w.d can sometimes be followed by Ee */ if( Ee_allowed && (c=makeupper(curr_char)) == 'E' ) { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); while( isadigit(curr_char) ){ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); } } break; default: if(f77_format_extensions || f90_format_extensions) { nonstandard(token->line_num,token->col_num,f90_format_extensions,0); msg_tail(": edit descriptor"); src_text_buf[src_text_len++] = '\0'; msg_tail(src_text_buf); } goto get_w_d; }/*end switch*/ token->tclass = tok_edit_descriptor; token->value.string = NULL; token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nEdit descriptor:\t%s",token->src_text); #endif }/*end else if isaletter*/ /* Apostrophe or quote mark means a string. */ else if( isaquote(curr_char) ) { get_string(token); } /* Otherwise it is mere punctuation. Handle it here ourself to avoid complications. */ else { src_text_buf[src_text_len++] = curr_char; get_simple_punctuation(token); } } PRIVATE void #if HAVE_STDC get_hollerith(Token *token, int n) /* Gets string of form nHaaaa */ #else /* K&R style */ get_hollerith(token,n) /* Gets string of form nHaaaa */ Token *token; int n; #endif /* HAVE_STDC */ { int i; LINENO_t last_line_num; COLNO_t last_col_num; /* strsize = length of only the string being defined fullsize = length of whole hollerith const, which includes length spec already stored in src_text_buf plus the H plus the text plus final nul. */ int strsize=n, leadin=src_text_len+1, fullsize=leadin+strsize+1; char *s; initial_flag = FALSE; s = new_src_text_alloc(fullsize); for(i=0; i 0) s[leadin+strsize] = '\0'; inside_hollerith = FALSE; token->tclass = tok_hollerith; token->value.string = s + leadin; token->size = n; token->src_text = s; #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nHollerith:\t\t%s (from %s)", token->value.string, token->src_text); #endif } /* get_hollerith */ PRIVATE void #if HAVE_STDC get_illegal_token(Token *token) /* Handle an illegal input situation */ #else /* K&R style */ get_illegal_token(token) /* Handle an illegal input situation */ Token *token; #endif /* HAVE_STDC */ { token->tclass = tok_illegal; token->src_text = new_src_text("",0); #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nILLEGAL TOKEN"); #endif } /* get_illegal_token */ /* Read a label from label field. */ PRIVATE void #if HAVE_STDC get_label(Token *token) #else /* K&R style */ get_label(token) Token *token; #endif /* HAVE_STDC */ { int value=0; int space_seen=FALSE, has_embedded_space=FALSE; if( !free_form ) { while( isadigit(curr_char) && col_num < 6 ) { if(space_seen) has_embedded_space = TRUE; value = value*10 + BCD(curr_char); src_text_buf[src_text_len++] = curr_char; advance(); while(curr_char==' ' && col_num < 6) { space_seen = TRUE; advance(); } } if((pretty_extra_space || (free_form && f90_freeform_space)) && has_embedded_space) { space_violation(token->line_num,token->col_num, "label has embedded space"); } } else { /* free form */ int numdigits=0; while( isadigit(curr_char) ) { value = value*10 + BCD(curr_char); if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; ++numdigits; advance(); } /* label can have only up to 5 digits */ if( numdigits > 5 && misc_warn) { syntax_error(token->line_num,token->col_num, "statement label exceeds 5 digits"); } } token->tclass = tok_label; token->value.integer = value; token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nLabel:\t\t\t%d (from %s)", value, token->src_text); #endif } /* get_label */ PRIVATE void #if HAVE_STDC get_letter(Token *token) /* Gets letter in IMPLICIT list */ #else /* K&R style */ get_letter(token) /* Gets letter in IMPLICIT list */ Token *token; #endif /* HAVE_STDC */ { token->tclass = tok_letter; token->tsubclass = src_text_buf[src_text_len++] = makeupper(curr_char); token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nLetter:\t\t\t%s",token->src_text); #endif advance(); } /* get_letter */ /* get_number reads a number and determines data type: integer, * real, or double precision. */ /* This belongs in ftnchek.h, perhaps. Defines number of significant figures that are reasonable for a single-precision real constant. Works out to 9 for wordsize=4, 21 for wordsize=8. These allow for a couple of extra digits for rounding. Used in -trunc warning. */ #define REAL_SIGFIGS (local_wordsize==0? 8: (local_wordsize-1)*3) PRIVATE int getting_complex_const=FALSE; PRIVATE void #if HAVE_STDC get_number(Token *token) #else /* K&R style */ get_number(token) Token *token; #endif /* HAVE_STDC */ { DBLVAL dvalue,leftside,rightside,pwr_of_ten; int exponent,datatype,c; #ifdef DEBUG_FORLEX int expsign; #endif int numdigits, /* Count of digits in integer, significant or not */ sigfigs; /* Count of significant digits */ /* For freeform warnings, this gets set when we arrive here via a leading '.', otherwise is false. */ int space_seen_lately = closeup_saw_whitespace; int has_embedded_space = FALSE; initial_flag = FALSE; leftside = (DBLVAL)0; numdigits = sigfigs = 0; datatype = tok_integer_const; while(isadigit(curr_char)) { if(space_seen_lately) has_embedded_space = TRUE; leftside = leftside*(DBLVAL)10 + (DBLVAL)BCD(curr_char); ++numdigits; /* Do not count leading zeroes as significant */ if(sigfigs > 0 || curr_char != '0') ++sigfigs; if( !integer_context && makeupper(next_char) == 'H' ) inside_hollerith = TRUE;/* get ready for hollerith*/ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; /* Embedded space is worth preserving since it is often used in long numbers. Any amount of blanks + tabs -> 1 blank. Exception: integer_context says upcoming item is a label or datatype length spec. */ if(! integer_context && (next_char == ' ' || next_char == '\t')) { if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = ' '; } bi_advance(); space_seen_lately = iswhitespace(prev_char); } /* If context specifies integer expected, skip to end. Otherwise scan on ahead for more. */ if( integer_context) { if(numdigits == 0) { lex_error("integer expected"); advance(); /* gobble something to avoid infinite loop */ } } else {/* not integer_context */ if( makeupper(curr_char) == 'H' ){ /* nnH means hollerith */ if(leftside == (DBLVAL)0) { lex_error("Zero-length hollerith constant"); inside_hollerith = FALSE; advance(); get_illegal_token(token); } else { if(src_text_buf[src_text_len-1] == ' ') --src_text_len; get_hollerith(token, (int)leftside); } return; } rightside = (DBLVAL)0; pwr_of_ten = (DBLVAL)1; closeup(); /* Pull in the lookahead character */ if( curr_char == '.' && /* don't be fooled by 1.eq.N or I.eq.1.and. etc */ !looking_at_relop() ) { datatype = tok_real_const; if( space_seen_lately ) has_embedded_space = TRUE; if(numdigits > 0) /* if dot is initial it is already stored */ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); space_seen_lately = closeup_saw_whitespace || iswhitespace(prev_char); closeup_saw_whitespace = FALSE; while(isadigit(curr_char)) { if( space_seen_lately ) has_embedded_space = TRUE; rightside = rightside*(DBLVAL)10 + (DBLVAL)BCD(curr_char); ++numdigits; /* not used past here, but maintain it anyway */ if(sigfigs > 0 || curr_char != '0') ++sigfigs; pwr_of_ten /= (DBLVAL)10; if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; if(next_char == ' ' || next_char == '\t') if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = ' '; bi_advance(); space_seen_lately = iswhitespace(prev_char); } } #ifdef DEBUG_FORLEX if(debug_lexer) dvalue = leftside + rightside*pwr_of_ten; else #endif dvalue = (DBLVAL)0; exponent = 0; #ifdef DEBUG_FORLEX expsign = 1; #endif /* Integer followed by E or D gives a real/d.p constant. We also accept Q for quad (real*16) constants. */ space_seen_lately = space_seen_lately || closeup_saw_whitespace; if( ( (c = makeupper(curr_char)) == 'E' || c == 'D' || c == 'Q') ) { datatype = ((c == 'E')? tok_real_const: ((c == 'D')? tok_dp_const: tok_quad_const)); if( space_seen_lately ) has_embedded_space = TRUE; if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; bi_advance(); space_seen_lately = iswhitespace(prev_char); if(curr_char == '+') { #ifdef DEBUG_FORLEX expsign = 1; #endif if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); space_seen_lately = space_seen_lately || iswhitespace(prev_char); } else if(curr_char == '-') { #ifdef DEBUG_FORLEX expsign = -1; #endif if( iswhitespace(prev_char) ) has_embedded_space = TRUE; if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); space_seen_lately = space_seen_lately || iswhitespace(prev_char); } if(!isadigit(curr_char)) { lex_error("Badly formed real constant"); } else while(isadigit(curr_char)) { if( space_seen_lately ) has_embedded_space = TRUE; exponent = exponent*10 + (curr_char-'0'); if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); space_seen_lately = iswhitespace(prev_char); } /* Compute real value only if debugging. If it exceeds max magnitude, computing it may cause crash. At this time, value of real const is not used for anything. */ #ifdef DEBUG_FORLEX if(debug_lexer) dvalue *= pow(10.0, (double)(exponent*expsign)); else #endif dvalue = (DBLVAL)0; } }/* end if(!integer_context) */ if(src_text_buf[src_text_len-1] == ' ') /* remove any trailing blank */ --src_text_len; token->tclass = datatype; /* If this is part of complex const, do not store src_text but arrange so debugging works. */ if(!getting_complex_const) { token->src_text = new_src_text(src_text_buf,src_text_len); } #ifdef DEBUG_FORLEX else { src_text_buf[src_text_len] = '\0'; token->src_text = src_text_buf; } #endif if( free_form && (pretty_extra_space || f90_freeform_space) && has_embedded_space ) { space_violation(token->line_num,token->col_num, "Numeric constant has embedded space"); } switch(datatype) { case tok_integer_const: token->value.integer = (long)leftside; #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nInteger const:\t\t%ld (from %s)", token->value.integer, token->src_text); #endif break; case tok_real_const: /* store single as double lest it overflow */ token->value.dbl = dvalue; if(trunc_sigfigs && sigfigs >= REAL_SIGFIGS) { warning(token->line_num,token->col_num, "Single-precision real constant has more digits than are stored"); } #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nReal const:\t\t%g (from %s)", (double)token->value.dbl, token->src_text); #endif break; case tok_dp_const: token->value.dbl = dvalue; #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nDouble const:\t\t%g (from %s)", (double)token->value.dbl, token->src_text); #endif break; case tok_quad_const: /* store quad as double in case host doesn't do quad */ token->value.dbl = dvalue; #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nQuad const:\t\t%g (from %s)", (double)token->value.dbl, token->src_text); #endif break; } } /* get_number */ /* get_complex_constant reads an entity of the form (num,num) where num is any [signed] numeric constant. It will only be called when looking_at() has guaranteed that there is one there. The token receives the real part as a number. The imaginary part is not stored. Whitespace is allowed between ( and num, around the comma, and between num and ) but not within num. */ PRIVATE void #if HAVE_STDC get_complex_const(Token *token) #else /* K&R style */ get_complex_const(token) Token *token; #endif /* HAVE_STDC */ { Token imag_part; /* temporary to hold imag part */ #ifdef DEBUG_FORLEX double sign=(DBLVAL)1; #endif int dble_size=FALSE; /* flag to set if parts are D floats */ int imag_dble_size; /* if imaginary part D float */ LINENO_t comma_line_num; COLNO_t comma_col_num; getting_complex_const = TRUE; initial_flag = FALSE; bi_advance(); /* skip over the initial paren (already stored) */ if(curr_char == '+' || curr_char == '-') { #ifdef DEBUG_FORLEX if(curr_char == '-') sign = (DBLVAL)(-1); #endif if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); } #ifdef DEBUG_FORLEX if(debug_lexer){ (void)fprintf(list_fd,"\nComplex const:("); if(sign < 0.0) (void)fprintf(list_fd," -"); } #endif closeup_saw_whitespace = FALSE; get_number(token); switch((short)token->tclass) { case tok_integer_const: #ifdef DEBUG_FORLEX if(debug_lexer) token->value.dbl = sign*(double)token->value.integer; else #endif token->value.dbl = (DBLVAL)0; break; case tok_dp_const: dble_size=TRUE; /*FALLTHRU*/ case tok_real_const: #ifdef DEBUG_FORLEX if(debug_lexer) token->value.dbl = sign*token->value.dbl; else #endif token->value.dbl = (DBLVAL)0; break; } while(iswhitespace(curr_char)) advance(); comma_line_num = line_num; comma_col_num = col_num; if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; if(next_char == ' ' || next_char == '\t') /* preserve space after , */ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = ' '; bi_advance(); /* skip over the comma */ if(curr_char == '+' || curr_char == '-') { #ifdef DEBUG_FORLEX if(curr_char == '-') sign = (DBLVAL)(-1); #endif if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; bi_advance(); } #ifdef DEBUG_FORLEX if(debug_lexer){ (void)fprintf(list_fd,"\n,"); if(sign < 0.0) (void)fprintf(list_fd," -"); } #endif closeup_saw_whitespace = FALSE; /* Initialize imag_part token fields. */ zero_struct(&imag_part,sizeof(imag_part)); imag_part.line_num = line_num; imag_part.col_num = col_num; get_number(&imag_part); imag_dble_size = (imag_part.tclass == tok_dp_const); if(dble_size != imag_dble_size) { warning(comma_line_num,comma_col_num, "different precision in real and imaginary parts"); } else if(f77_double_complex) { if(dble_size) warning(token->line_num,token->col_num, "nonstandard double precision complex constant"); } dble_size = (dble_size || imag_dble_size); while(iswhitespace(curr_char)) advance(); if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = curr_char; advance(); /* skip over final paren */ if(dble_size) token->tclass = tok_dcomplex_const; else token->tclass = tok_complex_const; token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef DEBUG_FORLEX if(debug_lexer) { (void)fprintf(list_fd,"\n\t\t\tsource text=%s", token->src_text); (void)fprintf(list_fd,"\n)"); } #endif getting_complex_const = FALSE; } #ifdef ALLOW_TYPELESS_CONSTANTS /* Routine to get constants of the forms: B'nnnn' (f90std) 'nnnn'B (nonf90) -- binary O'nnnn' (f90std) 'nnnn'O (nonf90) -- octal Z'nnnn' (f90std) X'nnnn' 'nnnn'X 'nnnn'Z (nonf90) -- hex No check of whether digits are less than base. Warning is issued here instead of in parser since constant looks like a normal integer by the time the parser sees it. */ void get_binary_const(Token *token, int c, int space_seen_lately) /* c is base character: madeupper'ed by caller */ { long value=0; int base,digit; int badly_formed=FALSE; int i,j; /* indices in src_text_buf for repacking */ if(c == 'O') base = 8; else if(c == 'X' || c == 'Z') base = 16; else if(c == 'B') base = 2; else { syntax_error(token->line_num,token->col_num, "Unknown base for typeless constant -- octal assumed"); base = 8; } /* F90 allows initial B, O, Z but not X */ if( c == 'X' && f90_typeless_constants ) { nonstandard(token->line_num,token->col_num,f90_typeless_constants,0); } /* Advance i to starting digit */ i = 0; while( ! isaquote(src_text_buf[i]) ) { ++i; } j = ++i; /* Input = Output to start */ /* Scan the string, moving chars down to change multi spaces to single blanks, and converting digits. */ while( ! isaquote(src_text_buf[i]) ) { digit=src_text_buf[i++]; if( ishex(digit) ){ value = value*base + HEX(digit); src_text_buf[j++] = digit; } else { /* Anything else should be space */ if( isspace(digit) ) { if( free_form ) space_seen_lately = TRUE; /* blanks not OK in free form */ src_text_buf[j++] = ' '; while( isspace(src_text_buf[i]) ) { ++i; } } else { badly_formed = TRUE; } } } if( badly_formed ) { syntax_error(token->line_num,token->col_num, "badly formed typeless constant"); } else if((pretty_extra_space || (free_form && f90_freeform_space)) && space_seen_lately) { space_violation(token->line_num,token->col_num, "typeless constant has embedded space"); } while(i < src_text_len) src_text_buf[j++] = src_text_buf[i++]; /* Copy the rest over */ src_text_len = j; token->tclass = tok_integer_const; token->value.integer = value; token->src_text = new_src_text(src_text_buf,src_text_len); if(f77_typeless_constants) { nonstandard(token->line_num,token->col_num,0,0); } #ifdef DEBUG_FORLEX if(debug_lexer) (void)fprintf(list_fd,"\nInteger const:\t\t%ld (from %s)", token->value.integer, token->src_text); #endif }/*get_binary_const*/ #endif/*ALLOW_TYPELESS_CONSTANTS*/ PRIVATE void #if HAVE_STDC get_punctuation(Token *token) #else /* K&R style */ get_punctuation(token) Token *token; #endif /* HAVE_STDC */ { int multichar, /* Flags To catch spaces inside multi-char token */ space_seen_lately; extern int in_attrbased_typedecl; /* shared with fortran.y */ multichar = FALSE; src_text_buf[src_text_len++] = curr_char; /* If lexing attr-based type decl, turn off the flag when the double colon is reached... */ if( in_attrbased_typedecl && curr_char == ':' ) { in_attrbased_typedecl = FALSE; } /* ...whereas turn initial_flag back on if a comma is found. */ if( in_attrbased_typedecl && curr_char == ',' ) { initial_flag = TRUE; } if( !in_attrbased_typedecl ) initial_flag = FALSE; space_seen_lately = iswhitespace(next_char); closeup(); if(curr_char == '*' && next_char == '*') { token->tclass = tok_power; multichar = TRUE; advance(); src_text_buf[src_text_len++] = curr_char; } else if(curr_char == '/' && next_char == '/' ) { /* If this is COMMON / / list, then embedded space is OK */ if( prev_token_class == tok_COMMON ) { space_seen_lately = FALSE; } /* Otherwise it is concatenation operator */ else { extern int in_assignment_stmt; /* for obscure rule check */ if(in_assignment_stmt) make_true(IN_ASSIGN,token->TOK_flags); } token->tclass = tok_concat; multichar = TRUE; advance(); src_text_buf[src_text_len++] = curr_char; } /* recognize F90 pointer assignment => */ else if(curr_char == '=' && next_char == '>') { token->tclass = tok_pointer_assignment; multichar = TRUE; advance(); src_text_buf[src_text_len++] = curr_char; } /* recognize F90 rel-ops here */ else if( f90_relop(token,&multichar) ) { token->tclass = tok_relop; if(f77_relops) { nonstandard(token->line_num,token->col_num,0,0); msg_tail("for relational operator"); } } /* paren can be the start of complex constant if everything is just right. Maybe more tests needed here. */ else if(complex_const_allowed && curr_char == '(' && ( (prev_token_class<256 && ispunct(prev_token_class)) || prev_token_class == tok_relop || prev_token_class == tok_power ) && looking_at_cplx()) { get_complex_const(token); return; } else { /* Provide special left parenthesis to avoid s/r conflict in grammar. */ if( need_special_lparen ) { /* ASSERT ( curr_char == '(' ) */ token->tclass = tok_lparen; need_special_lparen = FALSE; } else { token->tclass = curr_char; } } token->src_text = new_src_text(src_text_buf,src_text_len); if((pretty_extra_space || (free_form && f90_freeform_space)) && multichar && space_seen_lately) { space_violation(token->line_num,token->col_num, "multi-character operator has embedded space"); } advance(); #ifdef DEBUG_FORLEX if(debug_lexer) { if(token->tclass == EOS) (void)fprintf(list_fd,"\n\t\t\tEOS"); else { (void)fprintf(list_fd,"\nPunctuation:\t\t"); if(token->tclass == tok_lparen) (void)fprintf(list_fd,"special "); (void)fprintf(list_fd,"%s",token->src_text); } } #endif } /* get_punctuation */ PRIVATE void #if HAVE_STDC get_simple_punctuation(Token *token) #else /* K&R style */ get_simple_punctuation(token) Token *token; #endif /* HAVE_STDC */ { /* Like get_punctuation but lacks special cases. Just gets the punctuation character. Text is already in src_text_buf. */ token->tclass = curr_char; token->src_text = new_src_text(src_text_buf,src_text_len); advance(); #ifdef DEBUG_FORLEX if(debug_lexer) { if(token->tclass == EOS) (void)fprintf(list_fd,"\n\t\t\tEOS"); else (void)fprintf(list_fd,"\nPunctuation:\t\t%s",token->src_text); } #endif } /* get_simple_punctuation */ PRIVATE int #if HAVE_STDC f90_relop(Token *token, int *multichar) #else /* K&R style */ f90_relop(token, multichar) Token *token; int *multichar; #endif /* HAVE_STDC */ { *multichar = FALSE; if( curr_char == '>' ) { if( next_char == '=' ) { token->tsubclass = relop_GE; token->src_text = ">="; goto twochar_relop; } else { token->tsubclass = relop_GT; token->value.string = ">"; return TRUE; } } if( curr_char == '<' ) { if( next_char == '=' ) { token->tsubclass = relop_LE; token->value.string = "<="; goto twochar_relop; } else { token->tsubclass = relop_LT; token->value.string = "<"; return TRUE; } } if( curr_char == '=' && next_char == '=' ) { token->tsubclass = relop_EQ; token->value.string = "=="; goto twochar_relop; } if( curr_char == '/' && next_char == '=' ) { token->tsubclass = relop_NE; token->value.string = "/="; goto twochar_relop; } return FALSE; /* Two-character relops: need to gobble 2nd char */ twochar_relop: *multichar = TRUE; advance(); src_text_buf[src_text_len++] = curr_char; return TRUE; } void #if HAVE_STDC get_string(Token *token) /* Gets string of form 'aaaa' */ #else /* K&R style */ get_string(token) /* Gets string of form 'aaaa' */ Token *token; #endif /* HAVE_STDC */ { int len; COLNO_t last_col_num; int has_backslash = FALSE; /* for portability check */ quote_char = curr_char; /* remember the delimiter */ initial_flag = FALSE; inside_string = TRUE; last_col_num=col_num; src_text_buf[src_text_len++] = curr_char; /* store leading quote */ advance(); /* Gobble leading quote */ len = 0; for(;;) { while(curr_char == EOL) { /* Fixed form: treat short line as if extended with blanks to 72 columns. Free form: line ends at EOL */ if( ! free_form ) { COLNO_t col; for(col=last_col_num; col c */ default: value = curr_char; break; } #endif /* !LEX_RAWSTRINGS*/ }/* end if source_unix_backslash */ #endif /*ALLOW_UNIX_BACKSLASH*/ }/* end if curr_char == backslash */ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = value; ++len; last_col_num=col_num; advance(); } } #ifdef ALLOW_TYPELESS_CONSTANTS /* Watch for const like 'nnn'X */ if(!inside_format) { int space_seen_lately = iswhitespace(curr_char); while(iswhitespace(curr_char)) advance(); if(isaletter(curr_char)) { int c=makeupper(curr_char); #ifndef LEX_RAWSTRINGS if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = quote_char; #endif if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = c; advance(); /* Gobble the base character */ /* F90 does not allow forms 'ddd'[BOZ]. Suppress message here if letter is not in [BOZ] since that gets a warning in get_binary_const */ if( f90_typeless_constants && (c=='Z' || c=='O' || c=='B') ) { nonstandard(token->line_num,token->col_num,f90_typeless_constants,0); } get_binary_const(token,c,space_seen_lately); return; } } #endif /*ALLOW_TYPELESS_CONSTANTS*/ if(len == 0) { warning(line_num,col_num, "Zero-length string not allowed\n"); len = 1; } if(quote_char != '\'') { /* Warn if quote is used instead of apost */ if(f77_quotemarks) { nonstandard(token->line_num,token->col_num,0,0); msg_tail(": character string should be delimited by apostrophes"); } } inside_string = FALSE; token->tclass = tok_string; token->size = len; token->src_text = new_src_text(src_text_buf,src_text_len); #ifdef LEX_RAWSTRINGS token->value.string = token->src_text; /* Includes the initial quote */ #else token->value.string = token->src_text+1; /* Skips the initial quote */ #endif /* Under -port warn if char size > 255 */ if(port_long_string) { if(len > 255) nonportable(line_num,col_num, "character constant length exceeds 255"); } #ifdef DEBUG_FORLEX if(debug_lexer && src_text_buf[0] == quote_char) { /* skip if doing X'nnnn' */ (void)fprintf(list_fd,"\nString:\t\t\t%s",token->value.string); (void)fprintf(list_fd,"\n\t\t(from\t%s)",token->src_text); } #endif } /* get_string */ /* This routine is called when -pretty=extra-space or missing-space are in effect, or when in free form mode. It figures out the right kind of warning to issue. */ void space_violation( LINENO_t lineno, COLNO_t colno, const char *s ) { if(free_form && f90_freeform_space) { syntax_error(lineno,colno,s); } else { ugly_code(lineno,colno,s); } } /* End of Forlex module */ ftnchek-3.3.1/forlex.h0000644000031000002260000001145307714530432015237 0ustar moniotstaff00000000000000/* $Id: forlex.h,v 1.6 2003/08/07 20:05:46 moniot Exp $ Macros and shared info for lexical analysis routines Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #ifdef FORLEX #define LEX_SHARED #else #define LEX_SHARED extern #endif #define EOL '\n' /* Character for end of line, not of statement */ extern YYSTYPE yylval; /* Lexical value for Yacc */ LEX_SHARED int free_form; /* TRUE if source format is free-form */ /* Since EOS is special, need special macros for it */ #define makeupper(C) (((C) != EOS && islower((int)(C)))? toupper((int)(C)):(C)) #define iswhitespace(C) ( (C) != EOS && isspace((int)(C)) ) #define isadigit(C) ( (C) != EOS && isdigit((int)(C)) ) #define isaletter(C) ( (C) != EOS && isalpha((int)(C)) ) #define ishex(C) ((C) != EOS && (isdigit((int)(C)) ||\ (toupper((int)(C))>='A' && toupper((int)(C))<='F') )) /* Define isidletter to allow nonalpha chars in idletter_list Nonstandardness is handled later. */ #define isidletter(C) ( (C) != EOS && ( isalpha((int)(C)) || \ ((C) != '\0' && strchr(idletter_list,(C)) != (char *)NULL) )) /* lead-in to a string: standard is ' but allow " too*/ #ifdef ALLOW_QUOTEMARKS #define isaquote(C) ((C) == '\'' || (C) == '"') #else #define isaquote(C) ((C) == '\'') #endif #define BCD(C) ((C)-'0') /* Binary value of digit */ #define HEX(C) (isdigit(C)?BCD(C):(makeupper(C)-'A'+10)) /* Hex value */ /* Blank-insensitive advance in fixed form mode, plain advance in free form mode. */ #define bi_advance() do {advance();} while(iswhitespace(curr_char)) LEX_SHARED int inside_string, /* TRUE when reading a string or hollerith */ inside_hollerith, /* TRUE when reading a hollerith */ quote_char, /* string delimiter: ' or " */ WHILE_expected, /* DO seen and WHILE is coming up */ need_special_lparen, /* flag for left paren after type name */ contin_count, /* Number of continuation lines of stmt */ prev_char, /* shared between forlex.c and advance.c */ curr_char, /* Current input character */ next_char; /* Lookahead character */ LEX_SHARED COLNO_t max_stmt_col; /* line length limit */ #ifdef ALLOW_UNIX_CPP LEX_SHARED char *next_filename; LEX_SHARED int cpp_handled, cpp_start_of_file; LEX_SHARED LINENO_t next_top_file_line_num; /* This struct holds info from #include lines that have been turned into #line lines by the preprocessor. (ftnchek does not handle #include lines itself. It infers them from the #line directives that result.) The info kept here is not needed to keep track of current line and filename, since that is already done by the #line mechanism. But it is used to track the original include depth so that top_file_line_num can be maintained correctly. Also helps avoid storing the same filenames repeatedly in new global space. */ typedef struct { char *filename; /* Name of file included at this depth */ } CppIncludeStack; LEX_SHARED CppIncludeStack cpp_include_stack[MAX_INCLUDE_DEPTH]; LEX_SHARED int cpp_inc_depth; #endif LEX_SHARED char src_text_buf[MAX_SRC_TEXT]; LEX_SHARED int src_text_len; #ifdef DEBUG_INCLUDE LEX_SHARED int debug_include #ifdef FORLEX =TRUE #endif ; #endif /* Routines shared by lexical analysis */ /* defined in advance.c */ PROTO( void advance,( void )); PROTO( int looking_at_cplx,( void )); PROTO( int looking_at_keywd,( int token_class )); PROTO( int looking_at_relop,( void )); PROTO( int looking_at_implicit_list,( void )); /* defined in forlex.c */ PROTO( void get_binary_const,( Token *token, int c, int space_seen )); PROTO( void get_string,( Token *token )); PROTO( void space_violation, ( LINENO_t lineno, COLNO_t colno, const char *s )); /* defined in keywords.c */ PROTO( void get_identifier,( Token *token )); ftnchek-3.3.1/fortran.y0000644000031000002260000037664110147001614015436 0ustar moniotstaff00000000000000/* $Id: fortran.y,v 1.64 2004/11/18 02:06:04 moniot Exp $ fortran.y: Yacc grammar for Fortran program checker. Uses the yylex() in file FORLEX.C */ %{ /* fortran.c: Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* This grammar is ANSI standard-conforming, except for: -- complex constant and a few other ambiguities needing significant lookahead cannot be split across lines. Extensions supported: -- Case insensitive. -- Hollerith constants. -- Variable names may be longer than 6 characters. Also allows underscores and dollar signs in names. -- DO ... ENDDO and DO WHILE loop forms allowed. -- NAMELIST supported. -- TYPE and ACCEPT I/O statements allowed. -- Tabs are permitted in input, and (except in character data) expand into blanks up to the next column equal to 1 mod 8. -- Type declarations INTEGER*2, REAL*8, etc. are allowed. -- IMPLICIT NONE allowed. -- CASE construct supported */ #include #include #include #include "ftnchek.h" #include "symtab.h" /* The following section is for use with bison-derived parser. Define alloca to be malloc for those cases not covered by the cases covered there. The ifdefs are those in the skeleton parser with includes removed */ #ifdef AIXC /* IBM RS/6000 xlc compiler does it this way */ #pragma alloca #endif #ifndef alloca #ifdef __GNUC__ #else /* Not GNU C. */ #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) #else /* Not sparc */ #ifdef MSDOS #endif /* MSDOS */ #endif /* Not sparc. */ #endif /* Not GNU C. */ #define alloca malloc #endif /* alloca now defined. */ #ifndef YYDEBUG /* If not declared otherwise... */ int yydebug; /* declare yydebug to satisfy extern in ftnchek.c */ #ifdef DEVELOPMENT #define YYDEBUG 1 /* For development it is handy */ #else #define YYDEBUG 0 #endif #endif #ifdef DEVELOPMENT #define DEBUG_PARSER #endif PRIVATE int current_datatype, /* set when parse type_name or type_stmt */ current_size_is_adjustable, /* set in CHARACTER declarations */ current_size_is_expression, /* set in CHARACTER declarations */ current_save_attr, /* set if SAVE attribute given in type decl */ current_external_attr, /* set if EXTERNAL attr given */ current_intrinsic_attr, /* set if INTRINSIC attr given */ current_parameter_attr, /* set if PARAMETER attr given */ current_pointer_attr, /* set if POINTER attr given */ current_target_attr, /* set if TARGET attr given */ current_allocatable_attr, /* set if ALLOCATABLE attr given */ label_dummy_arg_count, /* number of labels in dummy argument list */ len_selector_given, /* flag for use in processing CHARACTER decls */ len_spec_item_count,/* count of items in CHARACTER len-selector list */ control_item_count; /* count of items in control_info_list */ PRIVATE Token *current_dim_bound_list; /* attr-based dim bound tokenlist */ /* Information about the current I/O statement */ int current_io_unit_id; /* hashnum of unit id of current I/O operation */ int current_io_unit_no; /* unit number of current I/O operation */ IO_ACCESS_TYPE current_io_access;/* access mode (direct/sequential) */ IO_FORM_TYPE current_io_form; /* form (formatted/unformatted) */ int io_internal_file, /* Flag for catching misuse of internal files */ io_list_directed, /* Flag for use in processing io control lists */ io_warning_given; /* to prevent multiple warnings */ /* Flag shared with forlex for lexing hints */ int stmt_sequence_no, /* set when parsing, reset to 0 at end_stmt */ f90_stmt_sequence_no; PRIVATE long current_typesize; /* for type*len declarations: value of len */ PRIVATE char *current_len_text; /* for type*len declarations: text of len */ PRIVATE int kind_warning_given=FALSE; /* to say "not interpreted" only once */ PRIVATE Token save_token, /* Holds token shared by productions */ len_spec_token, /* Holds character length spec temporarily */ dim_bound_token; /* Holds attr-based dim-bound list header */ extern LINENO_t prev_stmt_line_num; /* shared with advance */ LINENO_t true_prev_stmt_line_num; /* shared with symtab.c */ PRIVATE int current_module_type, executable_stmt=FALSE, prev_stmt_class=0, /* flags for lexer */ labeled_stmt_type, /* for label handling */ if_line_num, if_col_num, /* for picky construct-usage warnings */ prev_goto=FALSE, goto_flag=FALSE; /* if unconditional GOTO was encountered */ int complex_const_allowed=FALSE, /* for help in lookahead for these */ construct_name_seen=FALSE, /* for help recognizing DO */ param_noparen=FALSE, /* for different PARAMETER stmt semantics */ in_assignment_stmt=FALSE, in_attrbased_typedecl=FALSE,/* help is_keyword lex type, attr :: list */ inside_format=FALSE, /* when inside parens of FORMAT */ integer_context=FALSE; /* says integers-only are to follow */ /* Macro for initializing attributes of type decl. */ #define reset_type_attrs() (\ current_save_attr = FALSE, \ current_external_attr = FALSE, \ current_intrinsic_attr = FALSE, \ current_parameter_attr = FALSE, \ current_pointer_attr = FALSE, \ current_target_attr = FALSE, \ current_allocatable_attr = FALSE, \ current_dim_bound_list = NULL ) /* Define stuff for checking block nesting */ #define MAX_BLOCK_DEPTH 100 /* maximum depth of nesting blocks */ /* USE_YYTNAME allows messages to incorporate token names from the yytname array. This option should be enabled if bison is used to generate parser, not otherwise. Enabling it also assumes fortran.c has been edited to remove "tok_" from token names (see Makefile). */ #ifndef NO_YYTNAME #if defined( YYDEBUG ) && defined( YYBISON ) #define USE_YYTNAME #endif #endif /* Convenience typedef for category of block */ typedef enum {subprog, construct} BLOCK_TYPE; typedef struct { int sclass; /* stmt_class of block opener */ char *name; /* name of block or subprogram */ LABEL_t label; /* label of closing statement for DO */ LINENO_t first_line; /* line number of block opener */ BLOCK_TYPE blocktype; /* category for wording of warnings */ int do_var_hash; /* hash index for index variable of DO block */ } BlockStack; PRIVATE BlockStack block_stack[MAX_BLOCK_DEPTH]; PRIVATE char * curr_stmt_name; /* subprog or END-subprog name; DO, IF construct name*/ PRIVATE int block_depth=0; /* depth of nesting of current block */ /* Defns of private functions */ PROTO(PRIVATE void push_block,(Token *t, int stmt_class, BLOCK_TYPE blocktype, char *name, LABEL_t label)); PROTO(PRIVATE void pop_block,(Token *t, int stmt_class, char *name, LABEL_t label)); PROTO(PRIVATE void check_construct_name_match,(Token *stmt, char *name)); PROTO(PRIVATE Token * add_tree_node,( Token *node, Token *left, Token *right )); PROTO(PRIVATE Token * append_token,( Token *tlist, Token *t )); PROTO(PRIVATE void check_stmt_sequence,( Token *t, int seq_num )); PROTO(PRIVATE void check_f90_stmt_sequence,( Token *t, int f90_seq_num )); PROTO(PRIVATE void do_binexpr,( Token *l_expr, Token *op, Token *r_expr, Token *result )); PROTO(PRIVATE int do_bounds_type,( Token *t1, Token *t2, Token *t3 )); PROTO(PRIVATE void do_unexpr,( Token *op, Token *expr, Token *result )); PROTO(PRIVATE Token * empty_token,( Token *t )); PROTO(PRIVATE void END_processing,( Token *t )); PROTO(PRIVATE void init_io_ctrl_list,( void )); PROTO(PRIVATE void record_default_io,( void )); PROTO(PRIVATE void process_attrs,(Token *t,Token *dim_bounds)); PROTO(PRIVATE void give_kind_warning,(Token *t)); #ifdef DEBUG_PARSER PROTO(PRIVATE void print_exprlist,( char *s, Token *t )); PROTO(PRIVATE void print_comlist,( char *s, Token *t )); #endif /* Uses of Token fields for nonterminals: */ /* NOTE: As of Aug 1994 these are undergoing revision to separate the use of class, subclass fields */ /* 1. dim_bound_lists: dimensioning info for arrays: token.class = no. of dimensions, --> TOK_dims token.subclass = no. of elements --> TOK_elts 2. expressions token.value.integer = hash index (of identifier) token.TOK_type = type_byte = storage_class << 4 + datatype token.TOK_flags: CONST_EXPR, LVALUE_EXPR, etc. token.TOK_flags: COMMA_FLAG used to handle extra/missing commas 4. substring_interval token.class = start index --> TOK_start token.subclass = end index --> TOK_end */ %} %token tok_identifier %token tok_array_identifier %token tok_label %token tok_integer_const %token tok_real_const %token tok_dp_const %token tok_quad_const %token tok_complex_const %token tok_dcomplex_const %token tok_logical_const %token tok_string %token tok_hollerith %token tok_edit_descriptor %token tok_letter %token tok_relop /* .EQ. .NE. .LT. .LE. .GT. .GE. */ %token tok_AND %token tok_OR %token tok_EQV %token tok_NEQV %token tok_NOT %token tok_power /* ** */ %token tok_concat /* // */ %token tok_lparen /* special left paren to avoid s/r conflicts */ %token tok_pointer_assignment /* => */ %token tok_ACCEPT %token tok_ALLOCATABLE %token tok_ALLOCATE %token tok_ASSIGN %token tok_BACKSPACE %token tok_BLOCKDATA %token tok_BYTE %token tok_CALL %token tok_CASE %token tok_CASEDEFAULT %token tok_CHARACTER %token tok_CLOSE %token tok_COMMON %token tok_COMPLEX %token tok_CONTINUE %token tok_CYCLE %token tok_DATA %token tok_DEALLOCATE %token tok_DIMENSION %token tok_DO %token tok_DOUBLECOMPLEX %token tok_DOUBLEPRECISION %token tok_DOWHILE %token tok_ELSE %token tok_END %token tok_ENDBLOCKDATA %token tok_ENDDO %token tok_ENDFILE %token tok_ENDFUNCTION %token tok_ENDIF %token tok_ENDPROGRAM %token tok_ENDSELECT %token tok_ENDSUBROUTINE %token tok_ENTRY %token tok_EQUIVALENCE %token tok_EXTERNAL %token tok_EXIT %token tok_FORMAT %token tok_FUNCTION %token tok_GOTO %token tok_IF %token tok_IMPLICIT %token tok_INCLUDE %token tok_INQUIRE %token tok_INTEGER %token tok_INTRINSIC %token tok_LOGICAL %token tok_NAMELIST %token tok_NONE %token tok_NULLIFY %token tok_OPEN %token tok_PARAMETER %token tok_PAUSE %token tok_POINTER %token tok_PRINT %token tok_PROGRAM %token tok_READ %token tok_REAL %token tok_RETURN %token tok_REWIND %token tok_SAVE %token tok_SELECTCASE %token tok_STOP %token tok_SUBROUTINE %token tok_TARGET %token tok_THEN %token tok_TO %token tok_TYPE %token tok_WHILE %token tok_WRITE %token tok_illegal /* Illegal token unused in grammar: induces syntax error */ %token tok_empty /* For empty tokens used to fill gaps in expr trees */ %token EOS 127 /* Character for end of statement. */ %nonassoc tok_relop %left REDUCE ')' /* Used at unit_io to force a reduction */ %% /* The following grammar is based on the ANSI manual, diagrams * of section F. Numbers in the comments refer to the diagram * corresponding to the grammar rule. */ /* 1-5 */ prog_body : stmt_list | /* empty file */ ; stmt_list : stmt_list_item | stmt_list stmt_list_item ; stmt_list_item : ordinary_stmt { /* Create id token for prog if unnamed. NOTE: this clobbers $1.class, value, src_text. */ if(current_module_hash == -1) { implied_id_token(&($1),unnamed_prog); def_function( type_PROGRAM, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &($1), /* name */ (Token*)NULL); /* args */ current_module_hash = def_curr_module(&($1)); current_module_type = type_PROGRAM; /* Pretend this is a PROGRAM statement */ if(style_req_prog_stmt) { warning($1.line_num,$1.col_num, "Program does not start with a PROGRAM statement"); } push_block(&($$),tok_PROGRAM,subprog, hashtab[current_module_hash].name, NO_LABEL); /* It is possible for a block construct to be the initial statement, and if so it has earlier been pushed onto stack. Detect this situation and swap stack entries to make them nest correctly. */ if(block_depth > 1 && block_stack[block_depth-2].first_line == $1.line_num) { BlockStack temp = block_stack[block_depth-1]; block_stack[block_depth-1] = block_stack[block_depth-2]; block_stack[block_depth-2] = temp; } } /* Handle END statement. Note that curr_stmt_class of structured END stmts have been merged into tok_END. */ if(curr_stmt_class == tok_END) { if(prev_stmt_class != tok_RETURN) (void)do_RETURN(current_module_hash,&($1)); pop_block(&($$),$$.tclass, curr_stmt_name,NO_LABEL); END_processing(&($$)); goto_flag = prev_goto = FALSE; } prev_stmt_class = curr_stmt_class; integer_context = FALSE; in_attrbased_typedecl = FALSE; true_prev_stmt_line_num = $$.line_num; } | include_stmt | EOS /* "sticky" EOF for needed delay */ ; /* Statements: note that ordering by category of statement is not enforced in the grammar but is deferred to semantic processing. */ ordinary_stmt : stmt | end_stmt { /* Treat END PROGRAM et al as plain END */ curr_stmt_class = tok_END; } ; stmt : tok_label unlabeled_stmt { /* Put definition of label into table, and if it marks end of a DO range, pop block. */ int do_label = def_label(&($1),labeled_stmt_type); if( do_label || $2.tclass == tok_ENDDO ) { if(is_true(NOT_DO_TERMINAL_STMT,$2.TOK_flags)) { syntax_error($2.line_num,$2.col_num, "statement cannot be terminal statement of a DO loop"); } else { pop_block(&($2),$2.tclass,curr_stmt_name, do_label? (LABEL_t)($1.value.integer): NO_LABEL); } } /* Issue picky warnings about labeled statements. FORMAT has an excuse for existing, so warnings for it are separately controlled. */ if( style_labeled_exec && curr_stmt_class != tok_FORMAT ) { warning($1.line_num,$1.col_num, "obsolescent feature: labeled statement"); } else if( style_labeled_format && curr_stmt_class == tok_FORMAT ) { warning($2.line_num,$2.col_num, "obsolescent feature: FORMAT statement"); } if(executable_stmt) prev_goto = goto_flag; $$ = $2; } | unlabeled_stmt { if(executable_stmt) { if(prev_goto) syntax_error($1.line_num, NO_COL_NUM, "No path to this statement"); prev_goto = goto_flag; } if( curr_stmt_class == tok_FORMAT && misc_warn ) { syntax_error($1.line_num,$1.col_num, "FORMAT statement has no label"); } if( $1.tclass == tok_ENDDO ) pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); } ; unlabeled_stmt : subprogram_header { exec_stmt_count = 0; executable_stmt = FALSE; labeled_stmt_type = LAB_SPECIFICATION; push_block(&($1),$1.tclass,subprog, hashtab[current_module_hash].name, NO_LABEL); } | specification_stmt { executable_stmt = FALSE; /* labeled_stmt_type set in lower productions */ } | executable_stmt { /* handle statement functions correctly */ if(is_true(STMT_FUNCTION_EXPR, $1.TOK_flags) && stmt_sequence_no <= SEQ_STMT_FUN) { stmt_sequence_no = SEQ_STMT_FUN; f90_stmt_sequence_no = F90_SEQ_SPECIF; executable_stmt = FALSE; } else { stmt_sequence_no = SEQ_EXEC; f90_stmt_sequence_no = F90_SEQ_EXEC; ++exec_stmt_count; executable_stmt = TRUE; } labeled_stmt_type = LAB_EXECUTABLE; } | restricted_stmt { stmt_sequence_no = SEQ_EXEC; f90_stmt_sequence_no = F90_SEQ_EXEC; ++exec_stmt_count; executable_stmt = TRUE; labeled_stmt_type = LAB_EXECUTABLE; } | error EOS { executable_stmt = TRUE; if(stmt_sequence_no == 0) stmt_sequence_no = SEQ_HEADER; if(f90_stmt_sequence_no == 0) f90_stmt_sequence_no = SEQ_HEADER; complex_const_allowed = FALSE; /* turn off flags */ inside_format=FALSE; integer_context = FALSE; in_assignment_stmt = FALSE; $$.line_num = prev_stmt_line_num; /* best guess */ labeled_stmt_type = LAB_EXECUTABLE; yyerrok; /* (error message already given) */ } ; subprogram_header: prog_stmt { current_module_type = type_PROGRAM; } | function_stmt { current_module_type = type_SUBROUTINE; } | subroutine_stmt { current_module_type = type_SUBROUTINE; } | block_data_stmt { current_module_type = type_BLOCK_DATA; } ; end_stmt : unlabeled_end_stmt | tok_label unlabeled_end_stmt { if( def_label(&($1),LAB_EXECUTABLE) ) { syntax_error($2.line_num,$2.col_num, "statement cannot be terminal statement of a DO loop"); /* Pop it anyway to keep stack consistent */ pop_block(&($2),$2.tclass,curr_stmt_name, (LABEL_t)($1.value.integer)); } $$ = $2; } ; /* Various END statements not checked for balance */ unlabeled_end_stmt: unnamed_end_stmt { curr_stmt_name = NULL; } | named_end_stmt ; unnamed_end_stmt: tok_END EOS | end_subprog_token EOS ; named_end_stmt: end_subprog_token symbolic_name EOS { curr_stmt_name = hashtab[$2.value.integer].name; } ; end_subprog_token: tok_ENDBLOCKDATA | tok_ENDFUNCTION | tok_ENDPROGRAM | tok_ENDSUBROUTINE ; include_stmt : tok_INCLUDE tok_string EOS { #ifdef ALLOW_INCLUDE if(f77_include) { nonstandard($1.line_num,$1.col_num,0,0); } open_include_file($2.value.string,$1.line_num); #else syntax_error($1.line_num,$1.col_num, "statement not permitted"); #endif } ; /* 5,6 */ /* Note that stmt_function_stmt is not distinguished from assignment_stmt, but assign (label to variable) is. Also, format_stmt w/o label is accepted here. ANSI standard for statement sequencing is enforced here. */ specification_stmt: anywhere_stmt { if(stmt_sequence_no < SEQ_IMPLICIT) { stmt_sequence_no = SEQ_IMPLICIT; } if(f90_stmt_sequence_no < F90_SEQ_IMPLICIT_NONE) { stmt_sequence_no = F90_SEQ_IMPLICIT_NONE; } /* labeled_stmt_type set below */ } | parameter_stmt { if(stmt_sequence_no < SEQ_IMPLICIT) { stmt_sequence_no = SEQ_IMPLICIT; } else if(stmt_sequence_no > SEQ_SPECIF) { check_stmt_sequence(&($1),SEQ_SPECIF); } if(f90_stmt_sequence_no < F90_SEQ_IMPLICIT) { f90_stmt_sequence_no = F90_SEQ_IMPLICIT; } else if(f90_stmt_sequence_no > F90_SEQ_SPECIF) { check_f90_stmt_sequence(&($1),F90_SEQ_SPECIF); } labeled_stmt_type = LAB_SPECIFICATION; } | implicit_stmt { check_stmt_sequence(&($1),SEQ_IMPLICIT); /* f90 seq checks done at implicit_stmt */ labeled_stmt_type = LAB_SPECIFICATION; } | data_stmt { if(stmt_sequence_no < SEQ_STMT_FUN) { stmt_sequence_no = SEQ_STMT_FUN; } if(f90_stmt_sequence_no <= F90_SEQ_SPECIF) { f90_stmt_sequence_no = F90_SEQ_SPECIF; } else { check_f90_stmt_sequence(&($1),F90_SEQ_EXEC); } labeled_stmt_type = LAB_SPECIFICATION; } | specif_stmt { check_stmt_sequence(&($1),SEQ_SPECIF); check_f90_stmt_sequence(&($1),F90_SEQ_SPECIF); labeled_stmt_type = LAB_SPECIFICATION; } ; anywhere_stmt : entry_stmt { goto_flag = prev_goto = FALSE; labeled_stmt_type = LAB_SPECIFICATION; } | format_stmt { labeled_stmt_type = LAB_FORMAT; } ; specif_stmt : dimension_stmt | equivalence_stmt | common_stmt | namelist_stmt | type_stmt | attrbased_type_stmt | external_stmt | intrinsic_stmt | save_stmt | cray_pointer_stmt | pointer_stmt | target_stmt | allocatable_stmt ; /* 7 */ executable_stmt: /* Allowed in logical IF */ transfer_stmt { goto_flag=TRUE; make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); } | nontransfer_stmt { goto_flag=FALSE; } ; transfer_stmt : unconditional_goto | assigned_goto { if( f95_assign ) { nonstandard($1.line_num,$1.col_num,0,f95_assign); msg_tail(": assigned GOTO"); } } | arithmetic_if_stmt { if(style_req_block_if) { warning(if_line_num, if_col_num, "non-structured IF statement"); } } | cycle_or_exit_stmt { check_construct_name_match(&($1), curr_stmt_name); } | stop_stmt | return_stmt ; nontransfer_stmt: assignment_stmt | assign_stmt | call_stmt | computed_goto /* fallthru allowed */ | continue_stmt | pause_stmt | io_stmt { record_io_usage(&($1)); } | allocate_stmt | deallocate_stmt | nullify_stmt ; io_stmt: read_stmt { /* If form not defined by now, READ is unformatted. If no REC=num was seen, then it is sequential. */ if(current_io_form == IO_FORM_DEFAULT) current_io_form = IO_FORM_UNFORMATTED; if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; } | accept_stmt | write_stmt { if(current_io_form == IO_FORM_DEFAULT) current_io_form = IO_FORM_UNFORMATTED; if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; } | print_stmt | type_output_stmt | open_stmt { /* In OPEN, default ACCESS is SEQUENTIAL, and default FORM is FORMATTED for ACCESS=SEQUENTIAL, UNFORMATTED for ACCESS=DIRECT. */ if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; if(current_io_form == IO_FORM_DEFAULT) { if(current_io_access == IO_ACCESS_SEQUENTIAL) current_io_form = IO_FORM_FORMATTED; else current_io_form = IO_FORM_UNFORMATTED; } } | close_stmt | inquire_stmt | io_positioning_stmt { /* These statements only apply to sequential access */ current_io_access = IO_ACCESS_SEQUENTIAL; } ; io_positioning_stmt: rewind_stmt | backspace_stmt | endfile_stmt ; restricted_stmt: /* Disallowed in logical IF */ restricted_nontransfer_stmt { goto_flag=FALSE; } | else_or_endif_stmt { prev_goto = goto_flag = FALSE; make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); } | select_case_stmt { goto_flag = TRUE; make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); } | case_or_endselect_stmt { prev_goto = goto_flag = FALSE; make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); } ; restricted_nontransfer_stmt: logical_if_stmt | block_if_stmt { /* Note that $1 at this point is expr, not tok_IF. This is undesirable for our purpose here, but needed for more important stuff elsewhere. */ push_block(&($1),tok_IF,construct,curr_stmt_name,NO_LABEL); make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); } | do_stmt { /* Flag DO w/o label or DO WHILE forms here */ if(is_true(NONSTD_USAGE_FLAG,$1.TOK_flags)) #ifdef ALLOW_DO_ENDDO if(f77_do_enddo) nonstandard($1.line_num,$1.col_num,0,0); #else syntax_error($1.line_num,$1.col_num, "Nonstandard syntax"); #endif push_block(&($1),tok_DO,construct,curr_stmt_name, (LABEL_t)($1.tsubclass)); make_true(NOT_DO_TERMINAL_STMT,$$.TOK_flags); /* Record hash index of DO variable in the block stack entry for this statement. */ block_stack[block_depth-1].do_var_hash = $1.value.integer; } | enddo_stmt { #ifdef ALLOW_DO_ENDDO if(f77_do_enddo) nonstandard($1.line_num,$1.col_num,0,0); #else syntax_error($1.line_num,$1.col_num, "Nonstandard syntax"); #endif /* pop_block is done at stmt production, where optional label can be checked for match. */ } ; else_or_endif_stmt: else_if_stmt { pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); push_block(&($1),$1.tclass,construct,curr_stmt_name,NO_LABEL); } | else_stmt { pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); push_block(&($1),$1.tclass,construct,curr_stmt_name,NO_LABEL); } | end_if_stmt { pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); } ; case_or_endselect_stmt: case_stmt { pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); push_block(&($1),$1.tclass,construct,curr_stmt_name,NO_LABEL); } | case_default_stmt { pop_block(&($1),tok_CASE,curr_stmt_name,NO_LABEL); push_block(&($1),tok_CASE,construct,curr_stmt_name,NO_LABEL); } | end_select_stmt { pop_block(&($1),$1.tclass,curr_stmt_name,NO_LABEL); } ; /* 8 */ prog_stmt : tok_PROGRAM {check_seq_header(&($1));} symbolic_name EOS { def_function( type_PROGRAM, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &($3), /* name */ (Token*)NULL);/* args */ current_module_hash = def_curr_module(&($3)); } ; /* Note that function & subroutine entry not * distinguished in this grammar. */ /* 9 */ entry_stmt : tok_ENTRY symbolic_name EOS { do_ENTRY(&($2),(Token*)NULL ,current_module_hash); } | tok_ENTRY symbolic_name '(' dummy_argument_list ')' EOS { do_ENTRY(&($2),&($4) ,current_module_hash); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("entry stmt",&($4)); #endif } ; /* 10 */ function_stmt : unlabeled_function_stmt ; unlabeled_function_stmt : typed_function_handle symbolic_name EOS { if(f77_function_noparen || f90_function_noparen) { nonstandard($2.line_num, (unsigned)($2.col_num+strlen(token_name(&$2))), f90_function_noparen,0); msg_tail(": parentheses required"); } def_function( current_datatype, current_typesize, current_len_text, &($2), (Token*)NULL); current_module_hash= def_curr_module(&($2)); } | typed_function_handle symbolic_name '(' dummy_argument_list ')' EOS { def_function( current_datatype, current_typesize, current_len_text, &($2), &($4)); current_module_hash= def_curr_module(&($2)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function stmt",&($4)); #endif } | plain_function_handle symbolic_name EOS { if(f77_function_noparen || f90_function_noparen) { nonstandard($2.line_num, (unsigned)($2.col_num+strlen(token_name(&$2))), f90_function_noparen,0); msg_tail(": parentheses required"); } def_function( type_UNDECL, size_DEFAULT, (char *)NULL, &($2), (Token*)NULL); current_module_hash= def_curr_module(&($2)); } | plain_function_handle symbolic_name '(' dummy_argument_list ')' EOS { def_function( type_UNDECL, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &($2), /* name */ &($4)); /* args */ current_module_hash= def_curr_module(&($2)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function stmt",&($4)); #endif } ; typed_function_handle: type_name function_keyword { $$ = $2; /* needed for block opener info */ } ; plain_function_handle: function_keyword ; function_keyword: tok_FUNCTION { check_seq_header(&($1)); } ; type_name : arith_type_name | plain_char_type_name | char_type_name ; /* 11 not present: see 9 */ /* 12 */ subroutine_stmt : unlabeled_subroutine_stmt ; unlabeled_subroutine_stmt : subroutine_handle symbolic_name EOS { def_function( type_SUBROUTINE, size_DEFAULT, (char *)NULL, &($2), (Token*)NULL); current_module_hash= def_curr_module(&($2)); } | subroutine_handle symbolic_name '(' dummy_argument_list ')' EOS { def_function( type_SUBROUTINE, size_DEFAULT, (char *)NULL, &($2), &($4)); current_module_hash= def_curr_module(&($2)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("subroutine stmt",&($4)); #endif } ; subroutine_handle: tok_SUBROUTINE { check_seq_header(&($1)); } ; dummy_argument_list: /* empty */ { $$.next_token = (Token*)NULL; } | non_empty_arg_list ; non_empty_arg_list: dummy_argument { $$.next_token = append_token((Token*)NULL,&($1)); } | non_empty_arg_list ',' dummy_argument { $$.next_token = append_token($1.next_token,&($3)); } ; dummy_argument : symbolic_name { def_arg_name(&($1)); primary_id_expr(&($1),&($$)); } | '*' { $$.TOK_type = type_byte(class_LABEL,type_LABEL); $$.size = size_DEFAULT; $$.TOK_flags = 0; $$.left_token = (Token *)NULL; label_dummy_arg_count++; } ; /* 13 not present: see 9 */ /* 14 */ block_data_stmt : block_data_handle EOS { /* form name %DATnn */ ++block_data_number; (void)sprintf(unnamed_block_data+4,"%02d", block_data_number%100); implied_id_token(&($1),unnamed_block_data); def_function( type_BLOCK_DATA, size_DEFAULT, (char *)NULL, &($1), (Token*)NULL); current_module_hash= def_curr_module(&($1)); } | block_data_handle symbolic_name EOS { def_function( type_BLOCK_DATA, size_DEFAULT, (char *)NULL, &($2), (Token*)NULL); current_module_hash= def_curr_module(&($2)); } ; block_data_handle: tok_BLOCKDATA { check_seq_header(&($1)); } ; /* 15 */ dimension_stmt : tok_DIMENSION array_declarator_list EOS ; array_declarator_list: array_declarator | array_declarator_list ',' array_declarator ; /* 16 */ array_declarator: symbolic_name '(' dim_bound_list ')' { def_array_dim(&($1),&($3)); } ; dim_bound_list : dim_bound_item /* token class = no. of dimensions, subclass = no. of elements */ { $$.TOK_dims = 1; $$.TOK_elts = $1.TOK_elts; $$.next_token = append_token((Token*)NULL,&($1)); } | dim_bound_list ',' dim_bound_item { $$.TOK_dims = $1.TOK_dims + 1; /* one more dimension */ $$.TOK_elts = $1.TOK_elts * $3.TOK_elts; $$.next_token = append_token($1.next_token,&($3)); } ; dim_bound_item : dim_bound_expr { if( datatype_of($1.TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,$1.TOK_flags) ) $$.TOK_elts = $1.value.integer; else $$.TOK_elts = 0; } | dim_bound_expr ':' dim_bound_expr { /* avoid getting 0 - 0 + 1 = 1 if bounds nonconstant */ if( datatype_of($1.TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,$1.TOK_flags) && datatype_of($3.TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,$3.TOK_flags) ) $$.TOK_elts = $3.value.integer - $1.value.integer + 1; else $$.TOK_elts = 0; $$.left_token = add_tree_node(&($2),&($1),&($3)); } | '*' { $$.TOK_elts = 0; $$.left_token = (Token *)NULL; } | dim_bound_expr ':' '*' { $$.TOK_elts = 0; $3.left_token = (Token *)NULL; $$.left_token = add_tree_node(&($2),&($1),&($3)); } | ':' { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": deferred-shape array spec"); } } ; /* 17 */ equivalence_stmt: tok_EQUIVALENCE {equivalence_flag = TRUE;} equivalence_list EOS {equivalence_flag = FALSE;} ; equivalence_list: '(' equivalence_list_item ')' | equivalence_list ',' '(' equivalence_list_item ')' ; equivalence_list_item: equiv_entity ',' equiv_entity { equivalence(&($1), &($3)); } | equivalence_list_item ',' equiv_entity { equivalence(&($1), &($3)); } ; /* 17 */ equiv_entity : symbolic_name { def_equiv_name(&($1)); } | array_equiv_name { def_equiv_name(&($1)); } | substring_equiv_name { def_equiv_name(&($1)); } ; array_equiv_name: symbolic_name '(' subscript_list ')' /* should check */ ; substring_equiv_name: symbolic_name substring_interval | array_equiv_name substring_interval ; /* 19 */ common_stmt : tok_COMMON common_variable_list EOS { implied_id_token(&($$),blank_com_name); def_com_block(&($$), &($2)); if(is_true(COMMA_FLAG,$2.TOK_flags)) syntax_error( $2.line_num,$2.col_num, "trailing comma"); #ifdef DEBUG_PARSER if(debug_parser) print_comlist("blank common",&($2)); #endif } | tok_COMMON common_block_list EOS { if(is_true(COMMA_FLAG,$2.TOK_flags)) syntax_error( $2.line_num,$2.col_num, "trailing comma"); } | tok_COMMON common_variable_list common_block_list EOS { implied_id_token(&($$),blank_com_name); def_com_block(&($$),&($2)); if(is_true(COMMA_FLAG,$3.TOK_flags)) syntax_error( $3.line_num,$3.col_num, "trailing comma"); #ifdef DEBUG_PARSER if(debug_parser) print_comlist("blank common",&($2)); #endif } ; /* The following defns allow trailing commas and missing commas in order to tolerate the optional comma before /blockname/. The token TOK_flags holds comma status to allow errors to be caught. */ common_block_list: labeled_common_block { $$.TOK_flags = $1.TOK_flags; } | common_block_list labeled_common_block { $$.TOK_flags = $2.TOK_flags; $$.line_num = $2.line_num; $$.col_num = $2.col_num; } ; labeled_common_block: common_block_name common_variable_list { def_com_block(&($1),&($2)); $$.TOK_flags = $2.TOK_flags; $$.line_num = $2.line_num; $$.col_num = $2.col_num; #ifdef DEBUG_PARSER if(debug_parser) print_comlist("labeled common",&($2)); #endif } ; common_block_name: '/' symbolic_name '/' { $$ = $2; } | '/' '/' /* block with no name */ { implied_id_token(&($$),blank_com_name); } | tok_concat /* "//" becomes this */ { implied_id_token(&($$),blank_com_name); } ; common_variable_list: common_list_item { $$.TOK_flags = $1.TOK_flags; $$.next_token = append_token((Token*)NULL,&($1)); } | common_variable_list common_list_item { if(!is_true(COMMA_FLAG,$1.TOK_flags)) syntax_error( $2.line_num,$2.col_num-1, "missing comma"); $$.TOK_flags = $2.TOK_flags; $$.line_num = $2.line_num; $$.col_num = $2.col_num; $$.next_token = append_token($1.next_token,&($2)); } ; common_list_item: common_entity { /* no comma */ $$.TOK_flags = $1.TOK_flags; make_false(COMMA_FLAG,$$.TOK_flags); } | common_entity ',' { /* has comma */ $$.TOK_flags = $1.TOK_flags; make_true(COMMA_FLAG,$$.TOK_flags); } ; common_entity : symbolic_name { def_com_variable(&($1)); primary_id_expr(&($1),&($$)); } | array_declarator { def_com_variable(&($1)); primary_id_expr(&($1),&($$)); } ; /* NAMELIST : Not Standard Syntax is: NAMELIST /group/ var [,var...] [[,] /group/ var [,var...]...] */ namelist_stmt : tok_NAMELIST namelist_list EOS { if(is_true(COMMA_FLAG,$2.TOK_flags)) syntax_error($2.line_num, (unsigned)($2.col_num+strlen(token_name(&$2))), "trailing comma"); if(f77_namelist) { nonstandard($1.line_num,$1.col_num,0,0); } } ; namelist_list : namelist_decl | namelist_list namelist_decl { $$ = $2; } ; namelist_decl : namelist_name namelist_var_list { def_namelist(&($1),&($2)); $$ = $2; } ; namelist_name : '/' symbolic_name '/' { $$ = $2; } ; namelist_var_list: namelist_item { $$.next_token = append_token((Token*)NULL,&($1)); } | namelist_var_list namelist_item { if(!is_true(COMMA_FLAG,$1.TOK_flags)) syntax_error( $2.line_num,$2.col_num-1, "missing comma"); $$.TOK_flags = $2.TOK_flags; $$.line_num = $2.line_num; $$.col_num = $2.col_num; $$.next_token = append_token($1.next_token,&($2)); } ; namelist_item : symbolic_name { /* no comma */ def_namelist_item(&($1)); primary_id_expr(&($1),&($$)); make_false(COMMA_FLAG,$$.TOK_flags); } | symbolic_name ',' { /* has comma */ def_namelist_item(&($1)); primary_id_expr(&($1),&($$)); make_true(COMMA_FLAG,$$.TOK_flags); } ; /* 20 */ type_stmt : arith_type_name arith_type_decl_list EOS | plain_char_type_name char_type_decl_list EOS | char_type_name char_type_decl_list EOS | char_type_name ',' char_type_decl_list EOS ; /* Attribute-based type declarations */ attrbased_type_stmt: arith_attrbased_type_handle ':' ':' arith_type_decl_list EOS { if(f77_attrbased_typedecl) { nonstandard($2.line_num, $2.col_num,0,0); msg_tail(": attribute-based variable declaration"); } } | char_attrbased_type_handle ':' ':' char_type_decl_list EOS { if(f77_attrbased_typedecl) { nonstandard($2.line_num, $2.col_num,0,0); msg_tail(": attribute-based variable declaration"); } } ; arith_attrbased_type_handle: arith_type_name | arith_type_name ',' attr_list ; char_attrbased_type_handle: plain_char_type_name | plain_char_type_name ',' attr_list | char_type_name | char_type_name ',' attr_list ; attr_list : type_attr | attr_list ',' type_attr ; type_attr : tok_DIMENSION '(' dim_bound_list ')' { /* turn back on flags turned off by punct */ in_attrbased_typedecl = initial_flag = TRUE; dim_bound_token = $3; /* save copy of header */ current_dim_bound_list = &dim_bound_token; } | tok_SAVE { current_save_attr = TRUE; } | tok_EXTERNAL { current_external_attr = TRUE; } | tok_INTRINSIC { current_intrinsic_attr = TRUE; } | tok_PARAMETER { current_parameter_attr = TRUE; } | tok_POINTER { current_pointer_attr = TRUE; } | tok_TARGET { current_target_attr = TRUE; } | tok_ALLOCATABLE { current_allocatable_attr = TRUE; } ; arith_type_name : sizeable_type_name { current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } /* Allow *len to modify some arith types */ | sizeable_type_name '*' nonzero_unsigned_int_const { current_typesize = $3.value.integer; current_len_text = NULL; reset_type_attrs(); #if 0 /* defunct feature */ if(local_wordsize > 0) { /* recognize REAL*2w as DOUBLE PRECISION */ if(current_datatype == type_REAL && $3.value.integer == type_size[type_DP]) current_datatype = type_DP; /* recognize COMPLEX*4w as DOUBLE COMPLEX */ if(current_datatype == type_COMPLEX && $3.value.integer==type_size[type_DCOMPLEX]) current_datatype = type_DCOMPLEX; } #endif if(f77_typesize || f90_typesize) { nonstandard($3.line_num,$3.col_num,f90_typesize,0); } /* Give hint to lexer to continue taking attrs as keywords despite non-initial position */ if(see_double_colon()) in_attrbased_typedecl = TRUE; } /* Parse KIND selectors although we don't yet support them. */ | sizeable_type_name left_paren kind_selector ')' { /* Treat all KINDs as default */ current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } /* Other type disallow *len modifier */ | unsizeable_type_name { reset_type_attrs(); } ; sizeable_type_name: tok_INTEGER { current_datatype = type_INTEGER; integer_context = TRUE; } | tok_REAL { current_datatype = type_REAL; integer_context = TRUE; } | tok_COMPLEX { current_datatype = type_COMPLEX; integer_context = TRUE; } | tok_LOGICAL { current_datatype = type_LOGICAL; integer_context = TRUE; } ; unsizeable_type_name: tok_DOUBLEPRECISION { current_datatype = type_DP; current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } | tok_DOUBLECOMPLEX { current_datatype = type_DCOMPLEX; current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); if(f77_double_complex || f90_double_complex) { nonstandard($1.line_num,$1.col_num,f90_double_complex,0); } } | tok_BYTE /* treate BYTE as a form of integer for now */ { current_datatype = type_INTEGER; current_typesize = 1; current_len_text = NULL; reset_type_attrs(); if(f77_byte || f90_byte) nonstandard($1.line_num,$1.col_num,f90_byte,0); } ; /* When F90 kind intrinsics are supported, expr should become int_constant_expr. For now, keep it lax to avoid spurious warnings. */ kind_selector : expr { if(!kind_warning_given) give_kind_warning(&($1)); if(f77_attrbased_typedecl) { nonstandard($1.line_num, $1.col_num,0,0); msg_tail(": F90-style declaration"); } } | symbolic_name '=' expr { int erroneous=FALSE; if( strcmp(hashtab[$1.value.integer].name,"KIND") == 0 ) { if(!kind_warning_given) give_kind_warning(&($1)); } else { syntax_error($1.line_num,$1.col_num, "unrecognized keyword"); msg_tail(hashtab[$1.value.integer].name); erroneous=TRUE; } if(!erroneous && f77_attrbased_typedecl) { nonstandard($1.line_num, $1.col_num,0,0); msg_tail(": F90-style declaration"); } } ; plain_char_type_name: tok_CHARACTER { current_datatype = type_STRING; current_typesize = 1; current_len_text = NULL; current_size_is_adjustable = 0; current_size_is_expression = 0; reset_type_attrs(); integer_context = TRUE; len_selector_given = FALSE; } ; char_type_name : plain_char_type_name char_selector { current_typesize = $2.value.integer; current_size_is_adjustable = $2.size_is_adjustable; current_size_is_expression = $2.size_is_expression; /* Save length spec text if expression */ if(current_size_is_expression) { if($2.left_token == NULL) current_len_text = new_tree_text(&($2)); else current_len_text = new_tree_text($2.left_token); } else current_len_text = NULL; reset_type_attrs(); /* Give hint to lexer to continue taking attrs as keywords despite non-initial position */ if(see_double_colon()) in_attrbased_typedecl = TRUE; } ; char_selector : '*' len_specification { $$ = $2; } /* This production uses a special left paren to avoid a shift/reduce conflict with IMPLICIT CHARACTER(letter_list) The lexer knows when to produce this special left paren. */ | left_paren {len_spec_item_count = 0;} len_spec_list ')' { if( len_selector_given ) { $$ = len_spec_token; /* Recover spec saved below */ /* Store as a parenthesized expr tree */ $$.left_token = add_tree_node(&($1), &len_spec_token, (Token*)NULL); } /* If len_spec_list does not specify a LEN, use the current default values. */ else { $$.left_token = (Token *)NULL; $$.value.integer = current_typesize; $$.size_is_adjustable = current_size_is_adjustable; $$.size_is_expression = current_size_is_expression; } if(f77_attrbased_typedecl) { nonstandard($1.line_num, $1.col_num,0,0); msg_tail(": F90-style variable declaration"); } } ; /* This production simply turns the special left paren back into a regular paren in case it matters somewhere. The grammar still knows it's special. */ left_paren : tok_lparen { $$.tclass = '('; /* make it a regular paren */ } ; arith_type_decl_list: arith_type_decl_item | arith_type_decl_list ',' arith_type_decl_item ; /* Allow the combined type declaration and data value form. */ arith_type_decl_item: scalar_type_decl_entity { if( current_parameter_attr) { syntax_error($1.line_num,$1.col_num, "PARAMETER lacks initializer"); } } /* Handle bastard initializers (combined type decl and data statement) here. */ | scalar_type_decl_entity '/' {integer_context=FALSE;complex_const_allowed=TRUE;} data_value_list {integer_context=TRUE;complex_const_allowed=FALSE;} '/' { if(f77_initializers || f90_initializers) { nonstandard($2.line_num,$2.col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } primary_id_expr(&($1),&($1)); check_initializer_type(&($1),&($2),&($4)); } /* Handle F90 initializers here. Note that this production will not be reached in non attribute-based type declarations since it will be lexed as an assignment statement. */ | scalar_type_decl_entity {integer_context=FALSE;complex_const_allowed = TRUE;} '=' parameter_expr { if(current_parameter_attr) def_parameter(&($1),&($4),FALSE); else use_lvalue(&($1)); if(f77_initializers) { nonstandard($3.line_num,$3.col_num, 0,0); msg_tail(": F90-style initializer"); } primary_id_expr(&($1),&($1)); check_initializer_type(&($1),&($3),&($4)); integer_context=TRUE; complex_const_allowed = FALSE; } /* Note: array initializers not supported since syntax for array constructors is not yet implemented. */ | array_declarator { declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),(Token *)NULL); } /* Handle bastard initializers here. Not checked for assignment compatibility. */ | array_declarator '/' {integer_context=FALSE;complex_const_allowed=TRUE;} data_value_list {integer_context=TRUE;complex_const_allowed=FALSE;} '/' { declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard($2.line_num,$2.col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&($1)); primary_id_expr(&($1),&($1)); check_initializer_type(&($1),&($2),&($4)); } ; scalar_type_decl_entity:symbolic_name { declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),current_dim_bound_list); } ; char_type_decl_list: char_type_decl_item | char_type_decl_list ',' char_type_decl_item ; char_type_decl_item: char_type_decl_entity { if( current_parameter_attr) { syntax_error($1.line_num,$1.col_num, "PARAMETER lacks initializer"); } } /* Handle bastard initializers here */ | char_type_decl_entity '/' {integer_context=FALSE;complex_const_allowed=TRUE;} data_value_list {integer_context=TRUE;complex_const_allowed=FALSE;} '/' { if(f77_initializers || f90_initializers) { nonstandard($2.line_num,$2.col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } primary_id_expr(&($1),&($1)); check_initializer_type(&($1),&($2),&($4)); } /* Handle F90 initializers here */ | char_type_decl_entity '=' parameter_expr { if(current_parameter_attr) def_parameter(&($1),&($3),FALSE); else use_lvalue(&($1)); primary_id_expr(&($1),&($1)); if(f77_initializers) { nonstandard($2.line_num,$2.col_num, 0,0); msg_tail(": F90-style initializer"); } check_initializer_type(&($1),&($2),&($3)); } | array_declarator { $1.size_is_adjustable = current_size_is_adjustable; $1.size_is_expression = current_size_is_expression; declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),(Token *)NULL); } | array_declarator '*' len_specification { $1.size_is_adjustable = $3.size_is_adjustable; $1.size_is_expression = $3.size_is_expression; declare_type(&($1), current_datatype, $3.value.integer, new_tree_text( $3.left_token == NULL? &($3): $3.left_token ) ); process_attrs(&($1),(Token *)NULL); } | array_declarator '/' {integer_context=FALSE;complex_const_allowed=TRUE;} data_value_list {integer_context=TRUE;complex_const_allowed=FALSE;} '/' { $1.size_is_adjustable = current_size_is_adjustable; $1.size_is_expression = current_size_is_expression; declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard($2.line_num,$2.col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&($1)); } | array_declarator '*' len_specification '/' {integer_context=FALSE;complex_const_allowed=TRUE;} data_value_list {integer_context=TRUE;complex_const_allowed=FALSE;} '/' { $1.size_is_adjustable = $3.size_is_adjustable; $1.size_is_expression = $3.size_is_expression; declare_type(&($1), current_datatype, $3.value.integer, new_tree_text( $3.left_token == NULL? &($3): $3.left_token ) ); process_attrs(&($1),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard($4.line_num,$4.col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&($1)); } ; char_type_decl_entity:symbolic_name { $1.size_is_adjustable = current_size_is_adjustable; $1.size_is_expression = current_size_is_expression; declare_type(&($1), current_datatype, current_typesize, current_len_text); process_attrs(&($1),current_dim_bound_list); } | symbolic_name '*' len_specification { $1.size_is_adjustable = $3.size_is_adjustable; $1.size_is_expression = $3.size_is_expression; declare_type(&($1), current_datatype, $3.value.integer, new_tree_text( $3.left_token == NULL? &($3): $3.left_token ) ); process_attrs(&($1),current_dim_bound_list); } ; /* 21 */ /* implicit_flag helps is_keyword's work */ implicit_handle : tok_IMPLICIT {implicit_flag=TRUE;} ; implicit_stmt : implicit_handle implicit_decl_list EOS { implicit_flag=FALSE; if(implicit_none) { syntax_error($1.line_num,$1.col_num, "conflicts with IMPLICIT NONE"); } else { implicit_type_given = TRUE; } check_f90_stmt_sequence(&($1),F90_SEQ_IMPLICIT); } /* IMPLICIT NONE statement */ | implicit_handle tok_NONE EOS { implicit_flag=FALSE; if(implicit_type_given) { syntax_error($1.line_num,$1.col_num, "conflicts with IMPLICIT statement"); } else { if(f77_implicit_none) nonstandard($2.line_num,$2.col_num,0,0); implicit_none = TRUE; } check_f90_stmt_sequence(&($1),F90_SEQ_IMPLICIT_NONE); } ; implicit_decl_list: implicit_decl_item | implicit_decl_list ',' {initial_flag = TRUE;} implicit_decl_item ; /* implicit_letter_flag tells lexer to treat letters as letters, not as identifiers */ implicit_decl_item: type_name '(' {implicit_letter_flag = TRUE;} letter_list ')' {implicit_letter_flag = FALSE;} ; letter_list : letter_list_item | letter_list ',' letter_list_item ; letter_list_item: tok_letter { int c1 = (int)$1.tsubclass; /* kluge to allow other non-alpha chars: treate anything except _ as $. */ if( !isalpha(c1) && c1 != '_' ) c1 = '$'; if( ((f77_dollarsigns||f90_dollarsigns) && c1=='$') || (f77_underscores && c1=='_') ) { nonstandard($1.line_num,$1.col_num, f90_dollarsigns&&c1=='$',0); msg_tail(": nonalphabetic character"); } set_implicit_type(current_datatype, current_typesize, current_len_text, c1,c1); } | tok_letter '-' tok_letter { int c1 = (int)$1.tsubclass, c2 = (int)$3.tsubclass; if( !isalpha(c1) && c1 != '_' ) c1 = '$'; if( !isalpha(c2) && c2 != '_' ) c2 = '$'; if( ((f77_dollarsigns||f90_dollarsigns) && (c1 == '$' || c2 == '$')) || (f77_underscores && (c1 == '_' || c2 == '_'))) { if(!isalpha(c1)) nonstandard($1.line_num,$1.col_num, f90_dollarsigns&&(c1=='$'||c2=='$'),0); else nonstandard($3.line_num,$3.col_num, f90_dollarsigns&&(c1=='$'||c2=='$'),0); msg_tail(": nonalphabetic character"); } set_implicit_type(current_datatype, current_typesize, current_len_text, c1,c2); } ; /* 22 */ len_specification: nonneg_unsigned_int_const { $$.value.integer = $1.value.integer; $$.size_is_adjustable = 0; $$.size_is_expression = 0; } | '(' len_spec_expr ')' { $$.value.integer = $2.value.integer; $$.size_is_adjustable = $2.size_is_adjustable; $$.size_is_expression = $2.size_is_expression; /* Store as a parenthesized expr tree */ $$.left_token = add_tree_node(&($1), &($2), (Token*)NULL); } ; /* To keep grammar simple, the syntax rules for CHARACTER length-selector are relaxed, leaving checking to the semantic processing. Legal variations are CHARACTER*(length) CHARACTER*(LEN=length) CHARACTER*(length,kind) CHARACTER*(length,KIND=kind) CHARACTER*(LEN=length,KIND=kind) CHARACTER*(KIND=kind,LEN=length) where length is * or a specification-expr, and kind is a scalar-int-initialization-expr. The * can be omitted in all of these. The grammar rules here accept anything of the form CHARACTER*([KEYWORD=]value[, ...]) where value is * or int_constant_expr. When the LEN keyword is seen, the len_spec_item token is copied to len_spec_token to be used in higher-level productions. */ len_spec_list : len_spec_item { ++len_spec_item_count; } | len_spec_list ',' len_spec_item { ++len_spec_item_count; } ; len_spec_item : len_spec_expr { /* Non-keyword form: 1st item is LEN */ if(len_spec_item_count == 0) { len_spec_token = $1; len_selector_given = TRUE; } /* 2nd item is KIND */ else if(len_spec_item_count == 1) { if(!kind_warning_given) give_kind_warning(&($1)); } else if(len_spec_item_count == 2) { syntax_error($1.line_num,$1.col_num, "too many specifiers in list"); } } | symbolic_name '=' len_spec_expr { int erroneous=FALSE; if( strcmp(hashtab[$1.value.integer].name,"LEN") == 0 ) { len_spec_token = $3; len_selector_given = TRUE; } else if( strcmp(hashtab[$1.value.integer].name,"KIND") == 0 ) { if(!kind_warning_given) give_kind_warning(&($1)); } else { syntax_error($1.line_num,$1.col_num, "unrecognized keyword"); msg_tail(hashtab[$1.value.integer].name); erroneous=TRUE; } if(!erroneous && f77_attrbased_typedecl) { nonstandard($2.line_num, $2.col_num,0,0); msg_tail(": F90-style declaration"); } } ; len_spec_expr : '*' { $$.left_token = (Token *)NULL; $$.value.integer = size_ADJUSTABLE; $$.size_is_adjustable = 1; $$.size_is_expression = 0; } | int_constant_expr { $$.size_is_adjustable = 0; $$.size_is_expression = 1; if($1.value.integer <= 0) { if($1.value.integer < 0) { if(misc_warn || f77_char_extension) { warning($1.line_num,$1.col_num, "non-negative integer value expected"); msg_tail(": substituting 0"); } $$.value.integer = 0; } else if(f77_char_extension) { warning($1.line_num,$1.col_num, "nonzero integer value expected"); } } } ; /* 23 */ parameter_stmt : std_parameter_stmt | parenless_parameter_stmt ; std_parameter_stmt: tok_PARAMETER '(' parameter_defn_list ')' EOS ; parenless_parameter_stmt:tok_PARAMETER {param_noparen=TRUE;} parameter_defn_list {param_noparen=FALSE;} EOS { if(f77_param_noparen || f90_param_noparen) { nonstandard($1.line_num,$1.col_num,f90_param_noparen,0); msg_tail(" : PARAMETER declaration without parentheses"); } } ; parameter_defn_list: parameter_defn_item | parameter_defn_list ',' parameter_defn_item ; parameter_defn_item: symbolic_name {complex_const_allowed = TRUE;} '=' parameter_expr { def_parameter(&($1),&($4),param_noparen); primary_id_expr(&($1),&($1)); check_initializer_type(&($1),&($3),&($4)); complex_const_allowed = FALSE; } ; /* 24 */ external_stmt : tok_EXTERNAL external_name_list EOS ; external_name_list: symbolic_name { def_ext_name(&($1)); } | external_name_list ',' symbolic_name { def_ext_name(&($3)); } ; /* 25 */ intrinsic_stmt : tok_INTRINSIC intrinsic_name_list EOS ; intrinsic_name_list: symbolic_name { def_intrins_name(&($1)); } | intrinsic_name_list ',' symbolic_name { def_intrins_name(&($3)); } ; /* construct for allocatable statement */ allocatable_stmt: tok_ALLOCATABLE attr_decl_list EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": ALLOCATABLE statement"); } } ; /* construct for f90 target statement */ target_stmt : tok_TARGET attr_decl_list EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": TARGET statement"); } } ; /* construct for f90 pointer statement */ pointer_stmt : tok_POINTER attr_decl_list EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": POINTER statement"); } } ; attr_decl_list : attr_decl_item | ':' ':' attr_decl_item | attr_decl_list ',' attr_decl_item ; attr_decl_item : symbolic_name { apply_attr(&($1),curr_stmt_class); } | array_declarator { apply_attr(&($1),curr_stmt_class); } ; /* constructs for nonstd Cray POINTER(pointer=pointee) statement */ cray_pointer_stmt: tok_POINTER cray_pointer_item_list EOS { if(f77_cray_pointers || f90_cray_pointers) { nonstandard($1.line_num,$1.col_num,f90_cray_pointers,0); } } ; cray_pointer_item_list: cray_pointer_item | cray_pointer_item_list ',' cray_pointer_item ; cray_pointer_item: '(' pointer_name ',' pointee_name ')' ; pointer_name : symbolic_name { declare_type(&($1),type_INTEGER,local_ptrsize, NULL ); } ; pointee_name : symbolic_name { /* Suppress set/used warnings since often is accessed only via pointer */ use_lvalue(&($1)); use_variable(&($1)); } | array_declarator { use_lvalue(&($1)); use_variable(&($1)); } ; allocate_stmt : tok_ALLOCATE '(' allocate_item_list ')' EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": ALLOCATE statement"); } } ; deallocate_stmt : tok_DEALLOCATE '(' deallocate_item_list ')' EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": DEALLOCATE statement"); } } ; allocate_item_list: allocate_item | allocate_item_list ',' allocate_item ; allocate_item : variable_name | array_name '(' dim_bound_list ')' | symbolic_name '=' variable_name | symbolic_name '=' array_element_name ; deallocate_item_list: deallocate_item | deallocate_item_list ',' allocate_item ; deallocate_item : variable_name | array_name '(' dim_bound_list ')' | symbolic_name '=' variable_name | symbolic_name '=' array_element_name ; nullify_stmt : tok_NULLIFY '(' variable_name_list ')' EOS { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": NULLIFY statement"); } } ; variable_name_list: variable_name | variable_name_list ',' variable_name ; /* 26 */ save_stmt : tok_SAVE EOS { global_save = TRUE; } | tok_SAVE save_list EOS ; save_list : save_item | save_list ',' save_item ; save_item : symbolic_name { apply_attr(&($1),tok_SAVE); } | '/' symbolic_name '/' { /*** def_com_block(&($2),(Token*)NULL);***/ save_com_block(&($2)); } ; /* 27 */ data_stmt : tok_DATA data_defn_list EOS ; data_defn_list : data_defn_item | data_defn_list data_defn_item | data_defn_list ',' data_defn_item ; data_defn_item : data_defn_assignee_list '/' {complex_const_allowed=TRUE;} data_value_list {complex_const_allowed=FALSE;} '/' ; data_defn_assignee_list : data_defn_assignee | data_defn_assignee_list ',' data_defn_assignee ; data_defn_assignee: lvalue { use_lvalue(&($1)); } | data_implied_do_list ; data_value_list: data_value { $$.next_token = append_token((Token*)NULL,&($1)); } | data_value_list ',' data_value { $$.next_token = append_token($1.next_token,&($3)); } ; data_value : data_constant_value { $$.left_token = (Token*)NULL; } | data_repeat_factor '*' data_constant_value { /* Save data repeat factor in a permanent token pointed to by left_token. */ Token *tcopy = new_token(); *tcopy = $1; /* copy the repeat factor token */ $$ = $3; /* pass data_value up the parse tree */ $$.left_token = tcopy; } ; data_repeat_factor: nonzero_unsigned_int_const | symbolic_name { use_parameter(&($1)); } ; data_constant_value: data_constant | symbolic_name { use_parameter(&($1)); } ; data_dlist : data_dlist_item | data_dlist ',' data_dlist_item ; data_dlist_item : array_element_lvalue { use_lvalue(&($1)); } | data_implied_do_list ; data_implied_do_list: '(' data_dlist ',' symbolic_name '=' data_do_loop_bounds ')' { use_implied_do_index(&($4)); } ; data_do_loop_bounds: int_constant_expr ',' int_constant_expr | int_constant_expr ',' int_constant_expr ',' int_constant_expr ; /* 29 */ assignment_stmt : lvalue assignment_op {complex_const_allowed = TRUE; in_assignment_stmt = TRUE;} expr { if( ! (is_true(LVALUE_EXPR,$1.TOK_flags) || is_true(STMT_FUNCTION_EXPR,$1.TOK_flags) )) { syntax_error($1.line_num,$1.col_num, "left side is not assignable"); if(is_true(CONST_EXPR,$1.TOK_flags)) msg_tail(": it is a constant"); } else { int array_lhs, array_rhs; array_lhs = (($1.TOK_flags&(ARRAY_ID_EXPR|ARRAY_ELEMENT_EXPR)) == ARRAY_ID_EXPR); array_rhs = (($4.TOK_flags&(ARRAY_ID_EXPR|ARRAY_ELEMENT_EXPR)) == ARRAY_ID_EXPR); if( array_lhs || array_rhs ) { if( (! array_lhs) && misc_warn) { warning($1.line_num,$1.col_num, "array assigned to scalar"); } else if( f77_assignment ) { nonstandard($2.line_num,$2.col_num,0,0); msg_tail(": assignment involving whole array"); } } assignment_stmt_type(&($1),&($2), &($4)); } complex_const_allowed = FALSE; in_assignment_stmt = FALSE; } EOS { /* Clear u-b-s flags spuriously set */ if(is_true(STMT_FUNCTION_EXPR, $1.TOK_flags) && stmt_sequence_no <= SEQ_STMT_FUN) stmt_function_stmt(&($1)); } ; lvalue : variable_name | array_element_lvalue | substring_lvalue | stmt_function_handle ; assignment_op : '=' /* normal assignment */ | tok_pointer_assignment /* pointer assignment */ { if( f77_pointers ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": pointer assignment"); } } ; /* array-element_lvalue is at 88 */ assign_stmt : tok_ASSIGN pre_label label tok_TO variable_name EOS { do_ASSIGN(&($5)); if( f95_assign ) { nonstandard($1.line_num,$1.col_num,0,f95_assign); msg_tail(": ASSIGN statement"); } ref_label(&($3),LAB_ASSIGN); } ; /* 31 */ unconditional_goto: goto pre_label label EOS { ref_label(&($3),LAB_GOTO); } ; /* 32 */ computed_goto : goto '(' goto_list ')' integer_expr EOS | goto '(' goto_list ')' ',' integer_expr EOS ; /* 33 */ assigned_goto : goto symbolic_name EOS { do_assigned_GOTO(&($2)); } | goto symbolic_name '(' goto_list ')' EOS { do_assigned_GOTO(&($2)); } | goto symbolic_name ',' '(' goto_list ')' EOS { do_assigned_GOTO(&($2)); } ; goto : tok_GOTO { integer_context=TRUE; /* Warn if GOTO considered harmful */ if( style_goto ) { warning($1.line_num,$1.col_num, "obsolescent feature: GOTO statement"); } } ; goto_list : pre_label label { ref_label(&($2), LAB_GOTO); } | goto_list ',' pre_label label { ref_label(&($4), LAB_GOTO); } ; /* 34 */ arithmetic_if_stmt: if_handle pre_label label ',' pre_label label ',' pre_label label EOS { int t=datatype_of($1.TOK_type); if(t != type_INTEGER && t != type_REAL && t != type_DP && t != type_ERROR ) { syntax_error($1.line_num,$1.col_num, "integer, real, or double precision expression required"); } ref_label(&($3), LAB_GOTO); ref_label(&($6), LAB_GOTO); ref_label(&($9), LAB_GOTO); } ; /* 35 */ logical_if_stmt : if_handle executable_stmt { int t=datatype_of($1.TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error($1.line_num,$1.col_num, "logical expression required"); } ; /* 36 */ block_if_stmt : if_handle tok_THEN EOS { int t=datatype_of($1.TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error($1.line_num,$1.col_num, "logical expression required"); /* In picky mode warn if no name tag on block construct. By this time $1 is the expr, not tok_IF, so line and column must be those saved at lower-level productions. */ if(curr_stmt_name == NULL && style_req_construct_name) { warning(if_line_num,if_col_num, "Construct name missing from IF statement"); } } ; if_handle : f77_if_handle { curr_stmt_name = NULL; } | construct_spec f77_if_handle { if(f77_construct_name) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": IF construct name"); } construct_name_seen=FALSE; $$ = $2; } ; f77_if_handle : tok_IF '(' {complex_const_allowed = TRUE;} expr ')' { if(is_true(ID_EXPR,$4.TOK_flags)){ use_variable(&($4)); } complex_const_allowed = FALSE; initial_flag = TRUE; /* for is_keyword */ if_line_num = $1.line_num; /* save location */ if_col_num = $1.col_num; /* for picky warnings */ $$ = $4; /* Inherit expr for type checking above */ } ; /* 37 */ else_if_stmt : tok_ELSE tok_IF '(' {complex_const_allowed = TRUE;} expr ')' { int t=datatype_of($5.TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error($5.line_num,$5.col_num, "logical expression required"); if(is_true(ID_EXPR,$5.TOK_flags)){ use_variable(&($5)); } complex_const_allowed = FALSE; initial_flag = TRUE; } else_if_then ; else_if_then : tok_THEN EOS { curr_stmt_name = NULL; } | tok_THEN construct_name EOS { if(f77_construct_name) { nonstandard($2.line_num,$2.col_num,0,0); msg_tail(": IF construct name"); } } ; /* 38 */ else_stmt : tok_ELSE EOS { curr_stmt_name = NULL; } | tok_ELSE construct_name EOS { if(f77_construct_name) { nonstandard($2.line_num,$2.col_num,0,0); msg_tail(": IF construct name"); } } ; /* 39 */ end_if_stmt : tok_ENDIF EOS { curr_stmt_name = NULL; } | tok_ENDIF construct_name EOS { if(f77_construct_name) { nonstandard($2.line_num,$2.col_num,0,0); msg_tail(": IF construct name"); } } ; /* F90 CASE construct: SELECT CASE ( expr ) [ CASE ( case-value [, case-value ...] ) [ ... ] ] [ CASE DEFAULT [ ... ] ] END SELECT */ select_case_stmt: select_handle '(' {complex_const_allowed = TRUE;} expr ')' EOS { int t = datatype_of ($4.TOK_type); if (t != type_ERROR) { if (!is_const_type(t) || is_float_type(t)) { syntax_error($4.line_num,$4.col_num, "integer, character, or logical expression required"); } } if(is_true(ID_EXPR,$4.TOK_flags)){ use_variable(&($4)); } complex_const_allowed = FALSE; push_block(&($1),$1.tclass,construct,curr_stmt_name,NO_LABEL); } ; select_handle : tok_SELECTCASE { curr_stmt_name = NULL; if (f77_case_construct) { nonstandard($1.line_num,$1.col_num,0,0); } if( style_req_construct_name ) { warning($1.line_num,$1.col_num, "Construct name missing from SELECT statement"); } } | construct_spec tok_SELECTCASE { if (f77_case_construct) { nonstandard($2.line_num,$2.col_num,0,0); } $$ = $2; } ; case_stmt : case_handle EOS | case_handle construct_name EOS ; case_handle : tok_CASE '(' case_values ')' ; case_values : case_value | case_values ',' case_value ; case_value : case_value_primary | case_value_primary ':' case_value_primary { int t1 = datatype_of($1.TOK_type), t2 = datatype_of($3.TOK_type); if (t1 == type_LOGICAL || t2 == type_LOGICAL) { syntax_error($2.line_num,$2.col_num, "ranges of type LOGICAL not allowed here"); } if (t1 != t2) { syntax_error($3.line_num,$3.col_num, "range boundaries must have the same type"); } } | ':' case_value_primary { int t = datatype_of($2.TOK_type); if (t == type_LOGICAL) { syntax_error($2.line_num,$2.col_num, "ranges may not have type LOGICAL bounds"); } } | case_value_primary ':' { int t = datatype_of($2.TOK_type); if (t == type_LOGICAL) { syntax_error($2.line_num,$2.col_num, "ranges may not have type LOGICAL bounds"); } } ; case_value_primary: expr { int t = datatype_of($1.TOK_type); if (t != type_ERROR) { if (!is_const_type(t) || is_float_type(t)) { syntax_error($1.line_num,$1.col_num, "integer, character, or logical expression required"); } } if (!is_true(CONST_EXPR, $1.TOK_flags)) { syntax_error($1.line_num,$1.col_num, "expression must evaluate to a compile-time constant"); } $$ = $1; } ; case_default_stmt: tok_CASEDEFAULT EOS | tok_CASEDEFAULT construct_name EOS ; end_select_stmt : tok_ENDSELECT EOS | tok_ENDSELECT construct_name EOS ; /* 40 */ /* Allow F90 extensions: DO [label [,]] var = expr , expr [,expr] DO [label [,]] WHILE ( expr ) ... ENDDO */ do_stmt : do_handle variable_name '=' do_loop_bounds EOS { if( ! is_true(LVALUE_EXPR,$2.TOK_flags) ) { syntax_error($2.line_num,$2.col_num, "index is not assignable"); if(is_true(CONST_EXPR,$2.TOK_flags)) msg_tail(": it is a constant"); $$.value.integer = -1; /* no hash entry */ } else { def_do_variable(&($2)); /* Store hash index of DO index in token for use when pushing block on stack. The value field is not used by keywords, so it is OK to use it this way. */ $$.value.integer = $2.value.integer; } /* Check for non-integer DO index or bounds */ if(datatype_of($2.TOK_type) == type_INTEGER && datatype_of($4.TOK_type) != type_INTEGER) { if( f95_real_do ) { nonstandard($4.line_num,$4.col_num,0,f95_real_do); msg_tail(": DO loop bounds not integer"); } else if(misc_warn) { warning($3.line_num,$3.col_num, "type mismatch between DO index and bounds"); } } else if(datatype_of($2.TOK_type) != type_INTEGER) { if( f95_real_do ) { nonstandard($2.line_num,$2.col_num,0,f95_real_do); msg_tail(": DO index is not integer"); } else if(datatype_of($4.TOK_type) != type_INTEGER) { if(port_real_do) nonportable($4.line_num,$4.col_num, "non-integer DO loop"); } else { if(trunc_real_do_index) { warning($2.line_num,$2.col_num, "DO index is not integer"); } } } } | tok_DOWHILE '(' {complex_const_allowed=TRUE;} expr ')' EOS { if(is_true(ID_EXPR,$4.TOK_flags)){ use_variable(&($4)); } complex_const_allowed=FALSE; make_true(NONSTD_USAGE_FLAG,$$.TOK_flags); $$.value.integer = -1; /* no DO index */ curr_stmt_name = NULL; } /* Normally, the lexer glues DO WHILE together and yields tok_DOWHILE. The following production is needed, however, for e.g. DO 100 WHILE and constructname : DOWHILE */ | do_handle tok_WHILE '(' {complex_const_allowed=TRUE;} expr ')' EOS { if(is_true(ID_EXPR,$5.TOK_flags)){ use_variable(&($5)); } complex_const_allowed=FALSE; make_true(NONSTD_USAGE_FLAG,$$.TOK_flags); $$.value.integer = -1; /* no DO index */ } | do_handle EOS { make_true(NONSTD_USAGE_FLAG,$$.TOK_flags); $$.value.integer = -1; /* no DO index */ } ; do_handle : f77_do_handle { /* In picky mode warn if no name tag on block construct. */ if( style_req_construct_name ) { warning($1.line_num,$1.col_num, "Construct name missing from DO statement"); } curr_stmt_name = NULL; } | construct_spec f77_do_handle { if(f77_construct_name) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": DO construct name"); } construct_name_seen=FALSE; $$ = $2; } ; f77_do_handle : tok_DO pre_label label { ref_label(&($3), LAB_DO); def_do_label(&($3)); /* Save label in subclass for push_block */ $$.tsubclass = $3.value.integer; } | tok_DO pre_label label ',' { ref_label(&($3), LAB_DO); def_do_label(&($3)); $$.tsubclass = $3.value.integer; } | tok_DO pre_label { make_true(NONSTD_USAGE_FLAG,$$.TOK_flags); integer_context=FALSE; $$.tsubclass = (long)NO_LABEL; } ; do_loop_bounds : int_real_dp_expr ',' int_real_dp_expr { $$.TOK_type=do_bounds_type(&($1),&($3),&($3)); } | int_real_dp_expr ',' int_real_dp_expr ',' int_real_dp_expr { $$.TOK_type=do_bounds_type(&($1),&($3),&($5)); } ; enddo_stmt : tok_ENDDO EOS { curr_stmt_name = NULL; } | tok_ENDDO construct_name EOS ; /* 41 */ continue_stmt : tok_CONTINUE EOS ; /* F90 CYCLE and EXIT statements. Note: at this time, the optional do-construct-name is not supported. */ cycle_or_exit_stmt: cycle_stmt { if( f77_cycle_exit ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": CYCLE statement"); } } | exit_stmt { if( f77_cycle_exit ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail(": EXIT statement"); } } ; cycle_stmt : tok_CYCLE EOS | tok_CYCLE construct_name EOS ; exit_stmt : tok_EXIT EOS | tok_EXIT construct_name EOS ; /* 42 */ stop_stmt : tok_STOP stop_info EOS ; /* 43 */ pause_stmt : tok_PAUSE stop_info EOS { if( f95_pause ) { nonstandard($1.line_num,$1.col_num,0,f95_pause); msg_tail(": PAUSE statement"); } } ; stop_info : /* empty */ | tok_integer_const | symbolic_name { use_variable(&($1)); } | tok_string ; /* 44 */ write_stmt : write_handle {complex_const_allowed = FALSE;} EOS | write_handle io_list {complex_const_allowed = FALSE;} EOS ; write_handle : tok_WRITE {init_io_ctrl_list();} '(' control_info_list ')' {complex_const_allowed = TRUE;} ; /* 45 */ /* Note that parenthesized format_id's will end up in control_info_list. Disambiguation left to semantic phase. This is why we need the optional comma */ read_stmt : read_handle '(' control_info_list ')' EOS | read_handle '(' control_info_list ')' io_list EOS | read_handle '(' control_info_list ')' ',' io_list EOS | read_handle format_id EOS { record_default_io(); } | read_handle format_id ',' io_list EOS { record_default_io(); } ; read_handle : tok_READ {init_io_ctrl_list();} ; accept_stmt : tok_ACCEPT format_id EOS { if(f77_accept_type || f90_accept_type) nonstandard($1.line_num,$1.col_num,f90_accept_type,0); record_default_io(); } | tok_ACCEPT format_id ',' io_list EOS { if(f77_accept_type || f90_accept_type) nonstandard($1.line_num,$1.col_num,f90_accept_type,0); record_default_io(); } ; /* 46 */ print_stmt : tok_PRINT format_id EOS { record_default_io(); } | tok_PRINT format_id ',' {complex_const_allowed = TRUE;} io_list {complex_const_allowed = FALSE;} EOS { record_default_io(); } ; type_output_stmt: tok_TYPE format_id EOS { if(f77_accept_type || f90_accept_type) nonstandard($1.line_num,$1.col_num,f90_accept_type,0); record_default_io(); } | tok_TYPE format_id ',' {complex_const_allowed = TRUE;} io_list {complex_const_allowed = FALSE;} EOS { if(f77_accept_type || f90_accept_type) nonstandard($1.line_num,$1.col_num,f90_accept_type,0); record_default_io(); } ; /* 47 */ control_info_list: control_info_item { ++control_item_count; } | control_info_list ',' control_info_item { ++control_item_count; if(! io_warning_given) { if( io_internal_file ) { if( (curr_stmt_class == tok_WRITE || curr_stmt_class == tok_READ) && io_list_directed ) { if(f77_internal_list_io) { nonstandard($3.line_num,$3.col_num,0,0); msg_tail(": internal file cannot be used with list-directed I/O"); } io_warning_given = TRUE; } } } } ; /* Note that unit id is not distinguished from format id by the grammar. Use sequence no. to tell which is which. */ control_info_item: symbolic_name '=' unit_id { use_io_keyword(&($1),&($3),curr_stmt_class); } | unit_id { if(control_item_count == 0) /* unit id */ { /* Handle special cases */ if( datatype_of($1.TOK_type) == type_STRING ) { /* unit id=char variable is an internal file. I/O goes in and out of the variable. */ if( is_true(ID_EXPR,$1.TOK_flags) ) { io_internal_file = TRUE; if(curr_stmt_class == tok_WRITE) { use_lvalue(&($1)); } } else { /* internal unit must be a variable */ syntax_error($1.line_num,$1.col_num, "internal file must be a variable"); } } else { /* Otherwise it is a normal external file unit id */ record_io_unit_id(&$1); } } else if(control_item_count == 1) /* format id */ { if( $1.tclass == '*' ) { io_list_directed = TRUE; } else if( is_true(ID_EXPR,$1.TOK_flags)){ if(datatype_of($1.TOK_type) == type_NAMELIST) { ref_namelist(&($1),curr_stmt_class); } else /* format id=integer variable is assigned format */ if( datatype_of($1.TOK_type) == type_INTEGER) { if( f95_assign ) { nonstandard($1.line_num,$1.col_num,0,f95_assign); msg_tail(": assigned format"); } } } /* An integer at this point is a format label */ else if ( is_true(LIT_CONST,$1.TOK_flags) && $1.TOK_type == type_byte(class_VAR,type_INTEGER)) { ref_label(&($1),LAB_IO); } current_io_form = IO_FORM_FORMATTED; } /* Handle use of variable */ if( is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } } ; /* OPEN stmt needs its own control list defn to allow for VMS READONLY and similar keywords. Special prodn for unit_id as optional 1st item needed to avoid reduce/reduce conflict with later-occurring symbolic_name items. */ open_info_list : unit_id { if( $1.tclass != '*' && is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } if(control_item_count == 0) { record_io_unit_id(&($1)); } ++control_item_count; } | symbolic_name '=' unit_id { use_io_keyword(&($1),&($3),curr_stmt_class); ++control_item_count; } | open_info_list ',' open_info_item { ++control_item_count; } ; open_info_item : symbolic_name '=' unit_id { use_io_keyword(&($1),&($3),curr_stmt_class); } | symbolic_name /* NOSPANBLOCKS, READONLY or SHARED */ { use_special_open_keywd(&($1)); } ; /* 48 */ io_list : io_item | io_list ',' io_item ; io_item : expr { if( curr_stmt_class == tok_READ || curr_stmt_class == tok_ACCEPT ) { /* Input */ if(is_true(LVALUE_EXPR,$1.TOK_flags)) { use_lvalue(&($1)); } else { syntax_error($1.line_num,$1.col_num, "item is not assignable"); /* Give hint if it is a parameter */ if(is_true(ID_EXPR,$1.TOK_flags) && is_true(CONST_EXPR,$1.TOK_flags)) msg_tail(": it is a constant"); } } else { /* Output */ if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } } } | io_implied_do_list ; /* 49 */ io_implied_do_list: '(' io_list ',' variable_name '=' do_loop_bounds ')' { if( ! is_true(LVALUE_EXPR,$4.TOK_flags) ) { syntax_error($4.line_num,$4.col_num, "index is not assignable"); if(is_true(CONST_EXPR,$4.TOK_flags)) msg_tail(": it is a constant"); } else { use_implied_do_index(&($4)); } } ; /* 50 */ open_stmt : tok_OPEN {init_io_ctrl_list();} '(' open_info_list ')' EOS ; /* 51 */ close_stmt : tok_CLOSE {init_io_ctrl_list();} '(' control_info_list ')' EOS ; /* 52 */ inquire_stmt : tok_INQUIRE {init_io_ctrl_list();} '(' control_info_list ')' EOS ; /* 53 */ backspace_stmt : backspace_handle unit_id EOS { if( $2.tclass != '*' && is_true(ID_EXPR,$2.TOK_flags)){ use_variable(&($2)); } record_io_unit_id(&$2); } | backspace_handle '(' control_info_list ')' EOS ; backspace_handle: tok_BACKSPACE {init_io_ctrl_list();} ; /* 54 */ endfile_stmt : endfile_handle unit_id EOS { if( $2.tclass != '*' && is_true(ID_EXPR,$2.TOK_flags)){ use_variable(&($2)); } record_io_unit_id(&$2); } | endfile_handle '(' control_info_list ')' EOS ; endfile_handle : tok_ENDFILE {init_io_ctrl_list();} ; /* 55 */ rewind_stmt : rewind_handle unit_id EOS { if( $2.tclass != '*' && is_true(ID_EXPR,$2.TOK_flags)){ use_variable(&($2)); } record_io_unit_id(&$2); } | rewind_handle '(' control_info_list ')' EOS ; rewind_handle : tok_REWIND {init_io_ctrl_list();} ; /* 56 */ /* "expr" causes shift/reduce conflict on ')' between red'n unit_id: expr_ and shift primary: ( expr_ ). Use "associativity" rule to force reduction */ unit_id : expr %prec REDUCE | '*' ; /* 57 */ format_id : char_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); /* If integer, format_id is assigned format */ if( datatype_of($1.TOK_type) == type_INTEGER ) { if( f95_assign ) { nonstandard($1.line_num,$1.col_num,0,f95_assign); msg_tail(": assigned format"); } } } /* A format label appears here as integer const */ else if(is_true(LIT_CONST,$1.TOK_flags) && $1.TOK_type == type_byte(class_VAR,type_INTEGER)){ ref_label(&($1),LAB_IO); } } | '*' ; /* 58,59 */ format_stmt : tok_FORMAT {inside_format=TRUE;} '(' format_spec ')' EOS { inside_format=FALSE; } ; /* 60-69 */ format_spec : /* EMPTY */ | nonempty_format_spec ; nonempty_format_spec: fmt_spec_item | nonempty_format_spec fmt_spec_item ; fmt_spec_item : repeatable_fmt_item | unrepeatable_fmt_item | fmt_item_separator ; repeatable_fmt_item: '(' nonempty_format_spec ')' | tok_edit_descriptor ; unrepeatable_fmt_item: tok_string | tok_hollerith { if( f95_Hedit ) { nonstandard($1.line_num,$1.col_num,0,f95_Hedit); msg_tail(": H edit descriptor"); } } | repeat_spec | variable_fmt_item ; fmt_item_separator: ',' | '/' | tok_concat /* since lexer spots "//" */ | ':' | '.' /* Occurs when variable w.d is used */ | nonstandard_fmt_item { if(f77_format_dollarsigns || f90_format_dollarsigns) nonstandard($1.line_num,$1.col_num,f90_format_dollarsigns,0); } ; nonstandard_fmt_item: '$' /* VMS uses this */ ; repeat_spec : tok_integer_const | '-' tok_integer_const /* for kP descriptor */ | '+' tok_integer_const /* for +kP descriptor */ ; /* VMS-style variable format size or repeat spec*/ variable_fmt_item: '<' {inside_format=FALSE;} integer_expr {inside_format=TRUE;} '>' { if(f77_variable_format || f90_variable_format) nonstandard($1.line_num,$1.col_num,f90_variable_format,0); } ; /* 70 handle only: complete defn handled as assignment stmt */ stmt_function_handle: scalar_name '(' stmt_function_dummy_list ')' { check_stmt_sequence(&($1),SEQ_STMT_FUN); check_f90_stmt_sequence(&($1),F90_SEQ_SPECIF); def_stmt_function(&($1),&($3)); /* make token info */ primary_id_expr(&($1),&($$)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("stmt function",&($3)); #endif } ; stmt_function_dummy_list: /* empty list */ { $$.next_token = (Token*)NULL; } | nonempty_stmt_fun_dummy_list ; nonempty_stmt_fun_dummy_list: stmt_function_dummy_arg { $$.next_token = append_token((Token*)NULL,&($1)); } | nonempty_stmt_fun_dummy_list ',' stmt_function_dummy_arg { $$.next_token = append_token($1.next_token,&($3)); } ; stmt_function_dummy_arg: variable_name /* for now: later, handle correctly */ ; /* 71 */ call_stmt : call_handle { call_subr(&($1),(Token*)NULL); complex_const_allowed = FALSE; } EOS | call_handle '(' ')' { call_subr(&($1),(Token*)NULL); complex_const_allowed = FALSE; } EOS | call_handle '(' subr_arg_list ')' { call_subr(&($1),&($3)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("call stmt",&($3)); #endif complex_const_allowed = FALSE; } EOS ; call_handle : tok_CALL symbolic_name { complex_const_allowed = TRUE; $$ = $2; } ; subr_arg_list: subr_arg { $$.next_token = append_token((Token*)NULL,&($1)); $$.left_token = (Token *)NULL; } | subr_arg_list ',' subr_arg { $$.next_token = append_token($1.next_token,&($3)); } ; subr_arg : expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_actual_arg(&($1)); use_variable(&($1)); } } | '*' pre_label label { ref_label(&($3), LAB_CALL); $$ = $3; $$.left_token = (Token *)NULL; } ; /* 72 */ return_stmt : tok_RETURN EOS { (void)do_RETURN(current_module_hash,&($1)); } | tok_RETURN integer_expr EOS { if( do_RETURN(current_module_hash,&($1)) ) { /* Warn if alternate return value is a constant that is not between 0 and the number of labels that are dummy-arguments. */ if( pretty_alt_return && (is_true(EVALUATED_EXPR,$2.TOK_flags) && ($2.value.integer < 1 || $2.value.integer > label_dummy_arg_count)) ){ warning($2.line_num,$2.col_num, "alternate return value"); msg_tail(ulongtostr($2.value.integer)); if( $2.value.integer < 0 ) { msg_tail("is negative"); } else { msg_tail("exceeds"); msg_tail(ulongtostr(label_dummy_arg_count)); msg_tail("= number of alternative return points"); } } else { /* Style warning is under goto rubric */ if( style_goto ) { warning($1.line_num,$1.col_num, "obsolescent feature: alternate return"); } } } } ; /* 73 */ function_reference: fun_or_substr_handle '(' fun_arg_list ')' { /* restore context */ if(!is_true(COMPLEX_FLAG,$1.TOK_flags)) complex_const_allowed=FALSE; if(is_true(IN_ASSIGN,$1.TOK_flags)) in_assignment_stmt = TRUE; /* Change empty arg list to no arg list */ if($3.next_token == NULL) call_func(&($1),(Token *)NULL); else call_func(&($1),&($3)); /* make token info */ func_ref_expr(&($1),&($3),&($$)); /* Substitute empty token for null arglist */ $$.left_token = add_tree_node( &($2),&($1), ($3.next_token == NULL? empty_token(&($3)) : $3.next_token) ); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function",&($3)); #endif } ; fun_or_substr_handle: scalar_name { if(complex_const_allowed)/* save context */ make_true(COMPLEX_FLAG,$$.TOK_flags); complex_const_allowed=TRUE; if(in_assignment_stmt) make_true(IN_ASSIGN,$$.TOK_flags); in_assignment_stmt = FALSE; } ; fun_arg_list : /* empty */ { $$.tclass = 0; $$.next_token = (Token *)NULL; $$.left_token = (Token *)NULL; } | nonempty_fun_arg_list ; nonempty_fun_arg_list: expr { $$.next_token = append_token((Token*)NULL,&($1)); $$.left_token = (Token *)NULL; } | nonempty_fun_arg_list ',' expr { $$.next_token = append_token($1.next_token,&($3)); } ; /* 74 not present: type checking not done at this level */ /* 75 was constant_expr, but only used by PARAMETER */ parameter_expr : /* arith, char, or logical */ expr { int t=datatype_of($1.TOK_type); if( t != type_ERROR){ if( ! is_const_type(t) ) { syntax_error($1.line_num,$1.col_num, "arithmetic, char, or logical expression expected"); } else { if( !is_true(PARAMETER_EXPR,$1.TOK_flags) ) { syntax_error($1.line_num,$1.col_num, "constant expression expected"); } /* Here we allow, with some warnings, expr containing intrins func or **REAL in PARAMETER defn. */ else if( !is_true(CONST_EXPR,$1.TOK_flags) ) { if(f77_param_intrinsic) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail( "intrinsic function or **REAL in PARAMETER defn"); } } } } } ; /* 76 following the text of the standard, not the diagrams */ expr : log_expr { /* Fix it up in case it is used in expr list */ $$.next_token = (Token *) NULL; #ifdef DEBUG_PARSER if(debug_parser) { (void)fprintf(list_fd, "\nexpr: class=0x%lx subclass=0x%lx", $1.tclass, $1.tsubclass); } #endif } ; log_expr : log_disjunct | expr tok_EQV log_disjunct { do_binexpr(&($1),&($2),&($3) ,&($$)); } | expr tok_NEQV log_disjunct { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; log_disjunct : log_term | log_disjunct tok_OR log_term { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; log_term : log_factor | log_term tok_AND log_factor { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; log_factor : log_primary | tok_NOT log_primary { do_unexpr(&($1),&($2),&($$)); } ; log_primary : arith_expr | log_primary tok_relop log_primary { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; arith_expr : term | '-' term { do_unexpr(&($1),&($2),&($$)); } | '+' term { do_unexpr(&($1),&($2),&($$)); } | arith_expr '+' term { do_binexpr(&($1),&($2),&($3) ,&($$)); } | arith_expr '-' term { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; term : factor | term '/' factor { do_binexpr(&($1),&($2),&($3) ,&($$)); if(div_check && !is_true(CONST_EXPR,$3.TOK_flags)){ warning($2.line_num,$2.col_num, "Possible division by zero"); } } | term '*' factor { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; factor : char_expr | char_expr tok_power factor { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; char_expr : primary | char_expr tok_concat primary { do_binexpr(&($1),&($2),&($3) ,&($$)); } ; primary : variable_name { make_true(DIM_BOUND_EXPR,$$.TOK_flags); } | array_element_name | function_reference | substring_name | literal_const { $$.TOK_flags = 0; $$.left_token = (Token *)NULL; make_true(CONST_EXPR,$$.TOK_flags); make_true(PARAMETER_EXPR,$$.TOK_flags); make_true(LIT_CONST,$$.TOK_flags); make_true(EVALUATED_EXPR,$$.TOK_flags); make_true(DIM_BOUND_EXPR,$$.TOK_flags); } | '(' expr ')' { $$ = $2; /* (identifier) becomes a non-identifier */ if(is_true(LVALUE_EXPR,$2.TOK_flags)) { if(pretty_parens) { ugly_code($2.line_num,$2.col_num, "Extraneous parentheses"); } use_variable(&($2)); make_false(LVALUE_EXPR,$$.TOK_flags); make_false(ARRAY_ID_EXPR,$$.TOK_flags); make_false(ARRAY_ELEMENT_EXPR,$$.TOK_flags); make_false(ID_EXPR,$$.TOK_flags); make_false(DO_VARIABLE,$$.TOK_flags); } /* (expr) becomes tree node with root = '(' */ $$.left_token = add_tree_node(&($1),&($2), (Token*)NULL); } ; /* Literal constants are numbers, strings holleriths, and logical constants */ literal_const : numeric_const /* (class, size set in numeric_const productions) */ | tok_string { $$.TOK_type = type_byte(class_VAR,type_STRING); /* (size is set in get_string) */ } | tok_hollerith { $$.TOK_type = type_byte(class_VAR,type_HOLLERITH); /* (size is set in get_hollerith) */ if(port_hollerith) { warning($1.line_num,$1.col_num, "hollerith constant may not be portable"); } } | tok_logical_const { $$.TOK_type = type_byte(class_VAR,type_LOGICAL); $$.size = size_DEFAULT; } ; numeric_const : tok_integer_const { $$.TOK_type = type_byte(class_VAR,type_INTEGER); $$.size = size_DEFAULT; } | tok_real_const { $$.TOK_type = type_byte(class_VAR,type_REAL); $$.size = size_DEFAULT; } | tok_dp_const { $$.TOK_type = type_byte(class_VAR,type_DP); $$.size = size_DEFAULT; } | tok_quad_const { $$.TOK_type = type_byte(class_VAR,type_QUAD); $$.size = size_QUAD; if(f77_quad_constants || f90_quad_constants) { nonstandard($1.line_num,$1.col_num,f90_quad_constants,0); msg_tail(": quad precision constant"); } } | tok_complex_const { $$.TOK_type = type_byte(class_VAR,type_COMPLEX); $$.size = size_DEFAULT; } | tok_dcomplex_const { $$.TOK_type = type_byte(class_VAR,type_DCOMPLEX); $$.size = size_DEFAULT; } ; /* 77 */ integer_expr : /* integer */ arith_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } if(datatype_of($1.TOK_type) != type_INTEGER) { syntax_error( $1.line_num,$1.col_num, "expression must be integer type"); } } ; /* 78 */ int_real_dp_expr: /* integer, real, or double */ arith_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } { int t=datatype_of($1.TOK_type); if(t != type_INTEGER && t != type_REAL && t != type_DP ) { syntax_error( $1.line_num,$1.col_num, "expression must be integer, real, or double precision type"); } } } ; /* 79 absent */ /* 80 */ int_constant_expr: /* integer const */ arith_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } if( ! is_true(CONST_EXPR,$1.TOK_flags) ) { syntax_error( $1.line_num,$1.col_num, "constant expression expected"); } else { if(datatype_of($1.TOK_type) != type_INTEGER){ syntax_error( $1.line_num,$1.col_num, "integer expression expected"); } else { $$.value.integer = int_expr_value(&($1)); } } } ; /* 81 */ dim_bound_expr : /* integer */ arith_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } if(f77_array_bounds) { /* Section 5.1.1.1 */ if( !is_true(DIM_BOUND_EXPR,$1.TOK_flags) ) { nonstandard($1.line_num,$1.col_num,0,0); msg_tail( ": array bounds expr cannot have array or function reference"); } } if( datatype_of($1.TOK_type) != type_INTEGER ){ syntax_error( $1.line_num,$1.col_num, "integer dimension expected"); $$.value.integer = 0; } else { if( is_true(EVALUATED_EXPR,$1.TOK_flags) ) $$.value.integer = int_expr_value(&($1)); else /* must be dummy */ $$.value.integer = 0; } } ; /* 82-85 absent: no type checking here */ /* 86-87 absent: see 76 */ /* 88 */ array_element_lvalue: array_name '(' subscript_list ')' { ref_array(&($1),&($3)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("array lvalue",&($3)); #endif /* array now becomes scalar */ make_false(ARRAY_ID_EXPR,$$.TOK_flags); make_true(ARRAY_ELEMENT_EXPR,$$.TOK_flags); $$.left_token = add_tree_node( &($2),&($1),$3.next_token); $$.next_token = (Token *) NULL; } ; array_element_name: array_name '(' subscript_list ')' { ref_array(&($1),&($3)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("array",&($3)); #endif /* array now becomes scalar */ make_false(ARRAY_ID_EXPR,$$.TOK_flags); make_true(ARRAY_ELEMENT_EXPR,$$.TOK_flags); $$.left_token = add_tree_node( &($2),&($1),$3.next_token); $$.next_token = (Token *) NULL; } ; subscript_list : subscript { $$.next_token = append_token((Token*)NULL,&($1)); } | subscript_list ',' subscript { $$.next_token = append_token($1.next_token,&($3)); } ; subscript : expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } /* check subscript exprs for integer type */ if(datatype_of($1.TOK_type) != type_INTEGER) if(trunc_real_subscript) warning($1.line_num,$1.col_num, "subscript is not integer"); } ; /* 89 */ substring_name : fun_or_substr_handle substring_interval { /* restore status of complex flag */ if(!is_true(COMPLEX_FLAG,$1.TOK_flags)) complex_const_allowed=FALSE; /* set flag to keep more than just id for arg list text */ if(is_true(ID_EXPR,$1.TOK_flags)) make_true(ARRAY_ELEMENT_EXPR,$$.TOK_flags); $$.size=substring_size(&($1),&($2)); $$.left_token = add_tree_node( &save_token,&($1),&($2)); $$.next_token = (Token *) NULL; } | function_reference substring_interval { $$.size=substring_size(&($1),&($2)); $$.left_token = add_tree_node( &save_token,&($1),&($2)); $$.next_token = (Token *) NULL; } | array_element_name substring_interval { $$.size=substring_size(&($1),&($2)); $$.left_token = add_tree_node( &save_token,&($1),&($2)); $$.next_token = (Token *) NULL; } ; substring_lvalue: scalar_name substring_interval { ref_variable(&($1)); $$.TOK_flags = $1.TOK_flags; $$.size=substring_size(&($1),&($2)); } | array_element_lvalue substring_interval { $$.size=substring_size(&($1),&($2)); } ; /* substring interval: limits go into TOK_start, TOK_end. */ substring_interval: '(' ':' ')' { $$.TOK_start=1; $$.TOK_end=0; /* 0 means LEN */ save_token = $1; /* Save the paren for tree node */ $$.left_token = add_tree_node(&($2), empty_token(&($1)),empty_token(&($3))); /* Nullify next_token so it looks like a tokenlist */ $$.next_token = (Token *)NULL; } | '(' substr_index_expr ':' ')' { $$.TOK_start=$2.value.integer; $$.TOK_end=0; /* 0 means LEN */ save_token = $1; /* Save the paren for tree node */ $$.left_token = add_tree_node(&($3),&($2),empty_token(&($4))); $$.next_token = (Token *)NULL; } | '(' ':' substr_index_expr ')' { $$.TOK_start=1; $$.TOK_end=$3.value.integer; save_token = $1; /* Save the paren for tree node */ $$.left_token = add_tree_node(&($2),empty_token(&($1)),&($3)); $$.next_token = (Token *)NULL; } | '(' substr_index_expr ':' substr_index_expr ')' { $$.TOK_start=$2.value.integer; $$.TOK_end=$4.value.integer; save_token = $1; /* Save the paren for tree node */ $$.left_token = add_tree_node(&($3),&($2),&($4)); $$.next_token = (Token *)NULL; } ; substr_index_expr: arith_expr { if(is_true(ID_EXPR,$1.TOK_flags)){ use_variable(&($1)); } /* check validity and replace nonconst value by size_UNKNOWN. */ if(is_true(CONST_EXPR,$1.TOK_flags)) { if( ($$.value.integer=int_expr_value(&($1))) < 1) { syntax_error($1.line_num,$1.col_num, "invalid substring index"); } } else /* (no longer need ID hash index) */ $$.value.integer=size_UNKNOWN; } ; /* 90-98 absent: name categories not distinguished */ /* 99 */ variable_name : scalar_name { ref_variable(&($1)); $$.TOK_flags = $1.TOK_flags; } | array_name ; scalar_name : tok_identifier { ref_identifier(&($1)); primary_id_expr(&($1),&($$)); } ; array_name : tok_array_identifier { ref_variable(&($1)); primary_id_expr(&($1),&($$)); } ; /* symbolic_name refers to a name without making it into an id expr */ symbolic_name : tok_identifier | tok_array_identifier ; construct_spec : construct_name ':' { construct_name_seen=TRUE; /* remember the name for block balancing */ curr_stmt_name = hashtab[$1.value.integer].name; } ; construct_name : tok_identifier { curr_stmt_name = hashtab[$1.value.integer].name; } | tok_array_identifier { curr_stmt_name = hashtab[$1.value.integer].name; } ; /* 100 */ data_constant : numeric_const | '-' numeric_const { $$ = $2; } | '+' numeric_const { $$ = $2; } | tok_logical_const { $$.TOK_type = type_byte(class_VAR,type_LOGICAL); $$.size = size_DEFAULT; } | tok_string { $$.TOK_type = type_byte(class_VAR,type_STRING); $$.size = size_DEFAULT; } | tok_hollerith { $$.TOK_type = type_byte(class_VAR,type_HOLLERITH); $$.size = size_DEFAULT; } ; /* 101-102 absent */ /* 103 */ nonzero_unsigned_int_const: tok_integer_const { if($1.value.integer == 0) { if(misc_warn) { warning($1.line_num,$1.col_num, "nonzero integer expected"); msg_tail(": substituting 1"); } $$.value.integer = 1; } $$.left_token = (Token *)NULL; } ; /* F77 requires char length spec > 0 but in F90 a length spec 0 is allowed, and negative length is turned into 0. This production handles this. We warn about a negative value just in case. */ nonneg_unsigned_int_const: tok_integer_const { if($1.value.integer <= 0) { if($1.value.integer < 0) { if(misc_warn || f77_char_extension) { warning($1.line_num,$1.col_num, "non-negative integer expected"); msg_tail(": substituting 0"); } $$.value.integer = 0; } else if(f77_char_extension) { warning($1.line_num,$1.col_num, "nonzero integer expected"); } } $$.left_token = (Token *)NULL; } ; /* 104-109 absent: lexer handles these */ /* pre_label prepares for an expected label by setting flag so that lexer won't look for E-format number. All grammar rules that have "label" precede it with "pre_label" */ pre_label : /* NOTHING */ { integer_context=TRUE; } ; /* 110 */ label : tok_integer_const { if( $$.value.integer > 99999 && misc_warn) { syntax_error($1.line_num,$1.col_num, "statement label exceeds 5 digits"); } integer_context=FALSE; $$.TOK_type = type_byte(class_LABEL,type_LABEL); $$.size = size_DEFAULT; $$.TOK_flags = 0; } ; /* 111-116 absent: lexer handles these */ %% void init_parser(VOID) /* Initialize various flags & counters */ { initial_flag = TRUE; /* set flag for keyword test */ implicit_flag=FALSE; /* clear flags for IMPLICIT stmt */ implicit_letter_flag = FALSE; implicit_type_given = FALSE; implicit_none = FALSE; global_save = FALSE; prev_token_class = EOS; complex_const_allowed = FALSE; stmt_sequence_no = 0; f90_stmt_sequence_no = 0; true_prev_stmt_line_num = 0; { int i; /* Reset *_this_file flags for project files */ for(i=0; ileft_token = add_tree_node(op, expr, (Token*)NULL); } /* Handle binary expressions: link into a tree and propagate type. */ PRIVATE void #if HAVE_STDC do_binexpr(Token *l_expr, Token *op, Token *r_expr, Token *result) #else /* K&R style */ do_binexpr(l_expr,op,r_expr,result) Token *l_expr,*op,*r_expr,*result; #endif /* HAVE_STDC */ { binexpr_type(l_expr,op,r_expr,result); /* Propagate the type */ result->left_token = add_tree_node(op, l_expr, r_expr); } /* Changes a token to empty and replaces src_text by null string, value by 0. Other info (line, col, etc.) unchanged. */ PRIVATE Token * #if HAVE_STDC empty_token(Token *t) #else /* K&R style */ empty_token(t) Token *t; #endif /* HAVE_STDC */ { #ifdef DEBUG_EMPTY_TOKEN static char *nullstring="(empty)"; /* for debugging. */ #else static char *nullstring=""; /* for operation. */ #endif t->tclass = tok_empty; t->tsubclass = 0; t->value.integer = 0; t->left_token = (Token *) NULL; t->src_text = nullstring; return t; } /* Propagate non-integer type if any of DO loop bounds are non-integer. */ PRIVATE int #if HAVE_STDC do_bounds_type(Token *t1, Token *t2, Token *t3) #else /* K&R style */ do_bounds_type(t1,t2,t3) Token *t1, *t2, *t3; #endif /* HAVE_STDC */ { int result_type; if(datatype_of(t1->TOK_type) != type_INTEGER)result_type = t1->TOK_type; else if(datatype_of(t2->TOK_type) != type_INTEGER)result_type = t2->TOK_type; else if(datatype_of(t3->TOK_type) != type_INTEGER)result_type = t3->TOK_type; else result_type = t1->TOK_type; return result_type; } /* Debugging routine: prints the expression list of various productions */ #ifdef DEBUG_PARSER PRIVATE void print_exprlist(s,t) char *s; Token *t; { (void)fprintf(list_fd,"\n%s arglist: ",s); if(t == NULL) (void)fprintf(list_fd,"(empty)"); else { while( (t=t->next_token) != NULL) { fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]); if( is_true(ID_EXPR,t->TOK_flags) ) (void)fprintf(list_fd,"(%s) ",token_name(t)); } } } PRIVATE void print_comlist(s,t) char *s; Token *t; { (void)fprintf(list_fd,"\n%s varlist: ",s); if(t == NULL) (void)fprintf(list_fd,"(empty)"); else { while( (t=t->next_token) != NULL) { fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]); if( is_true(ID_EXPR,t->TOK_flags) ) (void)fprintf(list_fd,"(%s) ",token_name(t)); } } } #endif /* After having parsed prog_stmt, function_stmt, subroutine_stmt, block_data_stmt, the stmt_sequence_no is set to the value SEQ_HEADER. */ void #if HAVE_STDC check_seq_header(Token *t) #else /* K&R style */ check_seq_header(t) Token *t; #endif /* HAVE_STDC */ { if(stmt_sequence_no >= SEQ_HEADER) { syntax_error( (t == (Token *) NULL? line_num: t->line_num), NO_COL_NUM, "missing END statement inserted"); msg_tail( (t == (Token *) NULL? "at end of file": "prior to statement") ); if( t != (Token *) NULL ) pop_block(t,tok_END,(char *)NULL,NO_LABEL); END_processing(t); } stmt_sequence_no = SEQ_HEADER; f90_stmt_sequence_no = F90_SEQ_HEADER; } PRIVATE void #if HAVE_STDC check_stmt_sequence(Token *t, int seq_num) #else /* K&R style */ check_stmt_sequence(t,seq_num) Token *t; int seq_num; #endif /* HAVE_STDC */ { if(stmt_sequence_no > seq_num) { if(f77_stmt_order) { nonstandard(t->line_num, NO_COL_NUM,0,0); msg_tail(": Statement out of order."); } } /* If no error, sequence number is updated to new value. If error, it is rolled back to prevent cascades of error messages. */ stmt_sequence_no = seq_num; } PRIVATE void #if HAVE_STDC check_f90_stmt_sequence(Token *t, int f90_seq_num) #else /* K&R style */ check_f90_stmt_sequence(t,f90_seq_num) Token *t; int f90_seq_num; #endif /* HAVE_STDC */ { if(f90_stmt_sequence_no > f90_seq_num) { if(f90_stmt_order) { nonstandard(t->line_num, NO_COL_NUM,f90_stmt_order,0); msg_tail(": Statement out of order."); } } /* If no error, sequence number is updated to new value. If error, it is rolled back to prevent cascades of error messages. */ f90_stmt_sequence_no = f90_seq_num; } PRIVATE void init_io_ctrl_list(VOID) { control_item_count = 0; io_internal_file = FALSE; io_list_directed = FALSE; io_warning_given = FALSE; current_io_unit_no = IO_UNIT_UNKNOWN; current_io_unit_id = IO_UNIT_UNKNOWN; current_io_access = IO_ACCESS_DEFAULT; current_io_form = IO_FORM_DEFAULT; } /* Remember the name or number of unit_id for current I/O stmt. This routine is only called by parser productions that have a bare unit_id, so less checking is done than for unit=unit_id specifiers that can refer to other than external files. */ void record_io_unit_id(Token *id) { if( id->tclass == '*' ) { current_io_unit_id = IO_UNIT_DEFAULT; } else if( is_true(ID_EXPR,id->TOK_flags)){ current_io_unit_id = id->value.integer; /* get hash code of identifier */ } else if( is_true(LIT_CONST,id->TOK_flags) && id->TOK_type == type_byte(class_VAR,type_INTEGER)) { current_io_unit_no = id->value.integer; /* get literal int value */ } } /* Set I/O usage parameters for default formatted sequential I/O statement like READ *, X */ PRIVATE void record_default_io(VOID) { current_io_unit_no = IO_UNIT_UNKNOWN; current_io_unit_id = IO_UNIT_DEFAULT; current_io_access = IO_ACCESS_SEQUENTIAL; current_io_form = IO_FORM_FORMATTED; } /* This routine applies the attributes of attr-based type declaration. Set dim_bounds to current_dim_bound_list or to NULL if item has its own array bounds declarator. */ PRIVATE void process_attrs(Token *t,Token *dim_bounds) { if(current_external_attr) def_ext_name(t); if(current_intrinsic_attr) def_intrins_name(t); if(current_allocatable_attr) apply_attr(t,tok_ALLOCATABLE); if(current_pointer_attr) apply_attr(t,tok_POINTER); if(current_save_attr) apply_attr(t,tok_SAVE); if(current_target_attr) apply_attr(t,tok_TARGET); if(dim_bounds != NULL) def_array_dim(t,dim_bounds); } /* After having parsed end_stmt, common block lists and subprogram argument lists are copied over into global symbol table, the local symbol table is printed out and then cleared, and stmt_sequence_no is set to zero for start of next module. */ PRIVATE void #if HAVE_STDC END_processing(Token *t) #else /* K&R style */ END_processing(t) Token *t; #endif /* HAVE_STDC */ { ++tot_module_count; if(current_module_hash != -1) { if(exec_stmt_count == 0 && current_module_type != type_BLOCK_DATA) { if(misc_warn) warning(t == (Token *)NULL? line_num: t->line_num, NO_COL_NUM, "Module contains no executable statements"); } if(do_list && t != (Token *)NULL) { (void)flush_end_stmt(t->line_num); } doing_end_proc = TRUE; /* Set flag for special error message mode */ /* Catch things that had to wait till now */ check_loose_ends(current_module_hash); /* Put arg and com lists into global table */ process_lists(current_module_hash); /* Print symbol table for debug */ debug_symtabs(); /* Print local symbol table and do local warnings */ print_loc_symbols(); /* Reset local symbol table */ init_symtab(); doing_end_proc = FALSE; } exec_stmt_count = 0; stmt_sequence_no = 0; f90_stmt_sequence_no = 0; current_module_hash = -1; implicit_type_given = FALSE; implicit_none = FALSE; true_prev_stmt_line_num = 0; integer_context = FALSE; global_save = FALSE; label_dummy_arg_count = 0; num_io_unit_usages = 0; } /* Routine to create a node for an expr tree. Returns a pointer to the newly created node. */ PRIVATE Token * #if HAVE_STDC add_tree_node(Token *node, Token *left, Token *right) #else /* K&R style */ add_tree_node(node,left,right) Token *node,*left,*right; #endif /* HAVE_STDC */ { Token *new_node, *new_left, *new_right; new_node=new_token(); *new_node = *node; /* Make a permanent copy of root */ /* Add the children. If child's left_token pointer is null, then that expression is a primary. Otherwise it is the root node of a subtree. */ if(left->left_token == (Token *)NULL) { new_left=new_token(); *new_left = *left; /* Copy primary to permanent space */ } else { new_left = left->left_token; /* No copying needed in this case */ } if(right == (Token *)NULL) { new_right = (Token *)NULL; /* No right child */ } else if(right->left_token == (Token *)NULL || node->tclass == '(') { /* Paren means right child is expr list */ new_right=new_token(); *new_right = *right; /* Copy primary to permanent space */ } else { new_right = right->left_token; /* No copying needed in this case */ } new_node->left_token = new_left; /* Link children onto the new root */ new_node->next_token = new_right; return new_node; } /* Routine to add token t to the front of a token list. */ PRIVATE Token * #if HAVE_STDC append_token(Token *tlist, Token *t) #else /* K&R style */ append_token(tlist,t) Token *tlist, *t; #endif /* HAVE_STDC */ { Token *tcopy; tcopy=new_token(); *tcopy = *t; /* make permanent copy of token */ tcopy->next_token = tlist; /* link it onto front of list */ return tcopy; /* return it as new tlist */ } /* Routine to pop closing statement of block off the stack. Note: label should be NO_LABEL even if the statement has a label, except for terminal statement of a labeled DO loop. */ PRIVATE void pop_block(Token *t, int stmt_class, char *name, LABEL_t label) { /* Define lookup table for block matches. This table is generated from tokdefs.h by the Perl script make_blockmatch.pl. This script also generates 4 macro definitions that go here. It defines MIN_BLOCK_TOKEN and MAX_BLOCK_TOKEN used to bound range of valid keytok_name arguments for error messages. It also defines MIN_CLOSER and MAX_CLOSER giving the range of token numbers for closing tokens. The array block_match contains the token numbers for the matching openers. Look up the matching opener class as block_match[closer_class-MIN_CLOSER] Plain END is handled specially since it matches many things. Likewise closing labeled-DO range is handled specially. (ENDDO is handled there if loop is labeled, handled with structured block closers otherwise.) */ static int block_match[] = { #include "block_match.h" }; /* Macro for names of all block keyword tokens. Although no error messages should print "identifier" (only occurs as DO terminator, and mismatch is handled specially), include it for possible debug use. Any other token classes in block_stack mean a bug in ftnchek. */ #define TOKEN_NAME(CLASS) ((CLASS)>=MIN_BLOCK_TOKEN && (CLASS)<=MAX_BLOCK_TOKEN? \ keytok_name(CLASS):((CLASS) == tok_identifier?"identifier":"bogus")) /* Define DBG_TOKNAME for debugging. If possible, use yytname to allow for bogus tokens showing up. This works only for bison parser generator. It would be easy to fix up for byacc too if need be. */ #ifdef DEBUG_BLOCKCHECK #ifdef USE_YYTNAME #define DBG_TOKNAME(CLASS) (char *)(yytname[YYTRANSLATE(CLASS)]) #else #define DBG_TOKNAME(CLASS) TOKEN_NAME(CLASS) #endif #endif #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\npopping stmt class %s name %s label %d at line %d", DBG_TOKNAME(stmt_class),name,label,t->line_num); } #endif if(block_depth == 0) { syntax_error(t->line_num,t->col_num,"no construct to end here"); } else { int opener_class, must_check_name=FALSE; BLOCK_TYPE blocktype; --block_depth; opener_class = block_stack[block_depth].sclass; blocktype = block_stack[block_depth].blocktype; #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\n opener was class %s name %s label %d at line %d", DBG_TOKNAME(opener_class), block_stack[block_depth].name, block_stack[block_depth].label, block_stack[block_depth].first_line); } #endif /* DO loop terminator */ if( label != NO_LABEL) { int shared_warning = TRUE; /* Mark DO index variable as inactive */ int h=block_stack[block_depth].do_var_hash; if(h != -1) undef_do_variable(h); if( stmt_class == tok_ENDDO ) { must_check_name = TRUE; } else { /* issue picky warnings if not modern DO construct */ if(style_req_enddo) { warning(t->line_num,t->col_num, "DO loop not terminated by ENDDO"); } else if( stmt_class != tok_CONTINUE ) { if(style_req_do_construct) { warning(t->line_num,t->col_num, "DO loop not terminated by CONTINUE or ENDDO"); } } } if( opener_class != tok_DO ) { syntax_error(t->line_num,t->col_num,keytok_name(opener_class)); msg_tail("block not closed when DO loop terminating statement encountered"); } else if( label != block_stack[block_depth].label ) { syntax_error(t->line_num,t->col_num,"Label"); msg_tail(ulongtostr(label)); msg_tail("on DO loop terminator does not match"); if(block_stack[block_depth].label == NO_LABEL ) { msg_tail("label-less DO statement"); } else { msg_tail("corresponding DO label"); msg_tail(ulongtostr(block_stack[block_depth].label)); } msg_tail("above"); } /* If terminator is shared by other DOs, pop them too */ else { while(block_depth > 0 && label == block_stack[block_depth-1].label) { --block_depth; /* Mark DO index variable as inactive */ { int hh=block_stack[block_depth].do_var_hash; if(hh != -1) undef_do_variable(hh); } #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\n opener was class %s name %s label %d at line %d", DBG_TOKNAME(opener_class), block_stack[block_depth].name, block_stack[block_depth].label, block_stack[block_depth].first_line); } #endif if(style_shared_do_terminator && shared_warning) { warning(t->line_num,t->col_num, "Obsolescent feature: shared DO terminator"); shared_warning = FALSE; /* don't repeat the warning */ } } } } else if( stmt_class == tok_END ) { /* plain END statement */ if(style_req_structured_end) { warning(t->line_num,t->col_num,"Old-style END statement"); } /* Check that END statement ends subprog block */ if(opener_class != tok_SUBROUTINE && opener_class != tok_FUNCTION && opener_class != tok_PROGRAM && opener_class != tok_BLOCKDATA) { syntax_error(t->line_num,t->col_num, "Block not closed when END statement encountered"); } } else { /* structured block closers */ int matching_class; must_check_name = TRUE; /* Look up the correct matching opener class */ if( stmt_class < MIN_CLOSER || stmt_class > MAX_CLOSER || (matching_class = block_match[stmt_class-MIN_CLOSER]) == 0 ) { fprintf(list_fd,"%d=%s ",stmt_class,keytok_name(stmt_class)); oops_message(OOPS_FATAL,t->line_num,t->col_num, "pop_block called for unrecognized closing token"); } else { /* check if opener matches expected */ if( opener_class != matching_class ) { /* If possible, use token names for better error messages */ syntax_error(t->line_num,t->col_num, keytok_name(stmt_class)); msg_tail("statement does not match"); msg_tail(keytok_name(opener_class)); msg_tail("block it closes"); must_check_name = FALSE; /* name mismatch probably bogus here */ } /* If unlabeled END DO of loop with index variable, mark it inactive. */ if( stmt_class == tok_ENDDO ) { int h=block_stack[block_depth].do_var_hash; if(h != -1) undef_do_variable(h); } } } /* Issue syntax error if name missing from a component of a named construct. In picky mode warn if no name tag on structured END. */ if( must_check_name ) { if( name == (char *)NULL ) { if( blocktype == construct ) { /* IF, DO, SELECT */ if( block_stack[block_depth].name != (char *)NULL ) { syntax_error(t->line_num,t->col_num, "Construct name"); msg_tail(block_stack[block_depth].name); msg_tail("missing"); } } else { /* structured END of subprogram */ if(style_req_end_name) { warning(t->line_num,t->col_num, "Name of subprogram missing from"); msg_tail(keytok_name(stmt_class)); msg_tail("statement"); } } } /* Otherwise check name tag if present */ else { /* OK to compare pointers due to name storage method */ if(name != block_stack[block_depth].name) { /* Opener name can only be missing from a construct, but handle subprog case anyway. */ if(block_stack[block_depth].name == (char *)NULL) { syntax_error(t->line_num,t->col_num, "name found on closing statement of unnamed"); msg_tail(blocktype == construct? "construct": "subprogram"); } else { syntax_error(t->line_num,t->col_num, "Name"); msg_tail(name); msg_tail("does not match"); msg_tail(blocktype == construct? "construct": "subprogram"); msg_tail("name"); msg_tail(block_stack[block_depth].name); } } } } } } /* Check CYCLE and EXIT statements for agreement with enclosing DO loop. */ PRIVATE void check_construct_name_match(Token *t, char *name) { /* If no name on statement, it must at least be inside range of a DO. */ if( name == (char *)NULL ) { int depth; for(depth = block_depth-1; depth >= 0; depth--) { if( block_stack[depth].sclass == tok_DO ) return; } syntax_error(t->line_num,t->col_num, "statement not within range of any DO loop"); } /* If name tag present, it must belong to an enclosing DO. */ else { int depth; for(depth = block_depth-1; depth >= 0; depth--) { if( block_stack[depth].sclass == tok_DO && block_stack[depth].name == name ) return; } syntax_error(t->line_num,t->col_num, "construct name"); msg_tail(name); msg_tail("does not match name of any enclosing DO construct"); } } PRIVATE void push_block(Token *t, int stmt_class, BLOCK_TYPE blocktype, char *name, LABEL_t label) { if(block_depth == MAX_BLOCK_DEPTH) { oops_message(OOPS_FATAL,t->line_num,t->col_num, "blocks nested too deeply"); } else { #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\npushing stmt class %s name %s label %d at line %d", DBG_TOKNAME(stmt_class),name,label,t->line_num); } #endif /* ELSE and ELSE IF masquerade here as IF, and CASE and CASEDEFAULT as SELECT, to simplify match code in pop_block. */ block_stack[block_depth].sclass = ((stmt_class == tok_ELSE)? tok_IF: ((stmt_class == tok_CASE)? tok_SELECTCASE: stmt_class)); block_stack[block_depth].name = name; block_stack[block_depth].label = label; block_stack[block_depth].first_line = t->line_num; block_stack[block_depth].blocktype = blocktype; block_stack[block_depth].do_var_hash = -1; /* undefined at this time */ ++block_depth; } } PRIVATE void give_kind_warning(Token *t) { warning(t->line_num,t->col_num, "I do not yet support KIND selectors. \ All KINDs are treated as default KIND. \ Checking of type agreement may be incorrect as a result. \ (This message is only given once.)"); kind_warning_given = TRUE; } ftnchek-3.3.1/fortran.c0000644000031000002260000075661610147252645015430 0ustar moniotstaff00000000000000/* A Bison parser, made by GNU Bison 1.875c. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Written by Richard Stallman by simplifying the original so called ``semantic'' parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { tok_identifier = 258, tok_array_identifier = 259, tok_label = 260, tok_integer_const = 261, tok_real_const = 262, tok_dp_const = 263, tok_quad_const = 264, tok_complex_const = 265, tok_dcomplex_const = 266, tok_logical_const = 267, tok_string = 268, tok_hollerith = 269, tok_edit_descriptor = 270, tok_letter = 271, tok_relop = 272, tok_AND = 273, tok_OR = 274, tok_EQV = 275, tok_NEQV = 276, tok_NOT = 277, tok_power = 278, tok_concat = 279, tok_lparen = 280, tok_pointer_assignment = 281, tok_ACCEPT = 282, tok_ALLOCATABLE = 283, tok_ALLOCATE = 284, tok_ASSIGN = 285, tok_BACKSPACE = 286, tok_BLOCKDATA = 287, tok_BYTE = 288, tok_CALL = 289, tok_CASE = 290, tok_CASEDEFAULT = 291, tok_CHARACTER = 292, tok_CLOSE = 293, tok_COMMON = 294, tok_COMPLEX = 295, tok_CONTINUE = 296, tok_CYCLE = 297, tok_DATA = 298, tok_DEALLOCATE = 299, tok_DIMENSION = 300, tok_DO = 301, tok_DOUBLECOMPLEX = 302, tok_DOUBLEPRECISION = 303, tok_DOWHILE = 304, tok_ELSE = 305, tok_END = 306, tok_ENDBLOCKDATA = 307, tok_ENDDO = 308, tok_ENDFILE = 309, tok_ENDFUNCTION = 310, tok_ENDIF = 311, tok_ENDPROGRAM = 312, tok_ENDSELECT = 313, tok_ENDSUBROUTINE = 314, tok_ENTRY = 315, tok_EQUIVALENCE = 316, tok_EXTERNAL = 317, tok_EXIT = 318, tok_FORMAT = 319, tok_FUNCTION = 320, tok_GOTO = 321, tok_IF = 322, tok_IMPLICIT = 323, tok_INCLUDE = 324, tok_INQUIRE = 325, tok_INTEGER = 326, tok_INTRINSIC = 327, tok_LOGICAL = 328, tok_NAMELIST = 329, tok_NONE = 330, tok_NULLIFY = 331, tok_OPEN = 332, tok_PARAMETER = 333, tok_PAUSE = 334, tok_POINTER = 335, tok_PRINT = 336, tok_PROGRAM = 337, tok_READ = 338, tok_REAL = 339, tok_RETURN = 340, tok_REWIND = 341, tok_SAVE = 342, tok_SELECTCASE = 343, tok_STOP = 344, tok_SUBROUTINE = 345, tok_TARGET = 346, tok_THEN = 347, tok_TO = 348, tok_TYPE = 349, tok_WHILE = 350, tok_WRITE = 351, tok_illegal = 352, tok_empty = 353, EOS = 127, REDUCE = 354 }; #endif #define tok_identifier 258 #define tok_array_identifier 259 #define tok_label 260 #define tok_integer_const 261 #define tok_real_const 262 #define tok_dp_const 263 #define tok_quad_const 264 #define tok_complex_const 265 #define tok_dcomplex_const 266 #define tok_logical_const 267 #define tok_string 268 #define tok_hollerith 269 #define tok_edit_descriptor 270 #define tok_letter 271 #define tok_relop 272 #define tok_AND 273 #define tok_OR 274 #define tok_EQV 275 #define tok_NEQV 276 #define tok_NOT 277 #define tok_power 278 #define tok_concat 279 #define tok_lparen 280 #define tok_pointer_assignment 281 #define tok_ACCEPT 282 #define tok_ALLOCATABLE 283 #define tok_ALLOCATE 284 #define tok_ASSIGN 285 #define tok_BACKSPACE 286 #define tok_BLOCKDATA 287 #define tok_BYTE 288 #define tok_CALL 289 #define tok_CASE 290 #define tok_CASEDEFAULT 291 #define tok_CHARACTER 292 #define tok_CLOSE 293 #define tok_COMMON 294 #define tok_COMPLEX 295 #define tok_CONTINUE 296 #define tok_CYCLE 297 #define tok_DATA 298 #define tok_DEALLOCATE 299 #define tok_DIMENSION 300 #define tok_DO 301 #define tok_DOUBLECOMPLEX 302 #define tok_DOUBLEPRECISION 303 #define tok_DOWHILE 304 #define tok_ELSE 305 #define tok_END 306 #define tok_ENDBLOCKDATA 307 #define tok_ENDDO 308 #define tok_ENDFILE 309 #define tok_ENDFUNCTION 310 #define tok_ENDIF 311 #define tok_ENDPROGRAM 312 #define tok_ENDSELECT 313 #define tok_ENDSUBROUTINE 314 #define tok_ENTRY 315 #define tok_EQUIVALENCE 316 #define tok_EXTERNAL 317 #define tok_EXIT 318 #define tok_FORMAT 319 #define tok_FUNCTION 320 #define tok_GOTO 321 #define tok_IF 322 #define tok_IMPLICIT 323 #define tok_INCLUDE 324 #define tok_INQUIRE 325 #define tok_INTEGER 326 #define tok_INTRINSIC 327 #define tok_LOGICAL 328 #define tok_NAMELIST 329 #define tok_NONE 330 #define tok_NULLIFY 331 #define tok_OPEN 332 #define tok_PARAMETER 333 #define tok_PAUSE 334 #define tok_POINTER 335 #define tok_PRINT 336 #define tok_PROGRAM 337 #define tok_READ 338 #define tok_REAL 339 #define tok_RETURN 340 #define tok_REWIND 341 #define tok_SAVE 342 #define tok_SELECTCASE 343 #define tok_STOP 344 #define tok_SUBROUTINE 345 #define tok_TARGET 346 #define tok_THEN 347 #define tok_TO 348 #define tok_TYPE 349 #define tok_WHILE 350 #define tok_WRITE 351 #define tok_illegal 352 #define tok_empty 353 #define EOS 127 #define REDUCE 354 /* Copy the first part of user declarations. */ #line 10 "fortran.y" /* fortran.c: Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* This grammar is ANSI standard-conforming, except for: -- complex constant and a few other ambiguities needing significant lookahead cannot be split across lines. Extensions supported: -- Case insensitive. -- Hollerith constants. -- Variable names may be longer than 6 characters. Also allows underscores and dollar signs in names. -- DO ... ENDDO and DO WHILE loop forms allowed. -- NAMELIST supported. -- TYPE and ACCEPT I/O statements allowed. -- Tabs are permitted in input, and (except in character data) expand into blanks up to the next column equal to 1 mod 8. -- Type declarations INTEGER*2, REAL*8, etc. are allowed. -- IMPLICIT NONE allowed. -- CASE construct supported */ #include #include #include #include "ftnchek.h" #include "symtab.h" /* The following section is for use with bison-derived parser. Define alloca to be malloc for those cases not covered by the cases covered there. The ifdefs are those in the skeleton parser with includes removed */ #ifdef AIXC /* IBM RS/6000 xlc compiler does it this way */ #pragma alloca #endif #ifndef alloca #ifdef __GNUC__ #else /* Not GNU C. */ #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) #else /* Not sparc */ #ifdef MSDOS #endif /* MSDOS */ #endif /* Not sparc. */ #endif /* Not GNU C. */ #define alloca malloc #endif /* alloca now defined. */ #ifndef YYDEBUG /* If not declared otherwise... */ int yydebug; /* declare yydebug to satisfy extern in ftnchek.c */ #ifdef DEVELOPMENT #define YYDEBUG 1 /* For development it is handy */ #else #define YYDEBUG 0 #endif #endif #ifdef DEVELOPMENT #define DEBUG_PARSER #endif PRIVATE int current_datatype, /* set when parse type_name or type_stmt */ current_size_is_adjustable, /* set in CHARACTER declarations */ current_size_is_expression, /* set in CHARACTER declarations */ current_save_attr, /* set if SAVE attribute given in type decl */ current_external_attr, /* set if EXTERNAL attr given */ current_intrinsic_attr, /* set if INTRINSIC attr given */ current_parameter_attr, /* set if PARAMETER attr given */ current_pointer_attr, /* set if POINTER attr given */ current_target_attr, /* set if TARGET attr given */ current_allocatable_attr, /* set if ALLOCATABLE attr given */ label_dummy_arg_count, /* number of labels in dummy argument list */ len_selector_given, /* flag for use in processing CHARACTER decls */ len_spec_item_count,/* count of items in CHARACTER len-selector list */ control_item_count; /* count of items in control_info_list */ PRIVATE Token *current_dim_bound_list; /* attr-based dim bound tokenlist */ /* Information about the current I/O statement */ int current_io_unit_id; /* hashnum of unit id of current I/O operation */ int current_io_unit_no; /* unit number of current I/O operation */ IO_ACCESS_TYPE current_io_access;/* access mode (direct/sequential) */ IO_FORM_TYPE current_io_form; /* form (formatted/unformatted) */ int io_internal_file, /* Flag for catching misuse of internal files */ io_list_directed, /* Flag for use in processing io control lists */ io_warning_given; /* to prevent multiple warnings */ /* Flag shared with forlex for lexing hints */ int stmt_sequence_no, /* set when parsing, reset to 0 at end_stmt */ f90_stmt_sequence_no; PRIVATE long current_typesize; /* for type*len declarations: value of len */ PRIVATE char *current_len_text; /* for type*len declarations: text of len */ PRIVATE int kind_warning_given=FALSE; /* to say "not interpreted" only once */ PRIVATE Token save_token, /* Holds token shared by productions */ len_spec_token, /* Holds character length spec temporarily */ dim_bound_token; /* Holds attr-based dim-bound list header */ extern LINENO_t prev_stmt_line_num; /* shared with advance */ LINENO_t true_prev_stmt_line_num; /* shared with symtab.c */ PRIVATE int current_module_type, executable_stmt=FALSE, prev_stmt_class=0, /* flags for lexer */ labeled_stmt_type, /* for label handling */ if_line_num, if_col_num, /* for picky construct-usage warnings */ prev_goto=FALSE, goto_flag=FALSE; /* if unconditional GOTO was encountered */ int complex_const_allowed=FALSE, /* for help in lookahead for these */ construct_name_seen=FALSE, /* for help recognizing DO */ param_noparen=FALSE, /* for different PARAMETER stmt semantics */ in_assignment_stmt=FALSE, in_attrbased_typedecl=FALSE,/* help is_keyword lex type, attr :: list */ inside_format=FALSE, /* when inside parens of FORMAT */ integer_context=FALSE; /* says integers-only are to follow */ /* Macro for initializing attributes of type decl. */ #define reset_type_attrs() (\ current_save_attr = FALSE, \ current_external_attr = FALSE, \ current_intrinsic_attr = FALSE, \ current_parameter_attr = FALSE, \ current_pointer_attr = FALSE, \ current_target_attr = FALSE, \ current_allocatable_attr = FALSE, \ current_dim_bound_list = NULL ) /* Define stuff for checking block nesting */ #define MAX_BLOCK_DEPTH 100 /* maximum depth of nesting blocks */ /* USE_YYTNAME allows messages to incorporate token names from the yytname array. This option should be enabled if bison is used to generate parser, not otherwise. Enabling it also assumes fortran.c has been edited to remove "tok_" from token names (see Makefile). */ #ifndef NO_YYTNAME #if defined( YYDEBUG ) && defined( YYBISON ) #define USE_YYTNAME #endif #endif /* Convenience typedef for category of block */ typedef enum {subprog, construct} BLOCK_TYPE; typedef struct { int sclass; /* stmt_class of block opener */ char *name; /* name of block or subprogram */ LABEL_t label; /* label of closing statement for DO */ LINENO_t first_line; /* line number of block opener */ BLOCK_TYPE blocktype; /* category for wording of warnings */ int do_var_hash; /* hash index for index variable of DO block */ } BlockStack; PRIVATE BlockStack block_stack[MAX_BLOCK_DEPTH]; PRIVATE char * curr_stmt_name; /* subprog or END-subprog name; DO, IF construct name*/ PRIVATE int block_depth=0; /* depth of nesting of current block */ /* Defns of private functions */ PROTO(PRIVATE void push_block,(Token *t, int stmt_class, BLOCK_TYPE blocktype, char *name, LABEL_t label)); PROTO(PRIVATE void pop_block,(Token *t, int stmt_class, char *name, LABEL_t label)); PROTO(PRIVATE void check_construct_name_match,(Token *stmt, char *name)); PROTO(PRIVATE Token * add_tree_node,( Token *node, Token *left, Token *right )); PROTO(PRIVATE Token * append_token,( Token *tlist, Token *t )); PROTO(PRIVATE void check_stmt_sequence,( Token *t, int seq_num )); PROTO(PRIVATE void check_f90_stmt_sequence,( Token *t, int f90_seq_num )); PROTO(PRIVATE void do_binexpr,( Token *l_expr, Token *op, Token *r_expr, Token *result )); PROTO(PRIVATE int do_bounds_type,( Token *t1, Token *t2, Token *t3 )); PROTO(PRIVATE void do_unexpr,( Token *op, Token *expr, Token *result )); PROTO(PRIVATE Token * empty_token,( Token *t )); PROTO(PRIVATE void END_processing,( Token *t )); PROTO(PRIVATE void init_io_ctrl_list,( void )); PROTO(PRIVATE void record_default_io,( void )); PROTO(PRIVATE void process_attrs,(Token *t,Token *dim_bounds)); PROTO(PRIVATE void give_kind_warning,(Token *t)); #ifdef DEBUG_PARSER PROTO(PRIVATE void print_exprlist,( char *s, Token *t )); PROTO(PRIVATE void print_comlist,( char *s, Token *t )); #endif /* Uses of Token fields for nonterminals: */ /* NOTE: As of Aug 1994 these are undergoing revision to separate the use of class, subclass fields */ /* 1. dim_bound_lists: dimensioning info for arrays: token.class = no. of dimensions, --> TOK_dims token.subclass = no. of elements --> TOK_elts 2. expressions token.value.integer = hash index (of identifier) token.TOK_type = type_byte = storage_class << 4 + datatype token.TOK_flags: CONST_EXPR, LVALUE_EXPR, etc. token.TOK_flags: COMMA_FLAG used to handle extra/missing commas 4. substring_interval token.class = start index --> TOK_start token.subclass = end index --> TOK_end */ /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) typedef int YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 214 of yacc.c. */ #line 536 "y.tab.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE # ifndef YYFREE # define YYFREE free # endif # ifndef YYMALLOC # define YYMALLOC malloc # endif /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # define YYSTACK_ALLOC alloca # endif # else # if defined (alloca) || defined (_ALLOCA_H) # define YYSTACK_ALLOC alloca # else # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # endif #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ #if (! defined (yyoverflow) && (! defined (__cplusplus) || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { short yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined (__GNUC__) && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined (__STDC__) || defined (__cplusplus) typedef signed char yysigned_char; #else typedef short yysigned_char; #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 325 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 1926 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 114 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 308 /* YYNRULES -- Number of rules. */ #define YYNRULES 611 /* YYNRULES -- Number of states. */ #define YYNSTATES 1041 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 354 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 110, 2, 2, 2, 102, 100, 104, 111, 103, 108, 109, 106, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 105, 2, 112, 107, 113, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 101 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const unsigned short yyprhs[] = { 0, 0, 3, 5, 6, 8, 11, 13, 15, 17, 19, 21, 24, 26, 28, 30, 32, 34, 37, 39, 41, 43, 45, 47, 50, 52, 54, 57, 60, 64, 66, 68, 70, 72, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 205, 210, 214, 221, 223, 227, 234, 238, 245, 248, 250, 252, 254, 256, 258, 260, 264, 271, 273, 274, 276, 278, 282, 284, 286, 289, 293, 295, 299, 301, 305, 310, 312, 316, 318, 322, 324, 328, 330, 331, 336, 340, 346, 350, 354, 356, 358, 360, 365, 368, 371, 375, 379, 384, 386, 389, 392, 396, 399, 401, 403, 406, 408, 411, 413, 415, 419, 421, 424, 427, 431, 433, 436, 438, 441, 445, 449, 453, 458, 464, 470, 472, 476, 478, 482, 484, 488, 490, 494, 499, 501, 503, 505, 507, 509, 511, 513, 515, 519, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 546, 548, 551, 554, 555, 560, 562, 564, 568, 570, 571, 572, 579, 580, 585, 587, 588, 589, 596, 598, 600, 604, 606, 607, 608, 615, 619, 621, 625, 626, 627, 634, 635, 636, 645, 647, 651, 653, 657, 661, 663, 664, 669, 670, 676, 678, 682, 684, 688, 690, 694, 696, 700, 702, 706, 708, 710, 712, 714, 720, 721, 722, 728, 730, 734, 735, 740, 744, 746, 750, 754, 756, 760, 764, 768, 772, 774, 778, 782, 784, 786, 790, 792, 796, 802, 804, 806, 808, 814, 820, 822, 826, 828, 833, 837, 841, 843, 847, 849, 854, 858, 862, 868, 870, 874, 877, 881, 883, 887, 889, 893, 897, 899, 902, 906, 907, 908, 915, 917, 921, 923, 925, 927, 931, 933, 937, 939, 941, 943, 945, 947, 951, 953, 955, 963, 967, 973, 974, 975, 982, 984, 986, 988, 990, 992, 994, 1001, 1006, 1013, 1021, 1025, 1032, 1040, 1042, 1045, 1050, 1061, 1064, 1068, 1070, 1073, 1074, 1080, 1081, 1082, 1091, 1094, 1098, 1101, 1105, 1108, 1112, 1113, 1120, 1122, 1125, 1128, 1132, 1137, 1139, 1143, 1145, 1149, 1152, 1155, 1157, 1160, 1164, 1167, 1171, 1177, 1178, 1185, 1186, 1194, 1197, 1199, 1202, 1206, 1211, 1214, 1218, 1224, 1227, 1231, 1234, 1236, 1238, 1241, 1245, 1248, 1252, 1256, 1260, 1261, 1263, 1265, 1267, 1268, 1272, 1273, 1278, 1279, 1285, 1291, 1298, 1306, 1310, 1316, 1318, 1322, 1328, 1332, 1333, 1334, 1342, 1346, 1347, 1348, 1356, 1358, 1362, 1366, 1368, 1370, 1374, 1378, 1382, 1384, 1386, 1390, 1392, 1394, 1402, 1403, 1410, 1411, 1418, 1419, 1426, 1430, 1436, 1438, 1442, 1448, 1450, 1454, 1460, 1462, 1464, 1466, 1468, 1470, 1471, 1478, 1479, 1481, 1483, 1486, 1488, 1490, 1492, 1496, 1498, 1500, 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1525, 1528, 1529, 1530, 1536, 1541, 1542, 1544, 1546, 1550, 1552, 1553, 1557, 1558, 1564, 1565, 1572, 1575, 1577, 1581, 1583, 1587, 1590, 1594, 1599, 1601, 1602, 1604, 1606, 1610, 1612, 1614, 1616, 1620, 1624, 1626, 1630, 1632, 1636, 1638, 1641, 1643, 1647, 1649, 1652, 1655, 1659, 1663, 1665, 1669, 1673, 1675, 1679, 1681, 1685, 1687, 1689, 1691, 1693, 1695, 1699, 1701, 1703, 1705, 1707, 1709, 1711, 1713, 1715, 1717, 1719, 1721, 1723, 1725, 1727, 1732, 1737, 1739, 1743, 1745, 1748, 1751, 1754, 1757, 1760, 1764, 1769, 1774, 1780, 1782, 1784, 1786, 1788, 1790, 1792, 1794, 1797, 1799, 1801, 1803, 1806, 1809, 1811, 1813, 1815, 1817, 1819, 1820 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const short yyrhs[] = { 115, 0, -1, 116, -1, -1, 117, -1, 116, 117, -1, 118, -1, 127, -1, 99, -1, 119, -1, 122, -1, 5, 120, -1, 120, -1, 121, -1, 128, -1, 131, -1, 136, -1, 1, 99, -1, 140, -1, 143, -1, 149, -1, 155, -1, 123, -1, 5, 123, -1, 124, -1, 125, -1, 51, 99, -1, 126, 99, -1, 126, 414, 99, -1, 52, -1, 55, -1, 57, -1, 59, -1, 69, 13, 99, -1, 129, -1, 226, -1, 215, -1, 259, -1, 130, -1, 142, -1, 356, -1, 157, -1, 162, -1, 169, -1, 176, -1, 182, -1, 183, -1, 234, -1, 236, -1, 256, -1, 243, -1, 240, -1, 239, -1, 238, -1, 132, -1, 133, -1, 280, -1, 282, -1, 285, -1, 315, -1, 318, -1, 380, -1, 274, -1, 279, -1, 373, -1, 281, -1, 314, -1, 319, -1, 134, -1, 248, -1, 249, -1, 254, -1, 326, -1, 328, -1, 321, -1, 329, -1, 332, -1, 342, -1, 344, -1, 346, -1, 135, -1, 352, -1, 348, -1, 350, -1, 137, -1, 138, -1, 297, -1, 139, -1, 286, -1, 287, -1, 307, -1, 313, -1, 291, -1, 295, -1, 296, -1, 300, -1, 305, -1, 306, -1, -1, 82, 141, 414, 99, -1, 60, 414, 99, -1, 60, 414, 102, 152, 100, 99, -1, 144, -1, 145, 414, 99, -1, 145, 414, 102, 152, 100, 99, -1, 146, 414, 99, -1, 146, 414, 102, 152, 100, 99, -1, 148, 147, -1, 147, -1, 65, -1, 188, -1, 192, -1, 193, -1, 150, -1, 151, 414, 99, -1, 151, 414, 102, 152, 100, 99, -1, 90, -1, -1, 153, -1, 154, -1, 153, 103, 154, -1, 414, -1, 104, -1, 156, 99, -1, 156, 414, 99, -1, 32, -1, 45, 158, 99, -1, 159, -1, 158, 103, 159, -1, 414, 102, 160, 100, -1, 161, -1, 160, 103, 161, -1, 402, -1, 402, 105, 402, -1, 104, -1, 402, 105, 104, -1, 105, -1, -1, 61, 163, 164, 99, -1, 102, 165, 100, -1, 164, 103, 102, 165, 100, -1, 166, 103, 166, -1, 165, 103, 166, -1, 414, -1, 167, -1, 168, -1, 414, 102, 405, 100, -1, 414, 409, -1, 167, 409, -1, 39, 173, 99, -1, 39, 170, 99, -1, 39, 173, 170, 99, -1, 171, -1, 170, 171, -1, 172, 173, -1, 106, 414, 106, -1, 106, 106, -1, 24, -1, 174, -1, 173, 174, -1, 175, -1, 175, 103, -1, 414, -1, 159, -1, 74, 177, 99, -1, 178, -1, 177, 178, -1, 179, 180, -1, 106, 414, 106, -1, 181, -1, 180, 181, -1, 414, -1, 414, 103, -1, 188, 197, 99, -1, 192, 205, 99, -1, 193, 205, 99, -1, 193, 103, 205, 99, -1, 184, 105, 105, 197, 99, -1, 185, 105, 105, 205, 99, -1, 188, -1, 188, 103, 186, -1, 192, -1, 192, 103, 186, -1, 193, -1, 193, 103, 186, -1, 187, -1, 186, 103, 187, -1, 45, 102, 160, 100, -1, 87, -1, 62, -1, 72, -1, 78, -1, 80, -1, 91, -1, 28, -1, 189, -1, 189, 104, 418, -1, 189, 196, 191, 100, -1, 190, -1, 71, -1, 84, -1, 40, -1, 73, -1, 48, -1, 47, -1, 33, -1, 386, -1, 414, 107, 386, -1, 37, -1, 192, 194, -1, 104, 222, -1, -1, 196, 195, 223, 100, -1, 25, -1, 198, -1, 197, 103, 198, -1, 204, -1, -1, -1, 204, 106, 199, 266, 200, 106, -1, -1, 204, 201, 107, 385, -1, 159, -1, -1, -1, 159, 106, 202, 266, 203, 106, -1, 414, -1, 206, -1, 205, 103, 206, -1, 213, -1, -1, -1, 213, 106, 207, 266, 208, 106, -1, 213, 107, 385, -1, 159, -1, 159, 104, 222, -1, -1, -1, 159, 106, 209, 266, 210, 106, -1, -1, -1, 159, 104, 222, 106, 211, 266, 212, 106, -1, 414, -1, 414, 104, 222, -1, 68, -1, 214, 216, 99, -1, 214, 75, 99, -1, 218, -1, -1, 216, 103, 217, 218, -1, -1, 148, 102, 219, 220, 100, -1, 221, -1, 220, 103, 221, -1, 16, -1, 16, 108, 16, -1, 419, -1, 102, 225, 100, -1, 224, -1, 223, 103, 224, -1, 225, -1, 414, 107, 225, -1, 104, -1, 401, -1, 227, -1, 228, -1, 78, 102, 231, 100, 99, -1, -1, -1, 78, 229, 231, 230, 99, -1, 232, -1, 231, 103, 232, -1, -1, 414, 233, 107, 385, -1, 62, 235, 99, -1, 414, -1, 235, 103, 414, -1, 72, 237, 99, -1, 414, -1, 237, 103, 414, -1, 28, 241, 99, -1, 91, 241, 99, -1, 80, 241, 99, -1, 242, -1, 105, 105, 242, -1, 241, 103, 242, -1, 414, -1, 159, -1, 80, 244, 99, -1, 245, -1, 244, 103, 245, -1, 102, 246, 103, 247, 100, -1, 414, -1, 414, -1, 159, -1, 29, 102, 250, 100, 99, -1, 44, 102, 252, 100, 99, -1, 251, -1, 250, 103, 251, -1, 411, -1, 413, 102, 160, 100, -1, 414, 107, 411, -1, 414, 107, 404, -1, 253, -1, 252, 103, 251, -1, 411, -1, 413, 102, 160, 100, -1, 414, 107, 411, -1, 414, 107, 404, -1, 76, 102, 255, 100, 99, -1, 411, -1, 255, 103, 411, -1, 87, 99, -1, 87, 257, 99, -1, 258, -1, 257, 103, 258, -1, 414, -1, 106, 414, 106, -1, 43, 260, 99, -1, 261, -1, 260, 261, -1, 260, 103, 261, -1, -1, -1, 264, 106, 262, 266, 263, 106, -1, 265, -1, 264, 103, 265, -1, 277, -1, 272, -1, 267, -1, 266, 103, 267, -1, 269, -1, 268, 104, 269, -1, 418, -1, 414, -1, 417, -1, 414, -1, 271, -1, 270, 103, 271, -1, 403, -1, 272, -1, 102, 270, 103, 414, 107, 273, 100, -1, 401, 103, 401, -1, 401, 103, 401, 103, 401, -1, -1, -1, 277, 278, 275, 386, 276, 99, -1, 411, -1, 403, -1, 408, -1, 369, -1, 107, -1, 26, -1, 30, 420, 421, 93, 411, 99, -1, 283, 420, 421, 99, -1, 283, 102, 284, 100, 399, 99, -1, 283, 102, 284, 100, 103, 399, 99, -1, 283, 414, 99, -1, 283, 414, 102, 284, 100, 99, -1, 283, 414, 103, 102, 284, 100, 99, -1, 66, -1, 420, 421, -1, 284, 103, 420, 421, -1, 288, 420, 421, 103, 420, 421, 103, 420, 421, 99, -1, 288, 131, -1, 288, 92, 99, -1, 289, -1, 415, 289, -1, -1, 67, 102, 290, 386, 100, -1, -1, -1, 50, 67, 102, 292, 386, 100, 293, 294, -1, 92, 99, -1, 92, 416, 99, -1, 50, 99, -1, 50, 416, 99, -1, 56, 99, -1, 56, 416, 99, -1, -1, 299, 102, 298, 386, 100, 99, -1, 88, -1, 415, 88, -1, 301, 99, -1, 301, 416, 99, -1, 35, 102, 302, 100, -1, 303, -1, 302, 103, 303, -1, 304, -1, 304, 105, 304, -1, 105, 304, -1, 304, 105, -1, 386, -1, 36, 99, -1, 36, 416, 99, -1, 58, 99, -1, 58, 416, 99, -1, 310, 411, 107, 312, 99, -1, -1, 49, 102, 308, 386, 100, 99, -1, -1, 310, 95, 102, 309, 386, 100, 99, -1, 310, 99, -1, 311, -1, 415, 311, -1, 46, 420, 421, -1, 46, 420, 421, 103, -1, 46, 420, -1, 400, 103, 400, -1, 400, 103, 400, 103, 400, -1, 53, 99, -1, 53, 416, 99, -1, 41, 99, -1, 316, -1, 317, -1, 42, 99, -1, 42, 416, 99, -1, 63, 99, -1, 63, 416, 99, -1, 89, 320, 99, -1, 79, 320, 99, -1, -1, 6, -1, 414, -1, 13, -1, -1, 324, 322, 99, -1, -1, 324, 339, 323, 99, -1, -1, 96, 325, 102, 335, 100, -1, 327, 102, 335, 100, 99, -1, 327, 102, 335, 100, 339, 99, -1, 327, 102, 335, 100, 103, 339, 99, -1, 327, 355, 99, -1, 327, 355, 103, 339, 99, -1, 83, -1, 27, 355, 99, -1, 27, 355, 103, 339, 99, -1, 81, 355, 99, -1, -1, -1, 81, 355, 103, 330, 339, 331, 99, -1, 94, 355, 99, -1, -1, -1, 94, 355, 103, 333, 339, 334, 99, -1, 336, -1, 335, 103, 336, -1, 414, 107, 354, -1, 354, -1, 354, -1, 414, 107, 354, -1, 337, 103, 338, -1, 414, 107, 354, -1, 414, -1, 340, -1, 339, 103, 340, -1, 386, -1, 341, -1, 102, 339, 103, 411, 107, 312, 100, -1, -1, 77, 343, 102, 337, 100, 99, -1, -1, 38, 345, 102, 335, 100, 99, -1, -1, 70, 347, 102, 335, 100, 99, -1, 349, 354, 99, -1, 349, 102, 335, 100, 99, -1, 31, -1, 351, 354, 99, -1, 351, 102, 335, 100, 99, -1, 54, -1, 353, 354, 99, -1, 353, 102, 335, 100, 99, -1, 86, -1, 386, -1, 104, -1, 395, -1, 104, -1, -1, 64, 357, 102, 358, 100, 99, -1, -1, 359, -1, 360, -1, 359, 360, -1, 361, -1, 362, -1, 363, -1, 102, 359, 100, -1, 15, -1, 13, -1, 14, -1, 365, -1, 366, -1, 103, -1, 106, -1, 24, -1, 105, -1, 109, -1, 364, -1, 110, -1, 6, -1, 108, 6, -1, 111, 6, -1, -1, -1, 112, 367, 399, 368, 113, -1, 412, 102, 370, 100, -1, -1, 371, -1, 372, -1, 371, 103, 372, -1, 411, -1, -1, 377, 374, 99, -1, -1, 377, 102, 100, 375, 99, -1, -1, 377, 102, 378, 100, 376, 99, -1, 34, 414, -1, 379, -1, 378, 103, 379, -1, 386, -1, 104, 420, 421, -1, 85, 99, -1, 85, 399, 99, -1, 382, 102, 383, 100, -1, 412, -1, -1, 384, -1, 386, -1, 384, 103, 386, -1, 386, -1, 387, -1, 388, -1, 386, 20, 388, -1, 386, 21, 388, -1, 389, -1, 388, 19, 389, -1, 390, -1, 389, 18, 390, -1, 391, -1, 22, 391, -1, 392, -1, 391, 17, 391, -1, 393, -1, 108, 393, -1, 111, 393, -1, 392, 111, 393, -1, 392, 108, 393, -1, 394, -1, 393, 106, 394, -1, 393, 104, 394, -1, 395, -1, 395, 23, 394, -1, 396, -1, 395, 24, 396, -1, 411, -1, 404, -1, 381, -1, 407, -1, 397, -1, 102, 386, 100, -1, 398, -1, 13, -1, 14, -1, 12, -1, 6, -1, 7, -1, 8, -1, 9, -1, 10, -1, 11, -1, 392, -1, 392, -1, 392, -1, 392, -1, 413, 102, 405, 100, -1, 413, 102, 405, 100, -1, 406, -1, 405, 103, 406, -1, 386, -1, 382, 409, -1, 381, 409, -1, 404, 409, -1, 412, 409, -1, 403, 409, -1, 102, 105, 100, -1, 102, 410, 105, 100, -1, 102, 105, 410, 100, -1, 102, 410, 105, 410, 100, -1, 392, -1, 412, -1, 413, -1, 3, -1, 4, -1, 3, -1, 4, -1, 416, 105, -1, 3, -1, 4, -1, 398, -1, 108, 398, -1, 111, 398, -1, 12, -1, 13, -1, 14, -1, 6, -1, 6, -1, -1, 6, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { 0, 374, 374, 375, 378, 379, 383, 440, 441, 449, 450, 457, 495, 514, 523, 528, 544, 552, 569, 573, 577, 581, 587, 588, 605, 610, 613, 614, 617, 623, 624, 625, 626, 629, 648, 658, 674, 680, 693, 701, 706, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 730, 735, 741, 742, 749, 756, 761, 762, 765, 766, 767, 768, 769, 770, 771, 775, 776, 777, 780, 790, 791, 798, 799, 800, 815, 816, 817, 824, 825, 826, 830, 834, 839, 844, 852, 853, 862, 881, 896, 901, 906, 912, 917, 922, 929, 929, 947, 952, 964, 968, 985, 1001, 1018, 1036, 1042, 1045, 1051, 1052, 1053, 1060, 1064, 1075, 1093, 1100, 1103, 1106, 1110, 1116, 1121, 1134, 1151, 1164, 1171, 1174, 1175, 1179, 1185, 1192, 1200, 1208, 1220, 1225, 1231, 1241, 1241, 1245, 1246, 1249, 1253, 1260, 1264, 1268, 1274, 1278, 1279, 1283, 1297, 1305, 1323, 1327, 1335, 1348, 1353, 1357, 1363, 1368, 1381, 1386, 1393, 1398, 1411, 1423, 1424, 1430, 1437, 1443, 1447, 1460, 1466, 1475, 1476, 1477, 1478, 1482, 1490, 1500, 1501, 1504, 1505, 1506, 1507, 1511, 1512, 1515, 1522, 1526, 1530, 1534, 1538, 1542, 1546, 1553, 1560, 1589, 1598, 1604, 1609, 1614, 1619, 1626, 1633, 1643, 1659, 1668, 1690, 1703, 1726, 1737, 1737, 1766, 1773, 1774, 1779, 1790, 1792, 1789, 1807, 1807, 1828, 1840, 1842, 1839, 1860, 1870, 1871, 1874, 1883, 1885, 1882, 1896, 1910, 1920, 1934, 1936, 1933, 1953, 1955, 1952, 1976, 1986, 2003, 2006, 2019, 2035, 2036, 2036, 2042, 2042, 2046, 2047, 2050, 2070, 2099, 2106, 2137, 2141, 2147, 2164, 2190, 2197, 2219, 2220, 2223, 2226, 2227, 2226, 2236, 2237, 2240, 2240, 2251, 2254, 2258, 2265, 2268, 2272, 2279, 2289, 2299, 2308, 2309, 2310, 2313, 2317, 2326, 2334, 2335, 2338, 2341, 2348, 2355, 2362, 2371, 2380, 2381, 2384, 2385, 2386, 2387, 2390, 2391, 2394, 2395, 2396, 2397, 2400, 2409, 2410, 2414, 2418, 2421, 2422, 2425, 2429, 2437, 2440, 2441, 2442, 2446, 2448, 2445, 2452, 2453, 2456, 2460, 2463, 2467, 2473, 2477, 2489, 2490, 2496, 2497, 2504, 2505, 2508, 2512, 2515, 2522, 2523, 2528, 2530, 2528, 2570, 2571, 2572, 2573, 2576, 2577, 2588, 2603, 2612, 2613, 2617, 2621, 2625, 2631, 2642, 2646, 2653, 2670, 2680, 2699, 2703, 2714, 2714, 2729, 2730, 2729, 2747, 2751, 2761, 2765, 2775, 2779, 2796, 2796, 2813, 2824, 2833, 2834, 2837, 2840, 2841, 2844, 2845, 2858, 2866, 2876, 2893, 2894, 2897, 2898, 2910, 2960, 2959, 2974, 2973, 2983, 2990, 2999, 3010, 3017, 3023, 3031, 3035, 3041, 3045, 3049, 3054, 3061, 3070, 3071, 3074, 3075, 3079, 3083, 3092, 3093, 3094, 3098, 3103, 3102, 3105, 3104, 3108, 3108, 3117, 3118, 3119, 3120, 3124, 3129, 3132, 3138, 3147, 3152, 3153, 3151, 3159, 3166, 3167, 3165, 3176, 3180, 3202, 3206, 3269, 3281, 3286, 3292, 3296, 3303, 3304, 3307, 3329, 3333, 3348, 3348, 3353, 3353, 3358, 3358, 3363, 3371, 3373, 3377, 3385, 3387, 3391, 3399, 3401, 3409, 3410, 3414, 3432, 3436, 3436, 3443, 3444, 3448, 3449, 3452, 3453, 3454, 3457, 3458, 3461, 3462, 3469, 3470, 3473, 3474, 3475, 3476, 3477, 3478, 3485, 3488, 3489, 3490, 3494, 3495, 3494, 3504, 3520, 3523, 3526, 3530, 3537, 3542, 3541, 3548, 3547, 3554, 3553, 3564, 3570, 3575, 3581, 3588, 3597, 3601, 3637, 3665, 3676, 3681, 3684, 3689, 3698, 3727, 3742, 3744, 3749, 3756, 3758, 3765, 3767, 3774, 3776, 3782, 3784, 3792, 3794, 3798, 3802, 3807, 3814, 3816, 3826, 3833, 3835, 3842, 3844, 3851, 3855, 3857, 3859, 3861, 3871, 3895, 3897, 3902, 3911, 3918, 3923, 3928, 3933, 3942, 3947, 3955, 3969, 3989, 4013, 4047, 4063, 4079, 4083, 4089, 4103, 4118, 4126, 4135, 4141, 4150, 4164, 4174, 4184, 4196, 4217, 4222, 4225, 4232, 4241, 4242, 4246, 4254, 4258, 4266, 4267, 4268, 4269, 4274, 4279, 4290, 4310, 4335, 4341 }; #endif #if YYDEBUG || YYERROR_VERBOSE /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "identifier", "array identifier", "label", "integer const", "real const", "dp const", "quad const", "complex const", "dcomplex const", "logical const", "string", "hollerith", "edit descriptor", "letter", "relop", "AND", "OR", "EQV", "NEQV", "NOT", "power", "concat", "lparen", "pointer assignment", "ACCEPT", "ALLOCATABLE", "ALLOCATE", "ASSIGN", "BACKSPACE", "BLOCKDATA", "BYTE", "CALL", "CASE", "CASEDEFAULT", "CHARACTER", "CLOSE", "COMMON", "COMPLEX", "CONTINUE", "CYCLE", "DATA", "DEALLOCATE", "DIMENSION", "DO", "DOUBLECOMPLEX", "DOUBLEPRECISION", "DOWHILE", "ELSE", "END", "ENDBLOCKDATA", "ENDDO", "ENDFILE", "ENDFUNCTION", "ENDIF", "ENDPROGRAM", "ENDSELECT", "ENDSUBROUTINE", "ENTRY", "EQUIVALENCE", "EXTERNAL", "EXIT", "FORMAT", "FUNCTION", "GOTO", "IF", "IMPLICIT", "INCLUDE", "INQUIRE", "INTEGER", "INTRINSIC", "LOGICAL", "NAMELIST", "NONE", "NULLIFY", "OPEN", "PARAMETER", "PAUSE", "POINTER", "PRINT", "PROGRAM", "READ", "REAL", "RETURN", "REWIND", "SAVE", "SELECTCASE", "STOP", "SUBROUTINE", "TARGET", "THEN", "TO", "TYPE", "WHILE", "WRITE", "illegal", "empty", "end of statement", "')'", "REDUCE", "'('", "','", "'*'", "':'", "'/'", "'='", "'-'", "'.'", "'$'", "'+'", "'<'", "'>'", "$accept", "prog body", "stmt list", "stmt list item", "ordinary stmt", "stmt", "unlabeled stmt", "subprogram header", "end stmt", "unlabeled end stmt", "unnamed end stmt", "named end stmt", "end subprog token", "include stmt", "specification stmt", "anywhere stmt", "specif stmt", "executable stmt", "transfer stmt", "nontransfer stmt", "io stmt", "io positioning stmt", "restricted stmt", "restricted nontransfer stmt", "else or endif stmt", "case or endselect stmt", "prog stmt", "@1", "entry stmt", "function stmt", "unlabeled function stmt", "typed function handle", "plain function handle", "function keyword", "type name", "subroutine stmt", "unlabeled subroutine stmt", "subroutine handle", "dummy argument list", "non empty arg list", "dummy argument", "block data stmt", "block data handle", "dimension stmt", "array declarator list", "array declarator", "dim bound list", "dim bound item", "equivalence stmt", "@2", "equivalence list", "equivalence list item", "equiv entity", "array equiv name", "substring equiv name", "common stmt", "common block list", "labeled common block", "common block name", "common variable list", "common list item", "common entity", "namelist stmt", "namelist list", "namelist decl", "namelist name", "namelist var list", "namelist item", "type stmt", "attrbased type stmt", "arith attrbased type handle", "char attrbased type handle", "attr list", "type attr", "arith type name", "sizeable type name", "unsizeable type name", "kind selector", "plain char type name", "char type name", "char selector", "@3", "left paren", "arith type decl list", "arith type decl item", "@4", "@5", "@6", "@7", "@8", "scalar type decl entity", "char type decl list", "char type decl item", "@9", "@10", "@11", "@12", "@13", "@14", "char type decl entity", "implicit handle", "implicit stmt", "implicit decl list", "@15", "implicit decl item", "@16", "letter list", "letter list item", "len specification", "len spec list", "len spec item", "len spec expr", "parameter stmt", "std parameter stmt", "parenless parameter stmt", "@17", "@18", "parameter defn list", "parameter defn item", "@19", "external stmt", "external name list", "intrinsic stmt", "intrinsic name list", "allocatable stmt", "target stmt", "pointer stmt", "attr decl list", "attr decl item", "cray pointer stmt", "cray pointer item list", "cray pointer item", "pointer name", "pointee name", "allocate stmt", "deallocate stmt", "allocate item list", "allocate item", "deallocate item list", "deallocate item", "nullify stmt", "variable name list", "save stmt", "save list", "save item", "data stmt", "data defn list", "data defn item", "@20", "@21", "data defn assignee list", "data defn assignee", "data value list", "data value", "data repeat factor", "data constant value", "data dlist", "data dlist item", "data implied do list", "data do loop bounds", "assignment stmt", "@22", "@23", "lvalue", "assignment op", "assign stmt", "unconditional goto", "computed goto", "assigned goto", "goto", "goto list", "arithmetic if stmt", "logical if stmt", "block if stmt", "if handle", "f77 if handle", "@24", "else if stmt", "@25", "@26", "else if then", "else stmt", "end if stmt", "select case stmt", "@27", "select handle", "case stmt", "case handle", "case values", "case value", "case value primary", "case default stmt", "end select stmt", "do stmt", "@28", "@29", "do handle", "f77 do handle", "do loop bounds", "enddo stmt", "continue stmt", "cycle or exit stmt", "cycle stmt", "exit stmt", "stop stmt", "pause stmt", "stop info", "write stmt", "@30", "@31", "write handle", "@32", "read stmt", "read handle", "accept stmt", "print stmt", "@33", "@34", "type output stmt", "@35", "@36", "control info list", "control info item", "open info list", "open info item", "io list", "io item", "io implied do list", "open stmt", "@37", "close stmt", "@38", "inquire stmt", "@39", "backspace stmt", "backspace handle", "endfile stmt", "endfile handle", "rewind stmt", "rewind handle", "unit id", "format id", "format stmt", "@40", "format spec", "nonempty format spec", "fmt spec item", "repeatable fmt item", "unrepeatable fmt item", "fmt item separator", "nonstandard fmt item", "repeat spec", "variable fmt item", "@41", "@42", "stmt function handle", "stmt function dummy list", "nonempty stmt fun dummy list", "stmt function dummy arg", "call stmt", "@43", "@44", "@45", "call handle", "subr arg list", "subr arg", "return stmt", "function reference", "fun or substr handle", "fun arg list", "nonempty fun arg list", "parameter expr", "expr", "log expr", "log disjunct", "log term", "log factor", "log primary", "arith expr", "term", "factor", "char expr", "primary", "literal const", "numeric const", "integer expr", "int real dp expr", "int constant expr", "dim bound expr", "array element lvalue", "array element name", "subscript list", "subscript", "substring name", "substring lvalue", "substring interval", "substr index expr", "variable name", "scalar name", "array name", "symbolic name", "construct spec", "construct name", "data constant", "nonzero unsigned int const", "nonneg unsigned int const", "pre label", "label", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const unsigned short yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 127, 41, 354, 40, 44, 42, 58, 47, 61, 45, 46, 36, 43, 60, 62 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned short yyr1[] = { 0, 114, 115, 115, 116, 116, 117, 117, 117, 118, 118, 119, 119, 120, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 123, 123, 124, 124, 125, 126, 126, 126, 126, 127, 128, 128, 128, 128, 128, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 140, 142, 142, 143, 144, 144, 144, 144, 145, 146, 147, 148, 148, 148, 149, 150, 150, 151, 152, 152, 153, 153, 154, 154, 155, 155, 156, 157, 158, 158, 159, 160, 160, 161, 161, 161, 161, 161, 163, 162, 164, 164, 165, 165, 166, 166, 166, 167, 168, 168, 169, 169, 169, 170, 170, 171, 172, 172, 172, 173, 173, 174, 174, 175, 175, 176, 177, 177, 178, 179, 180, 180, 181, 181, 182, 182, 182, 182, 183, 183, 184, 184, 185, 185, 185, 185, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 189, 189, 189, 189, 190, 190, 190, 191, 191, 192, 193, 194, 195, 194, 196, 197, 197, 198, 199, 200, 198, 201, 198, 198, 202, 203, 198, 204, 205, 205, 206, 207, 208, 206, 206, 206, 206, 209, 210, 206, 211, 212, 206, 213, 213, 214, 215, 215, 216, 217, 216, 219, 218, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, 226, 227, 229, 230, 228, 231, 231, 233, 232, 234, 235, 235, 236, 237, 237, 238, 239, 240, 241, 241, 241, 242, 242, 243, 244, 244, 245, 246, 247, 247, 248, 249, 250, 250, 251, 251, 251, 251, 252, 252, 253, 253, 253, 253, 254, 255, 255, 256, 256, 257, 257, 258, 258, 259, 260, 260, 260, 262, 263, 261, 264, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 270, 270, 271, 271, 272, 273, 273, 275, 276, 274, 277, 277, 277, 277, 278, 278, 279, 280, 281, 281, 282, 282, 282, 283, 284, 284, 285, 286, 287, 288, 288, 290, 289, 292, 293, 291, 294, 294, 295, 295, 296, 296, 298, 297, 299, 299, 300, 300, 301, 302, 302, 303, 303, 303, 303, 304, 305, 305, 306, 306, 307, 308, 307, 309, 307, 307, 310, 310, 311, 311, 311, 312, 312, 313, 313, 314, 315, 315, 316, 316, 317, 317, 318, 319, 320, 320, 320, 320, 322, 321, 323, 321, 325, 324, 326, 326, 326, 326, 326, 327, 328, 328, 329, 330, 331, 329, 332, 333, 334, 332, 335, 335, 336, 336, 337, 337, 337, 338, 338, 339, 339, 340, 340, 341, 343, 342, 345, 344, 347, 346, 348, 348, 349, 350, 350, 351, 352, 352, 353, 354, 354, 355, 355, 357, 356, 358, 358, 359, 359, 360, 360, 360, 361, 361, 362, 362, 362, 362, 363, 363, 363, 363, 363, 363, 364, 365, 365, 365, 367, 368, 366, 369, 370, 370, 371, 371, 372, 374, 373, 375, 373, 376, 373, 377, 378, 378, 379, 379, 380, 380, 381, 382, 383, 383, 384, 384, 385, 386, 387, 387, 387, 388, 388, 389, 389, 390, 390, 391, 391, 392, 392, 392, 392, 392, 393, 393, 393, 394, 394, 395, 395, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 398, 398, 398, 398, 398, 398, 399, 400, 401, 402, 403, 404, 405, 405, 406, 407, 407, 407, 408, 408, 409, 409, 409, 409, 410, 411, 411, 412, 413, 414, 414, 415, 416, 416, 417, 417, 417, 417, 417, 417, 418, 419, 420, 421 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 1, 0, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, 6, 1, 3, 6, 3, 6, 2, 1, 1, 1, 1, 1, 1, 3, 6, 1, 0, 1, 1, 3, 1, 1, 2, 3, 1, 3, 1, 3, 4, 1, 3, 1, 3, 1, 3, 1, 0, 4, 3, 5, 3, 3, 1, 1, 1, 4, 2, 2, 3, 3, 4, 1, 2, 2, 3, 2, 1, 1, 2, 1, 2, 1, 1, 3, 1, 2, 2, 3, 1, 2, 1, 2, 3, 3, 3, 4, 5, 5, 1, 3, 1, 3, 1, 3, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 0, 4, 1, 1, 3, 1, 0, 0, 6, 0, 4, 1, 0, 0, 6, 1, 1, 3, 1, 0, 0, 6, 3, 1, 3, 0, 0, 6, 0, 0, 8, 1, 3, 1, 3, 3, 1, 0, 4, 0, 5, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 5, 0, 0, 5, 1, 3, 0, 4, 3, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, 1, 3, 1, 3, 5, 1, 1, 1, 5, 5, 1, 3, 1, 4, 3, 3, 1, 3, 1, 4, 3, 3, 5, 1, 3, 2, 3, 1, 3, 1, 3, 3, 1, 2, 3, 0, 0, 6, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 7, 3, 5, 0, 0, 6, 1, 1, 1, 1, 1, 1, 6, 4, 6, 7, 3, 6, 7, 1, 2, 4, 10, 2, 3, 1, 2, 0, 5, 0, 0, 8, 2, 3, 2, 3, 2, 3, 0, 6, 1, 2, 2, 3, 4, 1, 3, 1, 3, 2, 2, 1, 2, 3, 2, 3, 5, 0, 6, 0, 7, 2, 1, 2, 3, 4, 2, 3, 5, 2, 3, 2, 1, 1, 2, 3, 2, 3, 3, 3, 0, 1, 1, 1, 0, 3, 0, 4, 0, 5, 5, 6, 7, 3, 5, 1, 3, 5, 3, 0, 0, 7, 3, 0, 0, 7, 1, 3, 3, 1, 1, 3, 3, 3, 1, 1, 3, 1, 1, 7, 0, 6, 0, 6, 0, 6, 3, 5, 1, 3, 5, 1, 3, 5, 1, 1, 1, 1, 1, 0, 6, 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 5, 4, 0, 1, 1, 3, 1, 0, 3, 0, 5, 0, 6, 2, 1, 3, 1, 3, 2, 3, 4, 1, 0, 1, 1, 3, 1, 1, 1, 3, 3, 1, 3, 1, 3, 1, 2, 1, 3, 1, 2, 2, 3, 3, 1, 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 3, 1, 2, 2, 2, 2, 2, 3, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 0, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const unsigned short yydefact[] = { 0, 0, 595, 596, 0, 0, 0, 0, 610, 469, 125, 205, 0, 0, 0, 208, 463, 0, 201, 0, 0, 0, 0, 0, 610, 204, 203, 0, 0, 0, 29, 0, 472, 30, 0, 31, 0, 32, 0, 137, 0, 0, 480, 109, 360, 0, 244, 0, 465, 199, 0, 202, 0, 0, 461, 267, 421, 0, 0, 98, 436, 200, 0, 475, 0, 381, 421, 116, 0, 0, 429, 8, 0, 0, 4, 6, 9, 12, 13, 10, 22, 24, 25, 0, 7, 14, 34, 38, 15, 54, 55, 68, 80, 16, 84, 85, 87, 18, 39, 19, 102, 0, 0, 108, 0, 20, 113, 0, 21, 0, 41, 42, 43, 44, 45, 46, 0, 0, 110, 195, 198, 111, 112, 0, 36, 35, 264, 265, 47, 48, 53, 52, 51, 50, 69, 70, 71, 49, 37, 62, 0, 63, 56, 65, 57, 610, 58, 88, 89, 610, 366, 92, 93, 94, 86, 0, 95, 0, 96, 97, 90, 0, 403, 91, 66, 59, 413, 414, 60, 67, 74, 425, 72, 0, 73, 75, 76, 77, 78, 79, 82, 0, 83, 0, 81, 0, 40, 350, 64, 514, 61, 348, 349, 347, 593, 594, 0, 0, 17, 11, 23, 595, 596, 568, 569, 570, 571, 572, 573, 567, 565, 566, 0, 479, 0, 560, 0, 478, 556, 562, 564, 559, 561, 558, 593, 594, 597, 598, 0, 287, 0, 283, 286, 0, 0, 520, 0, 600, 601, 393, 0, 0, 157, 0, 163, 0, 152, 0, 0, 158, 160, 162, 412, 415, 0, 0, 0, 319, 0, 325, 328, 327, 0, 0, 127, 0, 407, 398, 0, 375, 0, 26, 410, 0, 377, 0, 395, 0, 0, 0, 0, 275, 417, 0, 0, 368, 0, 0, 0, 278, 0, 0, 165, 0, 0, 0, 0, 0, 422, 424, 0, 423, 0, 0, 0, 289, 0, 0, 525, 0, 0, 574, 546, 551, 554, 0, 312, 0, 0, 314, 316, 0, 0, 0, 0, 1, 5, 27, 0, 0, 0, 107, 0, 123, 0, 0, 0, 0, 222, 0, 214, 216, 226, 213, 0, 0, 0, 0, 234, 209, 211, 0, 227, 229, 242, 0, 0, 0, 0, 110, 111, 112, 0, 247, 352, 351, 344, 610, 0, 0, 0, 364, 610, 0, 0, 379, 383, 0, 0, 402, 0, 593, 594, 0, 0, 0, 427, 456, 459, 458, 534, 535, 538, 540, 542, 544, 0, 0, 0, 477, 0, 476, 0, 0, 0, 0, 0, 0, 0, 587, 509, 586, 0, 382, 367, 404, 599, 0, 437, 0, 584, 529, 583, 0, 585, 0, 0, 280, 0, 0, 595, 596, 0, 297, 299, 594, 0, 611, 0, 0, 0, 386, 388, 392, 394, 0, 156, 0, 150, 153, 154, 149, 0, 159, 161, 416, 0, 337, 340, 339, 0, 318, 0, 320, 0, 322, 0, 303, 305, 594, 0, 126, 0, 405, 0, 370, 376, 411, 378, 396, 100, 117, 0, 0, 274, 0, 418, 482, 0, 33, 0, 277, 0, 0, 164, 166, 167, 169, 171, 0, 310, 0, 0, 270, 272, 268, 420, 0, 292, 282, 288, 0, 439, 440, 0, 547, 548, 0, 0, 0, 0, 0, 526, 0, 313, 0, 419, 281, 443, 444, 0, 28, 103, 117, 105, 117, 114, 117, 124, 0, 0, 194, 0, 189, 190, 191, 192, 188, 193, 180, 185, 223, 173, 0, 217, 0, 608, 196, 0, 206, 0, 182, 609, 0, 210, 256, 0, 236, 0, 174, 0, 230, 0, 0, 184, 0, 175, 246, 250, 245, 248, 0, 0, 0, 357, 610, 0, 0, 365, 0, 0, 384, 400, 0, 543, 0, 458, 426, 0, 0, 0, 0, 0, 0, 0, 0, 447, 450, 476, 0, 434, 0, 0, 467, 0, 470, 0, 473, 516, 610, 0, 521, 523, 515, 0, 592, 0, 0, 510, 511, 558, 582, 0, 580, 563, 0, 0, 530, 531, 544, 557, 0, 284, 285, 134, 136, 0, 130, 577, 132, 0, 0, 0, 0, 0, 390, 385, 0, 391, 0, 155, 151, 0, 321, 326, 0, 0, 0, 0, 0, 128, 406, 0, 0, 122, 0, 118, 119, 121, 0, 0, 144, 145, 143, 138, 0, 276, 502, 491, 492, 490, 497, 0, 495, 498, 496, 0, 499, 501, 0, 505, 0, 483, 484, 486, 487, 488, 500, 493, 494, 0, 0, 279, 168, 170, 172, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 290, 0, 99, 550, 549, 553, 552, 555, 317, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 197, 0, 262, 0, 576, 263, 235, 0, 0, 258, 260, 0, 228, 0, 233, 533, 243, 176, 0, 0, 345, 0, 610, 361, 0, 610, 354, 610, 0, 0, 0, 575, 0, 0, 457, 428, 536, 537, 539, 541, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 588, 0, 0, 508, 0, 578, 0, 438, 527, 0, 579, 129, 0, 0, 295, 298, 0, 302, 301, 0, 387, 389, 0, 338, 0, 568, 605, 606, 607, 0, 0, 323, 329, 0, 331, 602, 336, 335, 333, 296, 304, 0, 308, 307, 0, 0, 0, 0, 139, 0, 0, 148, 0, 147, 0, 0, 503, 504, 0, 0, 485, 369, 0, 309, 311, 0, 0, 0, 266, 271, 0, 269, 294, 0, 293, 441, 445, 430, 0, 0, 0, 177, 178, 0, 186, 224, 218, 221, 207, 257, 239, 237, 212, 0, 0, 231, 254, 0, 252, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 558, 431, 0, 0, 448, 449, 435, 468, 471, 474, 517, 524, 0, 522, 590, 589, 0, 512, 513, 581, 532, 131, 135, 133, 300, 353, 464, 0, 603, 604, 0, 0, 0, 306, 399, 371, 101, 120, 142, 141, 0, 0, 489, 506, 481, 466, 462, 453, 455, 452, 273, 291, 0, 0, 104, 106, 115, 187, 0, 0, 0, 0, 259, 261, 0, 0, 251, 0, 346, 0, 355, 362, 358, 0, 0, 380, 0, 408, 0, 0, 432, 519, 591, 0, 0, 330, 324, 332, 336, 0, 146, 140, 0, 0, 442, 446, 225, 219, 240, 238, 232, 255, 253, 356, 359, 610, 401, 0, 0, 433, 341, 0, 0, 372, 507, 454, 0, 0, 409, 460, 342, 373, 0, 241, 0, 0, 374, 363, 343 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short yydefgoto[] = { -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 307, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 675, 676, 677, 108, 109, 110, 263, 229, 646, 647, 111, 279, 483, 679, 680, 681, 682, 112, 245, 246, 247, 248, 249, 250, 113, 291, 292, 293, 496, 497, 114, 115, 116, 117, 549, 550, 118, 119, 120, 558, 121, 122, 349, 568, 350, 339, 340, 747, 971, 555, 745, 970, 341, 351, 352, 762, 976, 756, 973, 972, 1028, 353, 123, 124, 362, 768, 363, 767, 898, 899, 564, 757, 758, 759, 125, 126, 127, 297, 724, 502, 503, 723, 128, 280, 129, 288, 130, 131, 132, 230, 231, 133, 304, 305, 507, 874, 134, 135, 432, 433, 466, 467, 136, 499, 137, 318, 319, 138, 256, 257, 665, 943, 258, 259, 832, 833, 834, 835, 456, 457, 260, 995, 139, 581, 901, 140, 366, 141, 142, 143, 144, 145, 582, 146, 147, 148, 149, 150, 488, 151, 673, 1001, 1025, 152, 153, 154, 590, 155, 156, 157, 440, 441, 442, 158, 159, 160, 474, 778, 161, 162, 779, 163, 164, 165, 166, 167, 168, 169, 300, 170, 385, 599, 171, 324, 172, 173, 174, 175, 727, 964, 176, 736, 965, 605, 606, 718, 959, 386, 387, 388, 177, 295, 178, 241, 179, 287, 180, 181, 182, 183, 184, 185, 607, 214, 186, 284, 701, 702, 703, 704, 705, 706, 707, 708, 709, 859, 1004, 187, 627, 628, 629, 188, 407, 797, 924, 189, 620, 621, 190, 215, 216, 636, 637, 763, 401, 390, 391, 392, 393, 394, 395, 312, 313, 314, 218, 219, 220, 315, 781, 754, 649, 191, 221, 632, 633, 222, 192, 409, 626, 223, 224, 225, 609, 196, 197, 838, 839, 565, 583, 438 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -865 static const short yypact[] = { 1550, -38, -32, -11, 1741, 1427, 113, 4, -865, -865, -865, -865, 178, 16, 138, -865, -865, 78, -865, 33, 159, 123, 54, 178, -865, -865, -865, 96, 207, 115, -865, 172, -865, -865, 224, -865, 228, -865, 178, -865, 178, 246, -865, -865, -865, 121, -865, 242, -865, -865, 178, -865, 158, 285, -865, 303, 284, 97, 1427, -865, -865, -865, 1097, -865, 88, -865, 284, -865, 113, 1427, -865, -865, 344, 1647, -865, -865, -865, -865, -865, -865, -865, -865, -865, 256, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 178, 178, -865, 299, -865, -865, 178, -865, 298, -865, -865, -865, -865, -865, -865, 307, 316, 101, 74, -865, 130, 104, 476, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 109, -865, -865, -865, -865, 142, -865, -865, -865, 1830, -865, -865, -865, -865, -865, 325, -865, 300, -865, -865, -865, 185, -865, -865, -865, -865, -865, -865, -865, -865, -865, 1119, -865, 1472, -865, -865, -865, -865, -865, -865, -865, 817, -865, 845, -865, 891, -865, -865, -865, 346, -865, 373, -865, -865, 381, 410, 302, 393, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 1152, -865, 182, 373, 426, 440, -865, -865, -865, 373, -865, -865, 448, 463, -865, -865, 400, -865, 260, -865, 465, 397, 566, -865, 928, -865, -865, -865, 484, 488, -865, 80, -865, 137, -865, 178, 86, -865, 491, 465, -865, -865, 497, 62, 154, -865, 167, -865, -865, -865, 397, 267, -865, 465, 566, -865, 518, -865, 512, -865, -865, 552, -865, 556, -865, 578, 287, 565, 308, -865, -865, 580, 586, -865, 594, 604, 335, -865, 178, 194, -865, 178, 432, 612, 178, 178, -865, -865, 601, -865, 178, 350, 357, -865, 359, 178, -865, 1553, 1553, 317, 192, -865, 689, 605, -865, 178, 360, -865, -865, 618, 362, 367, 617, -865, -865, -865, 622, 348, 374, -865, 394, -865, 626, 632, 641, 658, 621, 375, -865, 609, 465, -865, 723, 1203, 658, 65, 201, -865, -865, 396, -865, 627, 230, 326, 405, 651, 629, -865, 147, -865, 423, -865, -865, -865, -865, -865, 218, 566, 656, -865, -865, 690, 566, -865, -865, 657, 659, -865, 652, -865, -865, 1388, 1119, 665, 655, -865, -865, 524, -865, 746, 750, -865, 752, 317, 974, 428, 974, -865, 676, 524, 974, 681, 974, 682, 624, 683, 1225, -865, 1225, -865, 1152, -865, -865, -865, -865, 209, -865, 1119, -865, 1010, -865, 1553, -865, 1152, 178, -865, 178, 1034, 677, 679, 403, -865, -865, 686, 688, -865, 696, 1152, 455, -865, 678, 524, -865, 974, -865, 687, -865, -865, 178, -865, 169, -865, -865, -865, 693, -865, -865, -865, 410, -865, 123, -865, 123, -865, 485, -865, -865, 695, 692, -865, 178, 697, 1152, -865, -865, -865, -865, -865, -865, 117, 178, 430, -865, 178, -865, 379, 1152, -865, 974, -865, 178, 698, -865, -865, 178, -865, 702, 489, -865, 974, 495, -865, -865, 703, -865, 704, -865, -865, -865, 706, -865, -865, 710, 192, 192, 1553, 1553, 1553, 1553, 1553, -865, 705, -865, 84, -865, -865, -865, -865, 974, -865, -865, 117, -865, 117, -865, 117, -865, 178, 178, -865, 711, -865, -865, -865, -865, -865, -865, 712, -865, -865, -865, 178, -865, 709, -865, -865, 717, 524, 729, 712, -865, 1237, -865, -865, 65, -865, 1258, -865, 178, -865, 1152, 65, 712, 435, -865, -865, -865, -865, -865, 1152, 501, 566, -865, -865, 716, 738, -865, 735, 1152, -865, -865, 1388, 752, 737, 209, -865, 1119, 743, 1152, 1152, 1152, 1152, 1388, 503, -865, -865, 524, 736, -865, 1119, 505, -865, 509, -865, 513, -865, -865, -865, 515, -865, 524, -865, 1270, 317, 739, 745, 744, -865, 521, 524, 522, -865, -865, 436, 760, 759, 524, 318, -865, 526, -865, -865, -865, -865, 539, -865, 317, 741, 764, 397, 1034, 432, 432, -865, -865, 928, 1152, 540, -865, -865, 145, -865, -865, 567, 765, 397, 1034, 432, -865, -865, 258, 1152, -865, 766, 767, -865, -865, 541, 768, 373, -865, 770, -865, 771, -865, -865, -865, -865, -865, -865, 379, -865, -865, -865, 862, -865, -865, 863, -865, 774, 379, -865, -865, -865, -865, -865, -865, -865, 262, 545, -865, -865, -865, -865, 776, 432, 550, -865, 769, 782, 178, 775, 786, 178, -865, 1119, -865, 192, 192, -865, -865, -865, -865, -865, 1119, 561, 787, 788, 789, 437, 438, 1034, 658, 567, -865, 567, 1152, -865, 1152, -865, 790, 317, -865, 780, 567, 562, -865, -865, 784, -865, 567, -865, 524, -865, -865, 876, 730, 524, 1282, -865, -865, 563, -865, -865, -865, 295, 1152, 794, 317, 803, 1119, -865, -865, 746, 746, 750, -865, 890, 369, 974, 1046, 443, 809, 810, 811, 812, 566, -865, 1080, -865, 814, 1309, -865, 432, -865, 1152, -865, -865, 1152, -865, -865, 1034, 1343, -865, -865, 568, -865, -865, 813, -865, -865, 816, -865, 815, 820, -865, -865, -865, 434, 434, 824, -865, 826, -865, -865, 829, -865, -865, -865, -865, 573, -865, -865, 818, 320, 819, 117, -865, 178, 178, -865, 1010, -865, 178, 1362, -865, -865, 1388, 821, -865, -865, 844, -865, -865, 846, 178, 1046, -865, -865, 1152, -865, -865, 848, 465, 655, 655, -865, 847, 852, 853, -865, -865, 587, -865, 824, 824, -865, 524, -865, -865, 824, -865, 1258, 1237, 824, 808, 589, -865, -865, 855, 1388, 856, 566, 858, 598, 566, 860, 322, -865, 1388, 837, -865, 1119, 453, -865, -865, -865, -865, -865, -865, -865, -865, 861, -865, -865, -865, 864, -865, -865, -865, 524, -865, -865, -865, -865, -865, -865, 1388, -865, -865, 567, 857, 1415, -865, -865, -865, -865, -865, -865, -865, 602, 608, -865, -865, -865, -865, -865, -865, 854, -865, -865, -865, 866, 867, -865, -865, -865, -865, 868, 869, 567, 873, -865, -865, 883, 951, -865, 876, -865, 870, -865, -865, -865, 871, 865, -865, 892, 887, 1388, 454, -865, -865, -865, 872, 889, -865, -865, -865, -865, 902, -865, -865, 884, 1046, -865, -865, -865, -865, 824, -865, -865, -865, -865, -865, -865, -865, -865, 1388, 898, -865, -865, 1388, 310, -865, -865, -865, 894, 566, -865, -865, 900, -865, 905, -865, 906, 1388, -865, -865, -865 }; /* YYPGOTO[NTERM-NUM]. */ static const short yypgoto[] = { -865, -865, -865, 933, -865, -865, 1003, -865, -865, 1004, -865, -865, -865, -865, -865, -865, -865, 877, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 907, -121, -865, -865, -865, -198, -865, 161, -865, -865, -865, -865, 47, -572, 202, -865, -865, -865, 170, -110, -865, -865, -865, 779, -213, -865, 781, -209, -865, -865, -865, 740, -865, -865, 533, -865, -865, -865, -865, -143, 290, -119, -865, -865, -865, -116, -108, -865, -865, 916, 523, 498, -865, -865, -865, -865, -865, -865, -101, 493, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 293, -865, -865, 85, -358, -865, 171, -534, -865, -865, -865, -865, -865, 772, 345, -865, -865, -865, -865, -865, -865, -865, -865, 57, 133, -865, -865, 555, -865, -865, -865, -865, -865, -528, -865, -865, -865, -865, -865, -865, 546, -865, -865, -220, -865, -865, -865, 606, -703, 131, -865, 128, -865, 412, -232, -865, -865, -865, -865, -10, -865, -865, -865, -865, -865, -865, -548, -865, -865, -865, 926, -153, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 420, -406, -865, -865, -865, -865, -865, -865, 885, 89, -865, -865, -865, -865, -865, -865, -865, 1014, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -330, 304, -865, -865, -371, -560, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -173, 7, -865, -865, -865, 404, -655, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 292, -865, -865, -865, -865, -865, -865, 313, -865, -865, -865, -865, -865, -694, 12, -865, 143, 496, 511, -359, -61, -252, -168, 40, 694, -865, -634, -707, -849, -864, 305, -230, -516, -407, 309, -865, -865, -166, -584, 5, 30, 56, 29, 950, -14, -865, 791, -865, -5, -250 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -609 static const short yytable[] = { 240, 311, 358, 234, 359, 193, 254, 360, 400, 193, 403, 261, 405, 595, 270, 361, 473, 273, 641, 266, 275, 356, 277, 458, 594, 459, 193, 283, 411, 752, 194, 836, 449, 655, 194, 232, 463, 773, 783, 453, 802, 235, 886, 414, 887, 217, 251, 861, 635, 420, 422, 194, 265, 892, 888, 424, 195, 515, 516, 896, 195, 198, 989, 903, 244, 306, 202, 278, 612, 281, 264, 562, 614, -600, 616, 996, 323, 195, 193, 289, 817, 226, 227, 226, 227, 301, 232, 226, 227, 226, 227, 226, 227, 320, -601, 301, 842, 232, 217, 343, 226, 227, 242, 194, 226, 227, 233, 226, 227, 217, 242, 836, 328, 836, 303, 659, 226, 227, 236, 587, 226, 227, 836, 816, 589, 322, 201, 202, 836, 195, 329, 330, 252, 226, 227, 364, 332, 818, 334, 841, 369, 237, 238, 377, 374, 226, 227, 342, 226, 431, 354, 354, 955, 843, 193, 343, 262, 201, 202, 1032, 711, 242, 237, 238, 255, 338, 380, 563, 348, 348, 1030, 884, 343, 1040, 368, 237, 238, 962, 344, 194, 397, 226, 227, 389, 243, 451, 446, 316, 201, 202, 317, 381, 243, 242, 317, 981, 940, 941, 267, 302, 737, 861, 228, 561, 337, 195, -179, 355, 755, -183, 237, 238, 574, 217, 271, 765, 365, 382, 228, 928, 414, 674, 783, 285, 417, 255, 906, 237, 238, 600, 601, 237, 238, 346, 347, -181, 448, 239, 434, 449, 793, 453, 663, 243, 367, 789, 261, 255, 443, 237, 238, 347, 822, 461, 575, 286, 255, 462, 253, 226, 227, 193, 436, 381, 290, 729, 730, 468, 661, 1010, 464, 272, 447, 465, 268, 243, 251, 251, 600, 601, 378, 418, 600, 601, 379, 419, 194, 226, 227, 435, 298, 470, 381, 494, 244, 244, 519, 299, 520, 500, 290, 226, 227, 237, 238, 566, 269, 567, 836, 634, 836, 460, 195, 237, 238, 600, 601, 584, 469, 493, 585, 586, 498, 274, 381, 504, 504, 276, 719, 226, 227, 508, 429, 772, 573, 738, 514, 739, 836, 740, 600, 601, 600, 601, 325, 282, 523, 625, 24, 625, 382, 731, 732, 733, 541, 327, 876, 559, 845, 427, 639, 975, 862, 428, 43, 877, 471, 374, 648, 45, 472, 542, 201, 202, 560, 203, 204, 205, 206, 207, 208, 209, 210, 211, 354, 687, 480, 294, 543, 481, 413, 383, 688, 689, 690, 908, 596, 333, 544, 376, 430, 431, 348, 691, 545, 296, 546, 484, 608, 1033, 608, 485, 335, 547, 608, 630, 608, 548, 622, 915, 947, 336, 988, -592, 631, 517, 517, 375, 518, 518, 458, 389, 459, 638, 491, 201, 202, 631, 492, 742, 203, 204, 205, 206, 207, 208, 952, 532, 406, 509, 533, 443, 261, 428, 261, 232, 510, 232, 512, 524, 511, 527, 513, 525, 423, 428, 528, 193, 913, 193, 529, 384, 914, 534, 552, 408, 535, 309, 553, 251, 310, 692, 693, 410, 694, 695, 672, 696, 697, 698, 699, 700, 194, 536, 194, 569, 537, 244, 416, 570, 710, 265, 753, 650, 576, 426, 651, 753, 570, 11, 678, 683, 412, 15, 686, 852, 18, 854, 195, 670, 195, 712, 579, 25, 26, 498, 580, 610, 421, 684, 720, 611, 780, 685, 766, 808, 882, 883, 570, 598, 553, 570, 918, 991, 600, 601, 598, 49, 923, 51, -528, 357, 992, 1021, 320, 656, 598, 598, 657, 642, 61, 643, 678, 625, 678, 425, 678, 429, 342, 354, 226, 227, 437, 826, 204, 205, 206, 207, 208, 827, 828, 829, 342, 444, 764, 666, 338, 348, 667, 716, 445, 648, 717, 769, 454, 721, 455, 760, 722, 354, 338, 770, 777, 790, 771, 794, 791, 648, 791, 795, 389, 476, 791, 796, 798, 799, 791, 348, 800, 917, 475, -513, 806, 389, -513, 807, 811, 201, 202, 807, 203, 204, 205, 206, 207, 208, 209, 210, 211, 812, 823, 849, 813, 791, 850, 863, 383, 358, 791, 359, 866, 477, 360, 867, 983, 478, 434, 986, 819, 820, 361, 878, 893, 905, 791, 894, 771, 482, 936, 443, 443, 813, 434, 945, 844, 830, 813, 479, 831, 486, 436, 381, 648, 381, 381, 846, 541, 969, 487, 978, 813, 825, 979, 489, 837, 961, 436, 381, 985, 381, 506, 771, 1002, 542, 522, 807, 490, 435, 1003, 311, 382, 850, 521, 423, 501, 554, -220, 526, 460, 530, 543, 531, 865, 435, 618, 538, 212, 551, 619, 556, 544, 578, 309, 571, 572, 310, 545, 539, 546, 389, 950, 951, 625, 785, 786, 547, 540, 381, 389, 548, 577, 504, 648, 648, 875, 588, 591, 45, 598, 593, 764, 592, 889, 11, 597, 602, 904, 15, 603, 604, 18, 907, 873, 382, 837, 613, 837, 25, 26, 1036, 615, 617, 623, 658, -597, 837, -598, 912, 652, 654, 909, 837, 639, 660, 389, 653, 662, 668, 311, 669, 671, 49, 389, 51, 713, 715, 722, 725, 302, 728, 930, 734, 622, 743, 61, 744, 748, 749, 774, 631, 201, 202, 932, 203, 204, 205, 206, 207, 208, 209, 210, 211, 1027, 753, 753, 381, 750, 775, 776, 383, 782, 311, 784, 792, 803, 804, 814, 805, 201, 202, 780, 203, 204, 205, 206, 207, 208, 209, 210, 211, 809, 382, 810, 815, 840, 631, 847, 383, 857, 858, 848, 851, 853, 855, 860, 864, 868, 678, 753, 683, 683, 869, 871, 764, 683, 872, 891, 879, 880, 881, 890, 895, 897, 910, 201, 202, 960, 203, 204, 205, 206, 207, 208, 209, 210, 211, 911, -609, 919, 920, 921, 922, 937, 383, 926, 938, 977, 946, 948, 398, 956, 399, 939, 760, -608, 309, 389, 942, 310, 780, 944, 201, 202, -334, 203, 204, 205, 206, 207, 208, 209, 210, 211, 957, 990, 958, 966, 402, 963, 399, 383, 967, 968, 309, 980, 982, 310, 984, 780, 987, 993, 1005, 753, 998, 994, 1006, 1007, 1013, 1017, 1015, 1016, 837, 1022, 1000, 1008, 1009, 753, 430, 431, 1011, 203, 204, 205, 206, 207, 208, 209, 210, 211, 1012, 1019, 1018, 1023, 404, 1024, 399, 383, 1026, 1031, 309, 1035, 837, 310, 1037, 1038, 1039, 326, 199, 200, 949, 1034, 331, 1029, 201, 202, 933, 203, 204, 205, 206, 207, 208, 209, 210, 211, 953, 371, 452, 450, 714, 212, 495, 383, 439, 885, 345, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 201, 202, 746, 203, 204, 205, 206, 207, 208, 209, 210, 211, 900, 741, 761, 1014, 974, 726, 870, 383, 505, 664, 735, 999, 997, 824, 372, 212, 821, 399, 1020, 321, 415, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 916, 856, 929, 787, 373, 201, 202, 383, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 925, 788, 624, 931, 640, 309, 935, 0, 310, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 557, 212, 0, 644, 645, 0, 383, 309, 0, 0, 310, 0, 0, 212, 0, 399, 0, 0, 0, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 212, 0, 619, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 308, 0, 0, 212, 0, 0, 0, 0, 0, 309, 430, 431, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 384, 0, 0, 0, 383, 0, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 212, 0, 0, 0, 0, 0, 309, 430, 431, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 212, 0, 0, 624, 0, 0, 309, 0, 0, 310, 0, 0, 212, 0, 751, 0, 0, 0, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 212, 0, 751, 0, 0, 0, 309, 0, 687, 310, 801, 0, 212, 0, 0, 688, 689, 690, 309, 0, 0, 310, 0, 0, 212, 902, 691, 0, 0, 0, 309, 201, 202, 310, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 0, 0, 0, 927, 0, 212, 0, 0, 0, 0, 0, 309, 226, 227, 310, 203, 204, 205, 206, 207, 208, 827, 828, 829, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 212, 0, 934, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 954, 0, 692, 693, 0, 694, 695, 0, 696, 697, 698, 699, 700, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 831, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 1, 0, 2, 3, 4, 201, 202, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 0, 0, 0, 0, 0, 0, 396, 0, 213, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0, 69, 0, 70, -2, 1, 71, 2, 3, 4, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0, 69, 1, 70, 2, 3, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 0, 48, 49, 50, 51, 52, 0, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 2, 3, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 8, 9, 0, 0, 12, 0, 0, 0, 16, 0, 0, 19, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 44, 45, 0, 0, 48, 0, 0, 0, 0, 0, 53, 54, 0, 56, 0, 58, 0, 60, 0, 62, 63, 0, 0, 66, 0, 0, 370, 0, 69, 0, 70 }; static const short yycheck[] = { 14, 62, 123, 8, 123, 0, 20, 123, 181, 4, 183, 21, 185, 384, 28, 123, 266, 31, 425, 24, 34, 122, 36, 255, 383, 255, 21, 41, 194, 563, 0, 665, 245, 439, 4, 6, 256, 585, 598, 248, 624, 12, 745, 196, 747, 5, 17, 702, 419, 215, 216, 21, 23, 756, 748, 221, 0, 309, 310, 762, 4, 99, 911, 770, 17, 58, 4, 38, 398, 40, 23, 6, 402, 105, 404, 939, 69, 21, 73, 50, 652, 3, 4, 3, 4, 56, 57, 3, 4, 3, 4, 3, 4, 64, 105, 66, 668, 68, 58, 25, 3, 4, 24, 73, 3, 4, 102, 3, 4, 69, 24, 745, 83, 747, 57, 445, 3, 4, 102, 369, 3, 4, 756, 651, 374, 68, 3, 4, 762, 73, 101, 102, 99, 3, 4, 26, 107, 653, 109, 667, 145, 3, 4, 157, 149, 3, 4, 118, 3, 4, 121, 122, 859, 669, 149, 25, 102, 3, 4, 1023, 490, 24, 3, 4, 102, 118, 161, 102, 121, 122, 1019, 743, 25, 1037, 145, 3, 4, 871, 104, 149, 173, 3, 4, 171, 106, 99, 106, 99, 3, 4, 106, 161, 106, 24, 106, 902, 830, 831, 102, 102, 530, 856, 105, 346, 103, 149, 105, 103, 566, 105, 3, 4, 355, 173, 99, 573, 107, 161, 105, 803, 373, 104, 782, 102, 212, 102, 774, 3, 4, 20, 21, 3, 4, 103, 104, 105, 99, 99, 233, 452, 611, 450, 462, 106, 102, 604, 256, 102, 236, 3, 4, 104, 658, 99, 355, 13, 102, 103, 99, 3, 4, 256, 233, 233, 106, 517, 518, 262, 99, 972, 103, 99, 243, 106, 67, 106, 247, 248, 20, 21, 95, 99, 20, 21, 99, 103, 256, 3, 4, 233, 6, 262, 262, 99, 247, 248, 104, 13, 106, 294, 106, 3, 4, 3, 4, 104, 99, 106, 942, 100, 944, 255, 256, 3, 4, 20, 21, 99, 262, 290, 102, 103, 293, 99, 294, 296, 297, 99, 501, 3, 4, 302, 102, 583, 104, 533, 307, 535, 972, 537, 20, 21, 20, 21, 0, 99, 317, 408, 46, 410, 294, 519, 520, 521, 28, 99, 727, 345, 100, 99, 421, 895, 100, 103, 65, 736, 99, 372, 429, 67, 103, 45, 3, 4, 345, 6, 7, 8, 9, 10, 11, 12, 13, 14, 355, 6, 99, 102, 62, 102, 88, 22, 13, 14, 15, 100, 384, 99, 72, 99, 3, 4, 355, 24, 78, 102, 80, 99, 396, 99, 398, 103, 105, 87, 402, 410, 404, 91, 406, 790, 100, 105, 100, 105, 412, 108, 108, 102, 111, 111, 662, 419, 662, 421, 99, 3, 4, 425, 103, 540, 6, 7, 8, 9, 10, 11, 853, 99, 102, 99, 102, 439, 462, 103, 464, 426, 99, 428, 99, 99, 103, 99, 103, 103, 24, 103, 99, 462, 99, 464, 103, 102, 103, 99, 99, 102, 102, 108, 103, 450, 111, 102, 103, 102, 105, 106, 474, 108, 109, 110, 111, 112, 462, 99, 464, 99, 102, 450, 105, 103, 488, 472, 563, 100, 99, 105, 103, 568, 103, 33, 481, 482, 102, 37, 485, 681, 40, 683, 462, 472, 464, 492, 99, 47, 48, 496, 103, 99, 102, 99, 501, 103, 593, 103, 99, 99, 99, 99, 103, 103, 103, 103, 99, 914, 20, 21, 103, 71, 798, 73, 102, 75, 99, 99, 525, 100, 103, 103, 103, 426, 84, 428, 533, 624, 535, 102, 537, 102, 539, 540, 3, 4, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 553, 99, 572, 100, 539, 540, 103, 100, 102, 652, 103, 581, 103, 100, 99, 568, 103, 570, 553, 100, 590, 100, 103, 100, 103, 668, 103, 100, 598, 99, 103, 100, 619, 100, 103, 570, 103, 792, 102, 100, 100, 611, 103, 103, 100, 3, 4, 103, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100, 100, 100, 103, 103, 103, 100, 22, 768, 103, 768, 100, 99, 768, 103, 904, 99, 651, 907, 653, 654, 768, 100, 100, 100, 103, 103, 103, 102, 100, 657, 658, 103, 667, 100, 669, 108, 103, 99, 111, 99, 651, 651, 743, 653, 654, 673, 28, 100, 102, 100, 103, 662, 103, 99, 665, 868, 667, 667, 100, 669, 99, 103, 100, 45, 99, 103, 102, 651, 100, 770, 654, 103, 23, 24, 102, 106, 107, 99, 662, 102, 62, 99, 717, 667, 100, 99, 102, 106, 104, 6, 72, 102, 108, 106, 107, 111, 78, 105, 80, 727, 850, 851, 803, 600, 601, 87, 105, 717, 736, 91, 99, 722, 813, 814, 725, 99, 99, 67, 103, 107, 748, 102, 750, 33, 99, 19, 771, 37, 18, 17, 40, 776, 725, 717, 745, 99, 747, 47, 48, 1029, 99, 99, 99, 105, 107, 756, 107, 782, 102, 93, 778, 762, 853, 106, 782, 107, 103, 102, 859, 107, 103, 71, 790, 73, 106, 103, 103, 103, 102, 99, 805, 106, 800, 102, 84, 103, 107, 100, 102, 807, 3, 4, 810, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1005, 894, 895, 805, 107, 99, 103, 22, 103, 902, 99, 107, 105, 100, 105, 103, 3, 4, 911, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100, 805, 103, 99, 99, 853, 100, 22, 6, 6, 103, 103, 102, 102, 100, 99, 107, 848, 939, 850, 851, 99, 107, 871, 855, 99, 106, 100, 100, 100, 100, 107, 16, 99, 3, 4, 867, 6, 7, 8, 9, 10, 11, 12, 13, 14, 103, 17, 99, 99, 99, 99, 99, 22, 100, 99, 108, 99, 99, 102, 99, 104, 107, 894, 104, 108, 914, 103, 111, 990, 104, 3, 4, 104, 6, 7, 8, 9, 10, 11, 12, 13, 14, 99, 107, 99, 99, 102, 100, 104, 22, 99, 99, 108, 99, 99, 111, 99, 1019, 99, 99, 107, 1023, 106, 100, 99, 99, 16, 103, 99, 99, 942, 100, 944, 106, 106, 1037, 3, 4, 106, 6, 7, 8, 9, 10, 11, 12, 13, 14, 106, 103, 99, 103, 102, 92, 104, 22, 113, 100, 108, 106, 972, 111, 103, 99, 99, 73, 4, 4, 848, 1024, 104, 1017, 3, 4, 813, 6, 7, 8, 9, 10, 11, 12, 13, 14, 855, 149, 248, 247, 496, 102, 291, 22, 105, 744, 119, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3, 4, 553, 6, 7, 8, 9, 10, 11, 12, 13, 14, 768, 539, 570, 979, 894, 511, 722, 22, 297, 464, 525, 944, 942, 662, 149, 102, 657, 104, 990, 66, 196, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, 791, 692, 805, 602, 149, 3, 4, 22, 6, 7, 8, 9, 10, 11, 12, 13, 14, 102, 800, 603, 105, 807, 423, 108, 814, -1, 111, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, 344, 102, -1, 104, 105, -1, 22, 108, -1, -1, 111, -1, -1, 102, -1, 104, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, 102, -1, 104, -1, -1, -1, 108, -1, -1, 111, -1, -1, -1, -1, 99, -1, -1, 102, -1, -1, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, 102, -1, -1, -1, 22, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, 102, -1, -1, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, 102, -1, -1, 105, -1, -1, 108, -1, -1, 111, -1, -1, 102, -1, 104, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, 102, -1, 104, -1, -1, -1, 108, -1, 6, 111, 100, -1, 102, -1, -1, 13, 14, 15, 108, -1, -1, 111, -1, -1, 102, 103, 24, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, 100, -1, 102, -1, -1, -1, -1, -1, 108, 3, 4, 111, 6, 7, 8, 9, 10, 11, 12, 13, 14, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, 102, -1, 104, -1, -1, -1, 108, -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, 100, -1, 102, 103, -1, 105, 106, -1, 108, 109, 110, 111, 112, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, 102, -1, -1, -1, -1, -1, 108, -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, 111, -1, -1, 102, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, 3, 4, 5, 3, 4, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, 102, -1, 104, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, 94, -1, 96, 0, 1, 99, 3, 4, 5, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, -1, -1, 94, 1, 96, 3, 4, 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, 70, 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 3, 4, 94, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, -1, 29, 30, 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, 66, 67, -1, -1, 70, -1, -1, -1, -1, -1, 76, 77, -1, 79, -1, 81, -1, 83, -1, 85, 86, -1, -1, 89, -1, -1, 92, -1, 94, -1, 96 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned short yystos[] = { 0, 1, 3, 4, 5, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 94, 96, 99, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 155, 156, 157, 162, 169, 176, 182, 183, 184, 185, 188, 189, 190, 192, 193, 214, 215, 226, 227, 228, 234, 236, 238, 239, 240, 243, 248, 249, 254, 256, 259, 274, 277, 279, 280, 281, 282, 283, 285, 286, 287, 288, 289, 291, 295, 296, 297, 299, 300, 301, 305, 306, 307, 310, 311, 313, 314, 315, 316, 317, 318, 319, 321, 324, 326, 327, 328, 329, 332, 342, 344, 346, 348, 349, 350, 351, 352, 353, 356, 369, 373, 377, 380, 403, 408, 411, 412, 413, 415, 416, 99, 120, 123, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 102, 104, 355, 381, 382, 395, 396, 397, 398, 404, 407, 411, 412, 413, 3, 4, 105, 159, 241, 242, 414, 102, 420, 414, 102, 3, 4, 99, 416, 345, 24, 106, 159, 170, 171, 172, 173, 174, 175, 414, 99, 99, 416, 102, 260, 261, 264, 265, 272, 277, 102, 158, 159, 414, 420, 102, 67, 99, 416, 99, 99, 416, 99, 416, 99, 416, 414, 163, 235, 414, 99, 416, 357, 102, 13, 347, 237, 414, 106, 177, 178, 179, 102, 343, 102, 229, 6, 13, 320, 414, 102, 241, 244, 245, 355, 141, 99, 108, 111, 392, 393, 394, 395, 399, 99, 106, 257, 258, 414, 320, 241, 355, 325, 0, 117, 99, 414, 414, 414, 147, 414, 99, 414, 105, 105, 103, 159, 197, 198, 204, 414, 25, 104, 196, 103, 104, 159, 194, 196, 205, 206, 213, 414, 103, 205, 75, 148, 188, 192, 193, 216, 218, 26, 107, 278, 102, 414, 420, 92, 131, 288, 415, 420, 102, 99, 416, 95, 99, 411, 412, 413, 22, 102, 322, 339, 340, 341, 386, 387, 388, 389, 390, 391, 392, 102, 355, 102, 104, 354, 386, 102, 354, 102, 354, 102, 374, 102, 409, 102, 409, 102, 88, 289, 311, 105, 386, 99, 103, 409, 102, 409, 24, 409, 102, 105, 99, 103, 102, 3, 4, 250, 251, 411, 413, 414, 6, 421, 105, 302, 303, 304, 386, 99, 102, 106, 414, 99, 171, 173, 99, 170, 174, 103, 99, 270, 271, 272, 403, 413, 99, 103, 261, 103, 106, 252, 253, 411, 413, 414, 99, 103, 421, 308, 102, 99, 99, 99, 99, 99, 102, 102, 164, 99, 103, 99, 102, 290, 99, 102, 99, 103, 414, 99, 178, 180, 181, 414, 255, 411, 102, 231, 232, 414, 231, 99, 246, 414, 99, 99, 103, 99, 103, 414, 393, 393, 108, 111, 104, 106, 23, 99, 414, 99, 103, 99, 99, 99, 103, 102, 99, 99, 102, 99, 102, 99, 102, 99, 105, 105, 28, 45, 62, 72, 78, 80, 87, 91, 186, 187, 106, 99, 103, 106, 201, 6, 418, 191, 386, 414, 186, 6, 102, 222, 419, 104, 106, 195, 99, 103, 106, 107, 104, 186, 205, 99, 99, 102, 99, 103, 275, 284, 420, 99, 102, 103, 421, 99, 421, 298, 99, 102, 107, 391, 339, 386, 99, 103, 323, 20, 21, 19, 18, 17, 335, 336, 354, 386, 414, 99, 103, 335, 99, 335, 99, 335, 99, 100, 104, 378, 379, 386, 99, 105, 392, 410, 370, 371, 372, 411, 386, 405, 406, 100, 339, 383, 384, 386, 392, 396, 405, 242, 242, 104, 105, 160, 161, 392, 402, 100, 103, 102, 107, 93, 304, 100, 103, 105, 335, 106, 99, 103, 261, 265, 262, 100, 103, 102, 107, 159, 103, 386, 292, 104, 152, 153, 154, 414, 165, 166, 167, 168, 414, 99, 103, 414, 6, 13, 14, 15, 24, 102, 103, 105, 106, 108, 109, 110, 111, 112, 358, 359, 360, 361, 362, 363, 364, 365, 366, 386, 335, 414, 106, 181, 103, 100, 103, 337, 354, 414, 100, 103, 233, 230, 103, 245, 330, 99, 393, 393, 394, 394, 394, 106, 258, 333, 335, 152, 152, 152, 197, 205, 102, 103, 202, 198, 199, 107, 100, 107, 104, 225, 392, 401, 222, 209, 223, 224, 225, 414, 206, 207, 385, 386, 222, 99, 219, 217, 386, 100, 103, 421, 284, 102, 99, 103, 386, 309, 312, 392, 400, 103, 340, 99, 388, 388, 389, 390, 391, 100, 103, 107, 339, 100, 100, 100, 375, 420, 100, 103, 100, 410, 105, 100, 103, 100, 103, 99, 100, 103, 100, 100, 103, 105, 99, 251, 160, 404, 411, 411, 303, 304, 100, 271, 414, 6, 12, 13, 14, 108, 111, 266, 267, 268, 269, 398, 414, 417, 418, 99, 251, 160, 404, 411, 100, 386, 100, 103, 100, 103, 103, 409, 102, 409, 102, 359, 6, 6, 367, 100, 360, 100, 100, 99, 411, 100, 103, 107, 99, 232, 107, 99, 159, 247, 414, 339, 339, 100, 100, 100, 100, 99, 99, 160, 187, 266, 266, 385, 386, 100, 106, 266, 100, 103, 107, 266, 16, 220, 221, 218, 276, 103, 399, 420, 100, 284, 420, 100, 386, 99, 103, 411, 99, 103, 339, 336, 354, 99, 99, 99, 99, 99, 421, 376, 379, 100, 100, 410, 372, 411, 406, 386, 161, 104, 402, 100, 99, 99, 107, 398, 398, 103, 263, 104, 100, 99, 100, 99, 154, 166, 166, 405, 165, 100, 399, 99, 99, 99, 338, 414, 354, 385, 100, 331, 334, 99, 99, 99, 100, 203, 200, 211, 210, 224, 225, 208, 108, 100, 103, 99, 399, 99, 421, 99, 100, 421, 99, 100, 400, 107, 339, 99, 99, 100, 273, 401, 267, 106, 269, 414, 293, 100, 100, 368, 107, 99, 99, 106, 106, 266, 106, 106, 16, 221, 99, 99, 103, 99, 103, 312, 99, 100, 103, 92, 294, 113, 354, 212, 420, 400, 100, 401, 99, 416, 106, 421, 103, 99, 99, 401 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ #endif #if ! defined (YYSIZE_T) && defined (size_t) # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) # define YYSIZE_T unsigned int #endif #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Compute the default location (before the actions are run). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ ((Current).first_line = (Rhs)[1].first_line, \ (Current).first_column = (Rhs)[1].first_column, \ (Current).last_line = (Rhs)[N].last_line, \ (Current).last_column = (Rhs)[N].last_column) #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) # define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) # define YYDSYMPRINTF(Title, Token, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yysymprint (stderr, \ Token, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_stack_print (short *bottom, short *top) #else static void yy_stack_print (bottom, top) short *bottom; short *top; #endif { YYFPRINTF (stderr, "Stack now"); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_reduce_print (int yyrule) #else static void yy_reduce_print (yyrule) int yyrule; #endif { int yyi; unsigned int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", yyrule - 1, yylno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YYDSYMPRINT(Args) # define YYDSYMPRINTF(Title, Token, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 # undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined (__GLIBC__) && defined (_STRING_H) # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T # if defined (__STDC__) || defined (__cplusplus) yystrlen (const char *yystr) # else yystrlen (yystr) const char *yystr; # endif { register const char *yys = yystr; while (*yys++ != '\0') continue; return yys - yystr - 1; } # endif # endif # ifndef yystpcpy # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * # if defined (__STDC__) || defined (__cplusplus) yystpcpy (char *yydest, const char *yysrc) # else yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; # endif { register char *yyd = yydest; register const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif #endif /* !YYERROR_VERBOSE */ #if YYDEBUG /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else static void yysymprint (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; if (yytype < YYNTOKENS) { YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif } else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } YYFPRINTF (yyoutput, ")"); } #endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yydestruct (int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yytype, yyvaluep) int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) int yyparse (void *YYPARSE_PARAM); # else int yyparse (); # endif #else /* ! YYPARSE_PARAM */ #if defined (__STDC__) || defined (__cplusplus) int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) int yyparse (void *YYPARSE_PARAM) # else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; # endif #else /* ! YYPARSE_PARAM */ #if defined (__STDC__) || defined (__cplusplus) int yyparse (void) #else int yyparse () #endif #endif { register int yystate; register int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ short yyssa[YYINITDEPTH]; short *yyss = yyssa; register short *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; #define YYPOPSTACK (yyvsp--, yyssp--) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* When reducing, the number of symbols on the RHS of the reduced rule. */ int yylen; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow ("parser stack overflow", &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyoverflowlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { short *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 6: #line 384 "fortran.y" { /* Create id token for prog if unnamed. NOTE: this clobbers $1.class, value, src_text. */ if(current_module_hash == -1) { implied_id_token(&(yyvsp[0]),unnamed_prog); def_function( type_PROGRAM, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &(yyvsp[0]), /* name */ (Token*)NULL); /* args */ current_module_hash = def_curr_module(&(yyvsp[0])); current_module_type = type_PROGRAM; /* Pretend this is a PROGRAM statement */ if(style_req_prog_stmt) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "Program does not start with a PROGRAM statement"); } push_block(&(yyval),tok_PROGRAM,subprog, hashtab[current_module_hash].name, NO_LABEL); /* It is possible for a block construct to be the initial statement, and if so it has earlier been pushed onto stack. Detect this situation and swap stack entries to make them nest correctly. */ if(block_depth > 1 && block_stack[block_depth-2].first_line == yyvsp[0].line_num) { BlockStack temp = block_stack[block_depth-1]; block_stack[block_depth-1] = block_stack[block_depth-2]; block_stack[block_depth-2] = temp; } } /* Handle END statement. Note that curr_stmt_class of structured END stmts have been merged into tok_END. */ if(curr_stmt_class == tok_END) { if(prev_stmt_class != tok_RETURN) (void)do_RETURN(current_module_hash,&(yyvsp[0])); pop_block(&(yyval),yyval.tclass, curr_stmt_name,NO_LABEL); END_processing(&(yyval)); goto_flag = prev_goto = FALSE; } prev_stmt_class = curr_stmt_class; integer_context = FALSE; in_attrbased_typedecl = FALSE; true_prev_stmt_line_num = yyval.line_num; } break; case 10: #line 451 "fortran.y" { /* Treat END PROGRAM et al as plain END */ curr_stmt_class = tok_END; } break; case 11: #line 458 "fortran.y" { /* Put definition of label into table, and if it marks end of a DO range, pop block. */ int do_label = def_label(&(yyvsp[-1]),labeled_stmt_type); if( do_label || yyvsp[0].tclass == tok_ENDDO ) { if(is_true(NOT_DO_TERMINAL_STMT,yyvsp[0].TOK_flags)) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "statement cannot be terminal statement of a DO loop"); } else { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name, do_label? (LABEL_t)(yyvsp[-1].value.integer): NO_LABEL); } } /* Issue picky warnings about labeled statements. FORMAT has an excuse for existing, so warnings for it are separately controlled. */ if( style_labeled_exec && curr_stmt_class != tok_FORMAT ) { warning(yyvsp[-1].line_num,yyvsp[-1].col_num, "obsolescent feature: labeled statement"); } else if( style_labeled_format && curr_stmt_class == tok_FORMAT ) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "obsolescent feature: FORMAT statement"); } if(executable_stmt) prev_goto = goto_flag; yyval = yyvsp[0]; } break; case 12: #line 496 "fortran.y" { if(executable_stmt) { if(prev_goto) syntax_error(yyvsp[0].line_num, NO_COL_NUM, "No path to this statement"); prev_goto = goto_flag; } if( curr_stmt_class == tok_FORMAT && misc_warn ) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "FORMAT statement has no label"); } if( yyvsp[0].tclass == tok_ENDDO ) pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); } break; case 13: #line 515 "fortran.y" { exec_stmt_count = 0; executable_stmt = FALSE; labeled_stmt_type = LAB_SPECIFICATION; push_block(&(yyvsp[0]),yyvsp[0].tclass,subprog, hashtab[current_module_hash].name, NO_LABEL); } break; case 14: #line 524 "fortran.y" { executable_stmt = FALSE; /* labeled_stmt_type set in lower productions */ } break; case 15: #line 529 "fortran.y" { /* handle statement functions correctly */ if(is_true(STMT_FUNCTION_EXPR, yyvsp[0].TOK_flags) && stmt_sequence_no <= SEQ_STMT_FUN) { stmt_sequence_no = SEQ_STMT_FUN; f90_stmt_sequence_no = F90_SEQ_SPECIF; executable_stmt = FALSE; } else { stmt_sequence_no = SEQ_EXEC; f90_stmt_sequence_no = F90_SEQ_EXEC; ++exec_stmt_count; executable_stmt = TRUE; } labeled_stmt_type = LAB_EXECUTABLE; } break; case 16: #line 545 "fortran.y" { stmt_sequence_no = SEQ_EXEC; f90_stmt_sequence_no = F90_SEQ_EXEC; ++exec_stmt_count; executable_stmt = TRUE; labeled_stmt_type = LAB_EXECUTABLE; } break; case 17: #line 553 "fortran.y" { executable_stmt = TRUE; if(stmt_sequence_no == 0) stmt_sequence_no = SEQ_HEADER; if(f90_stmt_sequence_no == 0) f90_stmt_sequence_no = SEQ_HEADER; complex_const_allowed = FALSE; /* turn off flags */ inside_format=FALSE; integer_context = FALSE; in_assignment_stmt = FALSE; yyval.line_num = prev_stmt_line_num; /* best guess */ labeled_stmt_type = LAB_EXECUTABLE; yyerrok; /* (error message already given) */ } break; case 18: #line 570 "fortran.y" { current_module_type = type_PROGRAM; } break; case 19: #line 574 "fortran.y" { current_module_type = type_SUBROUTINE; } break; case 20: #line 578 "fortran.y" { current_module_type = type_SUBROUTINE; } break; case 21: #line 582 "fortran.y" { current_module_type = type_BLOCK_DATA; } break; case 23: #line 590 "fortran.y" { if( def_label(&(yyvsp[-1]),LAB_EXECUTABLE) ) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "statement cannot be terminal statement of a DO loop"); /* Pop it anyway to keep stack consistent */ pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name, (LABEL_t)(yyvsp[-1].value.integer)); } yyval = yyvsp[0]; } break; case 24: #line 606 "fortran.y" { curr_stmt_name = NULL; } break; case 28: #line 618 "fortran.y" { curr_stmt_name = hashtab[yyvsp[-1].value.integer].name; } break; case 33: #line 630 "fortran.y" { #ifdef ALLOW_INCLUDE if(f77_include) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); } open_include_file(yyvsp[-1].value.string,yyvsp[-2].line_num); #else syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "statement not permitted"); #endif } break; case 34: #line 649 "fortran.y" { if(stmt_sequence_no < SEQ_IMPLICIT) { stmt_sequence_no = SEQ_IMPLICIT; } if(f90_stmt_sequence_no < F90_SEQ_IMPLICIT_NONE) { stmt_sequence_no = F90_SEQ_IMPLICIT_NONE; } /* labeled_stmt_type set below */ } break; case 35: #line 659 "fortran.y" { if(stmt_sequence_no < SEQ_IMPLICIT) { stmt_sequence_no = SEQ_IMPLICIT; } else if(stmt_sequence_no > SEQ_SPECIF) { check_stmt_sequence(&(yyvsp[0]),SEQ_SPECIF); } if(f90_stmt_sequence_no < F90_SEQ_IMPLICIT) { f90_stmt_sequence_no = F90_SEQ_IMPLICIT; } else if(f90_stmt_sequence_no > F90_SEQ_SPECIF) { check_f90_stmt_sequence(&(yyvsp[0]),F90_SEQ_SPECIF); } labeled_stmt_type = LAB_SPECIFICATION; } break; case 36: #line 675 "fortran.y" { check_stmt_sequence(&(yyvsp[0]),SEQ_IMPLICIT); /* f90 seq checks done at implicit_stmt */ labeled_stmt_type = LAB_SPECIFICATION; } break; case 37: #line 681 "fortran.y" { if(stmt_sequence_no < SEQ_STMT_FUN) { stmt_sequence_no = SEQ_STMT_FUN; } if(f90_stmt_sequence_no <= F90_SEQ_SPECIF) { f90_stmt_sequence_no = F90_SEQ_SPECIF; } else { check_f90_stmt_sequence(&(yyvsp[0]),F90_SEQ_EXEC); } labeled_stmt_type = LAB_SPECIFICATION; } break; case 38: #line 694 "fortran.y" { check_stmt_sequence(&(yyvsp[0]),SEQ_SPECIF); check_f90_stmt_sequence(&(yyvsp[0]),F90_SEQ_SPECIF); labeled_stmt_type = LAB_SPECIFICATION; } break; case 39: #line 702 "fortran.y" { goto_flag = prev_goto = FALSE; labeled_stmt_type = LAB_SPECIFICATION; } break; case 40: #line 707 "fortran.y" { labeled_stmt_type = LAB_FORMAT; } break; case 54: #line 731 "fortran.y" { goto_flag=TRUE; make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); } break; case 55: #line 736 "fortran.y" { goto_flag=FALSE; } break; case 57: #line 743 "fortran.y" { if( f95_assign ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,f95_assign); msg_tail(": assigned GOTO"); } } break; case 58: #line 750 "fortran.y" { if(style_req_block_if) { warning(if_line_num, if_col_num, "non-structured IF statement"); } } break; case 59: #line 757 "fortran.y" { check_construct_name_match(&(yyvsp[0]), curr_stmt_name); } break; case 68: #line 772 "fortran.y" { record_io_usage(&(yyvsp[0])); } break; case 72: #line 781 "fortran.y" { /* If form not defined by now, READ is unformatted. If no REC=num was seen, then it is sequential. */ if(current_io_form == IO_FORM_DEFAULT) current_io_form = IO_FORM_UNFORMATTED; if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; } break; case 74: #line 792 "fortran.y" { if(current_io_form == IO_FORM_DEFAULT) current_io_form = IO_FORM_UNFORMATTED; if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; } break; case 77: #line 801 "fortran.y" { /* In OPEN, default ACCESS is SEQUENTIAL, and default FORM is FORMATTED for ACCESS=SEQUENTIAL, UNFORMATTED for ACCESS=DIRECT. */ if(current_io_access == IO_ACCESS_DEFAULT) current_io_access = IO_ACCESS_SEQUENTIAL; if(current_io_form == IO_FORM_DEFAULT) { if(current_io_access == IO_ACCESS_SEQUENTIAL) current_io_form = IO_FORM_FORMATTED; else current_io_form = IO_FORM_UNFORMATTED; } } break; case 80: #line 818 "fortran.y" { /* These statements only apply to sequential access */ current_io_access = IO_ACCESS_SEQUENTIAL; } break; case 84: #line 831 "fortran.y" { goto_flag=FALSE; } break; case 85: #line 835 "fortran.y" { prev_goto = goto_flag = FALSE; make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); } break; case 86: #line 840 "fortran.y" { goto_flag = TRUE; make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); } break; case 87: #line 845 "fortran.y" { prev_goto = goto_flag = FALSE; make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); } break; case 89: #line 854 "fortran.y" { /* Note that $1 at this point is expr, not tok_IF. This is undesirable for our purpose here, but needed for more important stuff elsewhere. */ push_block(&(yyvsp[0]),tok_IF,construct,curr_stmt_name,NO_LABEL); make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); } break; case 90: #line 863 "fortran.y" { /* Flag DO w/o label or DO WHILE forms here */ if(is_true(NONSTD_USAGE_FLAG,yyvsp[0].TOK_flags)) #ifdef ALLOW_DO_ENDDO if(f77_do_enddo) nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); #else syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "Nonstandard syntax"); #endif push_block(&(yyvsp[0]),tok_DO,construct,curr_stmt_name, (LABEL_t)(yyvsp[0].tsubclass)); make_true(NOT_DO_TERMINAL_STMT,yyval.TOK_flags); /* Record hash index of DO variable in the block stack entry for this statement. */ block_stack[block_depth-1].do_var_hash = yyvsp[0].value.integer; } break; case 91: #line 882 "fortran.y" { #ifdef ALLOW_DO_ENDDO if(f77_do_enddo) nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); #else syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "Nonstandard syntax"); #endif /* pop_block is done at stmt production, where optional label can be checked for match. */ } break; case 92: #line 897 "fortran.y" { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); push_block(&(yyvsp[0]),yyvsp[0].tclass,construct,curr_stmt_name,NO_LABEL); } break; case 93: #line 902 "fortran.y" { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); push_block(&(yyvsp[0]),yyvsp[0].tclass,construct,curr_stmt_name,NO_LABEL); } break; case 94: #line 907 "fortran.y" { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); } break; case 95: #line 913 "fortran.y" { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); push_block(&(yyvsp[0]),yyvsp[0].tclass,construct,curr_stmt_name,NO_LABEL); } break; case 96: #line 918 "fortran.y" { pop_block(&(yyvsp[0]),tok_CASE,curr_stmt_name,NO_LABEL); push_block(&(yyvsp[0]),tok_CASE,construct,curr_stmt_name,NO_LABEL); } break; case 97: #line 923 "fortran.y" { pop_block(&(yyvsp[0]),yyvsp[0].tclass,curr_stmt_name,NO_LABEL); } break; case 98: #line 929 "fortran.y" {check_seq_header(&(yyvsp[0]));} break; case 99: #line 931 "fortran.y" { def_function( type_PROGRAM, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &(yyvsp[-1]), /* name */ (Token*)NULL);/* args */ current_module_hash = def_curr_module(&(yyvsp[-1])); } break; case 100: #line 948 "fortran.y" { do_ENTRY(&(yyvsp[-1]),(Token*)NULL ,current_module_hash); } break; case 101: #line 953 "fortran.y" { do_ENTRY(&(yyvsp[-4]),&(yyvsp[-2]) ,current_module_hash); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("entry stmt",&(yyvsp[-2])); #endif } break; case 103: #line 969 "fortran.y" { if(f77_function_noparen || f90_function_noparen) { nonstandard(yyvsp[-1].line_num, (unsigned)(yyvsp[-1].col_num+strlen(token_name(&yyvsp[-1]))), f90_function_noparen,0); msg_tail(": parentheses required"); } def_function( current_datatype, current_typesize, current_len_text, &(yyvsp[-1]), (Token*)NULL); current_module_hash= def_curr_module(&(yyvsp[-1])); } break; case 104: #line 987 "fortran.y" { def_function( current_datatype, current_typesize, current_len_text, &(yyvsp[-4]), &(yyvsp[-2])); current_module_hash= def_curr_module(&(yyvsp[-4])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function stmt",&(yyvsp[-2])); #endif } break; case 105: #line 1002 "fortran.y" { if(f77_function_noparen || f90_function_noparen) { nonstandard(yyvsp[-1].line_num, (unsigned)(yyvsp[-1].col_num+strlen(token_name(&yyvsp[-1]))), f90_function_noparen,0); msg_tail(": parentheses required"); } def_function( type_UNDECL, size_DEFAULT, (char *)NULL, &(yyvsp[-1]), (Token*)NULL); current_module_hash= def_curr_module(&(yyvsp[-1])); } break; case 106: #line 1020 "fortran.y" { def_function( type_UNDECL, /* type */ size_DEFAULT, /* size */ (char *)NULL, /* size text */ &(yyvsp[-4]), /* name */ &(yyvsp[-2])); /* args */ current_module_hash= def_curr_module(&(yyvsp[-4])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function stmt",&(yyvsp[-2])); #endif } break; case 107: #line 1037 "fortran.y" { yyval = yyvsp[0]; /* needed for block opener info */ } break; case 109: #line 1046 "fortran.y" { check_seq_header(&(yyvsp[0])); } break; case 114: #line 1065 "fortran.y" { def_function( type_SUBROUTINE, size_DEFAULT, (char *)NULL, &(yyvsp[-1]), (Token*)NULL); current_module_hash= def_curr_module(&(yyvsp[-1])); } break; case 115: #line 1077 "fortran.y" { def_function( type_SUBROUTINE, size_DEFAULT, (char *)NULL, &(yyvsp[-4]), &(yyvsp[-2])); current_module_hash= def_curr_module(&(yyvsp[-4])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("subroutine stmt",&(yyvsp[-2])); #endif } break; case 116: #line 1094 "fortran.y" { check_seq_header(&(yyvsp[0])); } break; case 117: #line 1100 "fortran.y" { yyval.next_token = (Token*)NULL; } break; case 119: #line 1107 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 120: #line 1111 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 121: #line 1117 "fortran.y" { def_arg_name(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); } break; case 122: #line 1122 "fortran.y" { yyval.TOK_type = type_byte(class_LABEL,type_LABEL); yyval.size = size_DEFAULT; yyval.TOK_flags = 0; yyval.left_token = (Token *)NULL; label_dummy_arg_count++; } break; case 123: #line 1135 "fortran.y" { /* form name %DATnn */ ++block_data_number; (void)sprintf(unnamed_block_data+4,"%02d", block_data_number%100); implied_id_token(&(yyvsp[-1]),unnamed_block_data); def_function( type_BLOCK_DATA, size_DEFAULT, (char *)NULL, &(yyvsp[-1]), (Token*)NULL); current_module_hash= def_curr_module(&(yyvsp[-1])); } break; case 124: #line 1152 "fortran.y" { def_function( type_BLOCK_DATA, size_DEFAULT, (char *)NULL, &(yyvsp[-1]), (Token*)NULL); current_module_hash= def_curr_module(&(yyvsp[-1])); } break; case 125: #line 1165 "fortran.y" { check_seq_header(&(yyvsp[0])); } break; case 129: #line 1180 "fortran.y" { def_array_dim(&(yyvsp[-3]),&(yyvsp[-1])); } break; case 130: #line 1187 "fortran.y" { yyval.TOK_dims = 1; yyval.TOK_elts = yyvsp[0].TOK_elts; yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 131: #line 1193 "fortran.y" { yyval.TOK_dims = yyvsp[-2].TOK_dims + 1; /* one more dimension */ yyval.TOK_elts = yyvsp[-2].TOK_elts * yyvsp[0].TOK_elts; yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 132: #line 1201 "fortran.y" { if( datatype_of(yyvsp[0].TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) ) yyval.TOK_elts = yyvsp[0].value.integer; else yyval.TOK_elts = 0; } break; case 133: #line 1209 "fortran.y" { /* avoid getting 0 - 0 + 1 = 1 if bounds nonconstant */ if( datatype_of(yyvsp[-2].TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,yyvsp[-2].TOK_flags) && datatype_of(yyvsp[0].TOK_type) == type_INTEGER && is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) ) yyval.TOK_elts = yyvsp[0].value.integer - yyvsp[-2].value.integer + 1; else yyval.TOK_elts = 0; yyval.left_token = add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),&(yyvsp[0])); } break; case 134: #line 1221 "fortran.y" { yyval.TOK_elts = 0; yyval.left_token = (Token *)NULL; } break; case 135: #line 1226 "fortran.y" { yyval.TOK_elts = 0; yyvsp[0].left_token = (Token *)NULL; yyval.left_token = add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),&(yyvsp[0])); } break; case 136: #line 1232 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail(": deferred-shape array spec"); } } break; case 137: #line 1241 "fortran.y" {equivalence_flag = TRUE;} break; case 138: #line 1242 "fortran.y" {equivalence_flag = FALSE;} break; case 141: #line 1250 "fortran.y" { equivalence(&(yyvsp[-2]), &(yyvsp[0])); } break; case 142: #line 1254 "fortran.y" { equivalence(&(yyvsp[-2]), &(yyvsp[0])); } break; case 143: #line 1261 "fortran.y" { def_equiv_name(&(yyvsp[0])); } break; case 144: #line 1265 "fortran.y" { def_equiv_name(&(yyvsp[0])); } break; case 145: #line 1269 "fortran.y" { def_equiv_name(&(yyvsp[0])); } break; case 149: #line 1284 "fortran.y" { implied_id_token(&(yyval),blank_com_name); def_com_block(&(yyval), &(yyvsp[-1])); if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error( yyvsp[-1].line_num,yyvsp[-1].col_num, "trailing comma"); #ifdef DEBUG_PARSER if(debug_parser) print_comlist("blank common",&(yyvsp[-1])); #endif } break; case 150: #line 1298 "fortran.y" { if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error( yyvsp[-1].line_num,yyvsp[-1].col_num, "trailing comma"); } break; case 151: #line 1306 "fortran.y" { implied_id_token(&(yyval),blank_com_name); def_com_block(&(yyval),&(yyvsp[-2])); if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error( yyvsp[-1].line_num,yyvsp[-1].col_num, "trailing comma"); #ifdef DEBUG_PARSER if(debug_parser) print_comlist("blank common",&(yyvsp[-2])); #endif } break; case 152: #line 1324 "fortran.y" { yyval.TOK_flags = yyvsp[0].TOK_flags; } break; case 153: #line 1328 "fortran.y" { yyval.TOK_flags = yyvsp[0].TOK_flags; yyval.line_num = yyvsp[0].line_num; yyval.col_num = yyvsp[0].col_num; } break; case 154: #line 1336 "fortran.y" { def_com_block(&(yyvsp[-1]),&(yyvsp[0])); yyval.TOK_flags = yyvsp[0].TOK_flags; yyval.line_num = yyvsp[0].line_num; yyval.col_num = yyvsp[0].col_num; #ifdef DEBUG_PARSER if(debug_parser) print_comlist("labeled common",&(yyvsp[0])); #endif } break; case 155: #line 1349 "fortran.y" { yyval = yyvsp[-1]; } break; case 156: #line 1354 "fortran.y" { implied_id_token(&(yyval),blank_com_name); } break; case 157: #line 1358 "fortran.y" { implied_id_token(&(yyval),blank_com_name); } break; case 158: #line 1364 "fortran.y" { yyval.TOK_flags = yyvsp[0].TOK_flags; yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 159: #line 1369 "fortran.y" { if(!is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error( yyvsp[0].line_num,yyvsp[0].col_num-1, "missing comma"); yyval.TOK_flags = yyvsp[0].TOK_flags; yyval.line_num = yyvsp[0].line_num; yyval.col_num = yyvsp[0].col_num; yyval.next_token = append_token(yyvsp[-1].next_token,&(yyvsp[0])); } break; case 160: #line 1382 "fortran.y" { /* no comma */ yyval.TOK_flags = yyvsp[0].TOK_flags; make_false(COMMA_FLAG,yyval.TOK_flags); } break; case 161: #line 1387 "fortran.y" { /* has comma */ yyval.TOK_flags = yyvsp[-1].TOK_flags; make_true(COMMA_FLAG,yyval.TOK_flags); } break; case 162: #line 1394 "fortran.y" { def_com_variable(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); } break; case 163: #line 1399 "fortran.y" { def_com_variable(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); } break; case 164: #line 1412 "fortran.y" { if(is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error(yyvsp[-1].line_num, (unsigned)(yyvsp[-1].col_num+strlen(token_name(&yyvsp[-1]))), "trailing comma"); if(f77_namelist) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); } } break; case 166: #line 1425 "fortran.y" { yyval = yyvsp[0]; } break; case 167: #line 1431 "fortran.y" { def_namelist(&(yyvsp[-1]),&(yyvsp[0])); yyval = yyvsp[0]; } break; case 168: #line 1438 "fortran.y" { yyval = yyvsp[-1]; } break; case 169: #line 1444 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 170: #line 1448 "fortran.y" { if(!is_true(COMMA_FLAG,yyvsp[-1].TOK_flags)) syntax_error( yyvsp[0].line_num,yyvsp[0].col_num-1, "missing comma"); yyval.TOK_flags = yyvsp[0].TOK_flags; yyval.line_num = yyvsp[0].line_num; yyval.col_num = yyvsp[0].col_num; yyval.next_token = append_token(yyvsp[-1].next_token,&(yyvsp[0])); } break; case 171: #line 1461 "fortran.y" { /* no comma */ def_namelist_item(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); make_false(COMMA_FLAG,yyval.TOK_flags); } break; case 172: #line 1467 "fortran.y" { /* has comma */ def_namelist_item(&(yyvsp[-1])); primary_id_expr(&(yyvsp[-1]),&(yyval)); make_true(COMMA_FLAG,yyval.TOK_flags); } break; case 177: #line 1484 "fortran.y" { if(f77_attrbased_typedecl) { nonstandard(yyvsp[-3].line_num, yyvsp[-3].col_num,0,0); msg_tail(": attribute-based variable declaration"); } } break; case 178: #line 1492 "fortran.y" { if(f77_attrbased_typedecl) { nonstandard(yyvsp[-3].line_num, yyvsp[-3].col_num,0,0); msg_tail(": attribute-based variable declaration"); } } break; case 187: #line 1516 "fortran.y" { /* turn back on flags turned off by punct */ in_attrbased_typedecl = initial_flag = TRUE; dim_bound_token = yyvsp[-1]; /* save copy of header */ current_dim_bound_list = &dim_bound_token; } break; case 188: #line 1523 "fortran.y" { current_save_attr = TRUE; } break; case 189: #line 1527 "fortran.y" { current_external_attr = TRUE; } break; case 190: #line 1531 "fortran.y" { current_intrinsic_attr = TRUE; } break; case 191: #line 1535 "fortran.y" { current_parameter_attr = TRUE; } break; case 192: #line 1539 "fortran.y" { current_pointer_attr = TRUE; } break; case 193: #line 1543 "fortran.y" { current_target_attr = TRUE; } break; case 194: #line 1547 "fortran.y" { current_allocatable_attr = TRUE; } break; case 195: #line 1554 "fortran.y" { current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } break; case 196: #line 1561 "fortran.y" { current_typesize = yyvsp[0].value.integer; current_len_text = NULL; reset_type_attrs(); #if 0 /* defunct feature */ if(local_wordsize > 0) { /* recognize REAL*2w as DOUBLE PRECISION */ if(current_datatype == type_REAL && yyvsp[0].value.integer == type_size[type_DP]) current_datatype = type_DP; /* recognize COMPLEX*4w as DOUBLE COMPLEX */ if(current_datatype == type_COMPLEX && yyvsp[0].value.integer==type_size[type_DCOMPLEX]) current_datatype = type_DCOMPLEX; } #endif if(f77_typesize || f90_typesize) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,f90_typesize,0); } /* Give hint to lexer to continue taking attrs as keywords despite non-initial position */ if(see_double_colon()) in_attrbased_typedecl = TRUE; } break; case 197: #line 1590 "fortran.y" { /* Treat all KINDs as default */ current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } break; case 198: #line 1599 "fortran.y" { reset_type_attrs(); } break; case 199: #line 1605 "fortran.y" { current_datatype = type_INTEGER; integer_context = TRUE; } break; case 200: #line 1610 "fortran.y" { current_datatype = type_REAL; integer_context = TRUE; } break; case 201: #line 1615 "fortran.y" { current_datatype = type_COMPLEX; integer_context = TRUE; } break; case 202: #line 1620 "fortran.y" { current_datatype = type_LOGICAL; integer_context = TRUE; } break; case 203: #line 1627 "fortran.y" { current_datatype = type_DP; current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); } break; case 204: #line 1634 "fortran.y" { current_datatype = type_DCOMPLEX; current_typesize = size_DEFAULT; current_len_text = NULL; reset_type_attrs(); if(f77_double_complex || f90_double_complex) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,f90_double_complex,0); } } break; case 205: #line 1644 "fortran.y" { current_datatype = type_INTEGER; current_typesize = 1; current_len_text = NULL; reset_type_attrs(); if(f77_byte || f90_byte) nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,f90_byte,0); } break; case 206: #line 1660 "fortran.y" { if(!kind_warning_given) give_kind_warning(&(yyvsp[0])); if(f77_attrbased_typedecl) { nonstandard(yyvsp[0].line_num, yyvsp[0].col_num,0,0); msg_tail(": F90-style declaration"); } } break; case 207: #line 1669 "fortran.y" { int erroneous=FALSE; if( strcmp(hashtab[yyvsp[-2].value.integer].name,"KIND") == 0 ) { if(!kind_warning_given) give_kind_warning(&(yyvsp[-2])); } else { syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "unrecognized keyword"); msg_tail(hashtab[yyvsp[-2].value.integer].name); erroneous=TRUE; } if(!erroneous && f77_attrbased_typedecl) { nonstandard(yyvsp[-2].line_num, yyvsp[-2].col_num,0,0); msg_tail(": F90-style declaration"); } } break; case 208: #line 1691 "fortran.y" { current_datatype = type_STRING; current_typesize = 1; current_len_text = NULL; current_size_is_adjustable = 0; current_size_is_expression = 0; reset_type_attrs(); integer_context = TRUE; len_selector_given = FALSE; } break; case 209: #line 1704 "fortran.y" { current_typesize = yyvsp[0].value.integer; current_size_is_adjustable = yyvsp[0].size_is_adjustable; current_size_is_expression = yyvsp[0].size_is_expression; /* Save length spec text if expression */ if(current_size_is_expression) { if(yyvsp[0].left_token == NULL) current_len_text = new_tree_text(&(yyvsp[0])); else current_len_text = new_tree_text(yyvsp[0].left_token); } else current_len_text = NULL; reset_type_attrs(); /* Give hint to lexer to continue taking attrs as keywords despite non-initial position */ if(see_double_colon()) in_attrbased_typedecl = TRUE; } break; case 210: #line 1727 "fortran.y" { yyval = yyvsp[0]; } break; case 211: #line 1737 "fortran.y" {len_spec_item_count = 0;} break; case 212: #line 1738 "fortran.y" { if( len_selector_given ) { yyval = len_spec_token; /* Recover spec saved below */ /* Store as a parenthesized expr tree */ yyval.left_token = add_tree_node(&(yyvsp[-3]), &len_spec_token, (Token*)NULL); } /* If len_spec_list does not specify a LEN, use the current default values. */ else { yyval.left_token = (Token *)NULL; yyval.value.integer = current_typesize; yyval.size_is_adjustable = current_size_is_adjustable; yyval.size_is_expression = current_size_is_expression; } if(f77_attrbased_typedecl) { nonstandard(yyvsp[-3].line_num, yyvsp[-3].col_num,0,0); msg_tail(": F90-style variable declaration"); } } break; case 213: #line 1767 "fortran.y" { yyval.tclass = '('; /* make it a regular paren */ } break; case 216: #line 1780 "fortran.y" { if( current_parameter_attr) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "PARAMETER lacks initializer"); } } break; case 217: #line 1790 "fortran.y" {integer_context=FALSE;complex_const_allowed=TRUE;} break; case 218: #line 1792 "fortran.y" {integer_context=TRUE;complex_const_allowed=FALSE;} break; case 219: #line 1793 "fortran.y" { if(f77_initializers || f90_initializers) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } primary_id_expr(&(yyvsp[-5]),&(yyvsp[-5])); check_initializer_type(&(yyvsp[-5]),&(yyvsp[-4]),&(yyvsp[-2])); } break; case 220: #line 1807 "fortran.y" {integer_context=FALSE;complex_const_allowed = TRUE;} break; case 221: #line 1809 "fortran.y" { if(current_parameter_attr) def_parameter(&(yyvsp[-3]),&(yyvsp[0]),FALSE); else use_lvalue(&(yyvsp[-3])); if(f77_initializers) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num, 0,0); msg_tail(": F90-style initializer"); } primary_id_expr(&(yyvsp[-3]),&(yyvsp[-3])); check_initializer_type(&(yyvsp[-3]),&(yyvsp[-1]),&(yyvsp[0])); integer_context=TRUE; complex_const_allowed = FALSE; } break; case 222: #line 1829 "fortran.y" { declare_type(&(yyvsp[0]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[0]),(Token *)NULL); } break; case 223: #line 1840 "fortran.y" {integer_context=FALSE;complex_const_allowed=TRUE;} break; case 224: #line 1842 "fortran.y" {integer_context=TRUE;complex_const_allowed=FALSE;} break; case 225: #line 1843 "fortran.y" { declare_type(&(yyvsp[-5]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[-5]),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&(yyvsp[-5])); primary_id_expr(&(yyvsp[-5]),&(yyvsp[-5])); check_initializer_type(&(yyvsp[-5]),&(yyvsp[-4]),&(yyvsp[-2])); } break; case 226: #line 1861 "fortran.y" { declare_type(&(yyvsp[0]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[0]),current_dim_bound_list); } break; case 229: #line 1875 "fortran.y" { if( current_parameter_attr) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "PARAMETER lacks initializer"); } } break; case 230: #line 1883 "fortran.y" {integer_context=FALSE;complex_const_allowed=TRUE;} break; case 231: #line 1885 "fortran.y" {integer_context=TRUE;complex_const_allowed=FALSE;} break; case 232: #line 1886 "fortran.y" { if(f77_initializers || f90_initializers) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } primary_id_expr(&(yyvsp[-5]),&(yyvsp[-5])); check_initializer_type(&(yyvsp[-5]),&(yyvsp[-4]),&(yyvsp[-2])); } break; case 233: #line 1897 "fortran.y" { if(current_parameter_attr) def_parameter(&(yyvsp[-2]),&(yyvsp[0]),FALSE); else use_lvalue(&(yyvsp[-2])); primary_id_expr(&(yyvsp[-2]),&(yyvsp[-2])); if(f77_initializers) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num, 0,0); msg_tail(": F90-style initializer"); } check_initializer_type(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0])); } break; case 234: #line 1911 "fortran.y" { yyvsp[0].size_is_adjustable = current_size_is_adjustable; yyvsp[0].size_is_expression = current_size_is_expression; declare_type(&(yyvsp[0]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[0]),(Token *)NULL); } break; case 235: #line 1921 "fortran.y" { yyvsp[-2].size_is_adjustable = yyvsp[0].size_is_adjustable; yyvsp[-2].size_is_expression = yyvsp[0].size_is_expression; declare_type(&(yyvsp[-2]), current_datatype, yyvsp[0].value.integer, new_tree_text( yyvsp[0].left_token == NULL? &(yyvsp[0]): yyvsp[0].left_token ) ); process_attrs(&(yyvsp[-2]),(Token *)NULL); } break; case 236: #line 1934 "fortran.y" {integer_context=FALSE;complex_const_allowed=TRUE;} break; case 237: #line 1936 "fortran.y" {integer_context=TRUE;complex_const_allowed=FALSE;} break; case 238: #line 1937 "fortran.y" { yyvsp[-5].size_is_adjustable = current_size_is_adjustable; yyvsp[-5].size_is_expression = current_size_is_expression; declare_type(&(yyvsp[-5]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[-5]),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&(yyvsp[-5])); } break; case 239: #line 1953 "fortran.y" {integer_context=FALSE;complex_const_allowed=TRUE;} break; case 240: #line 1955 "fortran.y" {integer_context=TRUE;complex_const_allowed=FALSE;} break; case 241: #line 1956 "fortran.y" { yyvsp[-7].size_is_adjustable = yyvsp[-5].size_is_adjustable; yyvsp[-7].size_is_expression = yyvsp[-5].size_is_expression; declare_type(&(yyvsp[-7]), current_datatype, yyvsp[-5].value.integer, new_tree_text( yyvsp[-5].left_token == NULL? &(yyvsp[-5]): yyvsp[-5].left_token ) ); process_attrs(&(yyvsp[-7]),(Token *)NULL); if(f77_initializers || f90_initializers) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num, f90_initializers,0); msg_tail(": combined type declaration and data-style initializer"); } use_lvalue(&(yyvsp[-7])); } break; case 242: #line 1977 "fortran.y" { yyvsp[0].size_is_adjustable = current_size_is_adjustable; yyvsp[0].size_is_expression = current_size_is_expression; declare_type(&(yyvsp[0]), current_datatype, current_typesize, current_len_text); process_attrs(&(yyvsp[0]),current_dim_bound_list); } break; case 243: #line 1987 "fortran.y" { yyvsp[-2].size_is_adjustable = yyvsp[0].size_is_adjustable; yyvsp[-2].size_is_expression = yyvsp[0].size_is_expression; declare_type(&(yyvsp[-2]), current_datatype, yyvsp[0].value.integer, new_tree_text( yyvsp[0].left_token == NULL? &(yyvsp[0]): yyvsp[0].left_token ) ); process_attrs(&(yyvsp[-2]),current_dim_bound_list); } break; case 244: #line 2003 "fortran.y" {implicit_flag=TRUE;} break; case 245: #line 2007 "fortran.y" { implicit_flag=FALSE; if(implicit_none) { syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "conflicts with IMPLICIT NONE"); } else { implicit_type_given = TRUE; } check_f90_stmt_sequence(&(yyvsp[-2]),F90_SEQ_IMPLICIT); } break; case 246: #line 2020 "fortran.y" { implicit_flag=FALSE; if(implicit_type_given) { syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "conflicts with IMPLICIT statement"); } else { if(f77_implicit_none) nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); implicit_none = TRUE; } check_f90_stmt_sequence(&(yyvsp[-2]),F90_SEQ_IMPLICIT_NONE); } break; case 248: #line 2036 "fortran.y" {initial_flag = TRUE;} break; case 250: #line 2042 "fortran.y" {implicit_letter_flag = TRUE;} break; case 251: #line 2043 "fortran.y" {implicit_letter_flag = FALSE;} break; case 254: #line 2051 "fortran.y" { int c1 = (int)yyvsp[0].tsubclass; /* kluge to allow other non-alpha chars: treate anything except _ as $. */ if( !isalpha(c1) && c1 != '_' ) c1 = '$'; if( ((f77_dollarsigns||f90_dollarsigns) && c1=='$') || (f77_underscores && c1=='_') ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num, f90_dollarsigns&&c1=='$',0); msg_tail(": nonalphabetic character"); } set_implicit_type(current_datatype, current_typesize, current_len_text, c1,c1); } break; case 255: #line 2071 "fortran.y" { int c1 = (int)yyvsp[-2].tsubclass, c2 = (int)yyvsp[0].tsubclass; if( !isalpha(c1) && c1 != '_' ) c1 = '$'; if( !isalpha(c2) && c2 != '_' ) c2 = '$'; if( ((f77_dollarsigns||f90_dollarsigns) && (c1 == '$' || c2 == '$')) || (f77_underscores && (c1 == '_' || c2 == '_'))) { if(!isalpha(c1)) nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num, f90_dollarsigns&&(c1=='$'||c2=='$'),0); else nonstandard(yyvsp[0].line_num,yyvsp[0].col_num, f90_dollarsigns&&(c1=='$'||c2=='$'),0); msg_tail(": nonalphabetic character"); } set_implicit_type(current_datatype, current_typesize, current_len_text, c1,c2); } break; case 256: #line 2100 "fortran.y" { yyval.value.integer = yyvsp[0].value.integer; yyval.size_is_adjustable = 0; yyval.size_is_expression = 0; } break; case 257: #line 2107 "fortran.y" { yyval.value.integer = yyvsp[-1].value.integer; yyval.size_is_adjustable = yyvsp[-1].size_is_adjustable; yyval.size_is_expression = yyvsp[-1].size_is_expression; /* Store as a parenthesized expr tree */ yyval.left_token = add_tree_node(&(yyvsp[-2]), &(yyvsp[-1]), (Token*)NULL); } break; case 258: #line 2138 "fortran.y" { ++len_spec_item_count; } break; case 259: #line 2142 "fortran.y" { ++len_spec_item_count; } break; case 260: #line 2148 "fortran.y" { /* Non-keyword form: 1st item is LEN */ if(len_spec_item_count == 0) { len_spec_token = yyvsp[0]; len_selector_given = TRUE; } /* 2nd item is KIND */ else if(len_spec_item_count == 1) { if(!kind_warning_given) give_kind_warning(&(yyvsp[0])); } else if(len_spec_item_count == 2) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "too many specifiers in list"); } } break; case 261: #line 2165 "fortran.y" { int erroneous=FALSE; if( strcmp(hashtab[yyvsp[-2].value.integer].name,"LEN") == 0 ) { len_spec_token = yyvsp[0]; len_selector_given = TRUE; } else if( strcmp(hashtab[yyvsp[-2].value.integer].name,"KIND") == 0 ) { if(!kind_warning_given) give_kind_warning(&(yyvsp[-2])); } else { syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "unrecognized keyword"); msg_tail(hashtab[yyvsp[-2].value.integer].name); erroneous=TRUE; } if(!erroneous && f77_attrbased_typedecl) { nonstandard(yyvsp[-1].line_num, yyvsp[-1].col_num,0,0); msg_tail(": F90-style declaration"); } } break; case 262: #line 2191 "fortran.y" { yyval.left_token = (Token *)NULL; yyval.value.integer = size_ADJUSTABLE; yyval.size_is_adjustable = 1; yyval.size_is_expression = 0; } break; case 263: #line 2198 "fortran.y" { yyval.size_is_adjustable = 0; yyval.size_is_expression = 1; if(yyvsp[0].value.integer <= 0) { if(yyvsp[0].value.integer < 0) { if(misc_warn || f77_char_extension) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "non-negative integer value expected"); msg_tail(": substituting 0"); } yyval.value.integer = 0; } else if(f77_char_extension) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "nonzero integer value expected"); } } } break; case 267: #line 2226 "fortran.y" {param_noparen=TRUE;} break; case 268: #line 2227 "fortran.y" {param_noparen=FALSE;} break; case 269: #line 2228 "fortran.y" { if(f77_param_noparen || f90_param_noparen) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,f90_param_noparen,0); msg_tail(" : PARAMETER declaration without parentheses"); } } break; case 272: #line 2240 "fortran.y" {complex_const_allowed = TRUE;} break; case 273: #line 2242 "fortran.y" { def_parameter(&(yyvsp[-3]),&(yyvsp[0]),param_noparen); primary_id_expr(&(yyvsp[-3]),&(yyvsp[-3])); check_initializer_type(&(yyvsp[-3]),&(yyvsp[-1]),&(yyvsp[0])); complex_const_allowed = FALSE; } break; case 275: #line 2255 "fortran.y" { def_ext_name(&(yyvsp[0])); } break; case 276: #line 2259 "fortran.y" { def_ext_name(&(yyvsp[0])); } break; case 278: #line 2269 "fortran.y" { def_intrins_name(&(yyvsp[0])); } break; case 279: #line 2273 "fortran.y" { def_intrins_name(&(yyvsp[0])); } break; case 280: #line 2280 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); msg_tail(": ALLOCATABLE statement"); } } break; case 281: #line 2290 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); msg_tail(": TARGET statement"); } } break; case 282: #line 2300 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); msg_tail(": POINTER statement"); } } break; case 286: #line 2314 "fortran.y" { apply_attr(&(yyvsp[0]),curr_stmt_class); } break; case 287: #line 2318 "fortran.y" { apply_attr(&(yyvsp[0]),curr_stmt_class); } break; case 288: #line 2327 "fortran.y" { if(f77_cray_pointers || f90_cray_pointers) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,f90_cray_pointers,0); } } break; case 292: #line 2342 "fortran.y" { declare_type(&(yyvsp[0]),type_INTEGER,local_ptrsize, NULL ); } break; case 293: #line 2349 "fortran.y" { /* Suppress set/used warnings since often is accessed only via pointer */ use_lvalue(&(yyvsp[0])); use_variable(&(yyvsp[0])); } break; case 294: #line 2356 "fortran.y" { use_lvalue(&(yyvsp[0])); use_variable(&(yyvsp[0])); } break; case 295: #line 2363 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,0,0); msg_tail(": ALLOCATE statement"); } } break; case 296: #line 2372 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,0,0); msg_tail(": DEALLOCATE statement"); } } break; case 309: #line 2401 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,0,0); msg_tail(": NULLIFY statement"); } } break; case 312: #line 2415 "fortran.y" { global_save = TRUE; } break; case 316: #line 2426 "fortran.y" { apply_attr(&(yyvsp[0]),tok_SAVE); } break; case 317: #line 2430 "fortran.y" { /*** def_com_block(&($2),(Token*)NULL);***/ save_com_block(&(yyvsp[-1])); } break; case 322: #line 2446 "fortran.y" {complex_const_allowed=TRUE;} break; case 323: #line 2448 "fortran.y" {complex_const_allowed=FALSE;} break; case 327: #line 2457 "fortran.y" { use_lvalue(&(yyvsp[0])); } break; case 329: #line 2464 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 330: #line 2468 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 331: #line 2474 "fortran.y" { yyval.left_token = (Token*)NULL; } break; case 332: #line 2478 "fortran.y" { /* Save data repeat factor in a permanent token pointed to by left_token. */ Token *tcopy = new_token(); *tcopy = yyvsp[-2]; /* copy the repeat factor token */ yyval = yyvsp[0]; /* pass data_value up the parse tree */ yyval.left_token = tcopy; } break; case 334: #line 2491 "fortran.y" { use_parameter(&(yyvsp[0])); } break; case 336: #line 2498 "fortran.y" { use_parameter(&(yyvsp[0])); } break; case 339: #line 2509 "fortran.y" { use_lvalue(&(yyvsp[0])); } break; case 341: #line 2517 "fortran.y" { use_implied_do_index(&(yyvsp[-3])); } break; case 344: #line 2528 "fortran.y" {complex_const_allowed = TRUE; in_assignment_stmt = TRUE;} break; case 345: #line 2530 "fortran.y" { if( ! (is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags) || is_true(STMT_FUNCTION_EXPR,yyvsp[-3].TOK_flags) )) { syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num, "left side is not assignable"); if(is_true(CONST_EXPR,yyvsp[-3].TOK_flags)) msg_tail(": it is a constant"); } else { int array_lhs, array_rhs; array_lhs = ((yyvsp[-3].TOK_flags&(ARRAY_ID_EXPR|ARRAY_ELEMENT_EXPR)) == ARRAY_ID_EXPR); array_rhs = ((yyvsp[0].TOK_flags&(ARRAY_ID_EXPR|ARRAY_ELEMENT_EXPR)) == ARRAY_ID_EXPR); if( array_lhs || array_rhs ) { if( (! array_lhs) && misc_warn) { warning(yyvsp[-3].line_num,yyvsp[-3].col_num, "array assigned to scalar"); } else if( f77_assignment ) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,0); msg_tail(": assignment involving whole array"); } } assignment_stmt_type(&(yyvsp[-3]),&(yyvsp[-2]), &(yyvsp[0])); } complex_const_allowed = FALSE; in_assignment_stmt = FALSE; } break; case 346: #line 2562 "fortran.y" { /* Clear u-b-s flags spuriously set */ if(is_true(STMT_FUNCTION_EXPR, yyvsp[-5].TOK_flags) && stmt_sequence_no <= SEQ_STMT_FUN) stmt_function_stmt(&(yyvsp[-5])); } break; case 352: #line 2578 "fortran.y" { if( f77_pointers ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail(": pointer assignment"); } } break; case 353: #line 2589 "fortran.y" { do_ASSIGN(&(yyvsp[-1])); if( f95_assign ) { nonstandard(yyvsp[-5].line_num,yyvsp[-5].col_num,0,f95_assign); msg_tail(": ASSIGN statement"); } ref_label(&(yyvsp[-3]),LAB_ASSIGN); } break; case 354: #line 2604 "fortran.y" { ref_label(&(yyvsp[-1]),LAB_GOTO); } break; case 357: #line 2618 "fortran.y" { do_assigned_GOTO(&(yyvsp[-1])); } break; case 358: #line 2622 "fortran.y" { do_assigned_GOTO(&(yyvsp[-4])); } break; case 359: #line 2626 "fortran.y" { do_assigned_GOTO(&(yyvsp[-5])); } break; case 360: #line 2632 "fortran.y" { integer_context=TRUE; /* Warn if GOTO considered harmful */ if( style_goto ) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "obsolescent feature: GOTO statement"); } } break; case 361: #line 2643 "fortran.y" { ref_label(&(yyvsp[0]), LAB_GOTO); } break; case 362: #line 2647 "fortran.y" { ref_label(&(yyvsp[0]), LAB_GOTO); } break; case 363: #line 2655 "fortran.y" { int t=datatype_of(yyvsp[-9].TOK_type); if(t != type_INTEGER && t != type_REAL && t != type_DP && t != type_ERROR ) { syntax_error(yyvsp[-9].line_num,yyvsp[-9].col_num, "integer, real, or double precision expression required"); } ref_label(&(yyvsp[-7]), LAB_GOTO); ref_label(&(yyvsp[-4]), LAB_GOTO); ref_label(&(yyvsp[-1]), LAB_GOTO); } break; case 364: #line 2671 "fortran.y" { int t=datatype_of(yyvsp[-1].TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error(yyvsp[-1].line_num,yyvsp[-1].col_num, "logical expression required"); } break; case 365: #line 2681 "fortran.y" { int t=datatype_of(yyvsp[-2].TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "logical expression required"); /* In picky mode warn if no name tag on block construct. By this time $1 is the expr, not tok_IF, so line and column must be those saved at lower-level productions. */ if(curr_stmt_name == NULL && style_req_construct_name) { warning(if_line_num,if_col_num, "Construct name missing from IF statement"); } } break; case 366: #line 2700 "fortran.y" { curr_stmt_name = NULL; } break; case 367: #line 2704 "fortran.y" { if(f77_construct_name) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); msg_tail(": IF construct name"); } construct_name_seen=FALSE; yyval = yyvsp[0]; } break; case 368: #line 2714 "fortran.y" {complex_const_allowed = TRUE;} break; case 369: #line 2715 "fortran.y" { if(is_true(ID_EXPR,yyvsp[-1].TOK_flags)){ use_variable(&(yyvsp[-1])); } complex_const_allowed = FALSE; initial_flag = TRUE; /* for is_keyword */ if_line_num = yyvsp[-4].line_num; /* save location */ if_col_num = yyvsp[-4].col_num; /* for picky warnings */ yyval = yyvsp[-1]; /* Inherit expr for type checking above */ } break; case 370: #line 2729 "fortran.y" {complex_const_allowed = TRUE;} break; case 371: #line 2730 "fortran.y" { int t=datatype_of(yyvsp[-1].TOK_type); if(t != type_LOGICAL && t != type_ERROR) syntax_error(yyvsp[-1].line_num,yyvsp[-1].col_num, "logical expression required"); if(is_true(ID_EXPR,yyvsp[-1].TOK_flags)){ use_variable(&(yyvsp[-1])); } complex_const_allowed = FALSE; initial_flag = TRUE; } break; case 373: #line 2748 "fortran.y" { curr_stmt_name = NULL; } break; case 374: #line 2752 "fortran.y" { if(f77_construct_name) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); msg_tail(": IF construct name"); } } break; case 375: #line 2762 "fortran.y" { curr_stmt_name = NULL; } break; case 376: #line 2766 "fortran.y" { if(f77_construct_name) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); msg_tail(": IF construct name"); } } break; case 377: #line 2776 "fortran.y" { curr_stmt_name = NULL; } break; case 378: #line 2780 "fortran.y" { if(f77_construct_name) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); msg_tail(": IF construct name"); } } break; case 379: #line 2796 "fortran.y" {complex_const_allowed = TRUE;} break; case 380: #line 2797 "fortran.y" { int t = datatype_of (yyvsp[-2].TOK_type); if (t != type_ERROR) { if (!is_const_type(t) || is_float_type(t)) { syntax_error(yyvsp[-2].line_num,yyvsp[-2].col_num, "integer, character, or logical expression required"); } } if(is_true(ID_EXPR,yyvsp[-2].TOK_flags)){ use_variable(&(yyvsp[-2])); } complex_const_allowed = FALSE; push_block(&(yyvsp[-5]),yyvsp[-5].tclass,construct,curr_stmt_name,NO_LABEL); } break; case 381: #line 2814 "fortran.y" { curr_stmt_name = NULL; if (f77_case_construct) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); } if( style_req_construct_name ) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "Construct name missing from SELECT statement"); } } break; case 382: #line 2825 "fortran.y" { if (f77_case_construct) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); } yyval = yyvsp[0]; } break; case 389: #line 2846 "fortran.y" { int t1 = datatype_of(yyvsp[-2].TOK_type), t2 = datatype_of(yyvsp[0].TOK_type); if (t1 == type_LOGICAL || t2 == type_LOGICAL) { syntax_error(yyvsp[-1].line_num,yyvsp[-1].col_num, "ranges of type LOGICAL not allowed here"); } if (t1 != t2) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "range boundaries must have the same type"); } } break; case 390: #line 2859 "fortran.y" { int t = datatype_of(yyvsp[0].TOK_type); if (t == type_LOGICAL) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "ranges may not have type LOGICAL bounds"); } } break; case 391: #line 2867 "fortran.y" { int t = datatype_of(yyvsp[0].TOK_type); if (t == type_LOGICAL) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "ranges may not have type LOGICAL bounds"); } } break; case 392: #line 2877 "fortran.y" { int t = datatype_of(yyvsp[0].TOK_type); if (t != type_ERROR) { if (!is_const_type(t) || is_float_type(t)) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "integer, character, or logical expression required"); } } if (!is_true(CONST_EXPR, yyvsp[0].TOK_flags)) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "expression must evaluate to a compile-time constant"); } yyval = yyvsp[0]; } break; case 397: #line 2912 "fortran.y" { if( ! is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags) ) { syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num, "index is not assignable"); if(is_true(CONST_EXPR,yyvsp[-3].TOK_flags)) msg_tail(": it is a constant"); yyval.value.integer = -1; /* no hash entry */ } else { def_do_variable(&(yyvsp[-3])); /* Store hash index of DO index in token for use when pushing block on stack. The value field is not used by keywords, so it is OK to use it this way. */ yyval.value.integer = yyvsp[-3].value.integer; } /* Check for non-integer DO index or bounds */ if(datatype_of(yyvsp[-3].TOK_type) == type_INTEGER && datatype_of(yyvsp[-1].TOK_type) != type_INTEGER) { if( f95_real_do ) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,f95_real_do); msg_tail(": DO loop bounds not integer"); } else if(misc_warn) { warning(yyvsp[-2].line_num,yyvsp[-2].col_num, "type mismatch between DO index and bounds"); } } else if(datatype_of(yyvsp[-3].TOK_type) != type_INTEGER) { if( f95_real_do ) { nonstandard(yyvsp[-3].line_num,yyvsp[-3].col_num,0,f95_real_do); msg_tail(": DO index is not integer"); } else if(datatype_of(yyvsp[-1].TOK_type) != type_INTEGER) { if(port_real_do) nonportable(yyvsp[-1].line_num,yyvsp[-1].col_num, "non-integer DO loop"); } else { if(trunc_real_do_index) { warning(yyvsp[-3].line_num,yyvsp[-3].col_num, "DO index is not integer"); } } } } break; case 398: #line 2960 "fortran.y" {complex_const_allowed=TRUE;} break; case 399: #line 2961 "fortran.y" { if(is_true(ID_EXPR,yyvsp[-2].TOK_flags)){ use_variable(&(yyvsp[-2])); } complex_const_allowed=FALSE; make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags); yyval.value.integer = -1; /* no DO index */ curr_stmt_name = NULL; } break; case 400: #line 2974 "fortran.y" {complex_const_allowed=TRUE;} break; case 401: #line 2975 "fortran.y" { if(is_true(ID_EXPR,yyvsp[-2].TOK_flags)){ use_variable(&(yyvsp[-2])); } complex_const_allowed=FALSE; make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags); yyval.value.integer = -1; /* no DO index */ } break; case 402: #line 2984 "fortran.y" { make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags); yyval.value.integer = -1; /* no DO index */ } break; case 403: #line 2991 "fortran.y" { /* In picky mode warn if no name tag on block construct. */ if( style_req_construct_name ) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "Construct name missing from DO statement"); } curr_stmt_name = NULL; } break; case 404: #line 3000 "fortran.y" { if(f77_construct_name) { nonstandard(yyvsp[-1].line_num,yyvsp[-1].col_num,0,0); msg_tail(": DO construct name"); } construct_name_seen=FALSE; yyval = yyvsp[0]; } break; case 405: #line 3011 "fortran.y" { ref_label(&(yyvsp[0]), LAB_DO); def_do_label(&(yyvsp[0])); /* Save label in subclass for push_block */ yyval.tsubclass = yyvsp[0].value.integer; } break; case 406: #line 3018 "fortran.y" { ref_label(&(yyvsp[-1]), LAB_DO); def_do_label(&(yyvsp[-1])); yyval.tsubclass = yyvsp[-1].value.integer; } break; case 407: #line 3024 "fortran.y" { make_true(NONSTD_USAGE_FLAG,yyval.TOK_flags); integer_context=FALSE; yyval.tsubclass = (long)NO_LABEL; } break; case 408: #line 3032 "fortran.y" { yyval.TOK_type=do_bounds_type(&(yyvsp[-2]),&(yyvsp[0]),&(yyvsp[0])); } break; case 409: #line 3036 "fortran.y" { yyval.TOK_type=do_bounds_type(&(yyvsp[-4]),&(yyvsp[-2]),&(yyvsp[0])); } break; case 410: #line 3042 "fortran.y" { curr_stmt_name = NULL; } break; case 413: #line 3055 "fortran.y" { if( f77_cycle_exit ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail(": CYCLE statement"); } } break; case 414: #line 3062 "fortran.y" { if( f77_cycle_exit ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail(": EXIT statement"); } } break; case 420: #line 3084 "fortran.y" { if( f95_pause ) { nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,0,f95_pause); msg_tail(": PAUSE statement"); } } break; case 423: #line 3095 "fortran.y" { use_variable(&(yyvsp[0])); } break; case 425: #line 3103 "fortran.y" {complex_const_allowed = FALSE;} break; case 427: #line 3105 "fortran.y" {complex_const_allowed = FALSE;} break; case 429: #line 3108 "fortran.y" {init_io_ctrl_list();} break; case 430: #line 3110 "fortran.y" {complex_const_allowed = TRUE;} break; case 434: #line 3121 "fortran.y" { record_default_io(); } break; case 435: #line 3125 "fortran.y" { record_default_io(); } break; case 436: #line 3129 "fortran.y" {init_io_ctrl_list();} break; case 437: #line 3133 "fortran.y" { if(f77_accept_type || f90_accept_type) nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,f90_accept_type,0); record_default_io(); } break; case 438: #line 3139 "fortran.y" { if(f77_accept_type || f90_accept_type) nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,f90_accept_type,0); record_default_io(); } break; case 439: #line 3148 "fortran.y" { record_default_io(); } break; case 440: #line 3152 "fortran.y" {complex_const_allowed = TRUE;} break; case 441: #line 3153 "fortran.y" {complex_const_allowed = FALSE;} break; case 442: #line 3154 "fortran.y" { record_default_io(); } break; case 443: #line 3160 "fortran.y" { if(f77_accept_type || f90_accept_type) nonstandard(yyvsp[-2].line_num,yyvsp[-2].col_num,f90_accept_type,0); record_default_io(); } break; case 444: #line 3166 "fortran.y" {complex_const_allowed = TRUE;} break; case 445: #line 3167 "fortran.y" {complex_const_allowed = FALSE;} break; case 446: #line 3168 "fortran.y" { if(f77_accept_type || f90_accept_type) nonstandard(yyvsp[-6].line_num,yyvsp[-6].col_num,f90_accept_type,0); record_default_io(); } break; case 447: #line 3177 "fortran.y" { ++control_item_count; } break; case 448: #line 3181 "fortran.y" { ++control_item_count; if(! io_warning_given) { if( io_internal_file ) { if( (curr_stmt_class == tok_WRITE || curr_stmt_class == tok_READ) && io_list_directed ) { if(f77_internal_list_io) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail(": internal file cannot be used with list-directed I/O"); } io_warning_given = TRUE; } } } } break; case 449: #line 3203 "fortran.y" { use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class); } break; case 450: #line 3207 "fortran.y" { if(control_item_count == 0) /* unit id */ { /* Handle special cases */ if( datatype_of(yyvsp[0].TOK_type) == type_STRING ) { /* unit id=char variable is an internal file. I/O goes in and out of the variable. */ if( is_true(ID_EXPR,yyvsp[0].TOK_flags) ) { io_internal_file = TRUE; if(curr_stmt_class == tok_WRITE) { use_lvalue(&(yyvsp[0])); } } else { /* internal unit must be a variable */ syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "internal file must be a variable"); } } else { /* Otherwise it is a normal external file unit id */ record_io_unit_id(&yyvsp[0]); } } else if(control_item_count == 1) /* format id */ { if( yyvsp[0].tclass == '*' ) { io_list_directed = TRUE; } else if( is_true(ID_EXPR,yyvsp[0].TOK_flags)){ if(datatype_of(yyvsp[0].TOK_type) == type_NAMELIST) { ref_namelist(&(yyvsp[0]),curr_stmt_class); } else /* format id=integer variable is assigned format */ if( datatype_of(yyvsp[0].TOK_type) == type_INTEGER) { if( f95_assign ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,f95_assign); msg_tail(": assigned format"); } } } /* An integer at this point is a format label */ else if ( is_true(LIT_CONST,yyvsp[0].TOK_flags) && yyvsp[0].TOK_type == type_byte(class_VAR,type_INTEGER)) { ref_label(&(yyvsp[0]),LAB_IO); } current_io_form = IO_FORM_FORMATTED; } /* Handle use of variable */ if( is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } } break; case 451: #line 3270 "fortran.y" { if( yyvsp[0].tclass != '*' && is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } if(control_item_count == 0) { record_io_unit_id(&(yyvsp[0])); } ++control_item_count; } break; case 452: #line 3282 "fortran.y" { use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class); ++control_item_count; } break; case 453: #line 3287 "fortran.y" { ++control_item_count; } break; case 454: #line 3293 "fortran.y" { use_io_keyword(&(yyvsp[-2]),&(yyvsp[0]),curr_stmt_class); } break; case 455: #line 3297 "fortran.y" { use_special_open_keywd(&(yyvsp[0])); } break; case 458: #line 3308 "fortran.y" { if( curr_stmt_class == tok_READ || curr_stmt_class == tok_ACCEPT ) { /* Input */ if(is_true(LVALUE_EXPR,yyvsp[0].TOK_flags)) { use_lvalue(&(yyvsp[0])); } else { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "item is not assignable"); /* Give hint if it is a parameter */ if(is_true(ID_EXPR,yyvsp[0].TOK_flags) && is_true(CONST_EXPR,yyvsp[0].TOK_flags)) msg_tail(": it is a constant"); } } else { /* Output */ if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } } } break; case 460: #line 3334 "fortran.y" { if( ! is_true(LVALUE_EXPR,yyvsp[-3].TOK_flags) ) { syntax_error(yyvsp[-3].line_num,yyvsp[-3].col_num, "index is not assignable"); if(is_true(CONST_EXPR,yyvsp[-3].TOK_flags)) msg_tail(": it is a constant"); } else { use_implied_do_index(&(yyvsp[-3])); } } break; case 461: #line 3348 "fortran.y" {init_io_ctrl_list();} break; case 463: #line 3353 "fortran.y" {init_io_ctrl_list();} break; case 465: #line 3358 "fortran.y" {init_io_ctrl_list();} break; case 467: #line 3364 "fortran.y" { if( yyvsp[-1].tclass != '*' && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){ use_variable(&(yyvsp[-1])); } record_io_unit_id(&yyvsp[-1]); } break; case 469: #line 3373 "fortran.y" {init_io_ctrl_list();} break; case 470: #line 3378 "fortran.y" { if( yyvsp[-1].tclass != '*' && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){ use_variable(&(yyvsp[-1])); } record_io_unit_id(&yyvsp[-1]); } break; case 472: #line 3387 "fortran.y" {init_io_ctrl_list();} break; case 473: #line 3392 "fortran.y" { if( yyvsp[-1].tclass != '*' && is_true(ID_EXPR,yyvsp[-1].TOK_flags)){ use_variable(&(yyvsp[-1])); } record_io_unit_id(&yyvsp[-1]); } break; case 475: #line 3401 "fortran.y" {init_io_ctrl_list();} break; case 478: #line 3415 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); /* If integer, format_id is assigned format */ if( datatype_of(yyvsp[0].TOK_type) == type_INTEGER ) { if( f95_assign ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,f95_assign); msg_tail(": assigned format"); } } } /* A format label appears here as integer const */ else if(is_true(LIT_CONST,yyvsp[0].TOK_flags) && yyvsp[0].TOK_type == type_byte(class_VAR,type_INTEGER)){ ref_label(&(yyvsp[0]),LAB_IO); } } break; case 480: #line 3436 "fortran.y" {inside_format=TRUE;} break; case 481: #line 3437 "fortran.y" { inside_format=FALSE; } break; case 492: #line 3463 "fortran.y" { if( f95_Hedit ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,f95_Hedit); msg_tail(": H edit descriptor"); } } break; case 500: #line 3479 "fortran.y" { if(f77_format_dollarsigns || f90_format_dollarsigns) nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,f90_format_dollarsigns,0); } break; case 505: #line 3494 "fortran.y" {inside_format=FALSE;} break; case 506: #line 3495 "fortran.y" {inside_format=TRUE;} break; case 507: #line 3496 "fortran.y" { if(f77_variable_format || f90_variable_format) nonstandard(yyvsp[-4].line_num,yyvsp[-4].col_num,f90_variable_format,0); } break; case 508: #line 3505 "fortran.y" { check_stmt_sequence(&(yyvsp[-3]),SEQ_STMT_FUN); check_f90_stmt_sequence(&(yyvsp[-3]),F90_SEQ_SPECIF); def_stmt_function(&(yyvsp[-3]),&(yyvsp[-1])); /* make token info */ primary_id_expr(&(yyvsp[-3]),&(yyval)); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("stmt function",&(yyvsp[-1])); #endif } break; case 509: #line 3520 "fortran.y" { yyval.next_token = (Token*)NULL; } break; case 511: #line 3527 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 512: #line 3532 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 514: #line 3542 "fortran.y" { call_subr(&(yyvsp[0]),(Token*)NULL); complex_const_allowed = FALSE; } break; case 516: #line 3548 "fortran.y" { call_subr(&(yyvsp[-2]),(Token*)NULL); complex_const_allowed = FALSE; } break; case 518: #line 3554 "fortran.y" { call_subr(&(yyvsp[-3]),&(yyvsp[-1])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("call stmt",&(yyvsp[-1])); #endif complex_const_allowed = FALSE; } break; case 520: #line 3565 "fortran.y" { complex_const_allowed = TRUE; yyval = yyvsp[0]; } break; case 521: #line 3571 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); yyval.left_token = (Token *)NULL; } break; case 522: #line 3576 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 523: #line 3582 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_actual_arg(&(yyvsp[0])); use_variable(&(yyvsp[0])); } } break; case 524: #line 3589 "fortran.y" { ref_label(&(yyvsp[0]), LAB_CALL); yyval = yyvsp[0]; yyval.left_token = (Token *)NULL; } break; case 525: #line 3598 "fortran.y" { (void)do_RETURN(current_module_hash,&(yyvsp[-1])); } break; case 526: #line 3602 "fortran.y" { if( do_RETURN(current_module_hash,&(yyvsp[-2])) ) { /* Warn if alternate return value is a constant that is not between 0 and the number of labels that are dummy-arguments. */ if( pretty_alt_return && (is_true(EVALUATED_EXPR,yyvsp[-1].TOK_flags) && (yyvsp[-1].value.integer < 1 || yyvsp[-1].value.integer > label_dummy_arg_count)) ){ warning(yyvsp[-1].line_num,yyvsp[-1].col_num, "alternate return value"); msg_tail(ulongtostr(yyvsp[-1].value.integer)); if( yyvsp[-1].value.integer < 0 ) { msg_tail("is negative"); } else { msg_tail("exceeds"); msg_tail(ulongtostr(label_dummy_arg_count)); msg_tail("= number of alternative return points"); } } else { /* Style warning is under goto rubric */ if( style_goto ) { warning(yyvsp[-2].line_num,yyvsp[-2].col_num, "obsolescent feature: alternate return"); } } } } break; case 527: #line 3638 "fortran.y" { /* restore context */ if(!is_true(COMPLEX_FLAG,yyvsp[-3].TOK_flags)) complex_const_allowed=FALSE; if(is_true(IN_ASSIGN,yyvsp[-3].TOK_flags)) in_assignment_stmt = TRUE; /* Change empty arg list to no arg list */ if(yyvsp[-1].next_token == NULL) call_func(&(yyvsp[-3]),(Token *)NULL); else call_func(&(yyvsp[-3]),&(yyvsp[-1])); /* make token info */ func_ref_expr(&(yyvsp[-3]),&(yyvsp[-1]),&(yyval)); /* Substitute empty token for null arglist */ yyval.left_token = add_tree_node( &(yyvsp[-2]),&(yyvsp[-3]), (yyvsp[-1].next_token == NULL? empty_token(&(yyvsp[-1])) : yyvsp[-1].next_token) ); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("function",&(yyvsp[-1])); #endif } break; case 528: #line 3666 "fortran.y" { if(complex_const_allowed)/* save context */ make_true(COMPLEX_FLAG,yyval.TOK_flags); complex_const_allowed=TRUE; if(in_assignment_stmt) make_true(IN_ASSIGN,yyval.TOK_flags); in_assignment_stmt = FALSE; } break; case 529: #line 3676 "fortran.y" { yyval.tclass = 0; yyval.next_token = (Token *)NULL; yyval.left_token = (Token *)NULL; } break; case 531: #line 3685 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); yyval.left_token = (Token *)NULL; } break; case 532: #line 3690 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 533: #line 3699 "fortran.y" { int t=datatype_of(yyvsp[0].TOK_type); if( t != type_ERROR){ if( ! is_const_type(t) ) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "arithmetic, char, or logical expression expected"); } else { if( !is_true(PARAMETER_EXPR,yyvsp[0].TOK_flags) ) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "constant expression expected"); } /* Here we allow, with some warnings, expr containing intrins func or **REAL in PARAMETER defn. */ else if( !is_true(CONST_EXPR,yyvsp[0].TOK_flags) ) { if(f77_param_intrinsic) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail( "intrinsic function or **REAL in PARAMETER defn"); } } } } } break; case 534: #line 3728 "fortran.y" { /* Fix it up in case it is used in expr list */ yyval.next_token = (Token *) NULL; #ifdef DEBUG_PARSER if(debug_parser) { (void)fprintf(list_fd, "\nexpr: class=0x%lx subclass=0x%lx", yyvsp[0].tclass, yyvsp[0].tsubclass); } #endif } break; case 536: #line 3745 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 537: #line 3750 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 539: #line 3759 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 541: #line 3768 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 543: #line 3777 "fortran.y" { do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval)); } break; case 545: #line 3785 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 547: #line 3795 "fortran.y" { do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval)); } break; case 548: #line 3799 "fortran.y" { do_unexpr(&(yyvsp[-1]),&(yyvsp[0]),&(yyval)); } break; case 549: #line 3803 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 550: #line 3808 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 552: #line 3817 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); if(div_check && !is_true(CONST_EXPR,yyvsp[0].TOK_flags)){ warning(yyvsp[-1].line_num,yyvsp[-1].col_num, "Possible division by zero"); } } break; case 553: #line 3827 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 555: #line 3836 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 557: #line 3845 "fortran.y" { do_binexpr(&(yyvsp[-2]),&(yyvsp[-1]),&(yyvsp[0]) ,&(yyval)); } break; case 558: #line 3852 "fortran.y" { make_true(DIM_BOUND_EXPR,yyval.TOK_flags); } break; case 562: #line 3862 "fortran.y" { yyval.TOK_flags = 0; yyval.left_token = (Token *)NULL; make_true(CONST_EXPR,yyval.TOK_flags); make_true(PARAMETER_EXPR,yyval.TOK_flags); make_true(LIT_CONST,yyval.TOK_flags); make_true(EVALUATED_EXPR,yyval.TOK_flags); make_true(DIM_BOUND_EXPR,yyval.TOK_flags); } break; case 563: #line 3872 "fortran.y" { yyval = yyvsp[-1]; /* (identifier) becomes a non-identifier */ if(is_true(LVALUE_EXPR,yyvsp[-1].TOK_flags)) { if(pretty_parens) { ugly_code(yyvsp[-1].line_num,yyvsp[-1].col_num, "Extraneous parentheses"); } use_variable(&(yyvsp[-1])); make_false(LVALUE_EXPR,yyval.TOK_flags); make_false(ARRAY_ID_EXPR,yyval.TOK_flags); make_false(ARRAY_ELEMENT_EXPR,yyval.TOK_flags); make_false(ID_EXPR,yyval.TOK_flags); make_false(DO_VARIABLE,yyval.TOK_flags); } /* (expr) becomes tree node with root = '(' */ yyval.left_token = add_tree_node(&(yyvsp[-2]),&(yyvsp[-1]), (Token*)NULL); } break; case 565: #line 3898 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_STRING); /* (size is set in get_string) */ } break; case 566: #line 3903 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_HOLLERITH); /* (size is set in get_hollerith) */ if(port_hollerith) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "hollerith constant may not be portable"); } } break; case 567: #line 3912 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_LOGICAL); yyval.size = size_DEFAULT; } break; case 568: #line 3919 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_INTEGER); yyval.size = size_DEFAULT; } break; case 569: #line 3924 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_REAL); yyval.size = size_DEFAULT; } break; case 570: #line 3929 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_DP); yyval.size = size_DEFAULT; } break; case 571: #line 3934 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_QUAD); yyval.size = size_QUAD; if(f77_quad_constants || f90_quad_constants) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,f90_quad_constants,0); msg_tail(": quad precision constant"); } } break; case 572: #line 3943 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_COMPLEX); yyval.size = size_DEFAULT; } break; case 573: #line 3948 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_DCOMPLEX); yyval.size = size_DEFAULT; } break; case 574: #line 3956 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER) { syntax_error( yyvsp[0].line_num,yyvsp[0].col_num, "expression must be integer type"); } } break; case 575: #line 3970 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } { int t=datatype_of(yyvsp[0].TOK_type); if(t != type_INTEGER && t != type_REAL && t != type_DP ) { syntax_error( yyvsp[0].line_num,yyvsp[0].col_num, "expression must be integer, real, or double precision type"); } } } break; case 576: #line 3990 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } if( ! is_true(CONST_EXPR,yyvsp[0].TOK_flags) ) { syntax_error( yyvsp[0].line_num,yyvsp[0].col_num, "constant expression expected"); } else { if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER){ syntax_error( yyvsp[0].line_num,yyvsp[0].col_num, "integer expression expected"); } else { yyval.value.integer = int_expr_value(&(yyvsp[0])); } } } break; case 577: #line 4014 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } if(f77_array_bounds) { /* Section 5.1.1.1 */ if( !is_true(DIM_BOUND_EXPR,yyvsp[0].TOK_flags) ) { nonstandard(yyvsp[0].line_num,yyvsp[0].col_num,0,0); msg_tail( ": array bounds expr cannot have array or function reference"); } } if( datatype_of(yyvsp[0].TOK_type) != type_INTEGER ){ syntax_error( yyvsp[0].line_num,yyvsp[0].col_num, "integer dimension expected"); yyval.value.integer = 0; } else { if( is_true(EVALUATED_EXPR,yyvsp[0].TOK_flags) ) yyval.value.integer = int_expr_value(&(yyvsp[0])); else /* must be dummy */ yyval.value.integer = 0; } } break; case 578: #line 4048 "fortran.y" { ref_array(&(yyvsp[-3]),&(yyvsp[-1])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("array lvalue",&(yyvsp[-1])); #endif /* array now becomes scalar */ make_false(ARRAY_ID_EXPR,yyval.TOK_flags); make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags); yyval.left_token = add_tree_node( &(yyvsp[-2]),&(yyvsp[-3]),yyvsp[-1].next_token); yyval.next_token = (Token *) NULL; } break; case 579: #line 4064 "fortran.y" { ref_array(&(yyvsp[-3]),&(yyvsp[-1])); #ifdef DEBUG_PARSER if(debug_parser) print_exprlist("array",&(yyvsp[-1])); #endif /* array now becomes scalar */ make_false(ARRAY_ID_EXPR,yyval.TOK_flags); make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags); yyval.left_token = add_tree_node( &(yyvsp[-2]),&(yyvsp[-3]),yyvsp[-1].next_token); yyval.next_token = (Token *) NULL; } break; case 580: #line 4080 "fortran.y" { yyval.next_token = append_token((Token*)NULL,&(yyvsp[0])); } break; case 581: #line 4084 "fortran.y" { yyval.next_token = append_token(yyvsp[-2].next_token,&(yyvsp[0])); } break; case 582: #line 4090 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } /* check subscript exprs for integer type */ if(datatype_of(yyvsp[0].TOK_type) != type_INTEGER) if(trunc_real_subscript) warning(yyvsp[0].line_num,yyvsp[0].col_num, "subscript is not integer"); } break; case 583: #line 4104 "fortran.y" { /* restore status of complex flag */ if(!is_true(COMPLEX_FLAG,yyvsp[-1].TOK_flags)) complex_const_allowed=FALSE; /* set flag to keep more than just id for arg list text */ if(is_true(ID_EXPR,yyvsp[-1].TOK_flags)) make_true(ARRAY_ELEMENT_EXPR,yyval.TOK_flags); yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0])); yyval.left_token = add_tree_node( &save_token,&(yyvsp[-1]),&(yyvsp[0])); yyval.next_token = (Token *) NULL; } break; case 584: #line 4119 "fortran.y" { yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0])); yyval.left_token = add_tree_node( &save_token,&(yyvsp[-1]),&(yyvsp[0])); yyval.next_token = (Token *) NULL; } break; case 585: #line 4127 "fortran.y" { yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0])); yyval.left_token = add_tree_node( &save_token,&(yyvsp[-1]),&(yyvsp[0])); yyval.next_token = (Token *) NULL; } break; case 586: #line 4136 "fortran.y" { ref_variable(&(yyvsp[-1])); yyval.TOK_flags = yyvsp[-1].TOK_flags; yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0])); } break; case 587: #line 4142 "fortran.y" { yyval.size=substring_size(&(yyvsp[-1]),&(yyvsp[0])); } break; case 588: #line 4151 "fortran.y" { yyval.TOK_start=1; yyval.TOK_end=0; /* 0 means LEN */ save_token = yyvsp[-2]; /* Save the paren for tree node */ yyval.left_token = add_tree_node(&(yyvsp[-1]), empty_token(&(yyvsp[-2])),empty_token(&(yyvsp[0]))); /* Nullify next_token so it looks like a tokenlist */ yyval.next_token = (Token *)NULL; } break; case 589: #line 4165 "fortran.y" { yyval.TOK_start=yyvsp[-2].value.integer; yyval.TOK_end=0; /* 0 means LEN */ save_token = yyvsp[-3]; /* Save the paren for tree node */ yyval.left_token = add_tree_node(&(yyvsp[-1]),&(yyvsp[-2]),empty_token(&(yyvsp[0]))); yyval.next_token = (Token *)NULL; } break; case 590: #line 4175 "fortran.y" { yyval.TOK_start=1; yyval.TOK_end=yyvsp[-1].value.integer; save_token = yyvsp[-3]; /* Save the paren for tree node */ yyval.left_token = add_tree_node(&(yyvsp[-2]),empty_token(&(yyvsp[-3])),&(yyvsp[-1])); yyval.next_token = (Token *)NULL; } break; case 591: #line 4185 "fortran.y" { yyval.TOK_start=yyvsp[-3].value.integer; yyval.TOK_end=yyvsp[-1].value.integer; save_token = yyvsp[-4]; /* Save the paren for tree node */ yyval.left_token = add_tree_node(&(yyvsp[-2]),&(yyvsp[-3]),&(yyvsp[-1])); yyval.next_token = (Token *)NULL; } break; case 592: #line 4197 "fortran.y" { if(is_true(ID_EXPR,yyvsp[0].TOK_flags)){ use_variable(&(yyvsp[0])); } /* check validity and replace nonconst value by size_UNKNOWN. */ if(is_true(CONST_EXPR,yyvsp[0].TOK_flags)) { if( (yyval.value.integer=int_expr_value(&(yyvsp[0]))) < 1) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "invalid substring index"); } } else /* (no longer need ID hash index) */ yyval.value.integer=size_UNKNOWN; } break; case 593: #line 4218 "fortran.y" { ref_variable(&(yyvsp[0])); yyval.TOK_flags = yyvsp[0].TOK_flags; } break; case 595: #line 4226 "fortran.y" { ref_identifier(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); } break; case 596: #line 4233 "fortran.y" { ref_variable(&(yyvsp[0])); primary_id_expr(&(yyvsp[0]),&(yyval)); } break; case 599: #line 4247 "fortran.y" { construct_name_seen=TRUE; /* remember the name for block balancing */ curr_stmt_name = hashtab[yyvsp[-1].value.integer].name; } break; case 600: #line 4255 "fortran.y" { curr_stmt_name = hashtab[yyvsp[0].value.integer].name; } break; case 601: #line 4259 "fortran.y" { curr_stmt_name = hashtab[yyvsp[0].value.integer].name; } break; case 603: #line 4267 "fortran.y" { yyval = yyvsp[0]; } break; case 604: #line 4268 "fortran.y" { yyval = yyvsp[0]; } break; case 605: #line 4270 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_LOGICAL); yyval.size = size_DEFAULT; } break; case 606: #line 4275 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_STRING); yyval.size = size_DEFAULT; } break; case 607: #line 4280 "fortran.y" { yyval.TOK_type = type_byte(class_VAR,type_HOLLERITH); yyval.size = size_DEFAULT; } break; case 608: #line 4291 "fortran.y" { if(yyvsp[0].value.integer == 0) { if(misc_warn) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "nonzero integer expected"); msg_tail(": substituting 1"); } yyval.value.integer = 1; } yyval.left_token = (Token *)NULL; } break; case 609: #line 4311 "fortran.y" { if(yyvsp[0].value.integer <= 0) { if(yyvsp[0].value.integer < 0) { if(misc_warn || f77_char_extension) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "non-negative integer expected"); msg_tail(": substituting 0"); } yyval.value.integer = 0; } else if(f77_char_extension) { warning(yyvsp[0].line_num,yyvsp[0].col_num, "nonzero integer expected"); } } yyval.left_token = (Token *)NULL; } break; case 610: #line 4335 "fortran.y" { integer_context=TRUE; } break; case 611: #line 4342 "fortran.y" { if( yyval.value.integer > 99999 && misc_warn) { syntax_error(yyvsp[0].line_num,yyvsp[0].col_num, "statement label exceeds 5 digits"); } integer_context=FALSE; yyval.TOK_type = type_byte(class_LABEL,type_LABEL); yyval.size = size_DEFAULT; yyval.TOK_flags = 0; } break; } /* Line 1000 of yacc.c. */ #line 6889 "y.tab.c" yyvsp -= yylen; yyssp -= yylen; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if YYERROR_VERBOSE yyn = yypact[yystate]; if (YYPACT_NINF < yyn && yyn < YYLAST) { YYSIZE_T yysize = 0; int yytype = YYTRANSLATE (yychar); const char* yyprefix; char *yymsg; int yyx; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 0; yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); yycount += 1; if (yycount == 5) { yysize = 0; break; } } yysize += (sizeof ("syntax error, unexpected ") + yystrlen (yytname[yytype])); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) { yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yyp = yystpcpy (yyp, yyprefix); yyp = yystpcpy (yyp, yytname[yyx]); yyprefix = " or "; } } yyerror (yymsg); YYSTACK_FREE (yymsg); } else yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ yyerror ("syntax error"); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* If at end of input, pop the error token, then the rest of the stack, then return failure. */ if (yychar == YYEOF) for (;;) { YYPOPSTACK; if (yyssp == yyss) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[*yyssp], yyvsp); } } else { YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); yydestruct (yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: #ifdef __GNUC__ /* Pacify GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) goto yyerrorlab; #endif yyvsp -= yylen; yyssp -= yylen; yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[yystate], yyvsp); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; YYDPRINTF ((stderr, "Shifting error token, ")); *++yyvsp = yylval; yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*----------------------------------------------. | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: yyerror ("parser stack overflow"); yyresult = 2; /* Fall through. */ #endif yyreturn: #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 4356 "fortran.y" void init_parser(VOID) /* Initialize various flags & counters */ { initial_flag = TRUE; /* set flag for keyword test */ implicit_flag=FALSE; /* clear flags for IMPLICIT stmt */ implicit_letter_flag = FALSE; implicit_type_given = FALSE; implicit_none = FALSE; global_save = FALSE; prev_token_class = EOS; complex_const_allowed = FALSE; stmt_sequence_no = 0; f90_stmt_sequence_no = 0; true_prev_stmt_line_num = 0; { int i; /* Reset *_this_file flags for project files */ for(i=0; ileft_token = add_tree_node(op, expr, (Token*)NULL); } /* Handle binary expressions: link into a tree and propagate type. */ PRIVATE void #if HAVE_STDC do_binexpr(Token *l_expr, Token *op, Token *r_expr, Token *result) #else /* K&R style */ do_binexpr(l_expr,op,r_expr,result) Token *l_expr,*op,*r_expr,*result; #endif /* HAVE_STDC */ { binexpr_type(l_expr,op,r_expr,result); /* Propagate the type */ result->left_token = add_tree_node(op, l_expr, r_expr); } /* Changes a token to empty and replaces src_text by null string, value by 0. Other info (line, col, etc.) unchanged. */ PRIVATE Token * #if HAVE_STDC empty_token(Token *t) #else /* K&R style */ empty_token(t) Token *t; #endif /* HAVE_STDC */ { #ifdef DEBUG_EMPTY_TOKEN static char *nullstring="(empty)"; /* for debugging. */ #else static char *nullstring=""; /* for operation. */ #endif t->tclass = tok_empty; t->tsubclass = 0; t->value.integer = 0; t->left_token = (Token *) NULL; t->src_text = nullstring; return t; } /* Propagate non-integer type if any of DO loop bounds are non-integer. */ PRIVATE int #if HAVE_STDC do_bounds_type(Token *t1, Token *t2, Token *t3) #else /* K&R style */ do_bounds_type(t1,t2,t3) Token *t1, *t2, *t3; #endif /* HAVE_STDC */ { int result_type; if(datatype_of(t1->TOK_type) != type_INTEGER)result_type = t1->TOK_type; else if(datatype_of(t2->TOK_type) != type_INTEGER)result_type = t2->TOK_type; else if(datatype_of(t3->TOK_type) != type_INTEGER)result_type = t3->TOK_type; else result_type = t1->TOK_type; return result_type; } /* Debugging routine: prints the expression list of various productions */ #ifdef DEBUG_PARSER PRIVATE void print_exprlist(s,t) char *s; Token *t; { (void)fprintf(list_fd,"\n%s arglist: ",s); if(t == NULL) (void)fprintf(list_fd,"(empty)"); else { while( (t=t->next_token) != NULL) { fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]); if( is_true(ID_EXPR,t->TOK_flags) ) (void)fprintf(list_fd,"(%s) ",token_name(t)); } } } PRIVATE void print_comlist(s,t) char *s; Token *t; { (void)fprintf(list_fd,"\n%s varlist: ",s); if(t == NULL) (void)fprintf(list_fd,"(empty)"); else { while( (t=t->next_token) != NULL) { fprintf(list_fd,"%s ",type_name[datatype_of(t->TOK_type)]); if( is_true(ID_EXPR,t->TOK_flags) ) (void)fprintf(list_fd,"(%s) ",token_name(t)); } } } #endif /* After having parsed prog_stmt, function_stmt, subroutine_stmt, block_data_stmt, the stmt_sequence_no is set to the value SEQ_HEADER. */ void #if HAVE_STDC check_seq_header(Token *t) #else /* K&R style */ check_seq_header(t) Token *t; #endif /* HAVE_STDC */ { if(stmt_sequence_no >= SEQ_HEADER) { syntax_error( (t == (Token *) NULL? line_num: t->line_num), NO_COL_NUM, "missing END statement inserted"); msg_tail( (t == (Token *) NULL? "at end of file": "prior to statement") ); if( t != (Token *) NULL ) pop_block(t,tok_END,(char *)NULL,NO_LABEL); END_processing(t); } stmt_sequence_no = SEQ_HEADER; f90_stmt_sequence_no = F90_SEQ_HEADER; } PRIVATE void #if HAVE_STDC check_stmt_sequence(Token *t, int seq_num) #else /* K&R style */ check_stmt_sequence(t,seq_num) Token *t; int seq_num; #endif /* HAVE_STDC */ { if(stmt_sequence_no > seq_num) { if(f77_stmt_order) { nonstandard(t->line_num, NO_COL_NUM,0,0); msg_tail(": Statement out of order."); } } /* If no error, sequence number is updated to new value. If error, it is rolled back to prevent cascades of error messages. */ stmt_sequence_no = seq_num; } PRIVATE void #if HAVE_STDC check_f90_stmt_sequence(Token *t, int f90_seq_num) #else /* K&R style */ check_f90_stmt_sequence(t,f90_seq_num) Token *t; int f90_seq_num; #endif /* HAVE_STDC */ { if(f90_stmt_sequence_no > f90_seq_num) { if(f90_stmt_order) { nonstandard(t->line_num, NO_COL_NUM,f90_stmt_order,0); msg_tail(": Statement out of order."); } } /* If no error, sequence number is updated to new value. If error, it is rolled back to prevent cascades of error messages. */ f90_stmt_sequence_no = f90_seq_num; } PRIVATE void init_io_ctrl_list(VOID) { control_item_count = 0; io_internal_file = FALSE; io_list_directed = FALSE; io_warning_given = FALSE; current_io_unit_no = IO_UNIT_UNKNOWN; current_io_unit_id = IO_UNIT_UNKNOWN; current_io_access = IO_ACCESS_DEFAULT; current_io_form = IO_FORM_DEFAULT; } /* Remember the name or number of unit_id for current I/O stmt. This routine is only called by parser productions that have a bare unit_id, so less checking is done than for unit=unit_id specifiers that can refer to other than external files. */ void record_io_unit_id(Token *id) { if( id->tclass == '*' ) { current_io_unit_id = IO_UNIT_DEFAULT; } else if( is_true(ID_EXPR,id->TOK_flags)){ current_io_unit_id = id->value.integer; /* get hash code of identifier */ } else if( is_true(LIT_CONST,id->TOK_flags) && id->TOK_type == type_byte(class_VAR,type_INTEGER)) { current_io_unit_no = id->value.integer; /* get literal int value */ } } /* Set I/O usage parameters for default formatted sequential I/O statement like READ *, X */ PRIVATE void record_default_io(VOID) { current_io_unit_no = IO_UNIT_UNKNOWN; current_io_unit_id = IO_UNIT_DEFAULT; current_io_access = IO_ACCESS_SEQUENTIAL; current_io_form = IO_FORM_FORMATTED; } /* This routine applies the attributes of attr-based type declaration. Set dim_bounds to current_dim_bound_list or to NULL if item has its own array bounds declarator. */ PRIVATE void process_attrs(Token *t,Token *dim_bounds) { if(current_external_attr) def_ext_name(t); if(current_intrinsic_attr) def_intrins_name(t); if(current_allocatable_attr) apply_attr(t,tok_ALLOCATABLE); if(current_pointer_attr) apply_attr(t,tok_POINTER); if(current_save_attr) apply_attr(t,tok_SAVE); if(current_target_attr) apply_attr(t,tok_TARGET); if(dim_bounds != NULL) def_array_dim(t,dim_bounds); } /* After having parsed end_stmt, common block lists and subprogram argument lists are copied over into global symbol table, the local symbol table is printed out and then cleared, and stmt_sequence_no is set to zero for start of next module. */ PRIVATE void #if HAVE_STDC END_processing(Token *t) #else /* K&R style */ END_processing(t) Token *t; #endif /* HAVE_STDC */ { ++tot_module_count; if(current_module_hash != -1) { if(exec_stmt_count == 0 && current_module_type != type_BLOCK_DATA) { if(misc_warn) warning(t == (Token *)NULL? line_num: t->line_num, NO_COL_NUM, "Module contains no executable statements"); } if(do_list && t != (Token *)NULL) { (void)flush_end_stmt(t->line_num); } doing_end_proc = TRUE; /* Set flag for special error message mode */ /* Catch things that had to wait till now */ check_loose_ends(current_module_hash); /* Put arg and com lists into global table */ process_lists(current_module_hash); /* Print symbol table for debug */ debug_symtabs(); /* Print local symbol table and do local warnings */ print_loc_symbols(); /* Reset local symbol table */ init_symtab(); doing_end_proc = FALSE; } exec_stmt_count = 0; stmt_sequence_no = 0; f90_stmt_sequence_no = 0; current_module_hash = -1; implicit_type_given = FALSE; implicit_none = FALSE; true_prev_stmt_line_num = 0; integer_context = FALSE; global_save = FALSE; label_dummy_arg_count = 0; num_io_unit_usages = 0; } /* Routine to create a node for an expr tree. Returns a pointer to the newly created node. */ PRIVATE Token * #if HAVE_STDC add_tree_node(Token *node, Token *left, Token *right) #else /* K&R style */ add_tree_node(node,left,right) Token *node,*left,*right; #endif /* HAVE_STDC */ { Token *new_node, *new_left, *new_right; new_node=new_token(); *new_node = *node; /* Make a permanent copy of root */ /* Add the children. If child's left_token pointer is null, then that expression is a primary. Otherwise it is the root node of a subtree. */ if(left->left_token == (Token *)NULL) { new_left=new_token(); *new_left = *left; /* Copy primary to permanent space */ } else { new_left = left->left_token; /* No copying needed in this case */ } if(right == (Token *)NULL) { new_right = (Token *)NULL; /* No right child */ } else if(right->left_token == (Token *)NULL || node->tclass == '(') { /* Paren means right child is expr list */ new_right=new_token(); *new_right = *right; /* Copy primary to permanent space */ } else { new_right = right->left_token; /* No copying needed in this case */ } new_node->left_token = new_left; /* Link children onto the new root */ new_node->next_token = new_right; return new_node; } /* Routine to add token t to the front of a token list. */ PRIVATE Token * #if HAVE_STDC append_token(Token *tlist, Token *t) #else /* K&R style */ append_token(tlist,t) Token *tlist, *t; #endif /* HAVE_STDC */ { Token *tcopy; tcopy=new_token(); *tcopy = *t; /* make permanent copy of token */ tcopy->next_token = tlist; /* link it onto front of list */ return tcopy; /* return it as new tlist */ } /* Routine to pop closing statement of block off the stack. Note: label should be NO_LABEL even if the statement has a label, except for terminal statement of a labeled DO loop. */ PRIVATE void pop_block(Token *t, int stmt_class, char *name, LABEL_t label) { /* Define lookup table for block matches. This table is generated from tokdefs.h by the Perl script make_blockmatch.pl. This script also generates 4 macro definitions that go here. It defines MIN_BLOCK_TOKEN and MAX_BLOCK_TOKEN used to bound range of valid keytok_name arguments for error messages. It also defines MIN_CLOSER and MAX_CLOSER giving the range of token numbers for closing tokens. The array block_match contains the token numbers for the matching openers. Look up the matching opener class as block_match[closer_class-MIN_CLOSER] Plain END is handled specially since it matches many things. Likewise closing labeled-DO range is handled specially. (ENDDO is handled there if loop is labeled, handled with structured block closers otherwise.) */ static int block_match[] = { #include "block_match.h" }; /* Macro for names of all block keyword tokens. Although no error messages should print "identifier" (only occurs as DO terminator, and mismatch is handled specially), include it for possible debug use. Any other token classes in block_stack mean a bug in ftnchek. */ #define TOKEN_NAME(CLASS) ((CLASS)>=MIN_BLOCK_TOKEN && (CLASS)<=MAX_BLOCK_TOKEN? \ keytok_name(CLASS):((CLASS) == tok_identifier?"identifier":"bogus")) /* Define DBG_TOKNAME for debugging. If possible, use yytname to allow for bogus tokens showing up. This works only for bison parser generator. It would be easy to fix up for byacc too if need be. */ #ifdef DEBUG_BLOCKCHECK #ifdef USE_YYTNAME #define DBG_TOKNAME(CLASS) (char *)(yytname[YYTRANSLATE(CLASS)]) #else #define DBG_TOKNAME(CLASS) TOKEN_NAME(CLASS) #endif #endif #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\npopping stmt class %s name %s label %d at line %d", DBG_TOKNAME(stmt_class),name,label,t->line_num); } #endif if(block_depth == 0) { syntax_error(t->line_num,t->col_num,"no construct to end here"); } else { int opener_class, must_check_name=FALSE; BLOCK_TYPE blocktype; --block_depth; opener_class = block_stack[block_depth].sclass; blocktype = block_stack[block_depth].blocktype; #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\n opener was class %s name %s label %d at line %d", DBG_TOKNAME(opener_class), block_stack[block_depth].name, block_stack[block_depth].label, block_stack[block_depth].first_line); } #endif /* DO loop terminator */ if( label != NO_LABEL) { int shared_warning = TRUE; /* Mark DO index variable as inactive */ int h=block_stack[block_depth].do_var_hash; if(h != -1) undef_do_variable(h); if( stmt_class == tok_ENDDO ) { must_check_name = TRUE; } else { /* issue picky warnings if not modern DO construct */ if(style_req_enddo) { warning(t->line_num,t->col_num, "DO loop not terminated by ENDDO"); } else if( stmt_class != tok_CONTINUE ) { if(style_req_do_construct) { warning(t->line_num,t->col_num, "DO loop not terminated by CONTINUE or ENDDO"); } } } if( opener_class != tok_DO ) { syntax_error(t->line_num,t->col_num,keytok_name(opener_class)); msg_tail("block not closed when DO loop terminating statement encountered"); } else if( label != block_stack[block_depth].label ) { syntax_error(t->line_num,t->col_num,"Label"); msg_tail(ulongtostr(label)); msg_tail("on DO loop terminator does not match"); if(block_stack[block_depth].label == NO_LABEL ) { msg_tail("label-less DO statement"); } else { msg_tail("corresponding DO label"); msg_tail(ulongtostr(block_stack[block_depth].label)); } msg_tail("above"); } /* If terminator is shared by other DOs, pop them too */ else { while(block_depth > 0 && label == block_stack[block_depth-1].label) { --block_depth; /* Mark DO index variable as inactive */ { int hh=block_stack[block_depth].do_var_hash; if(hh != -1) undef_do_variable(hh); } #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\n opener was class %s name %s label %d at line %d", DBG_TOKNAME(opener_class), block_stack[block_depth].name, block_stack[block_depth].label, block_stack[block_depth].first_line); } #endif if(style_shared_do_terminator && shared_warning) { warning(t->line_num,t->col_num, "Obsolescent feature: shared DO terminator"); shared_warning = FALSE; /* don't repeat the warning */ } } } } else if( stmt_class == tok_END ) { /* plain END statement */ if(style_req_structured_end) { warning(t->line_num,t->col_num,"Old-style END statement"); } /* Check that END statement ends subprog block */ if(opener_class != tok_SUBROUTINE && opener_class != tok_FUNCTION && opener_class != tok_PROGRAM && opener_class != tok_BLOCKDATA) { syntax_error(t->line_num,t->col_num, "Block not closed when END statement encountered"); } } else { /* structured block closers */ int matching_class; must_check_name = TRUE; /* Look up the correct matching opener class */ if( stmt_class < MIN_CLOSER || stmt_class > MAX_CLOSER || (matching_class = block_match[stmt_class-MIN_CLOSER]) == 0 ) { fprintf(list_fd,"%d=%s ",stmt_class,keytok_name(stmt_class)); oops_message(OOPS_FATAL,t->line_num,t->col_num, "pop_block called for unrecognized closing token"); } else { /* check if opener matches expected */ if( opener_class != matching_class ) { /* If possible, use token names for better error messages */ syntax_error(t->line_num,t->col_num, keytok_name(stmt_class)); msg_tail("statement does not match"); msg_tail(keytok_name(opener_class)); msg_tail("block it closes"); must_check_name = FALSE; /* name mismatch probably bogus here */ } /* If unlabeled END DO of loop with index variable, mark it inactive. */ if( stmt_class == tok_ENDDO ) { int h=block_stack[block_depth].do_var_hash; if(h != -1) undef_do_variable(h); } } } /* Issue syntax error if name missing from a component of a named construct. In picky mode warn if no name tag on structured END. */ if( must_check_name ) { if( name == (char *)NULL ) { if( blocktype == construct ) { /* IF, DO, SELECT */ if( block_stack[block_depth].name != (char *)NULL ) { syntax_error(t->line_num,t->col_num, "Construct name"); msg_tail(block_stack[block_depth].name); msg_tail("missing"); } } else { /* structured END of subprogram */ if(style_req_end_name) { warning(t->line_num,t->col_num, "Name of subprogram missing from"); msg_tail(keytok_name(stmt_class)); msg_tail("statement"); } } } /* Otherwise check name tag if present */ else { /* OK to compare pointers due to name storage method */ if(name != block_stack[block_depth].name) { /* Opener name can only be missing from a construct, but handle subprog case anyway. */ if(block_stack[block_depth].name == (char *)NULL) { syntax_error(t->line_num,t->col_num, "name found on closing statement of unnamed"); msg_tail(blocktype == construct? "construct": "subprogram"); } else { syntax_error(t->line_num,t->col_num, "Name"); msg_tail(name); msg_tail("does not match"); msg_tail(blocktype == construct? "construct": "subprogram"); msg_tail("name"); msg_tail(block_stack[block_depth].name); } } } } } } /* Check CYCLE and EXIT statements for agreement with enclosing DO loop. */ PRIVATE void check_construct_name_match(Token *t, char *name) { /* If no name on statement, it must at least be inside range of a DO. */ if( name == (char *)NULL ) { int depth; for(depth = block_depth-1; depth >= 0; depth--) { if( block_stack[depth].sclass == tok_DO ) return; } syntax_error(t->line_num,t->col_num, "statement not within range of any DO loop"); } /* If name tag present, it must belong to an enclosing DO. */ else { int depth; for(depth = block_depth-1; depth >= 0; depth--) { if( block_stack[depth].sclass == tok_DO && block_stack[depth].name == name ) return; } syntax_error(t->line_num,t->col_num, "construct name"); msg_tail(name); msg_tail("does not match name of any enclosing DO construct"); } } PRIVATE void push_block(Token *t, int stmt_class, BLOCK_TYPE blocktype, char *name, LABEL_t label) { if(block_depth == MAX_BLOCK_DEPTH) { oops_message(OOPS_FATAL,t->line_num,t->col_num, "blocks nested too deeply"); } else { #ifdef DEBUG_BLOCKCHECK if(debug_latest) { fprintf(list_fd,"\npushing stmt class %s name %s label %d at line %d", DBG_TOKNAME(stmt_class),name,label,t->line_num); } #endif /* ELSE and ELSE IF masquerade here as IF, and CASE and CASEDEFAULT as SELECT, to simplify match code in pop_block. */ block_stack[block_depth].sclass = ((stmt_class == tok_ELSE)? tok_IF: ((stmt_class == tok_CASE)? tok_SELECTCASE: stmt_class)); block_stack[block_depth].name = name; block_stack[block_depth].label = label; block_stack[block_depth].first_line = t->line_num; block_stack[block_depth].blocktype = blocktype; block_stack[block_depth].do_var_hash = -1; /* undefined at this time */ ++block_depth; } } PRIVATE void give_kind_warning(Token *t) { warning(t->line_num,t->col_num, "I do not yet support KIND selectors. \ All KINDs are treated as default KIND. \ Checking of type agreement may be incorrect as a result. \ (This message is only given once.)"); kind_warning_given = TRUE; } ftnchek-3.3.1/ftnchek.c0000644000031000002260000005512110164602435015351 0ustar moniotstaff00000000000000/* $Id: ftnchek.c,v 1.47 2004/12/29 19:27:25 moniot Exp $ Main program for Fortran Syntax Checker. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Top-level input/output is done here: opening and closing files, and printing error, warning, and informational messages. Shared functions defined: print_a_line() Prints source code line. yyerror() Error messages from yyparse and elsewhere. syntax_error() Error messages with line and column num. warning() Warning messages. nonportable() Portability warnings. wrapup() Look at cross references, etc. */ #include #include #if HAVE_STRINGS_H #include /* we use strncasecmp */ #endif #include #ifdef DEVELOPMENT /* For maintaining the program */ #define DEBUG_SIZES #endif #define MAIN #include "ftnchek.h" #include "intrins.h" #include "options.h" #include "utils.h" /* we use strncasecmp */ #ifdef VMS #define unlink(s) remove(s) #else #if HAVE_UNISTD_H #include #else #ifndef __LCC__ /* The LCC compiler doesn't like the following defn. */ PROTO( int unlink,( const char *pathname ) ); #endif #endif #endif #ifdef USE_SHELL_MUNG PROTO( int shell_mung, (int * argc_p, char *** argv_p, int parameter_number, char * option_string)); #endif PROTO(PRIVATE char * append_extension,( char *s, const char *ext, int mode )); PROTO(PRIVATE void error_summary,( char *fname )); PROTO(int main,( int argc, char *argv[] )); PROTO(PRIVATE char * new_ext,( char *s, const char *ext )); PROTO(PRIVATE void open_outfile,( char *s )); PROTO(PRIVATE void do_preps,( void )); #ifdef DEBUG_SIZES PROTO(extern void print_sizeofs,( void )); /* in symtab.c */ #endif PROTO(PRIVATE void print_version_number,( void )); PROTO(PRIVATE void resource_summary,( void )); PROTO(PRIVATE void src_file_in,( char *infile )); PROTO(PRIVATE void wrapup,( void )); PRIVATE int project_file_input; /* true if input is from .prj file */ #ifdef DEBUG_SIZES PRIVATE unsigned long intrins_clashes; #endif /* count of intrinsic hashtable clashes */ #ifdef COUNT_REHASHES extern unsigned long rehash_count; /* count of calls to rehash() */ #endif PRIVATE int checks_on=TRUE; /* Keep track whether -nocheck was given */ PRIVATE char *dclfile; int #if HAVE_STDC main(int argc, char **argv) #else /* K&R style */ main(argc,argv) int argc; char *argv[]; #endif /* HAVE_STDC */ { int iarg; int filecount=0; char *infile,*srcfile,*projfile; /* The shell_mung routine from GNU can be used to expand wildcards etc. for VMS. */ #ifdef USE_SHELL_MUNG shell_mung(&argc,&argv,1,NULL); #endif #ifdef __EMX__ /* MSDOS and OS/2 emx version: expand wildcards */ /* by Michael.Taeschner@dlr.de */ _wildcard(&argc,&argv); #endif list_fd = stdout; project_fd = (FILE *) NULL; error_count = 0; warning_count = 0; include_path_list = (IncludePathNode*) NULL; doing_wrapup = doing_end_proc = FALSE; get_env_options(); /* Pick up options from environment */ get_rc_options(); /* Pick up options from "rc" file */ init_tables(); /* Initialize tables */ init_keyhashtab(); #ifdef DEBUG_SIZES intrins_clashes = #else (void) #endif init_intrins_hashtab(); init_globals(); init_symtab(); for(iarg=1; iarg < argc; iarg++) { int argchar=0;/* location of start of option */ /* Note to maintainer: since the /option version has a loop here instead of an if, do not use continue but goto next_arg for skipping to the next argument. This is a mess, isn't it? */ #ifdef OPTION_PREFIX_SLASH do { /* loop on flags within argv[iarg] */ #endif if( argv[iarg][argchar] == '-' #ifdef OPTION_PREFIX_SLASH || argv[iarg][argchar] == '/' /* Allow VMS /option form */ #endif ) { /* Process flags here */ set_option(&argv[iarg][argchar],"commandline"); /* Handle -version, -help, or -f77=help */ if(print_version) goto do_action; if(help_screen) goto do_action; /* Allow checking to be turned off */ if( !do_check && checks_on ) { turn_off_checks(); checks_on = FALSE; /* remember it was done */ } } else if(strcmp(&argv[iarg][argchar],"?") == 0) { help_screen = TRUE; goto do_action; }/*end of processing options*/ else { /* Process file arguments */ do_action: if( must_open_outfile ) open_outfile(out_fname); if(actioncount == 0) { print_version_number(); } ++actioncount; /* Cause exit w/o reading stdin below */ /* Honor -version, -help and -f77=help options */ if(print_version) { print_version = FALSE; goto next_arg; } if(help_screen) { help_screen = FALSE; list_options(list_fd); } else { /* Process files here */ if(filecount == 0) do_preps(); /* Any preparations needed before processing */ ++filecount; srcfile = add_ext(&argv[iarg][argchar],DEF_SRC_EXTENSION); projfile = new_ext(&argv[iarg][argchar],DEF_PROJ_EXTENSION); dclfile = new_ext(&argv[iarg][argchar],DEF_DCL_EXTENSION); html_filename = new_ext(&argv[iarg][argchar],DEF_HTML_EXTENSION); #ifdef VCG_SUPPORT /* Initialize main_filename to 1st file arg */ if(main_filename == (char *)NULL) main_filename = argv[iarg]; #endif /* Project file mode: open source for reading and .prj file for writing. */ if(make_project_file) { infile = srcfile; if( has_extension(infile,DEF_PROJ_EXTENSION) ) { (void)fprintf(stderr, "Input from %s disallowed in project mode\n",infile); goto next_arg; } if( (input_fd = fopen(infile,"r")) == (FILE *)NULL ) { (void)fprintf(stderr,"Cannot open file %s\n",infile); goto next_arg; } project_fd = fopen(projfile,"w"); project_file_input = FALSE; } else { /* Non project file mode: if input file extension given, use it. Otherwise read project file if it exists else read source file. */ if( &argv[iarg][argchar]==srcfile || (input_fd = fopen(projfile,"r")) == (FILE *)NULL) { infile = srcfile; if( (input_fd = fopen(infile,"r")) == (FILE *)NULL ) { (void)fflush(list_fd); (void)fprintf(stderr,"Cannot open file %s\n",infile); goto next_arg; } project_file_input = has_extension(infile,DEF_PROJ_EXTENSION); } else { infile = projfile; project_file_input = TRUE; } } /* now that we have a source file, try to open the declaration file */ dcl_fd = (ANY_DCL_DECLARATIONS() && ! project_file_input) ? fopen(dclfile,"w") : (FILE*)NULL; /* Create html tree file if requested */ if ( ANY_HTML_DECLARATIONS() && htmlcalltree_filename == NULL && print_call_tree && ! project_file_input ) { /* * for lack of a better place, create CallTree.html in the * local directory */ htmlcalltree_filename = "CallTree.html"; htmlcalltree_fd = fopen( htmlcalltree_filename, "w" ); (void)fprintf( htmlcalltree_fd, "\nProgram Call Tree\n\n

" );
                        }
                     
                    /* Create an html output file if requested */
                    html_fd = ( ANY_HTML_DECLARATIONS() && ! project_file_input ) ?
                       fopen( html_filename, "w" ) : (FILE *)NULL;
                    if ( html_fd )
                       fprintf( html_fd, 
                          "\nSource %s\n\n",
                          srcfile );                        

				/* Always print input .f file name.  If
				   verbose mode, print .prj file names too.
				 */
		    if(!quiet || !project_file_input)
		      (void)fprintf(list_fd,"\nFile %s:%s",
			      infile,
			      full_output?"\n":""
			      );

				/* In verbose mode, print .prj output
				   file name to stderr.  Always print
				   error message if couldn't open it. */
		    if( make_project_file ) {
		      if(project_fd != (FILE *)NULL) {
			if(!quiet) {
			  (void)fflush(list_fd);
			  (void)fprintf(stderr,
				  "\nProject file is %s\n",projfile);
			}
		      }
		      else {
			(void)fflush(list_fd);
			(void)fprintf(stderr,
				"\nCannot open %s for output\n",projfile);
		      }
		    }


		    if(project_file_input) {

		        current_filename = projfile;
			proj_file_in(input_fd);

		    }
		    else {

		      src_file_in(infile);

		    }

		}/*end processing file args*/
	      }
next_arg:
#ifdef OPTION_PREFIX_SLASH
				/* Here we allow /opts to be stuck together */
	    while(argv[iarg][++argchar] != '\0'
		 && argv[iarg][argchar] != '/') /* look for next opt */
	      continue;

	  } while(argv[iarg][argchar] != '\0'); /*end do-while*/
#else
	  continue;
#endif
	}	/* end for-loop on argument list */


				/* No files given: read stdin */
	if(actioncount == 0) {

		print_version_number();

		if( must_open_outfile )
		    open_outfile(out_fname);

		do_preps();	/* Any preparations needed before processing */

		if(make_project_file) {
		      projfile = STDIN_PROJ_FILENAME;
		      if( (project_fd = fopen(projfile,"w")) == (FILE *)NULL) {
			(void)fflush(list_fd);
			(void)fprintf(stderr,
				"\nCannot open %s for output\n",projfile);
		      }
		      else {
			if(!quiet) {
			  (void)fflush(list_fd);
			  (void)fprintf(stderr,
				"\nProject file is %s\n",projfile);
			}
		      }
		}

		++filecount;
		input_fd = stdin;

		src_file_in("std_input");
	}
	if(filecount > 0) {
	  wrapup();
	  (void)fprintf(list_fd,"\n");
	}

	if(show_resources)
	    resource_summary();

	exit(0);
	return 0;/*NOTREACHED*/
}

				/* do_preps does anything necessary prior
				   to processing 1st file, such as setting
				   the intrinsic function options.  It is
				   only called once.
				*/
PRIVATE void
do_preps(VOID)
{

  init_typesizes();	/* Put -wordsize and -pointersize into effect */

#ifndef STANDARD_INTRINSICS
  set_intrinsic_options(); /* Make intrinsic table match -intrinsic setting */
#endif
}

PRIVATE void
#if HAVE_STDC
src_file_in(char *infile)
                  		/* input filename */
#else /* K&R style */
src_file_in(infile)
     char *infile;		/* input filename */
#endif /* HAVE_STDC */
{
	note_filename(infile);

	make_legal_char_list();
	init_scan();
	init_parser();

	(void) yyparse();

	finish_scan();

	if(make_project_file) {
		  proj_file_out(project_fd);
		  (void) fclose(project_fd);
	}

        if ( html_fd != (FILE *) NULL )
            {
            fputs( "\n\n", html_fd );
            (void) fclose( html_fd );
            html_fd = NULL;
            }

	if ((dcl_declarations) && (dcl_fd != stdout))
	{

	    if (ftell(dcl_fd) == 0L)	/* delete an empty .dcl file */
            {
              /* some systems like OS/2 lock open files and can't  */
              /* remove an open file unless closed. SAD-10/96      */
	        (void) fclose(dcl_fd);   /* close file */
		(void) unlink(dclfile);
            }
	    else {
	      (void) fclose(dcl_fd);
	    }
	}

	if(port_tabs && (tab_filename != (char *)NULL)) {
	  if(! quiet)
	    (void)fprintf(list_fd,"\n");
	  if(tab_filename != top_filename) {
	    nonportable(NO_LINE_NUM,NO_COL_NUM,
			"Included file");
	    msg_tail(tab_filename);
	  }
	  else {
	    nonportable(NO_LINE_NUM,NO_COL_NUM,
		      "File");
	  }
	  msg_tail("contains tabs");
	}

	error_summary(infile);
}

PRIVATE void
print_version_number(VOID)
{
  if((full_output || !quiet) && !print_version)
    (void)fprintf(list_fd,"\n");
  (void)fprintf(list_fd,"%s",VERSION_NUMBER);
  if(help_screen || print_version)
    (void)fprintf(list_fd," %s",PATCHLEVEL);
  if(full_output || !quiet || print_version)
    (void)fprintf(list_fd,"\n");
}

PRIVATE void
#if HAVE_STDC
error_summary(char *fname)		/* Print out count of errors in file */
#else /* K&R style */
error_summary(fname)		/* Print out count of errors in file */
	char *fname;
#endif /* HAVE_STDC */
{
	FILE *fd = list_fd;

	if(full_output ||
	   (!quiet && error_count+warning_count != 0))
	  (void)fprintf(fd,"\n");

	if(full_output || !quiet || error_count != 0)
	  (void)fprintf(fd,"\n %u syntax error%s detected in file %s",
			error_count, error_count==1? "":"s",
			fname);

	if(warning_count != 0)
		(void)fprintf(fd,"\n %u warning%s issued in file %s",
			warning_count, warning_count==1? "":"s",
			fname);

	if(full_output ||
	   (!quiet && error_count+warning_count != 0))
	  (void)fprintf(fd,"\n");

	error_count = 0;
	warning_count = 0;
}

void
#if HAVE_STDC
print_a_line(FILE *fd, const char *line, LINENO_t num)  /* Print source line with line number */
#else /* K&R style */
print_a_line(fd,line,num)  /* Print source line with line number */
	FILE *fd;
	char *line;
	LINENO_t num;
#endif /* HAVE_STDC */
{
	(void)fprintf(fd,"\n %6u ",num); /* Print line number */

				/* Tab-formatted source lines: tab in
				   col 1-6 moves to col 7. */
	if(source_dec_tab) {
	  int i,col;
	  for(i=0,col=1; col < 7 && line[i] != '\0'; i++) {
	    if(line[i] == '\t') {
	      do{
		(void)fprintf(fd," ");
	      } while(++col < 7);
	    }
	    else {
		(void)fprintf(fd,"%c",line[i]);
		++col;
	    }
	  }
	  (void)fprintf(fd,"%s",line+i);
	}
	else
	  (void)fprintf(fd,"%s",line);
}




PRIVATE void
#if HAVE_STDC
open_outfile(char *s)		/* open the output file for listing */
#else /* K&R style */
open_outfile(s)		/* open the output file for listing */
	char *s;
#endif /* HAVE_STDC */
{
	char *fullname;		/* given name plus extension */
	FILE *fd;

	must_open_outfile = FALSE;	/* Turn off the flag */

	if(s == (char *) NULL || *s == '\0') {
		return;		/* No filename: no action  */
	}

	fullname = add_ext(s,DEF_LIST_EXTENSION);
	(void)fflush(list_fd);
	if( (fd = fopen(fullname,"w")) == (FILE *)NULL) {
		(void)fprintf(stderr,"\nCannot open %s for output\n",fullname);
	}
	else {
		(void)fprintf(stderr,"\nOutput sent to file %s\n",fullname);
		list_fd = fd;
	}
}


PRIVATE void
wrapup(VOID)	/* look at cross references, etc. */
{

    doing_wrapup = TRUE; /* for correct behavior in oldstyle_error_message */

	if(debug_hashtab || debug_glob_symtab)
	  debug_symtabs();

				/* VCG output file uses stem of file
				   containing main prog or 1st file on
				   command line. If none, output is to stdout.
				 */
#ifdef VCG_SUPPORT
	if(print_vcg_list) {
	  vcg_fd = (input_fd == stdin || main_filename == (char *)NULL)?
	    stdout :
	    fopen(new_ext(main_filename,DEF_VCG_EXTENSION) ,"w");
	}
#endif

	visit_children();	/* Make call tree & check visited status */
	check_com_usage();	/* Look for unused common stuff */
	check_comlists();	/* Look for common block mismatches */
	check_arglists();	/* Look for subprog defn/call mismatches */

        if ( htmlcalltree_fd ) 
         { 
         (void)fprintf( htmlcalltree_fd, "
\n\n\n" ); fclose( htmlcalltree_fd ); htmlcalltree_fd = NULL; } #ifdef DEBUG_GLOBAL_STRINGS if(debug_latest) print_global_strings(); #endif } #define MODE_DEFAULT_EXT 1 #define MODE_REPLACE_EXT 2 PRIVATE char * #if HAVE_STDC append_extension(char *s, const char *ext, int mode) #else /* K&R style */ append_extension(s,ext,mode) char *s,*ext; int mode; #endif /* HAVE_STDC */ { /* MODE_DEFAULT_EXT: Adds extension to file name s if none is present, and returns a pointer to the new name. If extension was added, space is allocated for the new name. If not, simply returns pointer to original name. MODE_REPLACE_EXT: same, except given extension replaces given one if any. */ int i,len; char *newname; #ifdef OPTION_PREFIX_SLASH /* set len=chars to NUL or start of /opt */ for(len=0; s[len] != '\0' && s[len] != '/'; len++) continue; #else len=(unsigned)strlen(s); #endif /* Search backwards till find the dot, but do not search past directory delimiter */ for(i=len-1; i>0; i--) { if(s[i] == '.' #ifdef UNIX || s[i] == '/' #endif #ifdef VMS || s[i] == ']' || s[i] == ':' #endif #ifdef MSDOS || s[i] == '\\' || s[i] == ':' #endif ) break; } if(mode == MODE_REPLACE_EXT) { if(s[i] == '.') /* declare length = up to the dot */ len = i; newname = (char *) malloc( (unsigned)(len+(unsigned)strlen(ext)+1) ); (void)strncpy(newname,s,len); (void)strcpy(newname+len,ext); } else { /* MODE_DEFAULT_EXT */ #ifdef OPTION_PREFIX_SLASH /* create new string if new ext or trailing /option */ if(s[i] != '.' || s[len] != '\0') { if(s[i] != '.') { /* no extension given */ newname = (char *) malloc( (unsigned)(len+ (unsigned)strlen(ext)+1) ); (void)strncpy(newname,s,len); (void)strcpy(newname+len,ext); } else { /* extension given but /option follows */ newname = (char *) malloc( (unsigned)(len+1) ); (void)strncpy(newname,s,len); } } #else if(s[i] != '.') { newname = (char *) malloc( (unsigned)(len+ (unsigned)strlen(ext)+1) ); (void)strcpy(newname,s); (void)strcat(newname,ext); } #endif else { newname = s; /* use as is */ } } return newname; } /* Adds default extension to source file name, replacing any that is present, and returns a pointer to the new name. Space is allocated for the new name. */ char * #if HAVE_STDC add_ext(char *s, const char *ext) /* adds default filename extension to s */ #else /* K&R style */ add_ext(s,ext) /* adds default filename extension to s */ char *s,*ext; #endif /* HAVE_STDC */ { return append_extension(s,ext,MODE_DEFAULT_EXT); } PRIVATE char * #if HAVE_STDC new_ext(char *s, const char *ext) #else /* K&R style */ new_ext(s,ext) char *s,*ext; #endif /* HAVE_STDC */ { return append_extension(s,ext,MODE_REPLACE_EXT); } int #if HAVE_STDC has_extension(const char *name, const char *ext) /* true if name ends in ext */ #else /* K&R style */ has_extension(name,ext) /* true if name ends in ext */ char *name,*ext; #endif /* HAVE_STDC */ { unsigned name_len, ext_len; int stem_len; ext_len = strlen(ext); #ifdef VMS /* shell_glob adds version number: filename.ext;1 */ if(strrchr(name,';') != (char *)NULL) { name_len = strrchr(name,';') - name; /* distance to the semicolon */ } else #endif name_len=strlen(name); /* distance to the null */ stem_len = (unsigned)(name_len - ext_len); /* distance to the dot */ if( stem_len >= 0 && (name_len-stem_len) == ext_len && strncasecmp(name+stem_len,ext,ext_len) == 0 ) return TRUE; else return FALSE; } PRIVATE void resource_summary(VOID) { #ifdef DEBUG_SIZES if(debug_latest) print_sizeofs(); /* give sizeof various things */ #endif (void)fprintf(list_fd, "\n Here are the amounts of ftnchek's resources that were used:\n"); (void)fprintf(list_fd, "\nSource lines processed = %lu statement + %lu comment = %lu total", tot_stmt_line_count, tot_line_count-tot_stmt_line_count, /*tot_comment_line_count*/ tot_line_count); (void)fprintf(list_fd, "\nTotal executable statements = %lu, max in any module = %lu", tot_exec_stmt_count, max_exec_stmt_count); (void)fprintf(list_fd, "\nTotal number of modules in program = %lu", tot_module_count); (void)fprintf(list_fd, "\nTotal statement labels defined = %lu, max in any module = %lu", tot_label_count, max_labels); (void)fprintf(list_fd, "\nMax identifier name chars used = %lu local, %lu global, chunk size %lu", max_loc_strings, glob_strings_used, (unsigned long)STRSPACESZ); (void)fprintf(list_fd, "\nMax token text chars used = %lu, chunk size %lu ", max_srctextspace, (unsigned long)STRSPACESZ); (void)fprintf(list_fd, "\nMax local symbols used = %lu out of %lu available", max_loc_symtab, (unsigned long)LOCSYMTABSZ); (void)fprintf(list_fd, "\nMax global symbols used = %lu out of %lu available", max_glob_symtab, (unsigned long)GLOBSYMTABSZ); (void)fprintf(list_fd, "\nMax number of parameter info fields used = %lu, chunk size = %lu", max_paraminfo, (unsigned long)PARAMINFOSPACESZ); (void)fprintf(list_fd, "\nMax number of tokenlists used = %lu, chunk size = %lu", max_tokenlists, (unsigned long)TOKHEADSPACESZ); (void)fprintf(list_fd, "\nMax token list/tree space used = %lu, chunk size = %lu", max_token_space, (unsigned long)TOKENSPACESZ); (void)fprintf(list_fd, "\nNumber of subprogram invocations = %lu totaling %lu args", arglist_head_used, arglist_element_used); (void)fprintf(list_fd, "\nArgument list header and element chunk sizes = %lu and %lu", (unsigned long)ARGLISTHEADSZ, (unsigned long)ARGLISTELTSZ); (void)fprintf(list_fd, "\nNumber of common block decls = %lu totaling %lu variables", comlist_head_used, comlist_element_used); (void)fprintf(list_fd, "\nCommon list header and element chunk sizes = %lu and %lu", (unsigned long)COMLISTHEADSZ, (unsigned long)COMLISTELTSZ); (void)fprintf(list_fd, "\nNumber of array dim ptrs used = %lu, chunk size = %lu", max_ptrspace, (unsigned long)PTRSPACESZ); #ifdef DEBUG_SIZES (void)fprintf(list_fd, "\nIdentifier hashtable size = %6lu", (unsigned long)HASHSZ); #ifdef KEY_HASH/* not used any more*/ (void)fprintf(list_fd, "\nKeyword hashtable size = %6lu", (unsigned long)KEYHASHSZ); #endif #ifdef COUNT_REHASHES (void)fprintf(list_fd, "\nIdentifier rehash count = %6lu", rehash_count); #endif (void)fprintf(list_fd, "\nIntrinsic function hashtable size=%6lu, clash count=%lu", (unsigned long)INTRINS_HASHSZ, intrins_clashes); #endif /*DEBUG_SIZES*/ (void)fprintf(list_fd,"\n\n"); } ftnchek-3.3.1/ftnchek.h0000644000031000002260000013451510201506745015362 0ustar moniotstaff00000000000000/* $Id: ftnchek.h,v 1.94 2005/02/06 21:36:37 moniot Exp $ Common definitions for Fortran Program Checker */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." Acknowledgement: the above permission notice was copied, with minor changes, from the XFree86 Project. */ #define COPYRIGHT_DATE \ "Copyright (C) 1994, 1997, 2000, 2004 by Robert K. Moniot" #define COPYRIGHT_NOTICE \ "This program is free software. Permission is granted to\n\ modify it and/or redistribute it, retaining this notice.\n\ No guarantees accompany this software." #define VERSION_NUMBER "FTNCHEK Version 3.3 November 2004" #define PATCHLEVEL "Patch Level 1" #define PROJECT_VERSION "P3" /* Project file format version number */ #include "config.h" /* Get system-specific information */ /* Define macro PROTO for declaring function prototypes. If compiler doesn't accept prototypes, use -DNO_PROTOTYPES. The args in macro must be enclosed in parentheses. Define macro VOID for declaring functions without args. Also define HAVE_STDC for declaring functions in ANSI form or Kernighan-Ritchie form. Each function defn is in both forms, with #ifdef HAVE_STDC to select between them. */ #ifdef NO_PROTOTYPES #define PROTO(TYPE_AND_NAME,ARGS) TYPE_AND_NAME() #define VOID #define HAVE_STDC 0 #else #define PROTO(TYPE_AND_NAME,ARGS) TYPE_AND_NAME ARGS #define VOID void #define HAVE_STDC 1 #endif /* The following system defines should be defined with the -D (for UNIX) or /DEFINE (for VMS) compiler options in the makefile, not here. They are shown here so you know what to define. MSDOS should be defined for IBM PC version. We set it here automatically if a DOS/Win compiler is detected, otherwise when compiling you should define it on compiler command line. Only one of MSDOS, VMS, or UNIX should be defined. They control details of behavior such as filename extensions and use of slash as an option prefix. */ /*#define VMS*/ /* Set flag for VMS system-dependent defns. */ /*#define UNIX*/ /* Set flag for UNIX (any flavor) defns. */ /* Many (all?) Windows compilers autodefine _WIN32. I am guessing about _MSDOS. TurboC (DOS and Win versions) sets __TURBOC__ */ #if defined(_WIN32) || defined(_MSDOS) || defined(__TURBOC__) #define MSDOS /* Set flag for MSDOS (including Windows) */ #endif /* For portability, declare standard routines here. */ #if HAVE_STDLIB_H #include #else PROTO(char *getenv,(char *)); PROTO(char *malloc,(unsigned)); PROTO(char *calloc,(unsigned,unsigned)); PROTO(VOID free,(void *)); PROTO(VOID exit,(int)); #endif /************************************************************************* Begin section of defines for system-dependent configuration. **************************************************************************/ /* set flag to allow options to start with '/' */ #ifndef OPTION_PREFIX_SLASH #ifndef NO_OPTION_PREFIX_SLASH #ifdef VMS #define OPTION_PREFIX_SLASH #endif #ifdef MSDOS #define OPTION_PREFIX_SLASH #endif #endif #endif /* Define standard home directory for VMS and MSDOS. This directory is one place ftnchek looks for the rc or ini file. */ #ifdef VMS #ifndef SPECIAL_HOMEDIR #define SPECIAL_HOMEDIR "SYS$DISK:[]" #endif #endif #ifdef MSDOS #ifndef SPECIAL_HOMEDIR #define SPECIAL_HOMEDIR "c:\\lib" #endif #endif /* Define the Unix-style startup file name and a non-Unix-style alternate. Both are looked for on all systems. */ #ifndef UNIX_RC_FILE #define UNIX_RC_FILE ".ftnchekrc" #endif #ifndef NONUNIX_RC_FILE #define NONUNIX_RC_FILE "ftnchek.ini" #endif /* Define default source and output file extensions. These * can be overridden by defines on compiler commandline. */ #ifndef DEF_SRC_EXTENSION #ifdef VMS #define DEF_SRC_EXTENSION ".for" /* VMS default extension */ #endif #ifdef MSDOS #define DEF_SRC_EXTENSION ".for" /* IBM PC default extension */ #endif #endif /* DEF_SRC_EXTENSION */ #ifndef DEF_SRC_EXTENSION #define DEF_SRC_EXTENSION ".f" /* Unix and all others */ #endif /* define default list-file extension */ #ifndef DEF_LIST_EXTENSION #define DEF_LIST_EXTENSION ".lis" #endif /* define default project-file extension */ #ifndef DEF_PROJ_EXTENSION #define DEF_PROJ_EXTENSION ".prj" #endif /* define default declaration-file extension */ #ifndef DEF_DCL_EXTENSION #define DEF_DCL_EXTENSION ".dcl" #endif /* define default html documentation-file extension */ #ifndef DEF_HTML_EXTENSION #define DEF_HTML_EXTENSION ".html" #endif /* define default include-file extension */ #ifndef DEF_INC_EXTENSION #define DEF_INC_EXTENSION DEF_SRC_EXTENSION #endif /* define default declaration-file extension */ #ifndef DEF_VCG_EXTENSION #define DEF_VCG_EXTENSION ".vcg" #endif /* define project-file name for case of input from stdin */ #ifndef STDIN_PROJ_FILENAME #define STDIN_PROJ_FILENAME "ftnchek.prj" #endif #ifndef ENV_PREFIX /* prefix for option environment variables */ #define ENV_PREFIX "FTNCHEK_" #endif #ifndef ENV_INCLUDE_VAR #define ENV_INCLUDE_VAR "INCLUDE" /* name of env variable for include dir */ #endif #ifndef DEFAULT_INCLUDE_DIR #ifdef UNIX #define DEFAULT_INCLUDE_DIR "/usr/include" #endif #ifdef VMS #define DEFAULT_INCLUDE_DIR "SYS$LIBRARY:" #endif #ifdef MSDOS #define DEFAULT_INCLUDE_DIR "\\include" #endif #endif /************************************************************************* End of section of defines for system-dependent configuration. Begin section of defines to control ftnchek's behavior (syntax accepted, options supported, etc.) **************************************************************************/ /* The following macro turns on useful extra information saying "expecting whatever" in "parse error" messages from GNU bison-generated parser. This macro may not do anything if parser is generated by another version of bison or yacc. */ #ifndef NO_YYERROR_VERBOSE #define YYERROR_VERBOSE #endif /* This is the default limit on "cascades" of error messages where the trailer "etc..." is given instead of printing them all. The limit can be changed at run time by -error=num. */ #ifndef DEF_ERROR_CASCADE_LIMIT #define DEF_ERROR_CASCADE_LIMIT 3 #endif /* VCG support is now standard. If you don't want it, you can eliminate it by defining NO_VCG_SUPPORT. You can customize the graph options by changing the macro VCG_GRAPH_OPTIONS. Include \n between options and after the last option. (These options affect the graph as a whole.) */ #ifndef NO_VCG_SUPPORT #define VCG_SUPPORT #ifndef VCG_GRAPH_OPTIONS #define VCG_GRAPH_OPTIONS "color: lightgray\n" #endif #endif /* Define the amount of indentation of declarations produced under -makedcls in free-form mode. Must be >= 0. */ #ifndef DCL_FREEFORM_INDENT #define DCL_FREEFORM_INDENT 2 #endif /* The following defines control the default status of warnings controlled by -arg, -f77/90/95, -port, -pretty, and -trunc. */ /* -arguments options default to ARGCHECK_ALL. Define LAX_ARGCHECK to make -arguments=none the default. Otherwise -arguments=all is default. */ #ifdef LAX_ARGCHECK #define ARGCHECK_ALL FALSE #else #define ARGCHECK_ALL TRUE #endif /* -array options default to ARRAYCHECK_ALL. Define LAX_ARRAYCHECK to make -array=none the default. Otherwise -array=all is default. */ #ifdef LAX_ARRAYCHECK #define ARRAYCHECK_ALL FALSE #else #define ARRAYCHECK_ALL TRUE #endif /* -common options default to COMCHECK_ALL, except for volatile, which defaults to FALSE. Define LAX_COMCHECK to make -common=none the default. Otherwise -common=type,length,exact is default. */ #ifdef LAX_COMCHECK #define COMCHECK_ALL FALSE #else #define COMCHECK_ALL TRUE #endif /* -f77 options default to F77_ALL. Define STRICT_SYNTAX to make -f77=all the default. Otherwise -f77=none is default. */ #ifdef STRICT_SYNTAX #define F77_ALL 1 #else #define F77_ALL 0 #endif /* -f90 options default to none unless F90_SYNTAX is defined. */ #ifdef F90_SYNTAX #define F90_ALL 1 #else #define F90_ALL 0 #endif /* -f95 options default to none unless F95_SYNTAX is defined. */ #ifdef F95_SYNTAX #define F95_ALL 1 #else #define F95_ALL 0 #endif /* -portability options default to PORT_ALL. Define STRICT_PORTABILITY to make -port=all the default. Otherwise -port=none is default. */ #ifdef STRICT_PORTABILITY #define PORT_ALL TRUE #else #define PORT_ALL FALSE #endif /* -pretty options default to PRETTY_ALL. Define UGLY_IS_OK to make -pretty=none the default. Otherwise -pretty=all is default. */ #ifdef UGLY_IS_OK #define PRETTY_ALL FALSE #else #define PRETTY_ALL TRUE #endif /* -source options are defined here. Since -source=all is unlikely to be desired, each option has its own macro for default value */ #ifndef DEC_TABS /* DEC-style ugly tabbed source is off by default */ #define DEC_TABS FALSE #endif /* VMS-style INCLUDE supports defaulting extension, /NOLIST feature. It is default for VMS, not for other systems. */ #ifndef VMS_INCLUDE #ifdef VMS #define VMS_INCLUDE TRUE #else #define VMS_INCLUDE FALSE #endif #endif #ifndef UNIX_BACKSLASH /* UNIX backslash escape sequences in strings */ #define UNIX_BACKSLASH FALSE #endif /* standard parameters take data type from value */ #ifndef PARAMETER_IMPLICIT_TYPE #define PARAMETER_IMPLICIT_TYPE FALSE #endif /* DEC-style parameters get data type in standard way */ #ifndef DEC_PARAMETER_STANDARD_TYPE #define DEC_PARAMETER_STANDARD_TYPE FALSE #endif /* -style options default to STYLECHECK_ALL, which should be FALSE to prevent ftnchek from spewing warnings about perfectly normal code. */ #ifndef STYLECHECK_ALL #define STYLECHECK_ALL FALSE #endif /* -truncation options default to TRUNC_ALL. Define LAX_TRUNCATION to make -trunc=none the default. Otherwise -trunc=all is default. */ #ifdef LAX_TRUNCATION #define TRUNC_ALL FALSE #else #define TRUNC_ALL TRUE #endif /* -usage options default to USAGE_ALL. Define LAX_USAGE to make -usage=none the default. Otherwise -usage=all is default. */ #ifdef LAX_USAGE #define USAGE_ALL FALSE #else #define USAGE_ALL TRUE #endif /* The macros in the following section control whether certain groups of nonstandard intrinsics are compiled into ftnchek. By turning off all these macros using the STANDARD_INTRINSICS define or selectively by using the NO_ prefix, some efficiency is gained but these intrinsics will then never be recognized by ftnchek, regardless of the -intrinsic setting. Turn these off only if you are a purist who will never use non-F77 intrinsics. */ #ifndef STANDARD_INTRINSICS #ifndef NO_EXTRA_INTRINSICS #define EXTRA_INTRINSICS /* Common nonstandard intrinsic functions */ #endif #ifndef NO_UNIX_INTRINSICS #define UNIX_INTRINSICS /* UNIX intrinsic functions */ #endif #ifndef NO_VMS_INTRINSICS #define VMS_INTRINSICS /* VMS intrinsic functions */ #endif /* The macros in the next section define the default value of the -intrinsic settings governing which intrinsic groups to recognize and how to treat RAND and IARGC, which may take no argument or one dummy argument on different platforms. */ /* Define which sets to recognize by default: bit 0 = commonly available nonstandard intrinsics bit 1 = some Unix intrinsics bit 2 = some VMS intrinsics */ #ifdef UNIX /* Unix default: accept Common & Unix intrinsics */ #define DEF_INTRINSIC_SET 3 #endif #ifdef VMS /* VMS default: accept Common & VMS intrinsics */ #define DEF_INTRINSIC_SET 5 #endif #ifndef DEF_INTRINSIC_SET /* Otherwise default = only common set */ #define DEF_INTRINSIC_SET 1 #endif /* Define which RAND form to use. bit 0 = allow no-arg form bit 1 = allow one-arg form */ #ifdef RAND_NO_ARG /*RAND() form*/ #define DEF_INTRINSIC_RAND 1 #else #ifdef RAND_ONE_ARG /*RAND(ISEED) form*/ #define DEF_INTRINSIC_RAND 2 #else /* Default: allow either form */ #define DEF_INTRINSIC_RAND 3 #endif #endif /* Define which IARGC form to use */ #ifdef IARGC_NO_ARG #define DEF_INTRINSIC_IARGC 1 #else #ifdef IARGC_ONE_ARG #define DEF_INTRINSIC_IARGC 2 #else /* Default: allow either form */ #define DEF_INTRINSIC_IARGC 3 #endif #endif #endif /* not STANDARD_INTRINSICS */ /* Default BpW = 4 bytes per word, which matches many machines. This macro serves as the default value for -wordsize. If the Fortran code does not declare explicit sizes of numeric variables (e.g. REAL*8), then the value of -wordsize will not matter, since the table conforms to the standard in that sizeof(INTEGER)=sizeof(REAL), and sizeof(DOUBLE)=sizeof(COMPLEX) =2*sizeof(REAL). If the code does declare explicit sizes of numeric types, then the value of -wordsize will matter if explicit and default sizes are expected to match. If you want to suppress warnings of this kind, you may use the -wordsize setting or, to make it the default, change BpW to match your hardware. Under the -portability option, explicit and default sizes never match: e.g. passing REAL*8 where DOUBLE PRECISION expected. None of this applies to CHARACTER data: the default size (1) is well-defined, and the standard does not specify the ratio of sizeof(CHARACTER) to sizeof(REAL). For the Cray pointer extension, we also define PTRSIZE as the size of a pointer. The default is the same as the wordsize. This can be changed at run time by -pointersize=nnn. */ #ifndef BpW #define BpW 4 /* Bytes per Word: might want to use sizeof(float) instead */ #endif #ifndef PTRSIZE #define PTRSIZE BpW #endif /* Define to tolerate embedded blanks in numeric consts unless feature turned off by defining NO_BLANKS_IN_NUMBERS. */ #ifndef NO_BLANKS_IN_NUMBERS #define BLANKS_IN_NUMBERS #endif /* Default value of -wrap option */ #ifndef WRAP_COLUMN #define WRAP_COLUMN 79 /* When to wrap error messages to next line */ #endif #ifndef DEF_IDLETTER_LIST /* default nonalnums allowed in identifiers */ #define DEF_IDLETTER_LIST "$_" #endif /* The following defines used to be optional, now they are standard. If these defines are removed or undef'd, the corresponding syntax will not be recognized (resulting in parse errors). I don't recommend undefining them. They are all warned about by -f77 */ #define ALLOW_CRAY_POINTERS 1 #define ALLOW_DO_ENDDO 1 #define ALLOW_INCLUDE 1 #define ALLOW_QUOTEMARKS 1 #define ALLOW_TYPELESS_CONSTANTS 1 #define ALLOW_UNIX_BACKSLASH 1 #define ALLOW_UNIX_CPP 1 #define ALLOW_VMS_IO 1 #define ALLOW_IBM_IO 1 #define INLINE_COMMENT_CHAR '!' /* Inline comments start with '!' */ #define KEEP_ARG_NAMES 1 /* option was formerly experimental */ /* SMALL_INT_VALUE is an integer that is small enough that we don't need to worry if it is assigned to a small-size int, for purposes of catching truncation errors. We conservatively use maximum signed 8-bit byte value. */ #ifndef SMALL_INT_VALUE #define SMALL_INT_VALUE 127 #endif #ifdef DEVELOPMENT /* For maintaining the program */ #define DEBUG_FORLEX #endif /************************************************************************* End section of defines to control ftnchek's behavior Begin section to define limits, table sizes, etc. **************************************************************************/ #ifndef MAXLINE #define MAXLINE 132 /* Maximum input line length. Ignores past this. */ #endif #ifndef MAXIDSIZE #define MAXIDSIZE 31 /* Longest identifier allowed */ #endif #ifndef MAX_SRC_TEXT #define MAX_SRC_TEXT (20*66) /* Longest text string of a token */ #endif #ifndef MAX_CHAR_CODE #define MAX_CHAR_CODE 255 /* Largest possible value of a char (8 bits here) */ #endif #ifndef MAX_INCLUDE_DEPTH #define MAX_INCLUDE_DEPTH 16 /* Max nesting depth of include files */ #endif #ifndef MAXEXPRTEXT #define MAXEXPRTEXT 15 /* length of expr text saved in arg lists */ #endif #ifndef MAX_RC_LINE #define MAX_RC_LINE 500 /* Max length of line in rc file */ #endif #ifndef RC_COMMENT_CHAR #define RC_COMMENT_CHAR '#' /* Comments start with this or space */ #endif /* Definitions of table sizes Constraints: STRSPACESZ > 20*72 so max f77 statement will fit LOCSYMTABSZ+GLOBSYMTABSZ < HASHSZ so hashtab never full */ #define KEYHASHSZ 195 /* Size of keyword hashtable -- do not change */ #define INTRINS_HASHSZ 433 /* Chosen to give few clashes -- change with care */ #ifdef SMALL_MACHINE /* Use these for e.g. IBM PC */ #ifndef HASHSZ /* Hint: pick one with no square factors */ #define HASHSZ 798 /* SMALL_MACHINE Size of symbol hashtable */ #endif #ifndef STRSPACESZ #define STRSPACESZ 4000 /* SMALL_MACHINE chunk size of string space */ #endif #ifndef LOCSYMTABSZ #define LOCSYMTABSZ 300 /* SMALL_MACHINE Size of local symbol table */ #endif #ifndef GLOBSYMTABSZ #define GLOBSYMTABSZ 400 /* SMALL_MACHINE Size of global symbol table */ #endif #ifndef PARAMINFOSPACESZ #define PARAMINFOSPACESZ 20 /* SMALL_MACHINE ParamInfo structs per chunk */ #endif #ifndef TOKHEADSPACESZ #define TOKHEADSPACESZ 50 /* SMALL_MACHINE TokenListHeaders per chunk */ #endif #ifndef TOKENSPACESZ #define TOKENSPACESZ 200 /* SMALL_MACHINE tokens per token space chunk */ #endif #ifndef ARGLISTHEADSZ #define ARGLISTHEADSZ 300 /* SMALL_MACHINE argument headers per chunk */ #endif #ifndef ARGLISTELTSZ #define ARGLISTELTSZ 1000 /* SMALL_MACHINE argument list elts per chunk */ #endif #ifndef COMLISTHEADSZ #define COMLISTHEADSZ 200 /* SMALL_MACHINE common list headers per chunk */ #endif #ifndef COMLISTELTSZ #define COMLISTELTSZ 1000 /* SMALL_MACHINE common elts per chunk */ #endif #ifndef PTRSPACESZ #define PTRSPACESZ 200 /* SMALL_MACHINE ptrs-to-arraydim per chunk */ #endif #ifndef LABTABLE_SIZE #define LABTABLE_SIZE 109 /* SMALL_MACHINE initial size of label table */ #endif #ifndef REF_LISTS_SIZE #define REF_LISTS_SIZE 200 /* SMALL_MACHINE Lab_ref_lists per chunk*/ #endif #ifndef IO_UNIT_INFO_SIZE #define IO_UNIT_INFO_SIZE 50 /* SMALL_MACHINE initial size of I/O unit info table */ #endif #else /* end if SMALL_MACHINE */ #ifdef MEDIUM_MACHINE /* use these if default is too big */ #ifndef HASHSZ #define HASHSZ 2002 /* MEDIUM_MACHINE Size of symbol hashtable */ #endif #ifndef STRSPACESZ #define STRSPACESZ 10000 /* MEDIUM_MACHINE chunk size of string space */ #endif #ifndef LOCSYMTABSZ #define LOCSYMTABSZ 800 /* MEDIUM_MACHINE Size of local symbol table */ #endif #ifndef GLOBSYMTABSZ #define GLOBSYMTABSZ 1200 /* MEDIUM_MACHINE Size of global symbol table */ #endif #ifndef PARAMINFOSPACESZ #define PARAMINFOSPACESZ 50 /* MEDIUM_MACHINE ParamInfo structs per chunk */ #endif #ifndef TOKHEADSPACESZ #define TOKHEADSPACESZ 200 /* MEDIUM_MACHINE TokenListHeaders per chunk */ #endif #ifndef TOKENSPACESZ #define TOKENSPACESZ 1000 /* MEDIUM_MACHINE tokens per token space chunk */ #endif #ifndef ARGLISTHEADSZ #define ARGLISTHEADSZ 1500 /* MEDIUM_MACHINE argument headers per chunk */ #endif #ifndef ARGLISTELTSZ #define ARGLISTELTSZ 5000 /* MEDIUM_MACHINE argument list elts per chunk */ #endif #ifndef COMLISTHEADSZ #define COMLISTHEADSZ 1000 /* MEDIUM_MACHINE common list headers per chunk */ #endif #ifndef COMLISTELTSZ #define COMLISTELTSZ 4000 /* MEDIUM_MACHINE common elts per chunk */ #endif #ifndef PTRSPACESZ #define PTRSPACESZ 400 /* MEDIUM_MACHINE Max number of ptrs to arraydim */ #endif #ifndef LABTABLE_SIZE #define LABTABLE_SIZE 209 /* MEDIUM_MACHINE initial size of labtable */ #endif #ifndef REF_LISTS_SIZE #define REF_LISTS_SIZE 400 /* MEDIUM_MACHINE Lab_ref_lists per chunk*/ #endif #ifndef IO_UNIT_INFO_SIZE #define IO_UNIT_INFO_SIZE 200 /* MEDIUM_MACHINE initial size of I/O unit info table */ #endif #else /* Default is now LARGE_MACHINE, OK for most modern machines */ #ifndef HASHSZ /* must be <= max int */ #define HASHSZ 20930 /* LARGE_MACHINE Size of symbol hashtable */ #endif #ifndef STRSPACESZ #define STRSPACESZ 10000 /* LARGE_MACHINE chunk size of string space */ #endif #ifndef LOCSYMTABSZ #define LOCSYMTABSZ 8000 /* LARGE_MACHINE Size of local symbol table */ #endif #ifndef GLOBSYMTABSZ #define GLOBSYMTABSZ 12000 /* LARGE_MACHINE Size of global symbol table */ #endif #ifndef PARAMINFOSPACESZ #define PARAMINFOSPACESZ 200 /* LARGE_MACHINE ParamInfo structs per chunk */ #endif #ifndef TOKHEADSPACESZ #define TOKHEADSPACESZ 500 /* LARGE_MACHINE TokenListHeaders per chunk */ #endif #ifndef TOKENSPACESZ #define TOKENSPACESZ 10000 /* LARGE_MACHINE tokens per token space chunk */ #endif #ifndef ARGLISTHEADSZ #define ARGLISTHEADSZ 15000 /* LARGE_MACHINE argument headers per chunk */ #endif #ifndef ARGLISTELTSZ #define ARGLISTELTSZ 50000 /* LARGE_MACHINE argument list elts per chunk */ #endif #ifndef COMLISTHEADSZ #define COMLISTHEADSZ 10000 /* LARGE_MACHINE common list headers per chunk */ #endif #ifndef COMLISTELTSZ #define COMLISTELTSZ 50000 /* LARGE_MACHINE common elts per chunk */ #endif #ifndef PTRSPACESZ #define PTRSPACESZ 2000 /* LARGE_MACHINE Max number of ptrs to arraydim */ #endif #ifndef LABTABLE_SIZE #define LABTABLE_SIZE 299 /* LARGE_MACHINE initial size of labtable */ #endif #ifndef REF_LISTS_SIZE #define REF_LISTS_SIZE 2000 /* LARGE_MACHINE Lab_ref_lists per chunk*/ #endif #ifndef IO_UNIT_INFO_SIZE #define IO_UNIT_INFO_SIZE 500 /* LARGE_MACHINE initial size of I/O unit info table */ #endif #endif /* end if LARGE_MACHINE else */ #endif/*end if SMALL_MACHINE else*/ /************************************************************************* End of section to define limits, table sizes, etc. From here down should not be altered. **************************************************************************/ #define FALSE 0 #define TRUE 1 /* Make sure line numbers use 32 bits */ #if SIZEOF_INT >= 4 typedef unsigned LINENO_t; #else typedef unsigned long LINENO_t; #endif typedef unsigned COLNO_t; #define NO_COL_NUM ((COLNO_t)999)/* Impossible column number to suppress * printing in error messages */ #define GLOBAL_NO_COL_NUM ((LINENO_t)998)/* Ditto for global-level warnings */ #define NO_LINE_NUM ((LINENO_t)0)/* Ditto for line number to suppress flushing * of line if error not in local context */ #define OOPS_NONFATAL 0 /* Severity of "oops" messages */ #define OOPS_FATAL 1 /************************************************************************* Shared variable and function defns start here **************************************************************************/ #ifdef MAIN #define SHARED /* (nothing) */ #else #define SHARED extern /* Non-main routines declare shared vars extern */ #endif #define PRIVATE static /* For non-shared functions */ /* Except when DEBUG_FORLEX is turned on, ftnchek has no need of floating-point calculations, so to allow it to run on machines without coprocessor, we neutralize the few floating-point operations that there are. */ #ifndef DEBUG_FORLEX #ifndef NO_FLOATING_POINT #define NO_FLOATING_POINT #endif #endif #ifdef NO_FLOATING_POINT typedef long DBLVAL; #else typedef double DBLVAL; #endif SHARED FILE *input_fd, /* Input file */ *list_fd, /* Output file for listing */ *dcl_fd, /* Output type declaration file */ *html_fd, /* Output file for HTML documentation */ *htmlcalltree_fd, /* Output file for html call tree documentation */ #ifdef VCG_SUPPORT *vcg_fd, /* Output VCG graph description file */ #endif *project_fd;/* Project file for symtab info summary */ SHARED char *html_filename; /* name of the html documentation file */ SHARED char *htmlcalltree_filename; /* name of the html call tree doc file */ SHARED char *current_filename, /* name of current input file */ *top_filename; /* name of toplevel parent input file */ SHARED int incdepth; #ifdef VCG_SUPPORT SHARED char *main_filename; /* name of file containing main program */ #endif /*****************************************************************/ /* Declare variables for command line options */ /*****************************************************************/ #ifdef MAIN #define OPT(Type,Name,Value) Type Name=Value #else #define OPT(Type,Name,Value) extern Type Name #endif /* These options are controlled by -arguments */ OPT(int,argcheck_argnumber,ARGCHECK_ALL);/* Check for wrong no. of args */ OPT(int,argcheck_arrayness,ARGCHECK_ALL);/* Check arg arrayness mismatches */ OPT(int,argcheck_argtype,ARGCHECK_ALL); /* Check for arg type mismatches */ OPT(int,argcheck_functype,ARGCHECK_ALL); /* Check for func type mismatches */ /* End of -arguments options */ /* These options are controlled by -array */ OPT(int,arraycheck_dims,ARRAYCHECK_ALL);/* Check for mismatch no.of dims */ OPT(int,arraycheck_size,ARRAYCHECK_ALL);/* Check for mismatch no.of elements */ /* End of -array options */ /* These options are controlled by -calltree */ OPT(int,print_call_tree,FALSE); /* Print the call tree */ OPT(int,print_ref_list,FALSE); /* Print reference (who-calls-who) list */ #ifdef VCG_SUPPORT OPT(int,print_vcg_list,FALSE); /* Print call graph in vcg format */ #endif OPT(int,call_tree_prune,TRUE); /* do not repeat duplicates, use "see above" */ OPT(int,call_tree_sort,TRUE); /* alphabetized, not program order */ /* End of -calltree options */ /* These options are controlled by -crossref */ OPT(int,print_xref_list,FALSE); /* print subprogram cross-references */ OPT(int,print_com_xrefs,FALSE); /* print common block cross-refs */ OPT(int,print_lab_refs,FALSE); /* print label cross-references */ /* End of -crossref options */ /* These options are controlled by -common */ OPT(int,comcheck_type,COMCHECK_ALL);/* Check for type mismatch */ OPT(int,comcheck_length,COMCHECK_ALL);/* Check for length mismatch */ OPT(int,comcheck_dims,COMCHECK_ALL);/* Check for array dim mismatch */ OPT(int,comcheck_by_name,COMCHECK_ALL);/* Check name-by-name */ OPT(int,comcheck_volatile,FALSE); /* Assume blocks are "volatile" */ /* End of -common options */ /* These options are controlled by -f77 */ OPT(int,f77_20_continue,F77_ALL); OPT(int,f77_accept_type,F77_ALL); OPT(int,f77_assignment,F77_ALL); OPT(int,f77_array_bounds,F77_ALL); OPT(int,f77_attrbased_typedecl,F77_ALL); OPT(int,f77_automatic_array,F77_ALL); OPT(int,f77_byte,F77_ALL); OPT(int,f77_case_construct,F77_ALL); OPT(int,f77_char_extension,F77_ALL); OPT(int,f77_cray_pointers,F77_ALL); OPT(int,f77_common_subprog_name,F77_ALL); OPT(int,f77_construct_name,F77_ALL); OPT(int,f77_cycle_exit,F77_ALL); OPT(int,f77_d_comment,F77_ALL); OPT(int,f77_dec_tabs,F77_ALL); OPT(int,f77_do_enddo,F77_ALL); OPT(int,f77_dollarsigns,F77_ALL); OPT(int,f77_double_complex,F77_ALL); OPT(int,f77_format_dollarsigns,F77_ALL); OPT(int,f77_format_extensions,F77_ALL); OPT(int,f77_function_noparen,F77_ALL); OPT(int,f77_implicit_none,F77_ALL); OPT(int,f77_include,F77_ALL); OPT(int,f77_initializers,F77_ALL); OPT(int,f77_inline_comment,F77_ALL); OPT(int,f77_internal_list_io,F77_ALL); OPT(int,f77_intrinsics,F77_ALL); OPT(int,f77_io_keywords,F77_ALL); OPT(int,f77_long_names,F77_ALL); OPT(int,f77_mixed_common,F77_ALL); OPT(int,f77_mixed_expr,F77_ALL); OPT(int,f77_namelist,F77_ALL); OPT(int,f77_overlength,F77_ALL); OPT(int,f77_param_implicit_type,F77_ALL); OPT(int,f77_param_intrinsic,F77_ALL); OPT(int,f77_param_noparen,F77_ALL); OPT(int,f77_pointers,F77_ALL); OPT(int,f77_quad_constants,F77_ALL); OPT(int,f77_quotemarks,F77_ALL); OPT(int,f77_relops,F77_ALL); OPT(int,f77_semicolon,F77_ALL); OPT(int,f77_stmt_order,F77_ALL); OPT(int,f77_typeless_constants,F77_ALL); OPT(int,f77_typesize,F77_ALL); OPT(int,f77_underscores,F77_ALL); OPT(int,f77_unix_backslash,F77_ALL); OPT(int,f77_unix_cpp,F77_ALL); OPT(int,f77_variable_format,F77_ALL); /* End of -f77 options */ /* These options are controlled by -f90 */ OPT(int,f90_accept_type,F90_ALL); OPT(int,f90_byte,F90_ALL); OPT(int,f90_continue,F90_ALL); OPT(int,f90_cray_pointers,F90_ALL); OPT(int,f90_d_comment,F90_ALL); OPT(int,f90_dec_tabs,F90_ALL); OPT(int,f90_dollarsigns,F90_ALL); OPT(int,f90_double_complex,F90_ALL); OPT(int,f90_format_dollarsigns,F90_ALL); OPT(int,f90_format_extensions,F90_ALL); OPT(int,f90_function_noparen,F90_ALL); OPT(int,f90_initializers,F90_ALL); OPT(int,f90_intrinsics,F90_ALL); OPT(int,f90_io_keywords,F90_ALL); OPT(int,f90_mixed_expr,F90_ALL); OPT(int,f90_overlength,F90_ALL); OPT(int,f90_param_implicit_type,F90_ALL); OPT(int,f90_param_noparen,F90_ALL); OPT(int,f90_quad_constants,F90_ALL); OPT(int,f90_stmt_order,F90_ALL); OPT(int,f90_typeless_constants,F90_ALL); OPT(int,f90_typesize,F90_ALL); OPT(int,f90_unix_backslash,F90_ALL); OPT(int,f90_unix_cpp,F90_ALL); OPT(int,f90_variable_format,F90_ALL); /* Abuse of blank space in free format is not treated as a supported extension to F90 but as a syntax error. Thus it is on by default. */ #define f90_freeform_space misc_warn /* End of -f90 options */ /* These options are controlled by -f95 */ OPT(int,f95_real_do,F95_ALL); /* real or d.p. DO variable */ OPT(int,f95_pause,F95_ALL); /* PAUSE stmt */ OPT(int,f95_assign,F95_ALL); /* ASSIGN stmt & kin */ OPT(int,f95_Hedit,F95_ALL); /* H edit descriptor */ /* End of -f95 options */ /* These options are controlled by -makedcls */ OPT(int,dcl_declarations,FALSE); OPT(int,dcl_only_undeclared,FALSE); OPT(int,dcl_compact,FALSE); OPT(int,dcl_use_continuations,FALSE); OPT(int,dcl_keywords_lowercase,FALSE); OPT(int,dcl_vars_and_consts_lowercase,FALSE); OPT(int,dcl_excl_sftran3_internal_vars,FALSE); OPT(int,dcl_asterisk_comment_character,FALSE); OPT(int,dcl_lowercase_comment_character,FALSE); OPT(int,dcl_no_array_dimensions,FALSE); OPT(int,dcl_free_form,FALSE); /* End of -makedcls options */ /* These options are controlled by -mkhtml */ OPT(int,html_documents,FALSE); OPT(int,html_only_undeclared,FALSE); OPT(int,html_compact,FALSE); OPT(int,html_use_continuations,FALSE); OPT(int,html_keywords_lowercase,FALSE); OPT(int,html_vars_and_consts_lowercase,FALSE); OPT(int,html_excl_sftran3_internal_vars,FALSE); OPT(int,html_no_array_dimensions,FALSE); OPT(int,html_free_form,FALSE); /* End of -makedcls options */ /* These options are controlled by -portability */ OPT(int,port_common_alignment,PORT_ALL);/* Common not in desc size order */ OPT(int,port_backslash,PORT_ALL); /* Backslash used in standard way */ OPT(int,port_real_do,PORT_ALL); /* Non-integer DO loop bounds */ OPT(int,port_long_string,PORT_ALL); /* Char string > 255 in length */ OPT(int,port_hollerith,PORT_ALL); /* Hollerith (except in FORMAT) */ OPT(int,port_mixed_equiv,PORT_ALL); /* Different types equivalenced */ OPT(int,port_mixed_size,PORT_ALL); /* sized, nonsized types mixed */ OPT(int,port_param_implicit_type,PORT_ALL);/* Implicit param type != default */ OPT(int,port_tabs,PORT_ALL); /* Tabs in source */ /* End of -portability options */ /* These options are controlled by -pretty */ OPT(int,pretty_alt_return,PRETTY_ALL);/* alternate return out of range */ OPT(int,pretty_multiple_common,PRETTY_ALL);/* COMMON decl in multiple stmts */ OPT(int,pretty_multiple_namelist,PRETTY_ALL);/* NAMELIST decl in multiple stmts */ OPT(int,pretty_parens,PRETTY_ALL); /* Parentheses around a variable */ OPT(int,pretty_overlength,PRETTY_ALL); /* Lines over 72 columns */ OPT(int,pretty_extra_space,PRETTY_ALL); /* Spaces in identifiers */ OPT(int,pretty_no_space,PRETTY_ALL); /* Space missing btw id and keyword */ OPT(int,pretty_contin,PRETTY_ALL); /* Continuation mark after comment */ /* End of -pretty options */ /* These options are controlled by -project */ OPT(int,make_project_file,FALSE);/* Save symtab defns in .prj file */ OPT(int,proj_trim_calls,TRUE); /* Keep min no of calls in project file */ OPT(int,proj_trim_common,TRUE); /* Keep min no of block decls in proj file */ /* End of -project options */ /* These options are controlled by -source */ OPT(int,source_dec_tab,DEC_TABS); /*DEC Fortran tab-format*/ OPT(int,source_vms_include,VMS_INCLUDE); /*VMS INCLUDE statement*/ OPT(int,source_unix_backslash,UNIX_BACKSLASH); /*UNIX backslash escape*/ OPT(int,source_dec_param_std_type,DEC_PARAMETER_STANDARD_TYPE); OPT(int,source_param_implicit,PARAMETER_IMPLICIT_TYPE);/* std params */ OPT(int,source_fixed_form,FALSE); /* force fixed format (see Note) */ OPT(int,source_free_form,FALSE); /* force free format (see Note) */ /* Note: actual flag variable used to specify source form is free_form in forlex.h. It is set by init_scan based on filename extension (.f or .f90), overridden by source_fixed_format or source_free_format if set.*/ /* end of -source options */ /* These options are controlled by -style */ /* require subprog END stmts to specify subprog class */ OPT(int,style_req_structured_end,STYLECHECK_ALL); /* require names on structured END stmts */ OPT(int,style_req_end_name,STYLECHECK_ALL); /* require names on IF, DO, and SELECT CASE constructs */ OPT(int,style_req_construct_name,STYLECHECK_ALL); /* require main prog to start with PROGRAM stmt */ OPT(int,style_req_prog_stmt,STYLECHECK_ALL); /* require use of block IF or logical IF */ OPT(int,style_req_block_if,STYLECHECK_ALL); /* require use of ENDDO with DO */ OPT(int,style_req_enddo,STYLECHECK_ALL); /* require use of ENDDO or CONTINUE with DO */ OPT(int,style_req_do_construct,STYLECHECK_ALL); /* no shared DO loop terminators */ OPT(int,style_shared_do_terminator,STYLECHECK_ALL); /* GOTO in all its forms */ OPT(int,style_goto,STYLECHECK_ALL); /* Labeled stmt other than FORMAT */ OPT(int,style_labeled_exec,STYLECHECK_ALL); /* Labeled FORMAT stmt */ OPT(int,style_labeled_format,STYLECHECK_ALL); /* End of -style options */ /* These options are controlled by -truncation */ OPT(int,trunc_int_div_real,TRUNC_ALL); /* Int/int --> real */ OPT(int,trunc_int_div_exponent,TRUNC_ALL);/* Int/int as exponentl */ OPT(int,trunc_int_div_zero,TRUNC_ALL); /* Int/int const = 0 */ OPT(int,trunc_int_neg_power,TRUNC_ALL); /* Int**(-int) */ OPT(int,trunc_real_subscript,TRUNC_ALL);/* Real array subscript */ OPT(int,trunc_real_do_index,TRUNC_ALL); /* Real DO index with int bounds */ OPT(int,trunc_type_demotion,TRUNC_ALL); /* High --> low precision */ OPT(int,trunc_size_demotion,TRUNC_ALL); /* High --> low precision */ OPT(int,trunc_promotion,TRUNC_ALL); /* Low --> high precision */ OPT(int,trunc_sigfigs,TRUNC_ALL); /* Sngl const overspecified */ /* truncation warnings related to precision */ #define trunc_precision (trunc_promotion||trunc_type_demotion||trunc_size_demotion) /* End of -truncation options */ /* These options are controlled by -usage */ OPT(int,usage_arg_modified,USAGE_ALL); /* const or expr arg modified */ OPT(int,usage_arg_alias_modified,USAGE_ALL); /* arg same-as other modified */ OPT(int,usage_array_alias_modified,USAGE_ALL);/* arg in same array as other modified */ OPT(int,usage_arg_common_modified,USAGE_ALL); /* arg in common modified */ OPT(int,usage_array_common_modified,USAGE_ALL); /* array arg in common modified */ OPT(int,usage_arg_unused,USAGE_ALL); /* arg declared but not used */ OPT(int,usage_com_block_unused,USAGE_ALL); /* whole block declared but not used */ OPT(int,usage_com_block_volatile,USAGE_ALL); /* block may lose defn */ OPT(int,usage_com_var_set_unused,USAGE_ALL); /* set but not used */ OPT(int,usage_com_var_uninitialized,USAGE_ALL);/* used but not set */ OPT(int,usage_com_var_unused,USAGE_ALL); /* declared but not used */ OPT(int,usage_do_var_modified,USAGE_ALL); /* DO index var modified */ OPT(int,usage_ext_declared_only,USAGE_ALL); /* declared EXTERNAL but not defined or used */ OPT(int,usage_ext_multiply_defined,USAGE_ALL);/* multiple definitions */ OPT(int,usage_ext_undefined,USAGE_ALL); /* used but not defined (= -external flag) */ OPT(int,usage_ext_unused,USAGE_ALL); /* defined but not used (like -library flag) */ OPT(int,usage_label_undefined,USAGE_ALL); /* label used but undefined */ OPT(int,usage_label_unused,USAGE_ALL); /* label defined but unused */ OPT(int,usage_var_set_unused,USAGE_ALL); /* set but not used */ OPT(int,usage_var_uninitialized,USAGE_ALL); /* used before set */ OPT(int,usage_var_unused,USAGE_ALL); /* declared but not used */ /* End of -usage options */ /* The following flag is for warnings not covered by other flags, so that all warnings can be turned off by -nocheck. */ OPT(int,misc_warn,TRUE); /* The following variables are controlled by command line options */ OPT(int,do_check,TRUE); /* For -nocheck option */ OPT(int,decls_required,FALSE); /* List all undeclared identifiers */ OPT(int,div_check,FALSE); /* Check for possible division by zero */ OPT(int,ext_def_check,TRUE); /* Check defined status of externals*/ OPT(int,help_screen,FALSE); /* Print out help screen */ OPT(int,library_mode,FALSE); /* Set used-flag for all modules in file */ OPT(int,brief,FALSE); /* Briefer form of local error messages */ OPT(int,do_list,FALSE); /* Listing flag */ OPT(int,novice_help,TRUE); /* Extra help for novices */ OPT(int,pure_functions,TRUE); /* Assume functions are pure */ OPT(int,quiet,FALSE); /* Less verbose output format */ OPT(int,sixclash,FALSE); /* To check if names unique in 1st 6 chars */ OPT(int,print_topo_sort,FALSE); /* Topological sort of modules */ OPT(int,do_symtab,FALSE); /* For symbol table printout */ OPT(int,print_version,FALSE); /* Print version number and quit */ /* Debugging flags */ OPT(int,debug_latest,FALSE); /* debug the latest addition */ OPT(int,debug_glob_symtab,FALSE);/* global symtab contents */ OPT(int,debug_parser,FALSE); /* grammar debug via DBG statements */ OPT(int,debug_hashtab,FALSE); /* hash table contents */ OPT(int,debug_loc_symtab,FALSE); /* local symtab contents */ OPT(int,show_resources,FALSE); /* space avail and used */ #if defined(DEBUG_FORLEX) || defined(DEBUG_IS_KEYWORD) OPT(int,debug_lexer,FALSE); /* list of tokens as scanned */ #endif /* Declare variables for commandline settings */ OPT(int,call_tree_options,0); /* Sum of: 1 (print it), */ /* 2 (who-calls-who form), 4 (don't prune) */ /* 8 (program order), 16 (VCG format) */ #ifndef STANDARD_INTRINSICS /* -intrinsic setting defaults */ OPT(int,intrinsic_rand_no_argument,(DEF_INTRINSIC_RAND & 1)==1); /* rand form */ OPT(int,intrinsic_rand_one_argument,(DEF_INTRINSIC_RAND & 2)==2); OPT(int,intrinsic_iargc_no_argument,(DEF_INTRINSIC_IARGC & 1)==1);/* iargc form */ OPT(int,intrinsic_iargc_one_argument,(DEF_INTRINSIC_IARGC & 2)==2); OPT(int,intrinsic_set_extra,(DEF_INTRINSIC_SET & 1)==1);/* common intrinsics */ OPT(int,intrinsic_set_unix,(DEF_INTRINSIC_SET & 2)==2);/* some unix intrinsics */ OPT(int,intrinsic_set_vms,(DEF_INTRINSIC_SET & 4)==4);/* some vms intrinsics */ #endif /* not STANDARD_INTRINSICS */ OPT(int,fixed_max_stmt_col,72); /* End of fixed-form statement field ( <= MAXLINE )*/ OPT(int,error_cascade_limit,DEF_ERROR_CASCADE_LIMIT);/* max errors in cascade */ OPT(int,local_ptrsize,PTRSIZE); /* Size of Cray pointer variables */ OPT(int,given_ptrsize,PTRSIZE); /* Size requested for Cray pointer variables */ OPT(int,local_wordsize,BpW); /* Bytes per word to use for default sizes */ OPT(int,given_wordsize,BpW); /* User's request as per -wordsize=n */ OPT(int,wrap_column,WRAP_COLUMN);/* For wrapping error messages */ /* Shorthands for checking control settings */ #define usage_com_any (usage_com_block_unused || usage_com_var_set_unused \ || usage_com_var_uninitialized || usage_com_var_unused) #define COMCHECK_OFF (!(comcheck_by_name||comcheck_type||comcheck_length)) #define check_com_tree (comcheck_volatile&&usage_com_block_volatile) /* Check undef errors */ #define full_output (do_list || do_symtab) #define ANY_DCL_DECLARATIONS() (dcl_declarations\ ||dcl_only_undeclared\ ||dcl_compact||dcl_use_continuations\ ||dcl_keywords_lowercase\ ||dcl_vars_and_consts_lowercase\ ||dcl_excl_sftran3_internal_vars\ ||dcl_asterisk_comment_character\ ||dcl_lowercase_comment_character\ ||dcl_no_array_dimensions\ ||dcl_free_form\ ) #define ANY_HTML_DECLARATIONS() (html_documents\ ||html_only_undeclared\ ||html_compact||html_use_continuations\ ||html_keywords_lowercase\ ||html_vars_and_consts_lowercase\ ||html_excl_sftran3_internal_vars\ ||html_no_array_dimensions\ ||html_free_form\ ) /* Declare variables for commandline StrSettings */ OPT(char*,out_fname,(char *)NULL); /* Output filename */ #ifdef ALLOW_INCLUDE OPT(char*,include_path,(char *)NULL); /* An include-file directory */ #endif OPT(char*,idletter_list,DEF_IDLETTER_LIST);/* non-alpha chars allowed in identifiers */ SHARED LINENO_t line_num, /* line num of current char */ next_line_num; /* line num of lookahead char */ SHARED COLNO_t col_num, /* column num of current char */ next_col_num; /* column num of lookahead char */ SHARED unsigned error_count, /* Count of syntax error messages per file */ warning_count; /* Count of warning messages per file */ SHARED char * tab_filename; /* Filename where there are tabs for -port */ /* Resource usage information: */ SHARED unsigned long tot_line_count, /* total source lines (stmts + comments) */ tot_stmt_line_count,/* total source stmt lines */ tot_exec_stmt_count,/* count of executable stmts in program */ tot_module_count, /* count of subprograms in program */ tot_label_count, /* total number of statement labels defined */ exec_stmt_count, /* count of executable stmts in module */ max_exec_stmt_count,/* max number of executable stmts in any module */ max_loc_strings, /* chars of local stringspace used */ max_srctextspace, /* chars of source text space used */ max_paraminfo, /* number of param info structs used */ max_tokenlists, /* number of tokenlists constructed */ max_token_space, /* number of tokens used */ max_ptrspace, /* number of pointers used */ max_labels, /* maximum no. of labels in any subprog */ glob_strings_used, /* chars of global stringspace used */ arglist_element_used, /* arg array elements used */ arglist_head_used, /* arg heads used (1 per call) */ comlist_element_used, /* com array elements used */ comlist_head_used; /* com heads used (1 per defn) */ SHARED long max_loc_symtab, /* number of local symtab entries used */ max_glob_symtab; /* number of global symtab entries used */ SHARED int equivalence_flag, /* true while parsing EQUIVALENCE statement */ initial_flag, /* true while only label or initial keywords read */ implicit_flag, /* true while parsing IMPLICIT statement */ implicit_letter_flag, /* true while getting letters in IMPLICIT list */ implicit_type_given,/* true if IMPLICIT type statement found */ implicit_none, /* true if IMPLICIT NONE statement found */ prev_token_class, /* token class of last-returned token */ curr_stmt_class; /* Token class of current stmt's leading token */ /* flag for error messages to behave differently in global cases */ SHARED int doing_wrapup; /* ditto for local cases */ SHARED int doing_end_proc; /* Define linked-list structure for include-path list */ #ifdef ALLOW_INCLUDE typedef struct IPNode { struct IPNode *link; /* next path on the list */ char *include_path; /* one path (full directory name) */ } IncludePathNode; SHARED IncludePathNode *include_path_list; /* header to the list */ #endif /* Declare routines shared with main module ftnchek.c */ /* in exprtype.c */ PROTO(void init_typesizes, ( void )); /* in ftnchek.c */ PROTO( char * add_ext,( char *s, const char *ext )); PROTO( int has_extension,( const char *name, const char *ext )); /* in forlex.c and advance.c */ PROTO(void make_legal_char_list, ( void )); PROTO(void finish_scan, ( void )); PROTO(int flush_line_out, ( LINENO_t n )); PROTO(int flush_end_stmt, ( LINENO_t n )); PROTO(void init_keyhashtab, ( void )); PROTO(void init_scan, ( void )); PROTO(void init_stream,( void )); /* in include.c */ PROTO(void open_include_file, ( char *fname, LINENO_t include_line_num )); PROTO(int pop_include_file,( void )); /* in fortran.y/fortran.c */ PROTO(void init_parser, ( void )); PROTO(int yyparse, ( void )); /* in message.c */ PROTO(void msg_tail, ( const char *s )); PROTO(void nonportable, ( LINENO_t lineno, COLNO_t colno, const char *s )); PROTO(void nonstandard, ( LINENO_t lineno, COLNO_t colno, int f90, int f95 )); PROTO(void oops_message, ( int severity, LINENO_t lineno, COLNO_t colno, const char *s )); PROTO(void oops_tail, ( const char *s )); PROTO(void print_a_line, ( FILE *fd, const char *line, LINENO_t num )); PROTO(void syntax_error, ( LINENO_t lineno, COLNO_t colno, const char *s )); PROTO(void ugly_code, ( LINENO_t lineno, COLNO_t colno, const char *s )); PROTO(void warning, ( LINENO_t lineno, COLNO_t colno, const char *s )); PROTO(void local_message, ( const char *filename, LINENO_t lineno, const char *s, const char *tag )); PROTO(void global_warning, ( const char *filename, LINENO_t lineno, const char *s )); PROTO(void global_message, ( const char *filename, LINENO_t lineno, const char *s )); PROTO(void lex_error, (const char *s )); PROTO(void yyerror, ( const char *s )); PROTO(char* ulongtostr, (unsigned long num)); /* Maximum length of a longtostr() result */ #define MAX_ULONGTOSTR (3*sizeof(unsigned long)) /* in pgsymtab.c */ PROTO(void check_arglists, ( void )); PROTO(void check_comlists, ( void )); PROTO(void check_com_usage, ( void )); PROTO(void visit_children, ( void )); /* in plsymtab.c */ PROTO(void debug_symtabs, ( void )); /* in project.c */ PROTO(void proj_file_out, ( FILE *fd )); PROTO(void proj_file_in, ( FILE *fd )); /* in symtab.c */ PROTO(void init_tables, ( void )); PROTO(void init_globals, ( void )); PROTO(void init_symtab, ( void )); PROTO(void note_filename, ( char *s )); #ifdef DEBUG_SIZES PROTO(void print_sizeofs, ( void )); #endif /* Misc. useful defines */ #undef MAX #define MAX(X,Y) ((X)>(Y)?(X):(Y)) ftnchek-3.3.1/include.c0000644000031000002260000003301107743070446015356 0ustar moniotstaff00000000000000/* $Id: include.c,v 1.10 2003/10/14 21:56:54 moniot Exp $ Routines to handle finding and opening F90-standard include files. Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include #include "ftnchek.h" #include "symtab.h" #include "forlex.h" #include "advance.h" #ifdef ALLOW_INCLUDE /* Definition of structure for saving the input stream parameters while processing an include file. */ typedef struct { srcLine *input_buf; /* start of source buffer */ srcLine *curr_input_line; /* current position in source buffer */ srcLine *next_input_line; /* line buffer holding next_char */ char *fname; /* eventually some of the following can be removed and srcLine info used */ int curr_char; int next_char; int next_index; COLNO_t col_num; COLNO_t next_col_num; int do_list; LINENO_t line_num; LINENO_t next_line_num; short inctable_index; } IncludeFileStack; PRIVATE IncludeFileStack include_stack[MAX_INCLUDE_DEPTH]; #endif /*ALLOW_INCLUDE*/ #ifdef ALLOW_INCLUDE PROTO(PRIVATE FILE* find_include,( char **fname, const char *mode )); PROTO(PRIVATE FILE * fopen_with_path,( const char *inc_path, char **fname, const char *mode )); #endif PROTO(PRIVATE int push_include_file,( char *fname, srcLine *newbuf, LINENO_t include_line_num )); #ifdef ALLOW_INCLUDE /* defns of include-file handlers */ PRIVATE int push_include_file(char *fname, srcLine *newbuf, LINENO_t include_line_num) { if (incdepth == MAX_INCLUDE_DEPTH) { oops_message(OOPS_NONFATAL,line_num,NO_COL_NUM, "include files nested too deep"); return FALSE; } #ifdef DEBUG_INCLUDE if(debug_include){ (void)fprintf(list_fd,"\npush_include_file: curr_srcLine=%s\n next_srcLine=%s", curr_srcLine?curr_srcLine->line:NULL, next_srcLine?next_srcLine->line:NULL); } #endif if(incdepth == 0) /* Save line num of outermost include */ top_file_line_num = include_line_num; include_stack[incdepth].input_buf = srcBuffer; include_stack[incdepth].curr_input_line = curr_srcLine; include_stack[incdepth].next_input_line = next_srcLine; srcBuffer = newbuf; include_stack[incdepth].fname = current_filename; current_filename = fname; include_stack[incdepth].curr_char = curr_char; include_stack[incdepth].next_char = next_char; include_stack[incdepth].next_index = next_index; include_stack[incdepth].col_num = col_num; include_stack[incdepth].next_col_num = next_col_num; include_stack[incdepth].line_num = line_num; include_stack[incdepth].next_line_num = next_line_num; include_stack[incdepth].do_list = do_list; include_stack[incdepth].inctable_index = inctable_index; incdepth++; init_stream(); return TRUE; } int pop_include_file(VOID) { #ifdef DEBUG_INCLUDE if(debug_include){ (void)fprintf(list_fd,"\npop_include_file: line %u = %s depth %d",line_num,line, incdepth); } #endif if (incdepth == 0) { /* Stack empty: no include file to pop. */ return FALSE; } incdepth--; if(do_list) { (void)flush_line_out(next_line_num); (void)fprintf(list_fd,"\nResuming file %s:", include_stack[incdepth].fname); } /* free up memory from include file being popped */ free_srcBuffer(srcBuffer); srcBuffer = include_stack[incdepth].input_buf; curr_srcLine = include_stack[incdepth].curr_input_line; next_srcLine = include_stack[incdepth].next_input_line; current_filename = include_stack[incdepth].fname; curr_char = include_stack[incdepth].curr_char; next_char = include_stack[incdepth].next_char; next_index = include_stack[incdepth].next_index; col_num = include_stack[incdepth].col_num; next_col_num = include_stack[incdepth].next_col_num; line_num = include_stack[incdepth].line_num; next_line_num = include_stack[incdepth].next_line_num; do_list = include_stack[incdepth].do_list; inctable_index = include_stack[incdepth].inctable_index; initial_flag = TRUE; sticky_EOF = TRUE; return TRUE; } PRIVATE int incfile_list_space=16; /* no. of entries allocated for incfile_list */ void #if HAVE_STDC open_include_file(char *fname, LINENO_t include_line_num) #else /* K&R style */ open_include_file(fname,include_line_num) char *fname; LINENO_t include_line_num; #endif /* HAVE_STDC */ { FILE *fd; srcLine *new_srcBuf; int list_option=FALSE; /* /[NO]LIST qualifier: default=NOLIST */ short inc_index; /* for VMS: default extension is .for */ if(source_vms_include) { if(has_extension(fname,"/nolist")) { list_option = FALSE; fname[strlen(fname)-strlen("/nolist")] = '\0'; /* trim off qualifier */ } else if(has_extension(fname,"/list")) { list_option = TRUE; fname[strlen(fname)-strlen("/list")] = '\0'; /* trim off qualifier */ } } /* Look for inc file name in the list. */ for(inc_index=0; inc_index Handle MacOS. */ #ifdef UNIX fname_path_absolute = ((*fname)[0] == '/'); #endif /* VMS test is kinda simplistic: it just looks for a colon, as in 'SOME_LOGNAME:INCFILE.H', or else a left bracket not followed by a '-' or '.' which are the two ways I know of to do relative paths. I would appreciate hearing from somebody who knows a way to do this more surely. */ #ifdef VMS { char *lbracket; fname_path_absolute = ( strchr(*fname,':') != NULL || ((lbracket=strchr(*fname,'[')) != NULL && (lbracket[1] != '-' && lbracket[1] != '.') ) ); } #endif /* MSDOS test looks for forms like A:path or \path or /path (the last since some development environments support / as path separator.) */ #ifdef MSDOS fname_path_absolute = ((isalpha((*fname)[0]) && (*fname)[1] == ':') || (*fname)[0] == '\\' || (*fname)[0] == '/'); #endif if(fname_path_absolute) { /* include filename is an absolute path */ return fopen(*fname,mode); } /* Now look for a path qualifying source file name */ #ifdef UNIX path_end = strrchr(current_filename,'/'); #endif #ifdef VMS path_end = strrchr(current_filename,']'); #endif #ifdef MSDOS /* look for either \ or / at end. */ path_end = strrchr(current_filename,'\\'); if(path_end == (char *)NULL) path_end = strrchr(current_filename,'/'); #endif if( path_end == (char *)NULL ) { if( (fp=fopen(*fname,mode)) != (FILE *)NULL) /* Not qualified by a path */ return fp; } else /* Input file name is qualified by a path */ { char *local_path; #ifdef VMS ++path_end; /* need to retain the ']' */ #endif /* Get a copy of the local path */ if( (local_path=(char *)malloc(path_end-current_filename+1)) == (char *)NULL ) { (void)fflush(list_fd); (void)fprintf(stderr,"\nCannot allocate memory for include file path"); return (FILE *)NULL; } strncpy(local_path,current_filename,path_end-current_filename); local_path[path_end-current_filename] = '\0'; fp = fopen_with_path(local_path,fname,mode); (void)free(local_path); if( fp != (FILE *)NULL ) { return fp; } } /* If not found, look in directories given by include_path_list from -include options */ for(p=include_path_list; p!=NULL; p=p->link) { if( (fp=fopen_with_path(p->include_path,fname,mode)) != (FILE *)NULL) return fp; } /* If not found, look in directory given by env variable ENV_INCLUDE_VAR (e.g. set by % setenv INCLUDE ~/myinclude ) */ if( (env_include_var=getenv(ENV_INCLUDE_VAR)) != NULL) { if( (fp=fopen_with_path(env_include_var,fname,mode)) != (FILE *)NULL) return fp; } /* Still not found: look in systemwide default directory */ #ifdef DEFAULT_INCLUDE_DIR if( (fp=fopen_with_path(DEFAULT_INCLUDE_DIR,fname,mode)) != NULL) return fp; #endif/* DEFAULT_INCLUDE_DIR */ /* Not found anywhere: fail */ return (FILE *)NULL; }/*find_include*/ /* Routine to open file with name given by include_path followed by fname. If successful, fname is replaced by pointer to full name. */ PRIVATE FILE * #if HAVE_STDC fopen_with_path(const char *inc_path, char **fname, const char *mode) #else /* K&R style */ fopen_with_path(inc_path,fname,mode) char *inc_path, **fname, *mode; #endif /* HAVE_STDC */ { FILE *fp; char *tmpname; /* holds name with path prepended */ if( (tmpname = (char *)malloc(strlen(inc_path)+strlen(*fname)+2)) == (char *)NULL ) { (void)fflush(list_fd); (void)fprintf(stderr,"\nCannot allocate memory for include file path"); return (FILE *)NULL; } (void)strcpy(tmpname,inc_path); /* Add "/" or "\" if not provided */ #ifdef UNIX if(tmpname[strlen(tmpname)-1] != '/') (void)strcat(tmpname,"/"); #endif #ifdef MSDOS if(tmpname[strlen(tmpname)-1] != '\\') (void)strcat(tmpname,"\\"); #endif (void)strcat(tmpname,*fname); if( (fp=fopen(tmpname,mode)) != (FILE *)NULL) { /* Found: save new name in permanent space */ *fname = new_global_string(tmpname); } free(tmpname); return fp; }/*fopen_with_path*/ #else /* no ALLOW_INCLUDE */ /* disabled forms of include handlers */ PRIVATE int push_include_file(fname,buf,include_line_num) char *fname; srcLine *buf; LINENO_t include_line_num; {return FALSE;} PRIVATE int pop_include_file() {return FALSE;} void open_include_file(fname,include_line_num) char *fname; LINENO_t include_line_num; {} #endif /*ALLOW_INCLUDE*/ ftnchek-3.3.1/intake.c0000644000031000002260000005333510132623365015207 0ustar moniotstaff00000000000000#include #include #include #include "ftnchek.h" #include "symtab.h" #include "tokdefs.h" #include "forlex.h" #include "advance.h" PROTO(PRIVATE void find_comments,(srcLine *Buf)); PROTO(PRIVATE void find_fixed_contins,(srcLine *Buf)); PROTO(PRIVATE void find_free_contins,(srcLine *Buf)); PROTO(PRIVATE int line_is_blank,(char *s)); /* Function to read in a source file and store it in a linked list of srcLine elements. Returns pointer to head of the list. If file is empty, returns NULL. */ srcLine* gulp_srcfile(FILE *fd) { char linebuf[MAXLINE+1]; LINENO_t line_num=0; int line_len; srcLine *firstLine=NULL, *prevLine=NULL, *thisLine; while( fgets(linebuf, sizeof(linebuf), fd ) != NULL ) { LINENO_t new_line_num = 0; line_len = strlen(linebuf); /* this counts the \n */ /* If input line was too long to fit into buffer, gobble what was not read and discard it. */ if(line_len == MAXLINE && linebuf[MAXLINE-1] != ENDL) { int c; while( (c = getc(fd)) != ENDL && c != EOF ) continue; } else { /* Replace \n by null. line_len>0 is guaranteed */ if(linebuf[line_len-1] == ENDL) linebuf[--line_len] = '\0'; /* handle */ if( line_len > 1 && linebuf[line_len-1] == '\r' ) { linebuf[--line_len] = '\0'; } } /* Allocate a new struct for this line */ if( (thisLine = (srcLine *)malloc(sizeof(srcLine))) == (srcLine *)NULL || (thisLine->line = (char *)malloc(line_len+1)) == (char *)NULL ) { fflush(list_fd); fprintf(stderr,"Oops: Out of memory in gulp_srcfile\n"); exit(1); } /* Remember the first line as header */ if( firstLine == NULL ) firstLine = thisLine; /* Fill in the struct */ strcpy(thisLine->line,linebuf); ++line_num; /* Advance the line count */ thisLine->line_num = line_num; thisLine->printed = FALSE; thisLine->contin = FALSE; /* this will be set by lexer */ thisLine->cpp_line_directive = FALSE; /* Link it into the list */ if( prevLine != NULL ) prevLine->next = thisLine; thisLine->prev = prevLine; thisLine->next = NULL; prevLine = thisLine; /* Let # line directives override the above increment of line_num. The given value will take effect on the line following the # line directive. */ if( linebuf[0] == '#' ) { char *s = linebuf; do { ++s; } while( isspace(*s) ); /* Skip space after the '#' */ if(strncmp(s,"line",4) == 0) { /* Look for the keyword "line" */ s += 4; /* Skip the word "line" */ while( isspace(*s) ) ++s; /* Skip space after the word "line" */ } if( isdigit(*s) ) { /* See that we are now looking at a number */ /* Get the line number */ new_line_num=0; while( isdigit(*s) ) new_line_num = new_line_num*10 + BCD(*s++); thisLine->cpp_line_directive = TRUE; /* Note we did it */ } } if( new_line_num != 0 ) { /* This is a # line directive */ line_num = new_line_num-1; /* number it 1 less than next */ } } (void) fclose(fd); /* Now go thru and mark comment and continuation lines */ if( firstLine != (srcLine *)NULL ) { find_comments(firstLine); if( free_form ) { /* free source form */ find_free_contins(firstLine); } else { /* fixed source form */ find_fixed_contins(firstLine); } } #ifdef DEBUG_GULP_SRCFILE if(debug_latest) { /* print the source file marking comments & contins */ srcLine *p; for(p = firstLine; p != NULL; p = p->next ) { fprintf(list_fd,"\n%4d%c", p->line_num, p->comment?(p->f90_comment?'!':'C'): (p->contin?'&':' ') ); fprintf(list_fd,"%s",p->line); if(! p->comment ) { int i, last_i; last_i = strlen(p->line)-1; if(last_i < p->start_index) last_i = p->start_index; if(last_i < p->end_index) last_i = p->end_index; if(last_i >= MAXLINE) /* just in case something's bogus */ last_i = MAXLINE-1; for(i=0; i<=last_i; i++) linebuf[i] = ' '; if( p->start_index >= MAXLINE || p->end_index >= MAXLINE ) linebuf[last_i] = '!'; /* signals a bug */ else { if(p->start_index == p->end_index) /* coincident */ linebuf[p->start_index] = '%'; else { linebuf[p->start_index] = '^'; /* points to start */ linebuf[p->end_index] = '$'; /* points to end */ } } linebuf[last_i+1] = '\0'; fprintf(list_fd,"\n%5s",""); fprintf(list_fd,"%s",linebuf); } #include "PRINT_srcBuf.h" PRINT_srcBuf(p); } } #endif return firstLine; } /* Function to find lines that are entirely comment (incl blank lines) */ PRIVATE void find_comments(srcLine *Buf) { while( Buf != (srcLine *)NULL ) { char *s = Buf->line; int i,c= makeupper(s[0]); int allspace; COLNO_t col; Buf->comment = FALSE; Buf->blank = FALSE; Buf->d_comment = FALSE; Buf->f90_comment = FALSE; Buf->empty_contin = FALSE; if( !free_form ) { /* Handle F77 standard comments here. */ if( c == 'C' || c == '*' ) Buf->comment = TRUE; /* Tolerate D comment lines. There is no provision for optionally treating them as source code lines. */ if( c == 'D' ) { Buf->comment = TRUE; Buf->d_comment = TRUE; } } /* Now see if line is blank or only contains an inline comment. */ allspace = TRUE; for(i=0,col=1; s[i] != '\0'; i++) { if( !isspace(s[i])) { allspace = FALSE; /* Initial "!" starts a comment, except in col. 6 of fixed form it must be taken as continuation mark */ if(s[i]==INLINE_COMMENT_CHAR && (free_form || col != 6) ) { Buf->comment = TRUE; Buf->f90_comment = TRUE; } /* Standard 3.3.1.3 prohibits an & on a line with nothing but blanks or commentary. We allow it but flag it here. It is treated as a comment rather than a continuation. */ else if( s[i] == '&' && free_form ) { i++; while( s[i] != '\0' && (isspace(s[i])) ) { i++; } if( s[i] == '\0' || s[i] == INLINE_COMMENT_CHAR ) { Buf->f90_comment = (s[i] == INLINE_COMMENT_CHAR); Buf->comment = TRUE; /* treat as comment line */ Buf->empty_contin = TRUE; } else break; } else break; } else { col = NXTCOL(s[i],col); } } /* end for */ if( allspace ) { Buf->blank = TRUE; /* blank line */ Buf->comment = TRUE; } #if 0 fprintf(list_fd,"\n%c",Buf->comment? 'C':(Buf->contin?'&':' ')); fprintf(list_fd,"%s",Buf->line); #endif Buf = Buf->next; /* advance to next line */ } } /* Functions to find and mark continuation lines. Note that first line of continued statement is NOT marked. These functions also set the cursors start_index and end_index of each line to the first and last significant character respectively of line. (It is possible for start_index to point to '\0' in some cases. Also, end_index is set to -1 for fixed-form continuation line that is blank.) For comment lines, the cursors are set to harmless values, but they should not be needed. The column number start_col corresponding to start_index after accounting for tabs (including -source=dec-tab convention) is also set, but there is no need for an end_col. The main difference between the two functions, besides the fundamental one of the free-form final '&' vs. fixed-form column-6 mark, is that in fixed-form we need to ignore spaces and pay attention to column numbers to avoid running past column 72 (or in general max_stmt_col). These functions would be simple except that a '!' or '&' must not be treated as ending a line if it is inside a string or a hollerith. (In this comment, an H edit descriptor is considered a hollerith.) Strings are pretty easy to deal with, but holleriths cause a lot of trouble. In order not to see a hollerith in a variable like X1H1 or in DO 4 H=1,10 we require it to be preceded by a punctuation character. It is worth noting that the code allows a hollerith to immediately follow a string, which is improper but accepted by some compilers (and our lexer/parser) in a FORMAT. I believe that all cases where a hollerith could be matched by this code in a place where no hollerith should be are illegal, so all we need to do is make the parser squawk, which will happen. Likewise it will always spot a hollerith if it sees an integer preceded by punctuation and followed by 'H', which can never miss a valid one. In any event a false identification or failure to identify a hollerith can only cause trouble if a '!' or (for free-form) '&' is in the span of the (real or falsely supposed) hollerith. In both functions (free and fixed versions) the variable inside_number is set TRUE while scanning an integer that could be the length part of a hollerith; num_val accumulates the value of this integer; prev_sig_char remembers the previous significant character, which must be punctuation (ispunct) in order for inside_number to be turned on by seeing a digit. Similarly, inside_quote is TRUE while scanning a string, and quoteChar remembers the opening quote type (' or ") to determine when the closing quote is found. */ PRIVATE void find_free_contins(srcLine *Buf) { int to_be_continued = FALSE; /* remembers '&' of previous line */ int inside_quote = FALSE; int quoteChar; /* opening quote character */ int inside_number = FALSE; /* used for continued hollerith numbers */ int prev_sig_char = ' '; /* previous significant character */ int num_val; /* value of number recently seen */ while( Buf != (srcLine *)NULL ) { Buf->overlength = FALSE; if( Buf->comment) { /* skip comment lines */ Buf->contin = FALSE; Buf->start_index = 0; Buf->end_index = -1; Buf->start_col = 0; } else { /* not comment */ COLNO_t col; int i, c; char *s = Buf->line; Buf->contin = to_be_continued; /* mark this line */ Buf->end_index = -1; /* look for optional initial '&' on continued line */ i = 0; col = 1; if( inside_quote ) { /* Record the start of significant text. Inside a quote: line must be continued, and these may be overruled by finding a leading '&' later (which std requires but we don't) . */ Buf->start_index = i; Buf->start_col = col; Buf->contin_wo_amp = TRUE; } while( isspace(s[i]) ) {/* skip leading space */ col = NXTCOL(s[i],col); i++; } if( to_be_continued ) { /* deal with continued statements */ if( s[i] == '&' ) { Buf->contin_wo_amp = FALSE; i++; /* resume after the '&' */ col++; if( inside_quote ) { /* blanks are significant inside strings */ Buf->start_index = i; Buf->start_col = col; } } /* Handle the unlikely case that a hollerith is split within or just after the initial number. The usual case is to skip over blanks following the initial '&' if any. */ if( ! inside_number || !( (i == 0 || s[i-1] == '&') && (makeupper(s[i]) == 'H' || isdigit(s[i])) ) ) { inside_number = FALSE; while( isspace(s[i]) ) {/* skip space after & */ col = NXTCOL(s[i],col); i++; } } } else { inside_quote = FALSE; /* clean up unfinished business */ inside_number = FALSE; prev_sig_char = ' '; } /* Record the start of significant text. Continued quoted strings were handled above; all other situations are done here. We have at all events skipped over all leading space and, if a continuation line, over any initial '&' and following nonquoted space. */ if( ! inside_quote ) { Buf->start_index = i; Buf->start_col = col; } to_be_continued = FALSE; for( ; (c=s[i]) != '\0'; i++ ) { if( inside_quote ) { if( c == quoteChar ) { if( s[i+1] == quoteChar ) { /* escaped quote */ i++; col++; } else inside_quote = FALSE; } /* inside quote '&' is continuation if rest of line blank */ else if( c == '&' && line_is_blank(s+i+1) ) { to_be_continued = TRUE; break; } /* escaped quote via Unix backslash */ else if( source_unix_backslash && c == '\\' && s[i+1] == quoteChar ) { i++; col++; } } else if( c == '\'' || c == '"' ) { inside_quote = TRUE; quoteChar = c; inside_number = FALSE; } /* Not in a quoted string or starting one */ else { if( isdigit(c) ) { /* number found: see if hollerith */ if( inside_number ) { /* this may be a continued number */ num_val = num_val*10 + BCD(c); } else { /* hollerith can only follow punctuation */ if( ispunct(prev_sig_char) ) { num_val=BCD(c); /* start it off */ inside_number = TRUE; } } } if( inside_number ) { if( ! (isdigit(c) || c == '&') ) { inside_number = FALSE; /* cannot be continued */ } if( makeupper(c) == 'H' ) { /* skip past hollerith */ int hollerith_count=0; /* We can't just say i += num since line may end before then. (AFAIK holleriths cannot be continued in free form, so premature end of line can be taken as end of stmt.) */ i++; col++; /* move past 'H' */ for(hollerith_count = num_val; (c=s[i]) != '\0' && hollerith_count>0 ; /* Hmmm: how should tabs in holleriths be counted? As one column or many? We say many. */ hollerith_count--, i++, col = NXTCOL(c,col)) { Buf->end_index = i; } hollerith_count = 0; /* if line ends before H does */ } } /* end of dealing with number and maybe hollerith */ /* Start of a comment: quit i loop. */ if( c == INLINE_COMMENT_CHAR ) { Buf->f90_comment = TRUE; break; } else if( c == '&' ) { /* Found freeform contin mark. Check * that naught but comments follow. */ to_be_continued = TRUE; for(i++, col++; (c=s[i]) != '\0' && isspace(c); i++, col = NXTCOL(c,col)) continue; /* If something does follow the contin mark, set end_index to point to it so the parser will squawk. This error is too rare to deserve specific handling. */ if(c == INLINE_COMMENT_CHAR) Buf->f90_comment = TRUE; else if(c != '\0') Buf->end_index = i; break; } } /* end of stuff outside quotes */ /* Re-test for end of stmt needed here due to advancing i above. This should never happen when inside_quote but source may be illegal. */ if( c == '\0' ) break; /* As long as interesting stuff is seen, * update end index. This should never * leave end_index at -1 since we know line * is not a comment so not all blank. */ if( inside_quote || ! isspace(c) ) { Buf->end_index = i; prev_sig_char = c; /* set up std violation warning if significant chars past std max line length */ if( col > std_max_stmt_col ) Buf->overlength = TRUE; } } /* end for i */ } /* end else not comment */ Buf = Buf->next; } /* end while Buf */ }/*find_free_contins*/ PRIVATE void find_fixed_contins(srcLine *Buf) { int inside_quote = FALSE; int quoteChar; /* opening quote character */ int hollerith_count=0; /* used to deal with continued holleriths */ int inside_number = FALSE; /* used for continued hollerith numbers */ int prev_sig_char = ' '; /* previous significant character */ int num_val; /* value of number recently seen */ int tab_count = 0; /* tabs seen, for -port=tab option */ while( Buf != (srcLine *)NULL ) { Buf->overlength = FALSE; Buf->contin = FALSE; if( Buf->comment) { /* skip comment lines */ Buf->start_index = 0; Buf->end_index = -1; Buf->start_col = 0; } else { COLNO_t col; int i,c; char *s = Buf->line; /* Handle DEC tabs: followed by nonzero digit is a continuation line */ if( source_dec_tab && s[0] == '\t' ) { ++tab_count; if( isadigit((int)s[1]) && s[1] != '0' ) { Buf->contin = TRUE; Buf->start_index = 2; /* stmt char after contin mark */ Buf->start_col = 8; /* treat start of stmt as col 8 */ } } else { /* skip to col 6 */ for(i=0,col=1; col < 6 && s[i] != '\0'; i++) { col = PORT_NXTCOL(s[i],col); } c = s[i]; if( col == 6 && c != '\0' && !isspace(c) && c != '0' #ifdef ALLOW_UNIX_CPP /* Veto if it is a preprocessor line */ && s[0] != '#' #endif ) { Buf->contin = TRUE; Buf->start_index = i+1; /* record where stmt resumes */ Buf->start_col = 7; } } /* Locate the start and end of significant * source text. */ if( Buf->contin ) { /* resume after any continuation mark */ i=Buf->start_index; col=Buf->start_col; } else { /* For DEC tabs, an initial tab puts us in column 7 */ #ifdef DEC_TABS if( source_dec_tab && s[0] == '\t' ) { i = 1; col = 7; } else #endif { i=0; /* otherwise start at column 1 */ col=1; } hollerith_count = 0; /* clear unfinished business */ inside_quote = FALSE; inside_number = FALSE; prev_sig_char = ' '; } if( hollerith_count>0 ) { for(; /* Eat any continued hollerith */ (c=s[i]) != '\0' && hollerith_count>0 && col<=max_stmt_col; hollerith_count--, i++, col=PORT_NXTCOL(c,col)) { Buf->end_index = i; } if( hollerith_count>0 ) { /* fill out implied blanks */ hollerith_count -= (max_stmt_col - col + 1); } } /* Skip over leading blank space */ else if( ! inside_quote ) { for( ; (c=s[i]) != '\0' && isspace(c); i++, col=PORT_NXTCOL(c,col) ) { continue; } Buf->start_index = i; Buf->start_col = col; } /* In fixed form, end_index can fail to get set if line consists of no significant characters other than a continuation mark. This is OK if it is equal to start_index so an EOL will be sent by advance. */ Buf->end_index = Buf->start_index; /* Now scan rest of line for end of significant text */ for( ; (c=s[i]) != '\0'; i++, col=PORT_NXTCOL(c,col) ) { if( inside_quote ) { /* Handle escaped quote. This code does not spot escaped quote split across continuation, but it gets the begin and end markers right anyway. Unix backslash style can't be split since it would escape newline instead. */ if( c == quoteChar ) { if( s[i+1] == quoteChar ) {/* escaped quote */ i++; col++; } else inside_quote = FALSE; } /* escaped quote via Unix backslash */ else if( source_unix_backslash && c == '\\' && s[i+1] == quoteChar ) { i++; col++; } } else if( c == '\'' || c == '"' ) { inside_quote = TRUE; quoteChar = c; inside_number = FALSE; } /* Not in a quoted string or starting one */ else { if( isdigit(c) ) { /* number found: see if hollerith */ if( inside_number ) { /* this may be a continued number */ num_val = num_val*10 + BCD(c); } else { /* hollerith can only follow punctuation */ if( ispunct(prev_sig_char) ) { num_val=BCD(c); /* start it off */ inside_number = TRUE; } } } if( inside_number ) { if( !(isdigit(c) || isspace(c) || c == INLINE_COMMENT_CHAR) ) { inside_number = FALSE; /* cannot be continued */ } if( makeupper(c) == 'H' ) { /* skip past hollerith */ Buf->end_index = i; /* the H might be last thing on line */ /* We can't just set i = i+num since line may end before then. */ i++; col++; /* move past 'H' */ for(hollerith_count = num_val; (c=s[i]) != '\0' && hollerith_count>0 && col<=max_stmt_col; /* Hmmm: how should tabs in holleriths be counted? As one column or many? We say many. */ hollerith_count--, i++, col = PORT_NXTCOL(c,col)) { Buf->end_index = i; } if( hollerith_count>0 ) { /* fill out implied blanks */ hollerith_count -= (max_stmt_col - col + 1); } } } /* end of dealing with number and maybe hollerith */ /* Start of a comment: quit i loop. */ if( c == INLINE_COMMENT_CHAR ) { Buf->f90_comment = TRUE; break; } } /* end of stuff outside quotes */ /* Re-test for end of stmt needed here due to advancing i above */ if( c == '\0' ) break; /* As long as interesting stuff is seen, * update end index. This should never * leave end_index undefined since we know line * is not a comment so not all blank. */ if( (inside_quote || ! isspace(c)) ) { if( col <= max_stmt_col ) { Buf->end_index = i; prev_sig_char = c; } /* Set up std violation warning if significant chars past std max line length. The second test is to avoid warning if nonsignificant blanks follow end of statement inside quote. */ if( col > std_max_stmt_col && (col <= max_stmt_col || ! isspace(c)) ) Buf->overlength = TRUE; } } /* end for i */ /* A continuation line that is blank except for the continuation mark will leave end_index unchanged from initial -1. This is not illegal in fixed form: f77 std 3.2.3. So we do not treat them as comments, unlike counterpart in freeform. */ if( Buf->contin && Buf->end_index == -1 ) { Buf->empty_contin = TRUE; } } /* end else not comment */ Buf = Buf->next; } /* end while Buf */ if(tab_count > 0 && tab_filename == NULL) tab_filename = current_filename; /* for portability warning */ }/*find_fixed_contins*/ /* Function to see if line is blank (under freeform rules) */ PRIVATE int line_is_blank(char *s) { int i, c; for(i=0; (c=s[i]) != '\0' && isspace(c); i++) continue; return (c == '\0'); } ftnchek-3.3.1/intrins.c0000644000031000002260000004440307701607047015425 0ustar moniotstaff00000000000000/* $Id: intrins.c,v 1.4 2003/06/05 00:19:59 landrito Exp $ Handles datatyping of intrinsic functions. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include "ftnchek.h" #include "symtab.h" #include "intrins.h" /* Define positional flags to allow specifying more than one allowed type of argument for generics. */ #define I (1 << type_INTEGER) #define R (1 << type_REAL) #define D (1 << type_DP) #define C (1 << type_COMPLEX) #define Z (1 << type_DCOMPLEX) #define L (1 << type_LOGICAL) #define STR (1 << type_STRING) /* Table below contains information from Table 5, pp. 15-22 to 15-25 of the standard. Note: num_args == -1 means 1 or 2 args, num_args == -2 means 2 or more args. Value of arg_type is the OR of all allowable types (I, R, etc. as defined above). Value of result_type is type returned by function (type_INTEGER, etc.). If result_type is type_GENERIC, function type is same as arg type. If you add your own intrinsics to this list, the order is not important and the table size adjusts automatically. */ PRIVATE IntrinsInfo intrinsic[]={ /* Table contains: name, num_args, arg_type, result_type, flags. Special num_args values are defined in symtab.h. Flags: I_F77 if it is in Table 5 p. 15-24, I_NONF77 otherwise I_NONF90 if it is not in Chap 13 of F90 standard I_NONSTD = I_NONF77|I_NONF90 for convenience I_MIXED_ARGS if arguments are not all of same type. I_NONPURE if arg need not have defined value (LEN). I_C_TO_R indicates complex -> real in generic cases (ABS,IMAG,REAL). I_SP_R indicates specific REAL result (REAL) I_NOTARG if it is a generic with no specific meaning, or if it is a type conversion, lexical relationship, or min or max (cf. p. 15-3, sec. 15.3.2) I_EXTRA indicates common nonstd function I_VMS indicates VMS-specific function I_UNIX indicates UNIX-specific function */ #define I_NONSTD (I_NONF77|I_NONF90) {"INT", 1, I|R|D|C|Z,type_INTEGER, I_F77|I_NOTARG}, {"IFIX", 1, R, type_INTEGER, I_F77|I_NOTARG}, {"IDINT", 1, D, type_INTEGER, I_F77|I_NOTARG}, {"REAL", 1, I|R|D|C|Z,type_GENERIC, I_F77|I_NOTARG|I_C_TO_R|I_SP_R}, {"FLOAT", 1, I, type_REAL, I_F77|I_NOTARG}, {"SNGL", 1, D, type_REAL, I_F77|I_NOTARG}, {"DBLE", 1, I|R|D|C|Z,type_DP, I_F77|I_NOTARG}, {"CMPLX", I_1or2, I|R|D|C|Z,type_COMPLEX, I_F77|I_NOTARG}, {"ICHAR", 1, STR, type_INTEGER, I_F77|I_NOTARG|I_ICHAR}, {"CHAR", 1, I, type_STRING, I_F77|I_NOTARG|I_CHAR}, {"AINT", 1, R|D, type_GENERIC, I_F77}, {"DINT", 1, D, type_DP, I_F77}, {"ANINT", 1, R|D, type_GENERIC, I_F77}, {"DNINT", 1, D, type_DP, I_F77}, {"NINT", 1, R|D, type_INTEGER, I_F77}, {"IDNINT", 1, D, type_INTEGER, I_F77}, {"ABS", 1, I|R|D|C|Z,type_GENERIC, I_F77|I_C_TO_R|I_ABS}, {"IABS", 1, I, type_INTEGER, I_F77|I_ABS}, {"DABS", 1, D, type_DP, I_F77}, {"CABS", 1, C, type_REAL, I_F77}, {"MOD", 2, I|R|D, type_GENERIC, I_F77|I_MOD}, {"AMOD", 2, R, type_REAL, I_F77}, {"DMOD", 2, D, type_DP, I_F77}, {"SIGN", 2, I|R|D, type_GENERIC, I_F77|I_SIGN}, {"ISIGN", 2, I, type_INTEGER, I_F77|I_SIGN}, {"DSIGN", 2, D, type_DP, I_F77}, {"DIM", 2, I|R|D, type_GENERIC, I_F77|I_DIM}, {"IDIM", 2, I, type_INTEGER, I_F77|I_DIM}, {"DDIM", 2, D, type_DP, I_F77}, {"DPROD", 2, R, type_DP, I_F77}, {"MAX", I_2up, I|R|D, type_GENERIC, I_F77|I_NOTARG|I_MAX}, {"MAX0", I_2up, I, type_INTEGER, I_F77|I_NOTARG|I_MAX}, {"AMAX1", I_2up, R, type_REAL, I_F77|I_NOTARG}, {"DMAX1", I_2up, D, type_DP, I_F77|I_NOTARG}, {"AMAX0", I_2up, I, type_REAL, I_F77|I_NOTARG}, {"MAX1", I_2up, R, type_INTEGER, I_F77|I_NOTARG}, {"MIN", I_2up, I|R|D, type_GENERIC, I_F77|I_NOTARG|I_MIN}, {"MIN0", I_2up, I, type_INTEGER, I_F77|I_NOTARG|I_MIN}, {"AMIN1", I_2up, R, type_REAL, I_F77|I_NOTARG}, {"DMIN1", I_2up, D, type_DP, I_F77|I_NOTARG}, {"AMIN0", I_2up, I, type_REAL, I_F77|I_NOTARG}, {"MIN1", I_2up, R, type_INTEGER, I_F77|I_NOTARG}, {"LEN", 1, STR, type_INTEGER, I_F77|I_LEN}, {"INDEX", 2, STR, type_INTEGER, I_F77|I_INDEX}, {"AIMAG", 1, C, type_REAL, I_F77}, {"CONJG", 1, C, type_COMPLEX, I_F77}, {"SQRT", 1, R|D|C|Z,type_GENERIC, I_F77}, {"DSQRT", 1, D, type_DP, I_F77}, {"CSQRT", 1, C, type_COMPLEX, I_F77}, {"EXP", 1, R|D|C|Z,type_GENERIC, I_F77}, {"DEXP", 1, D, type_DP, I_F77}, {"CEXP", 1, C, type_COMPLEX, I_F77}, {"LOG", 1, R|D|C|Z,type_GENERIC, I_F77|I_NOTARG}, {"ALOG", 1, R, type_REAL, I_F77}, {"DLOG", 1, D, type_DP, I_F77}, {"CLOG", 1, C, type_COMPLEX, I_F77}, {"LOG10", 1, R|D, type_GENERIC, I_F77|I_NOTARG}, {"ALOG10", 1, R, type_REAL, I_F77}, {"DLOG10", 1, D, type_DP, I_F77}, {"SIN", 1, R|D|C|Z,type_GENERIC, I_F77}, {"DSIN", 1, D, type_DP, I_F77}, {"CSIN", 1, C, type_COMPLEX, I_F77}, {"COS", 1, R|D|C|Z,type_GENERIC, I_F77}, {"DCOS", 1, D, type_DP, I_F77}, {"CCOS", 1, C, type_COMPLEX, I_F77}, {"TAN", 1, R|D, type_GENERIC, I_F77}, {"DTAN", 1, D, type_DP, I_F77}, {"ASIN", 1, R|D, type_GENERIC, I_F77}, {"DASIN", 1, D, type_DP, I_F77}, {"ACOS", 1, R|D, type_GENERIC, I_F77}, {"DACOS", 1, D, type_DP, I_F77}, {"ATAN", 1, R|D, type_GENERIC, I_F77}, {"DATAN", 1, D, type_DP, I_F77}, {"ATAN2", 2, R|D, type_GENERIC, I_F77}, {"DATAN2", 2, D, type_DP, I_F77}, {"SINH", 1, R|D, type_GENERIC, I_F77}, {"DSINH", 1, D, type_DP, I_F77}, {"COSH", 1, R|D, type_GENERIC, I_F77}, {"DCOSH", 1, D, type_DP, I_F77}, {"TANH", 1, R|D, type_GENERIC, I_F77}, {"DTANH", 1, D, type_DP, I_F77}, {"LGE", 2, STR, type_LOGICAL, I_F77|I_NOTARG}, {"LGT", 2, STR, type_LOGICAL, I_F77|I_NOTARG}, {"LLE", 2, STR, type_LOGICAL, I_F77|I_NOTARG}, {"LLT", 2, STR, type_LOGICAL, I_F77|I_NOTARG}, /* associated intrinsic statement to check association of * pointers */ {"ASSOCIATED", I_1or2, I|R|D|C|Z|L|STR,type_LOGICAL, I_NONF77|I_NONPURE}, /* allocated intrinsic statement to check allocation of * pointers */ {"ALLOCATED", 1, I|R|D|C|Z|L|STR,type_LOGICAL, I_NONF77|I_NONPURE}, /* DOUBLE COMPLEX intrinsics are included regardless of -intrinsics option, since they are essential to support of this datatype. */ {"DCMPLX", I_1or2, I|R|D|C|Z,type_DCOMPLEX,I_NONSTD|I_NOTARG}, {"DCONJG", 1, Z, type_DCOMPLEX, I_NONSTD}, {"DIMAG", 1, Z, type_DP, I_NONSTD}, {"IMAG", 1, C|Z, type_GENERIC, I_NONSTD|I_NOTARG|I_C_TO_R}, {"DREAL", 1, Z, type_DP, I_NONSTD}, {"CDABS", 1, Z, type_DP, I_NONSTD}, {"ZABS", 1, Z, type_DP, I_NONSTD}, {"CDSQRT", 1, Z, type_DCOMPLEX, I_NONSTD}, {"ZSQRT", 1, Z, type_DCOMPLEX, I_NONSTD}, {"CDEXP", 1, Z, type_DCOMPLEX, I_NONSTD}, {"ZEXP", 1, Z, type_DCOMPLEX, I_NONSTD}, {"CDLOG", 1, Z, type_DCOMPLEX, I_NONSTD}, {"ZLOG", 1, Z, type_DCOMPLEX, I_NONSTD}, {"CDSIN", 1, Z, type_DCOMPLEX, I_NONSTD}, {"ZSIN", 1, Z, type_DCOMPLEX, I_NONSTD}, {"CDCOS", 1, Z, type_DCOMPLEX, I_NONSTD}, {"ZCOS", 1, Z, type_DCOMPLEX, I_NONSTD}, /* DFLOAT has been available in almost all Fortran implementations for decades, but curiously, was omitted from the Fortran 66 and Fortran 77 standards. A separate intrinsic is essential, because DBLE(FLOAT()) will lose bits for integer arguments larger than the REAL fraction size. If we don't include it here, declaration file output will incorrectly type it as REAL instead of DOUBLE PRECISION. -- NHFB */ {"DFLOAT", 1, I, type_DP, I_NONSTD}, /* Quad precision intrinsics are included regardless of -intrinsics option, since they are essential to support of this datatype. (Actually most of them are better handled by generics.) */ {"IQINT", 1, R, type_INTEGER, I_NONSTD|I_NOTARG|I_QARG}, {"SNGLQ", 1, R, type_REAL, I_NONSTD|I_NOTARG|I_QARG}, {"QREAL", 1, C, type_QUAD, I_NONSTD|I_NOTARG|I_QARG|I_QUAD}, {"DBLEQ", 1, R, type_DP, I_NONSTD|I_NOTARG|I_QARG}, {"QFLOAT", 1, I, type_QUAD, I_NONSTD|I_NOTARG|I_QUAD}, {"QEXTD", 1, D, type_QUAD, I_NONSTD|I_NOTARG|I_QUAD}, {"QEXT", 1, I|R|D, type_QUAD, I_NONSTD|I_NOTARG|I_QUAD}, {"QCMPLX", I_1or2, I|R|D|C|Z,type_CQUAD, I_NONSTD|I_NOTARG|I_QUAD}, {"QINT", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QNINT", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"IQNINT", 1, R, type_INTEGER, I_NONSTD|I_QARG}, {"QABS", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQABS", 1, C, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QMOD", 2, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QSIGN", 2, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QDIM", 2, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QPROD", 2, D, type_QUAD, I_NONSTD|I_QUAD}, {"QMAX1", I_2up, R, type_QUAD, I_NONSTD|I_NOTARG|I_QARG|I_QUAD}, {"QMIN1", I_2up, R, type_QUAD, I_NONSTD|I_NOTARG|I_QARG|I_QUAD}, {"QIMAG", 1, C, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QCONJG", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QSQRT", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQSQRT", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QEXP", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQEXP", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QLOG", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQLOG", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QLOG10", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QSIN", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQSIN", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QCOS", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"CQCOS", 1, C, type_CQUAD, I_NONSTD|I_QARG|I_QUAD}, {"QTAN", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QARSIN", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QARCOS", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QATAN", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QATAN2", 2, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QSINH", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QCOSH", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, {"QTANH", 1, R, type_QUAD, I_NONSTD|I_QARG|I_QUAD}, #ifdef EXTRA_INTRINSICS /* Nonstandard but widely used intrinsics. These follow both VMS and AIX defns, so they are probably de facto standard. Not included: specifics covered by a generic. N.B. Argument checking is not tight for these: some take arrays, 0 or 1 arguments, etc. that are not handled by check_intrins_args(). Remarks are placed by these cases. */ /* Bit test & Shift operations: these follow Mil. Std. 1753 */ {"BTEST", 2, I, type_LOGICAL, I_NONF77|I_EXTRA}, {"IAND", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"IOR", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"IBSET", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"IBCLR", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"IBITS", 3, I, type_INTEGER, I_NONF77|I_EXTRA}, {"IEOR", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"ISHFT", 2, I, type_INTEGER, I_NONF77|I_EXTRA}, {"ISHFTC", 3, I, type_INTEGER, I_NONF77|I_EXTRA}, {"MVBITS", 5, I, type_SUBROUTINE,I_NONF77|I_EXTRA}, {"NOT", 1, I, type_INTEGER, I_NONF77|I_EXTRA}, /* Address-of function */ {"LOC", 1,I|R|D|C|Z|L|STR,type_INTEGER, I_NONSTD|I_EXTRA}, /* Utility routines */ {"EXIT", I_0or1, I, type_SUBROUTINE,I_NONSTD|I_EXTRA}, #endif /* Unix only. These are a selected subset of the F77 library routines listed in the USENIX manual section 3F. */ #ifdef UNIX_INTRINSICS {"ABORT", 1, STR, type_SUBROUTINE,I_NONSTD|I_UNIX}, {"AND", 2, I, type_INTEGER, I_NONSTD|I_UNIX}, /* I, then STR not enforced in GETARG. */ {"GETARG", 2, I|STR, type_SUBROUTINE,I_MIXED_ARGS|I_NONSTD|I_UNIX}, {"GETENV", 2, STR, type_SUBROUTINE,I_NONSTD|I_UNIX}, {"GMTIME", 2, I, type_SUBROUTINE,I_NONSTD|I_UNIX},/*2nd arg array(9)*/ #ifdef IARGC_NO_ARG {"IARGC", 0, 0, type_INTEGER, I_NONSTD|I_UNIX}, #else #ifdef IARGC_ONE_ARG {"IARGC", 1, I, type_INTEGER, I_NONSTD|I_UNIX}, #else /* default is to allow 0 or 1 */ {"IARGC", I_0or1, I, type_INTEGER, I_NONSTD|I_UNIX}, #endif #endif {"LSHIFT", 2, I, type_INTEGER, I_NONSTD|I_UNIX}, {"LTIME", 2, I, type_SUBROUTINE,I_NONSTD|I_UNIX},/*2nd arg array(9)*/ {"OR", 2, I, type_INTEGER, I_NONSTD|I_UNIX}, #ifdef RAND_NO_ARG /*RAND() form*/ {"IRAND", 0, 0, type_INTEGER, I_NONSTD|I_UNIX}, {"RAND", 0, 0, type_REAL, I_NONSTD|I_UNIX}, #else #ifdef RAND_ONE_ARG /*RAND(ISEED) form*/ {"IRAND", 1, I, type_INTEGER, I_NONSTD|I_UNIX|I_NONPURE}, {"RAND", 1, I, type_REAL, I_NONSTD|I_UNIX|I_NONPURE}, #else /* Allow either form */ {"IRAND", I_0or1, I, type_INTEGER, I_NONSTD|I_UNIX|I_NONPURE}, {"RAND", I_0or1, I, type_REAL, I_NONSTD|I_UNIX|I_NONPURE}, #endif #endif {"RSHIFT", 2, I, type_INTEGER, I_NONSTD|I_UNIX}, {"SRAND", 1, I|R, type_SUBROUTINE,I_NONSTD|I_UNIX},/*AIX has this*/ {"SYSTEM", 1, STR, type_INTEGER, I_NONSTD|I_UNIX}, {"TIME", I_0or1, I, type_INTEGER, I_NONSTD|I_UNIX}, {"XOR", 2, I, type_INTEGER, I_NONSTD|I_UNIX}, #endif #ifdef VMS_INTRINSICS /* VMS only */ {"DATE", 1, STR, type_SUBROUTINE,I_NONSTD|I_VMS}, {"ERRSNS", 5, I, type_SUBROUTINE,I_NONSTD|I_VMS}, {"IDATE", 3, I, type_SUBROUTINE,I_NONSTD|I_VMS}, {"RAN", 1, I, type_REAL, I_NONSTD|I_VMS|I_NONPURE}, {"SECNDS", 1, R, type_REAL, I_NONSTD|I_VMS}, {"SIZEOF", 1, I|R|D|C|Z|L|STR,type_INTEGER, I_NONSTD|I_VMS}, {"TIME", 1, STR, type_SUBROUTINE,I_NONSTD|I_VMS}, #endif #undef I #undef R #undef D #undef C #undef Z #undef L #undef STR }; #define NUM_INTRINSICS (sizeof(intrinsic)/sizeof(intrinsic[0])) /* Definitions of routines start here */ PROTO( PRIVATE void set_intrinsic_numargs, ( const char *name, int choice )); PROTO(PRIVATE unsigned long kwd_hash,( const char *s )); #define EMPTY 255 PRIVATE unsigned char intrins_hashtab[INTRINS_HASHSZ]; /* init_intrins_hashtab: Initializes the intrinsic hash table by clearing it to EMPTY and then hashes all the intrinsic names into the table. */ unsigned long init_intrins_hashtab(VOID) { unsigned i,h; unsigned long hnum; unsigned long numclashes=0; for(h=0;hnum_args = choice; } } /* Function to look up an intrinsic function name in table. If found, returns ptr to table entry, otherwise NULL. */ IntrinsInfo * #if HAVE_STDC find_intrinsic(const char *s) /* given name */ #else /* K&R style */ find_intrinsic(s) char *s; /* given name */ #endif /* HAVE_STDC */ { unsigned i, h; unsigned long hnum; hnum = kwd_hash(s); for(;;) { h=hnum%INTRINS_HASHSZ; if( (i=intrins_hashtab[h]) == EMPTY ) break; /* Not found */ /* Something found: see if a match */ if( strcmp(s,intrinsic[i].name) == 0 #ifndef STANDARD_INTRINSICS && ((intrinsic[i].intrins_flags&(I_EXTRA|I_VMS|I_UNIX))==0 || ((intrinsic[i].intrins_flags&I_EXTRA) && intrinsic_set_extra) || ((intrinsic[i].intrins_flags&I_UNIX) && intrinsic_set_unix) || ((intrinsic[i].intrins_flags&I_VMS) && intrinsic_set_vms) ) #endif ) { return &intrinsic[i]; } else { /* No match: try next */ hnum = rehash(hnum); } } /* Not an intrinsic function */ return (IntrinsInfo *)NULL; } /* kwd_hash: Same as hash() but always uses full length of keyword. To keep the keyword table clash-free on any machine, packs only 4 bytes per word even if long is bigger */ PRIVATE unsigned long #if HAVE_STDC kwd_hash(const char *s) #else /* K&R style */ kwd_hash(s) char *s; #endif /* HAVE_STDC */ { unsigned long sum = 0, wd; int i = 0,j; int n = strlen(s); while (i < n) { wd = 0; for(j=1; j <= 4 && i < n; i++,j++) { wd += (unsigned long)(s[i] & 0xff) << (4 - j) * 8;} sum ^= wd;} return sum; } ftnchek-3.3.1/intrins.h0000644000031000002260000000313107370640211015413 0ustar moniotstaff00000000000000/* $Id: intrins.h,v 1.4 2001/11/03 00:55:37 moniot Rel $ Prototypes of functions defined in intrins.c Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* If including file has not included symtab.h, skip the declarations that depend on it. */ #ifdef SYMTAB_H PROTO( IntrinsInfo * find_intrinsic,( const char *s )); #endif /* These decls do not depend on symtab.h */ PROTO(unsigned long init_intrins_hashtab, ( void )); #ifndef STANDARD_INTRINSICS PROTO(void set_intrinsic_options, ( void )); #endif ftnchek-3.3.1/iokeywds.h0000644000031000002260000001571007531521214015571 0ustar moniotstaff00000000000000/* $Id: iokeywds.h,v 1.5 2002/08/23 21:01:00 moniot Rel $ Contains definitions of I/O control-list specifier keywords and their properties. If ALLOW_VMS_IO is defined, supports many VMS-specific keywords needed to deal with VMS files. You may add other locally supported specifiers as appropriate (order is not important). Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Acknowledgement: Jean-Pierre Rouits contributed the F90 and IBM/MVS keywords. */ /* Define bit flag for each I/O command */ #define RD 0x1 /* read */ #define WR 0x2 /* write */ #define OP 0x4 /* open */ #define CL 0x8 /* close */ #define INQ 0x10 /* inquire */ #define BSP 0x20 /* backspace */ #define ENF 0x40 /* endfile */ #define REW 0x80 /* rewind */ #define ANYSTMT (RD|WR|OP|CL|INQ|BSP|ENF|REW) /* Define bit flag for each type of specifier value. All types (see symtab.h) are < 16 so these values will fit in a short.*/ #define LAB (1< #include #if HAVE_STRINGS_H #include /* we use strcasecmp */ #endif #include "ftnchek.h" #include "symtab.h" #include "tokdefs.h" #include "iokeywds.h" #include "utils.h" /* we use strcasecmp */ /* variables shared with fortran.y */ extern int io_internal_file, io_list_directed; extern int current_io_unit_id; extern int current_io_unit_no; extern IO_ACCESS_TYPE current_io_access; extern IO_FORM_TYPE current_io_form; PROTO(PRIVATE int find_io_keyword,( char *s )); /* use_io_keyword handles keyword=value fields in i/o control lists */ void #if HAVE_STDC use_io_keyword(Token *keyword, Token *value, int stmt_class) #else /* K&R style */ use_io_keyword(keyword,value,stmt_class) Token *keyword,*value; int stmt_class; #endif /* HAVE_STDC */ { unsigned i; int k, stmt_flag=0, type_flag, setit,useit; int hkey=keyword->value.integer; /* Convert statement_class (a token class) into a bit flag compatible with io_keywords table. */ for(i=0; iline_num,keyword->col_num, "not an i/o statement class:"); (void)fprintf(stderr,"%d",stmt_class); return; } /* Convert value datatype into a bit flag compatible with io_keywords table. Note that '*' is handled by using type_UNDECL */ if(value->tclass == '*') type_flag = STAR; else type_flag = (1<TOK_type)); /* Look up keyword in table*/ k = find_io_keyword(hashtab[hkey].name); /* Not found or nonstandard: issue warning. A warning is always given (except under -nocheck) when a keyword is not recognized, since this can mean something is not processed correctly. */ if( io_keywords[k].nonstandard || io_keywords[k].nonf90 #ifdef ALLOW_VMS_IO /* special VMS case: OPEN(...,NAME=str,...) */ || (io_keywords[k].vms_name && stmt_flag==OP) #endif /*ALLOW_VMS_IO*/ ) { /* If nonstandard and -f77 or -f90 flag given, issue warning */ if( (io_keywords[k].nonstandard && f77_io_keywords) || (io_keywords[k].nonf90 && f90_io_keywords) ) { nonstandard(keyword->line_num,keyword->col_num, (io_keywords[k].nonf90 && f90_io_keywords),0); } if(io_keywords[k].name == NULL) { if( f77_io_keywords || f90_io_keywords ) { /* abbrev warning if nonstd message given */ msg_tail(": unrecognized keyword"); } else { if(misc_warn) { warning(keyword->line_num,keyword->col_num, "Unrecognized keyword"); } } if(f77_io_keywords || f90_io_keywords || misc_warn) { msg_tail(hashtab[hkey].name); msg_tail("-- Ftnchek may process incorrectly"); } } } /* If label expected, switch integer const to label */ if( (LAB & io_keywords[k].allowed_types) && (type_flag == INT && is_true(LIT_CONST,value->TOK_flags))) { type_flag = LAB; } /* Now check it out */ /* Check if keyword is allowed with statement */ if(!(stmt_flag & io_keywords[k].allowed_stmts)) { syntax_error(keyword->line_num,keyword->col_num, "keyword illegal in this context"); return; } /* Check if the type is OK */ if( !(type_flag & io_keywords[k].allowed_types) ) { syntax_error(value->line_num,value->col_num, "control specifier is incorrect type"); return; } /* Now handle usage */ /* internal file?: WRITE(UNIT=str,...) */ if(stmt_flag == WR && type_flag == CHR && io_keywords[k].allowed_types == UID) { setit = TRUE; useit = FALSE; } /* INQUIRE: set it if inquire_set flag true */ else if(stmt_flag == INQ && io_keywords[k].inquire_set) { setit = TRUE; useit = FALSE; } /* otherwise use use/set flags in table */ else { useit = io_keywords[k].implies_use; setit = io_keywords[k].implies_set; } /* Keep note if format is '*' */ if(value->tclass == '*' && io_keywords[k].allowed_types == FID ) { io_list_directed = TRUE; } /* Handle NML=namelist */ if(type_flag == NML){ ref_namelist(value,stmt_class); current_io_form = IO_FORM_FORMATTED; /* namelist I/O is formatted */ } /* Handle UNIT==unit */ if(io_keywords[k].allowed_types == UID) { if( type_flag == STAR ) { current_io_unit_id = IO_UNIT_DEFAULT; /* special code to signify default unit */ } /* Be careful only to treat integer variables or literals as unit numbers. Leave internal files as undefined units so they won't create records in the I/O usage table. */ else if( type_flag == INT ) { if(is_true(ID_EXPR,value->TOK_flags)){ current_io_unit_id = value->value.integer; /* get hash code of identifier */ } else if( is_true(LIT_CONST,value->TOK_flags) && value->TOK_type == type_byte(class_VAR,type_INTEGER)) { current_io_unit_no = value->value.integer; /* get literal int value */ } } /* Catch internal unit that is a const or expr (F90 std 9.2.2.1) */ else if( type_flag == CHR && !is_true(ID_EXPR,value->TOK_flags) ) { syntax_error(value->line_num,value->col_num, "internal file must be a variable"); } } /* Handle FMT=format */ if(io_keywords[k].allowed_types == FID) { current_io_form = IO_FORM_FORMATTED; if( type_flag == LAB) { ref_label(value,LAB_IO); } } /* Handle END=label and ERR=label */ if(io_keywords[k].allowed_types == LAB && type_flag == LAB) { ref_label(value,LAB_GOTO); if( style_goto ) { /* warn if GOTO considered harmful */ warning(keyword->line_num,keyword->col_num, "Obsolescent feature: branch to labeled statement"); } } /* Handle ACCESS=mode and FORM=mode */ if( stmt_flag != INQ && (k == IOKW_ACCESS || k == IOKW_FORM) ) { if( type_flag == CHR ) { /* protect ourself: error was warned about already */ char *modespec=(char *)NULL; /* place to record the literal string of value */ if( is_true(LIT_CONST,value->TOK_flags) ) { modespec = value->value.string; } else { /* if specifier value is not literal, let's hope it's a parameter */ int h=value->value.integer; Lsymtab *symt; if((symt=hashtab[h].loc_symtab) != NULL) { if(symt->parameter) modespec = symt->info.param->value.string;/* whew! found it! */ } /* if not, current value will have to stay default */ } if( modespec != (char *)NULL ) { /* if modespec was found, record it */ /* Record which type of ACCESS specified */ if(k == IOKW_ACCESS) { if( strcasecmp(modespec,"SEQUENTIAL") == 0 ) current_io_access = IO_ACCESS_SEQUENTIAL; else if( strcasecmp(modespec,"DIRECT") == 0 ) current_io_access = IO_ACCESS_DIRECT; /* Some compilers accept ACCESS=APPEND */ else if( strcasecmp(modespec,"APPEND") == 0 ) { if( f77_io_keywords || f90_io_keywords ) { nonstandard(value->line_num,value->col_num, f90_io_keywords,0); if(f90_io_keywords) { msg_tail(": suggest use POSITION='APPEND' instead"); } } /* treat as ACCESS=EQUENTIAL */ current_io_access = IO_ACCESS_SEQUENTIAL; } else { syntax_error(value->line_num,value->col_num, "ACCESS specifier must be \"SEQUENTIAL\" or \"DIRECT\""); } } /* Record which type of FORM specified */ else { /* k == IOKW_FORM */ if( strcasecmp(modespec,"FORMATTED") == 0 ) current_io_form = IO_FORM_FORMATTED; else if( strcasecmp(modespec,"UNFORMATTED") == 0 ) current_io_form = IO_FORM_UNFORMATTED; else { syntax_error(value->line_num,value->col_num, "FORM specifier must be \"FORMATTED\" or \"UNFORMATTED\""); } } } } } /* handle REC=rec in READ or WRITE */ if( k == IOKW_REC ) { current_io_access = IO_ACCESS_DIRECT; } /* Update usage status if a variable. */ if( is_true(ID_EXPR,value->TOK_flags)) { if(useit) { use_variable(value); } if(setit) { use_lvalue(value); } /* Character variable as unit id = internal file */ if(type_flag == CHR && io_keywords[k].allowed_types == UID) { io_internal_file = TRUE; } } else if(setit) { /* if value is set, must be an lvalue */ syntax_error(value->line_num,value->col_num, "variable required"); return; } } void record_io_usage( Token *stmt ) { /* First, see if we have something to record. (We don't record I/O to internal files, for instance.) Either id or number should be defined. */ if( current_io_unit_id != IO_UNIT_UNKNOWN || current_io_unit_no != IO_UNIT_UNKNOWN ) { /* Allocate space for table if that was not done as yet */ if(io_unit_info == (IO_Unit_Info*)NULL) { max_io_unit_usages = IO_UNIT_INFO_SIZE; io_unit_info = (IO_Unit_Info*)malloc(max_io_unit_usages*sizeof(IO_Unit_Info)); } /* Reallocate space if table has filled up */ if(num_io_unit_usages >= max_io_unit_usages) { max_io_unit_usages *= 2; /* double the table size */ io_unit_info = (IO_Unit_Info*)realloc(io_unit_info, max_io_unit_usages*sizeof(IO_Unit_Info)); } /* Now insert the new entry. If the unit_id is a parameter, look it up so the numerical value will be known too. */ if( current_io_unit_id >= 0 ) { Lsymtab *symt; if((symt=hashtab[current_io_unit_id].loc_symtab) != NULL) { /* ultra bogus if not in symtab */ if( symt->type == type_byte(class_VAR,type_INTEGER) && symt->parameter) { /* Can we do business? */ current_io_unit_no = symt->info.param->value.integer; } } } io_unit_info[num_io_unit_usages].line_num = stmt->line_num; io_unit_info[num_io_unit_usages].unit_no = current_io_unit_no; io_unit_info[num_io_unit_usages].unit_id = current_io_unit_id; io_unit_info[num_io_unit_usages].io_access = current_io_access; io_unit_info[num_io_unit_usages].io_form = current_io_form; io_unit_info[num_io_unit_usages].io_operation = curr_stmt_class; ++num_io_unit_usages; } } /* Handle VMS OPEN keywords that have no =value */ void #if HAVE_STDC use_special_open_keywd(Token *id) #else /* K&R style */ use_special_open_keywd(id) Token *id; #endif /* HAVE_STDC */ { #ifdef ALLOW_VMS_IO unsigned i; char *id_name= hashtab[id->value.integer].name; for(i=0; iline_num,id->col_num,f90_io_keywords,0); return; } } #endif/*ALLOW_VMS_IO*/ /* not found or not VMS: report error */ syntax_error(id->line_num,id->col_num, "Illegal control-list item"); } /* find_io_keyword looks up an i/o keyword in io_keywords table and returns its index. Uses simple linear search since not worth hash overhead. If not found, returns index of last element of list, which is special. */ PRIVATE int #if HAVE_STDC find_io_keyword(char *s) /* given name */ #else /* K&R style */ find_io_keyword(s) char *s; /* given name */ #endif /* HAVE_STDC */ { int i; for(i=0; io_keywords[i].name != NULL; i++) { if(strcmp(io_keywords[i].name, s) == 0) { break; } } return i; } ftnchek-3.3.1/keywords.c0000644000031000002260000006154307701607047015612 0ustar moniotstaff00000000000000/* $Id: keywords.c,v 1.13 2003/06/05 00:19:59 landrito Exp $ Routines to distinguish keywords from identifiers. Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include #include "ftnchek.h" #include "symtab.h" #include "tokdefs.h" #include "forlex.h" extern int in_attrbased_typedecl; /* shared with fortran.y */ PROTO( PRIVATE int is_keyword,( int i )); /* Keyword definition table holds names of keywords and flags used to differentiate them from identifiers. */ #define IK 0x01 /* Allowed only in initial keyword of a statement (can be preceded only by non-EK keywords) */ #define NP 0x02 /* Never followed by ( or = */ #define MP 0x04 /* Must be followed by ( */ #define NI 0x08 /* Disallowed in logical IF */ #define EK 0x10 /* Cannot be followed by IK keyword: turns off initial_flag */ #define TY 0x20 /* Data type name */ #define NA 0x40 /* Never followed by alphabetic. Put this onto any that can stand alone or be followed by a second keyword, so that the longer form will be taken if present. */ #define CN 0x80 /* Can be preceded by construct-name and colon. (Only set this flag if there is support in the parser.) */ #define MB 0x100/* Blanks mandatory between two words (in free form) */ #define TK 0x200/* Type name that can be followed by kind-spec or len-spec */ /* Bisection search done at each length step requires fixed-length strings for keyword names. Macro below identifies which keyword is the longest. */ #define LONGEST_KEYWORD "DOUBLEPRECISION" /* Number of keywords in table */ #define NUM_KEYWORDS (sizeof(keywords)/sizeof(keywords[0])) /* Macro to determine whether a token class C is that of a data type (for purposes of is_keyword) */ #ifndef OLDDEF #define is_a_type_token(C) (((C)>=keytab_offset&&\ (unsigned)((C)-keytab_offset)=tok_BYTE && ((C)<=tok_REAL)) #endif /* Keyword list must be maintained in alphabetical order. New keywords can be added so long as their context info is specified. No other source code changes are necessary, but of course new keywords won't be recognized by the parser till you add productions to fortran.y. Also, if IK flag is not set, is_keyword will have to look at it specially. Field split_pos is 0 if keyword cannot be split; otherwise it is the length of the first moiety. END BLOCK DATA is the only 3-word keyword, and the implementation happens to check its "END" based on ENDSUBROUTINE's split_pos so OK. */ PRIVATE struct { char name[sizeof(LONGEST_KEYWORD)]; short tclass, /* token class */ context; /* local-context flags */ short split_pos; /* where keyword may have space */ } keywords[]={ {"ACCEPT", tok_ACCEPT, IK | EK, 0}, {"ALLOCATABLE", tok_ALLOCATABLE, IK | NI | EK | NP, 0}, {"ALLOCATE", tok_ALLOCATE, IK | MP | NI | EK, 0}, {"ASSIGN", tok_ASSIGN, IK | NP | EK | NA, 0}, {"BACKSPACE", tok_BACKSPACE, IK | EK, 0}, {"BLOCKDATA", tok_BLOCKDATA, IK | EK | NP | NI, 5}, {"BYTE", tok_BYTE, IK | NI | EK | TY, 0}, {"CALL", tok_CALL, IK | NP | EK, 0}, {"CASE", tok_CASE, IK | MP | NI | EK | NA, 0}, {"CASEDEFAULT", tok_CASEDEFAULT,IK | NP | NI | EK | MB, 4}, {"CHARACTER", tok_CHARACTER, IK | NI | EK | TY | TK, 0}, {"CLOSE", tok_CLOSE, IK | EK | MP | NA, 0}, {"COMMON", tok_COMMON, IK | NP | NI | EK, 0}, {"COMPLEX", tok_COMPLEX, IK | NI | EK | TY | TK, 0}, {"CONTINUE", tok_CONTINUE, IK | NP | EK | NA, 0}, {"CYCLE", tok_CYCLE, IK | NP | EK, 0}, {"DATA", tok_DATA, IK | NI | EK, 0}, {"DEALLOCATE", tok_DEALLOCATE, IK | MP | NI | EK, 0}, {"DIMENSION", tok_DIMENSION, IK | NP | NI | EK, 0}, {"DO", tok_DO, IK | NP | NI | EK | CN, 0}, {"DOUBLECOMPLEX",tok_DOUBLECOMPLEX, IK | NI | EK | TY, 6}, {"DOUBLEPRECISION",tok_DOUBLEPRECISION, IK | NI | EK | TY, 6}, {"DOWHILE", tok_DOWHILE, IK | NI | EK | MB, 2}, {"ELSE", tok_ELSE, IK | NP | NI, 0}, #if 0 /* ELSEIF not lexed: lexes ELSE and IF separately */ {"ELSEIF", tok_ELSEIF, IK | NI | EK | MP | NA, 4}, #endif {"END", tok_END, IK | NP | NI | NA, 0}, {"ENDBLOCKDATA",tok_ENDBLOCKDATA,IK | NP | NI | EK, 8}, {"ENDDO", tok_ENDDO, IK | NP | NI | EK, 3}, {"ENDFILE", tok_ENDFILE, IK | EK, 3}, {"ENDFUNCTION", tok_ENDFUNCTION,IK | NP | NI | EK, 3}, {"ENDIF", tok_ENDIF, IK | NP | NI | EK, 3}, {"ENDPROGRAM", tok_ENDPROGRAM, IK | NP | NI | EK, 3}, {"ENDSELECT", tok_ENDSELECT, IK | NP | NI | EK, 3}, {"ENDSUBROUTINE",tok_ENDSUBROUTINE, IK | NP | NI | EK, 3}, {"ENTRY", tok_ENTRY, IK | NP | NI | EK, 0}, {"EQUIVALENCE", tok_EQUIVALENCE,IK | NI | EK | MP | NA, 0}, {"EXIT", tok_EXIT, IK | NP | EK, 0}, {"EXTERNAL", tok_EXTERNAL, IK | NP | NI | EK, 0}, {"FORMAT", tok_FORMAT, IK | NI | EK | MP | NA, 0}, {"FUNCTION", tok_FUNCTION, NP | NI | EK, 0}, {"GOTO", tok_GOTO, IK | EK, 2}, {"IF", tok_IF, IK | NI | EK | MP | NA | CN, 0}, {"IMPLICIT", tok_IMPLICIT, IK | NP | NI, 0}, {"INCLUDE", tok_INCLUDE, IK | NP | NI | EK | NA, 0}, {"INQUIRE", tok_INQUIRE, IK | EK | MP | NA, 0}, {"INTEGER", tok_INTEGER, IK | NI | EK | TY | TK, 0}, {"INTRINSIC", tok_INTRINSIC, IK | NP | NI | EK, 0}, {"LOGICAL", tok_LOGICAL, IK | NI | EK | TY | TK, 0}, {"NAMELIST", tok_NAMELIST, IK | NP | NI | EK, 0}, {"NONE", tok_NONE, IK | NI | EK | TY | NA, 0}, {"NULLIFY", tok_NULLIFY, IK | MP | NI | EK, 0}, {"OPEN", tok_OPEN, IK | EK | MP | NA, 0}, {"PARAMETER", tok_PARAMETER, IK | NI | EK | MP | NA, 0}, {"PAUSE", tok_PAUSE, IK | NP | EK, 0}, #ifdef ALLOW_CRAY_POINTERS {"POINTER", tok_POINTER, IK | NI | EK, 0}, #endif {"PRINT", tok_PRINT, IK | EK, 0}, {"PROGRAM", tok_PROGRAM, IK | NP | NI | EK, 0}, {"READ", tok_READ, IK | EK, 0}, {"REAL", tok_REAL, IK | NI | EK | TY | TK, 0}, {"RETURN", tok_RETURN, IK | EK, 0}, {"REWIND", tok_REWIND, IK | EK, 0}, {"SAVE", tok_SAVE, IK | NP | NI | EK, 0}, {"SELECTCASE", tok_SELECTCASE, IK | MP | NI | EK | NA | CN | MB,6}, {"STOP", tok_STOP, IK | NP | EK, 0}, {"SUBROUTINE", tok_SUBROUTINE, IK | NP | NI | EK, 0}, {"TARGET", tok_TARGET, IK | NI | EK | NP, 0}, {"THEN", tok_THEN, IK | NP | EK, 0}, {"TO", tok_TO, NI | EK, 0}, {"TYPE", tok_TYPE, IK | EK, 0}, {"WHILE", tok_WHILE, NI | EK | MP | NA, 0}, {"WRITE", tok_WRITE, IK | EK | MP | NA, 0}, }; /* Lookup table to allow index in keywords table of a given keyword to be found by its token number. Initialized by init_keyhashtab. */ PRIVATE short keytab_offset, /* lowest keyword token number */ *keytab_index; /* array of keyword indices */ PRIVATE unsigned keytab_size; /* Number of elements in keytab_index */ /* get_identifier reads a string of characters satisfying isidletter. As they are read and as long as they are alphabetic, it looks for a match to a keyword, and whenever one is found, checks with is_keyword to see if the context is right. If so, it returns the keyword. Otherwise it keeps going and eventually returns the id. */ void #if HAVE_STDC get_identifier(Token *token) #else /* K&R style */ get_identifier(token) Token *token; #endif /* HAVE_STDC */ { int c, /* Uppercase version of current letter */ preceding_c,/* Char preceding latest id */ has_embedded_space, /* Spaces inside keyword or id */ split_pos, /* Where space allowed */ kwd_has_embedded_space, /* Keyword does not follow freeform rules*/ kwd_not_separated, /* keyword followed by alphanumeric w/o spc */ kwd_split_pos, /* for MB keyword: actual location of blank */ kwd_not_split, /* for checking MB keywords */ space_seen_lately, /* Flag for catching embedded space */ lo,hi, /* Indices in keyword table where match may be */ keywd_class;/* Class number returned by is_keyword */ unsigned klen; /* Length of id read so far (after keyword test) */ int possible_keyword; token->tclass = tok_identifier; keywd_class = FALSE; klen = 0; lo = 0; hi = NUM_KEYWORDS-1; split_pos = 0; /* Define shorthand for the keyword letter under study */ #define KN(i) keywords[i].name #define KL(i) keywords[i].name[klen] possible_keyword = TRUE; preceding_c = prev_char; has_embedded_space = kwd_has_embedded_space = kwd_not_split = FALSE; kwd_not_separated = FALSE; kwd_split_pos = 0; space_seen_lately = FALSE; /* set stmt class in case is_keyword not invoked */ if(initial_flag && !in_attrbased_typedecl) curr_stmt_class = tok_identifier; /* This loop gets letter [letter|digit]* forms */ while(isidletter(curr_char) || isadigit(curr_char)) { c = makeupper(curr_char); /* Get the next char of id */ if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = (int)makeupper(curr_char); if(space_seen_lately) { has_embedded_space = TRUE; /* If space occurs, it is OK if located where it is allowed in keyword pair. If split where it's OK, record for checking MB. */ if( klen != split_pos ) kwd_has_embedded_space = TRUE; else kwd_split_pos = split_pos; } bi_advance(); /* Pull in the next character */ space_seen_lately = iswhitespace(prev_char); /* As long as it may yet be a keyword, keep track of whether to invoke is_keyword. */ if(possible_keyword) { if(!isaletter(c) /* If not alphabetic, cannot be keyword */ || klen >= sizeof(keywords[0].name)-1) /* or overlength */ { #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("BISECTION")) { src_text_buf[src_text_len] = '\0'; (void)fprintf(list_fd,"\n%s not a keyword because",src_text_buf); if(!isaletter(c)) (void)fprintf(list_fd," non-letter at %c",c); if(klen >= sizeof(keywords[0].name)-1) (void)fprintf(list_fd,"length %d >= max %d",klen,sizeof(keywords[0].name)-1); } #endif possible_keyword = FALSE; } else { int mid; #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("BISECTION")) { (void)fprintf(list_fd,"\nklen=%d c=%c",klen,c); (void)fprintf(list_fd,"\nBisecting [lo,hi]=[%d,%d] \"%s\"..\"%s\"", lo,hi,KN(lo),KN(hi)); } #endif /* Bisect lo .. hi looking for match on characters found so far. */ while(lo <= hi) { mid = (lo + hi)/2; if( KL(mid) < c ) { /* No match in lower half */ lo = mid+1; } else if( KL(mid) > c ) {/* No match in upper half */ hi = mid-1; } else { /* Match at midpoint: Bisect each half to find the new subinterval. */ int midlo=mid, midhi=mid; /* Bisect lo .. mid */ while( lo < midlo-1 && KL(lo) != c) { mid = (lo + midlo)/2; if( KL(mid) < c ) { lo = mid+1; } else { /* equal */ midlo = mid; } } if( KL(lo) != c ) lo = midlo; /* Bisect mid .. hi */ while( midhi < hi-1 && KL(hi) != c ) { mid = (midhi + hi)/2; if( KL(mid) > c ) { hi = mid-1; } else { /* equal */ midhi = mid; } } if( KL(hi) != c ) hi = midhi; break; /* After bisecting each half, we are done */ } /* end else KL(mid) == c */ } /* end while(lo <= hi) */ klen++; /* Now increment the length */ #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("BISECTION")) { (void)fprintf(list_fd,"\nNew [lo,hi]=[%d,%d] \"%s\"..\"%s\"", lo,hi,KN(lo),KN(hi)); } #endif /* If range is null, a match has been ruled out. */ if(lo > hi) { #ifdef DEBUG_IS_KEYWORD if(debug_lexer && getenv("BISECTION")) { src_text_buf[src_text_len] = '\0'; (void)fprintf(list_fd,"\nKeyword ruled out for %s at length %d since lo %d > hi %d", src_text_buf,klen,lo,hi); } #endif possible_keyword = FALSE; } /* If length of first keyword in range is equal to the new length, then we have a match at this point. Check it out with is_keyword. */ else if(KN(lo)[klen] == '\0') { if( (keywd_class = is_keyword(lo)) != FALSE) { token->tclass = keywd_class; /* It's a keyword */ token->value.string = NULL; token->src_text = KN(lo); /* Keyword butting against following token is warned about separately if token is an identifier. Here we catch cases like BACKSPACE6 where next token is a number. */ kwd_not_separated = (!space_seen_lately && isdigit(curr_char)); /* If keyword is required to have a space between parts, check if it does. */ if( keywords[lo].context & MB ) kwd_not_split = (kwd_split_pos != keywords[lo].split_pos); break; /* Quit the input loop */ } else if(lo == hi) { /* Match is unique and ruled out */ possible_keyword = FALSE; } } }/* end else isaletter(c) */ /* Longest match gives split pos if any. This fails for DO UBLE... */ split_pos = (hi >= 0)? keywords[hi].split_pos: 0; }/* end if(possible_keyword) */ }/* end while(isidletter || isadigit) */ if(keywd_class == FALSE) { /* it is an identifier */ /* Identifier: find its hashtable entry or create a new entry. */ int h; Lsymtab *symt; #ifdef ALLOW_TYPELESS_CONSTANTS /* Watch out for const like X'nnn' */ if(src_text_len == 1 && isaquote(curr_char)) { /* Read the string, append the trailing quote then invoke routine to interpret it. */ get_string(token); #ifndef LEX_RAWSTRINGS if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len++] = quote_char; #endif get_binary_const(token,src_text_buf[0],space_seen_lately); return; } #endif if(src_text_len < MAX_SRC_TEXT) src_text_buf[src_text_len] = '\0'; token->value.integer = h = hash_lookup(src_text_buf); token->src_text = hashtab[h].name; /* If it is an array give it a special token class, so that arrays can be distinguished from functions in the grammar. */ if((symt=hashtab[h].loc_symtab) != NULL && symt->array_var) { token->tclass = tok_array_identifier; } } else { /* It is a keyword */ has_embedded_space = kwd_has_embedded_space; } /* Check identifiers for being juxtaposed to keywords or having internal space. Keywords are warned about if they are split where they are not allowed to be. Special case: ELSEIF is never a problem. */ if(( ((pretty_no_space || (free_form && f90_freeform_space)) && (isidletter(preceding_c) || isadigit(preceding_c) || kwd_not_separated) && !(prev_token_class==tok_ELSE && keywd_class==tok_IF) ) || ((pretty_extra_space || (free_form && f90_freeform_space)) && has_embedded_space) ) ) { if(token->tclass==tok_identifier || token->tclass==tok_array_identifier) { space_violation(token->line_num,token->col_num,"identifier"); msg_tail(hashtab[token->value.integer].name); } else { space_violation(token->line_num,token->col_num,"keyword"); msg_tail(keywords[keytab_index[keywd_class-keytab_offset]].name); } if(has_embedded_space) msg_tail("has embedded space"); else msg_tail("not clearly separated from context"); } if( keywd_class != FALSE ) { if( free_form && f90_freeform_space && kwd_not_split ) { space_violation(token->line_num,token->col_num,"keyword"); msg_tail(keywords[keytab_index[keywd_class-keytab_offset]].name); msg_tail("lacks required space between parts"); } } #ifdef DEBUG_FORLEX if(debug_lexer){ switch((int)(token->tclass)) { case tok_identifier: (void)fprintf(list_fd,"\nIdentifier:\t\t%s", token->src_text); break; case tok_array_identifier: (void)fprintf(list_fd,"\nArray_identifier:\t%s", token->src_text); break; default: (void)fprintf(list_fd,"\nKeyword:\t\ttok_%s", token->src_text); break; } } #endif } /* get_identifier */ /* iskeyword: Determines (to the best of its current ability) whether a given identifier is a keyword or not. Hopefully now no keywords are reserved. For keywords that can be split, like DO WHILE, the longest form of the keyword is gotten, i.e. this yields tok_DOWHILE not tok_DO then tok_WHILE. There are some exceptions (NA flag not present) like IMPLICIT. Method uses context from start of statement up to and including the character following the putative keyword to eliminate as many cases as possible. Any non-IK keywords (those that need not be in the initial series of keywords of statement) have special code to handle them. The rest are handed off to looking_at_keywd which tries to see if it is an assignment statement. Note that some rules that could be used if F77 Standard were adhered to strictly are not used here. The idea is to allow extensions, and leave catching syntax errors in the parser. For example, specification-statement keywords are not excluded after the first executable statement has been seen. The status of a variable as declared array or character type is not consulted in ruling out an assignment statement if following parentheses are present. Etc. */ /* Macro to test if all the specified bits are set */ #define MATCH(CONTEXT) ((keywords[i].context & (CONTEXT)) == (CONTEXT)) PRIVATE int #if HAVE_STDC is_keyword(int i) /* Index in keywords table */ #else /* K&R style */ is_keyword(i) int i; /* Index in keywords table */ #endif /* HAVE_STDC */ { int ans = FALSE; int putative_keyword_class; /* Class of the supposed keyword */ extern int construct_name_seen, /* helper variables set by parser */ stmt_sequence_no; /* shared with fortran.y */ while(iswhitespace(curr_char)) /* Move to lookahead char */ advance(); #ifdef DEBUG_IS_KEYWORD if(debug_lexer){ (void)fprintf(list_fd, "\nkeyword %s: initialflag=%d implicitflag=%d ", keywords[i].name,initial_flag,implicit_flag); (void)fprintf(list_fd, "context=%o, next char=%c %o",keywords[i].context, curr_char,curr_char); } #endif putative_keyword_class = keywords[i].tclass; if( !initial_flag && MATCH(IK) ) { /* Dispose of keywords which can only occur in initial part of statement, if found elsewhere. One exception is something with a construct-name tacked on in front of it, which is a cinch. */ if( (ans = (construct_name_seen && MATCH(CN))) ) { if( putative_keyword_class == tok_DO && looking_at_keywd(tok_WHILE) ) { WHILE_expected = TRUE; } } } #if 0 /* This does not work: curr_stmt_class not cleared beforehand */ else if(curr_stmt_class == tok_IF && MATCH(NI)) { /* Dispose of keywords which cannot occur in stmt field of logical IF if that is where we are. */ ans = FALSE; } #endif else if(MATCH(NA) && isalpha(curr_char)) { /* Dispose of keywords which cannot be followed by alphabetic character if that is so. Handle variant unparenthesized PARAMETER stmt. Reject if it follows a stmt fun or executable stmt. */ if(putative_keyword_class != tok_PARAMETER || stmt_sequence_no > SEQ_STMT_FUN) { ans = FALSE; } else { /* non-paren form _should_ look like an assignment */ ans = ! looking_at_keywd(putative_keyword_class); } } else if(putative_keyword_class == tok_TO) {/* A non-IK case */ /* TO following GO is handled with GO. Here identify it if it follows a label in ASSIGN statement. */ ans = ( curr_stmt_class == tok_ASSIGN && prev_token_class == tok_integer_const); } else if(putative_keyword_class == tok_FUNCTION /* A non-IK case */ && (stmt_sequence_no != 0 /* not the first statement of module */ || !(initial_flag /* if not initial can only be preceded by type */ || is_a_type_token(curr_stmt_class)) )) { ans = FALSE; /* otherwise it will be handled correctly by looking_at */ } else if(putative_keyword_class == tok_WHILE) { /* A non-IK case */ /* Only occurs in DO label [,] WHILE and constructname: DO WHILE */ ans = WHILE_expected; WHILE_expected = FALSE; } /* Remaining cases are IK in initial part */ /* Eliminate those which can never be followed by '(' or '=' if that is what we have. Exception for DIMENSION in attr-based type declaration, which must be followed by left paren. */ else if(MATCH(NP) && ((curr_char == '(' && !(in_attrbased_typedecl && putative_keyword_class == tok_DIMENSION)) || curr_char == '=') ) { ans = FALSE; } /* Likewise with those that must be followed by '(' but aren't. Exception for PARAMETER in attr-based type declaration, which must be followed by comma or double colon. */ else if(MATCH(MP) && curr_char != '(') { ans = (in_attrbased_typedecl && putative_keyword_class == tok_PARAMETER && (curr_char == ',' || curr_char == ':')); } /* END DO: handle its DO here */ else if( putative_keyword_class == tok_DO && curr_char == EOS ) { /* Also must have prev_token_class == tok_END, but no need to check since end-of-statement suffices. */ ans = TRUE; } /* Other type names always follow the word IMPLICIT */ else if( implicit_flag ) { ans = MATCH(TY); } else { /* Remaining cases are keywords that must be in initial position. If followed by '=' must be an identifier. If followed by '(' then may be an array or character lvalue, so use looking_at to scan ahead to see if this is an assignment statement. */ ans = looking_at_keywd(putative_keyword_class); } /* Save initial token class for use by parser. Either set it to keyword token or to id for assignment stmt. */ if(initial_flag && !in_attrbased_typedecl) { curr_stmt_class = (ans? keywords[i].tclass: tok_identifier); } /* Turn off the initial-keyword flag if this is a keyword that cannot be followed by another keyword or if it is not a keyword. */ if(ans) { if(keywords[i].context & EK) { /* In case lookahead to :: was not done or failed, a type keyword followed immediately by comma must be attr-based form. If TK type keyword is followed by parenthesis, it signals a parentheized KIND or LEN spec, which needs a special left paren to avoid shift/reduce conflict in the grammar. */ if( MATCH(TY) ) { if( curr_char == ',' ) { in_attrbased_typedecl = TRUE; } else if( MATCH(TK) && curr_char == '(' ) { if(! (implicit_flag && looking_at_implicit_list()) ) need_special_lparen = TRUE; } } if( !in_attrbased_typedecl ) initial_flag = FALSE; } return keywords[i].tclass; } else { /* If no more letters follow, then keyword here is ruled out. Turn off initial_flag. */ if( ! isalpha(curr_char) ) initial_flag = FALSE; return 0; /* Not found in list */ } }/* End of is_keyword */ /* init_keyhashtab: */ /* Hashing is no longer used. This guy now only initializes the table of indices that allow keywords to be looked up by their token class*/ void init_keyhashtab(VOID) { unsigned i; int k,kmin,kmax; kmin = kmax = keywords[0].tclass; /* Find min and max token classes */ for(i=1; i kmax) kmax = k; } keytab_offset = kmin; /* Index table from [kmin..kmax] -> [0..size-1] */ keytab_size = (unsigned) (kmax-kmin+1); if( (keytab_index=(short *)calloc(keytab_size,sizeof(keytab_index[0]))) == (short *)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "cannot allocate space for keytab_index"); } /* Now fill in the lookup table, indexed by class - offset */ for(i=0; i #include #include #include "ftnchek.h" #include "symtab.h" #include "plsymtab.h" #define TOP_FILE -1 /* not an include file */ #define HASHSIZE 50 /* hash table size */ /* Linked-list: describe how references are used */ typedef struct lab_ref_list { short file_ref; /* file referenced: = TOP_FILE if not an include file, else = inctable_index */ LINENO_t line_ref; /* line referenced */ int ref_type; /* reference type: arg, assign, do, goto, or I/O (format) */ struct lab_ref_list *next; /* link to next element */ } Lab_ref_list; /* A label */ typedef struct label_node { LABEL_t lab; /* label numeric value */ short file_def; /* file where defined; = TOP_FILE if not an include file, else = inctable_index */ LINENO_t line_def; /* line number where defined */ int stmt_type; /* statement type: specification format, or executable */ unsigned defined:1; /* TRUE if label is defined */ unsigned referenced:1; /* TRUE if label is referenced */ unsigned do_label:1; /* TRUE if label used in DO statement */ Lab_ref_list *how_used; /* list describing each ref to label */ struct label_node *next; /* pointer to next label in linked list */ } Lab; /* >>>>> function prototypes <<<<< */ PRIVATE unsigned int hash_label(LABEL_t label); PRIVATE int insert_lab(LABEL_t label); PRIVATE void ref_error_check(char *mod_name, int type1, int type2, int type3, Lab *label); PRIVATE void print_msg(LABEL_t label, short file, LINENO_t line, const char string[]); PRIVATE void bubble_sort(int n); PRIVATE void swap(Lab *x, Lab *y); PRIVATE int compare_labs(const void *a, const void *b); PRIVATE Lab_ref_list *reverse_ref_list(Lab_ref_list *t); PRIVATE int find_label(LABEL_t label); PRIVATE void clear_footnotes(void); PRIVATE void print_key(int num_footnotes); /* >>>>> global variables <<<<< */ PRIVATE int num_labels; /* current number of entries in labtable */ PRIVATE Lab *labtable; /* table of labels defined or used: mallocked at run-time */ PRIVATE int labtable_size=0; /* current size of labtable */ PRIVATE int ref_index; /* index of ref_lists */ PRIVATE int ref_lists_size = REF_LISTS_SIZE; /* current max size of ref_lists */ PRIVATE Lab_ref_list *ref_lists = NULL; /* table of label ref_lists */ PRIVATE unsigned any_lab_defined; /* used to check if any label has been defined */ PRIVATE unsigned any_lab_referenced; /* used to check if any label has been referenced */ PRIVATE Lab *hash_table[HASHSIZE]; /* array of pointers to label linked list for use in hashing scheme */ PRIVATE unsigned int last_hash_index; /* last hash index searched */ /* * hash: get a hash index */ PRIVATE unsigned int hash_label(LABEL_t label) { /* numbers used in the following random number generator obtained from Numerical Recipes in C: The Art of Scientific Computing */ return ( (1861 * label + 49297) % 233280 ); } /* * init_labtable: initialize space for labels in labtable */ void init_labtable(void) { int i; num_labels = ref_index = last_hash_index = 0; any_lab_defined = any_lab_referenced = FALSE; if ( labtable_size == 0 ) { labtable_size = LABTABLE_SIZE; if ( NULL == (labtable = (Lab *) malloc(sizeof(Lab) * labtable_size)) ) oops_message(OOPS_FATAL, NO_LINE_NUM, NO_COL_NUM, "Cannot alloc space for label table"); } /* end (outer) if */ /* nullify hash table */ for (i = 0; i < HASHSIZE; i++) hash_table[i] = NULL; return; } /* * grow_labtable: double the size of the hashtable */ PRIVATE void grow_labtable(void) { Lab *old_labtable = labtable; int i; labtable_size *= 2; if ( NULL == ( labtable = (Lab *) realloc(labtable, sizeof(Lab) * labtable_size) ) ) oops_message(OOPS_FATAL, NO_LINE_NUM, NO_COL_NUM, "Cannot realloc space for label tabel"); #ifdef DEBUG_LABELS fprintf(stderr, "DEBUG: resizing labtable to %d...", labtable_size); #endif /* fix the pointers in hash_table */ for (i = 0; i < HASHSIZE; i++) if (hash_table[i] != NULL) hash_table[i] = labtable + (hash_table[i] - old_labtable); /* fix pointers in linked lists */ for (i = 0; i < num_labels; i++) if (labtable[i].next != NULL) labtable[i].next = labtable + (labtable[i].next - old_labtable); #ifdef DEBUG_LABELS fprintf(stderr, "DONE\n"); #endif return; } /* * insert_lab: inserts new label into labtable */ PRIVATE int insert_lab(LABEL_t label) { /* check if we have any space */ if ( num_labels >= labtable_size ) grow_labtable(); /* place label in linked list pointed to in hash_table */ labtable[num_labels].next = hash_table[last_hash_index]; hash_table[last_hash_index] = &labtable[num_labels]; /* set up the label */ labtable[num_labels].how_used = NULL; labtable[num_labels].defined = FALSE; labtable[num_labels].referenced = FALSE; labtable[num_labels].do_label = FALSE; labtable[num_labels].file_def = TOP_FILE; labtable[num_labels].line_def = NO_LINE_NUM; labtable[num_labels].stmt_type = LAB_NO_TYPE; labtable[num_labels].lab = label; ++num_labels; return (num_labels - 1); } /* * sort_labtable * WARNING: THIS RENDERS THE HASH TABLE USELESS * DO *NOT REFERENCE THE HASH TABLE AFTER * CALLING THIS FUNCTION, UNLESS init_labtable() * IS FIRST CALLED. */ void sort_labtable(void) { int j, k; int count = 0; /* number of unsorted pairs */ for (j = 0; j < num_labels; j++) { /* Put ref lines into ascending order */ labtable[j].how_used = reverse_ref_list(labtable[j].how_used); } /* assert: i == num_labels */ for (k = 1; k < num_labels; k++) { /* Count out-of-order table entries */ if (labtable[k-1].lab > labtable[k].lab) { count++; } } /* choose more efficient sorting alg., if nec. */ if (count == 0) {} /* labtable is sorted */ else if (count > 25) { qsort(labtable, num_labels, sizeof(Lab), compare_labs); } else { bubble_sort(num_labels); } } /* * bubble_sort: sort in ascending order */ PRIVATE void bubble_sort(int n) { int i, j, numswaps; numswaps = 1; for (i = 0; (i < n) && (numswaps != 0); i++) { numswaps = 0; for (j = n - 2; j >= i; j--) { if (labtable[j].lab > labtable[j+1].lab) { swap(&labtable[j], &labtable[j+1]); numswaps++; } } } } /* * swap */ PRIVATE void swap(Lab *x, Lab *y) { Lab temp = *x; *x = *y; *y = temp; } /* * compare_labs: for qsort routine */ PRIVATE int compare_labs(const void *v1, const void *v2) { Lab *a, *b; a = (Lab *)v1; b = (Lab *)v2; return (a->lab - b->lab); } /* * print_label_refs: print label cross-references */ void print_label_refs(void) { int k; /* LCV */ int num_refs; /* number of refs in how_used */ int n; /* number of refs printed so far */ int per_line = 4; /* number of refs to print per line */ int footnote_num = 0; /* number of footnotes--for include files */ char buf[13]; /* holds label enclosed in <> */ unsigned per_line_decreased = FALSE; /* for output formatting */ if (!any_lab_referenced) /* nothing to print! */ { return; } clear_footnotes(); (void)fprintf(list_fd, "\n\nLabel cross-references:"); for (k = 0; k < num_labels; k++) { if (labtable[k].how_used != NULL) { Lab_ref_list *how_used; (void)sprintf(buf, "<%d>:", labtable[k].lab); (void)fprintf(list_fd, "\n\n%8s", buf); /* count refs */ num_refs = 0; for (how_used = labtable[k].how_used; how_used != NULL; how_used = how_used->next, num_refs++) {} /* print ref list */ n = 0; for (how_used = labtable[k].how_used; how_used != NULL; how_used = how_used->next, n++) { if ((n > 0) && (n < num_refs)) { (void)fprintf(list_fd, ","); } /* indent after first line is printed */ if ((n > 0) && (n % per_line) == 0) { (void)fprintf(list_fd, "\n%8s", ""); if (per_line_decreased) { per_line++; per_line_decreased = FALSE; } } (void)fprintf(list_fd, " (line %d", how_used->line_ref); /* include file: print footnote */ if (how_used->file_ref != TOP_FILE) { /* is this a new include file? */ if (incfile_list[how_used->file_ref].footnote == 0) { footnote_num++; incfile_list[how_used->file_ref].footnote = footnote_num; } (void)fprintf(list_fd, "[%d]", footnote_num); if (!per_line_decreased) { per_line--; per_line_decreased = TRUE; } } (void)fprintf(list_fd, ": %s)", lab_type_name[how_used->ref_type]); } } } (void)fprintf(list_fd, "\n"); if (footnote_num > 0 ) { print_key(footnote_num); } } /* * reverse_ref_list: reverse order of items * in a Lab_ref_list */ PRIVATE Lab_ref_list *reverse_ref_list(Lab_ref_list *t) { Lab_ref_list *curr, *next, *temp; if (t == NULL) { return t; } curr = t; next = curr->next; while (next != NULL) { temp = next->next; next->next = curr; curr = next; next = temp; } t->next = NULL; /* former head is now tail */ return curr; /* curr now points to new head */ } /* * print_labels */ void print_labels(void) { int i, k; int per_line = 3; /* number of labels to print per line */ char buf[13]; /* holds label enclosed in <> */ int footnote_num = 0; /* number of footnotes--for include files */ if (!any_lab_defined) /* no labels to print */ { return; } clear_footnotes(); (void)fprintf(list_fd, "\n\nStatement labels defined:\n\n"); for (i = 0; (i < per_line) && (i < num_labels); i++) { (void)fprintf(list_fd, "%4sLabel Line StmtType", ""); } for (k = 0; k < num_labels; k++) { if ((k % per_line) == 0) { (void)fprintf(list_fd, "\n"); } if (labtable[k].line_def != NO_LINE_NUM) { (void)sprintf(buf, "<%d>", labtable[k].lab); (void)fprintf(list_fd, "%9s", buf); /* include file: print footnote */ if (labtable[k].file_def != TOP_FILE) { /* is this a new include file? */ if (incfile_list[labtable[k].file_def].footnote == 0) { footnote_num++; incfile_list[labtable[k].file_def].footnote = footnote_num; } (void)fprintf(list_fd, "%4d[%d]", labtable[k].line_def, footnote_num); } else { (void)fprintf(list_fd, "%7d", labtable[k].line_def); } (void)fprintf(list_fd,"%10s", lab_type_name[labtable[k].stmt_type]); } } (void)fprintf(list_fd, "\n"); if (footnote_num > 0) { print_key(footnote_num); } } /* * find_label */ PRIVATE int find_label(LABEL_t label) { Lab *label_ptr; /* index value of linked list where "label" is a part of */ last_hash_index = (hash_label(label) >> 9) % HASHSIZE; label_ptr = hash_table[last_hash_index]; while ( label_ptr != NULL && label_ptr->lab != label ) label_ptr = label_ptr->next; if ( label_ptr == NULL ) /* not found! */ return NO_LABEL; /* return the index of *labtable* */ return (label_ptr - labtable); } /* * def_label. Called where label is attached to a statement. Returns * TRUE if the label marks end of a DO range. */ int def_label(Token *t, int type) { LABEL_t label = (LABEL_t)(t->value.integer); LINENO_t line_number = (LINENO_t)t->line_num; int i = find_label(label); /* label's index */ if (i == NO_LABEL) /* label never defined/used */ { i = insert_lab(label); } any_lab_defined = TRUE; /* set appropriate fields */ labtable[i].file_def = inctable_index; labtable[i].line_def = line_number; if (!labtable[i].defined) { labtable[i].defined = TRUE; } else /* error--duplicate label */ { syntax_error(line_number, t->col_num, "Label previously defined"); } labtable[i].stmt_type = type; return labtable[i].do_label; } /* * def_do_label */ void def_do_label(Token *t) { LABEL_t label = (LABEL_t)(t->value.integer); int i = find_label(label); /* label's index */ if (i == NO_LABEL) /* label has to be defined by now */ { oops_message(OOPS_FATAL,t->line_num,t->col_num, "def_do_label called for undefined label"); } labtable[i].do_label = TRUE; } /* * ref_label */ void ref_label(Token *t, int type) { LABEL_t label = (LABEL_t)(t->value.integer); LINENO_t line_number = (LINENO_t)t->line_num; int i = find_label(label); /* label's index */ if (i == NO_LABEL) /* label never defined/used */ { i = insert_lab(label); } any_lab_referenced = TRUE; /* add entry to how_used */ if (ref_lists == NULL) /* allocate array space for our ref_lists */ { ref_lists = (Lab_ref_list *) malloc(ref_lists_size * sizeof(Lab_ref_list)); if (ref_lists == NULL) { oops_message(OOPS_FATAL, NO_LINE_NUM, NO_COL_NUM, "unable to allocate memory for ref_lists"); } } if (ref_index == ref_lists_size) /* out of ref_list space: double size of memory chunk */ { Lab_ref_list *oldbase=ref_lists; /* for fixing pointers later */ ref_lists_size *= 2; ref_lists = (Lab_ref_list *) realloc(ref_lists, ref_lists_size*sizeof(Lab_ref_list)); if (ref_lists == NULL) { oops_message(OOPS_FATAL, NO_LINE_NUM, NO_COL_NUM, "unable to reallocate memory for ref_lists"); } /* If realloc moved the array, fix all the pointers that refer to it. */ if(oldbase != ref_lists) { int j; for(j=0; jline_ref, (Lsymtab *)NULL, FALSE, "Labels referenced but not defined:"); head_printed = TRUE; } /* print error msg for EACH reference to undefined label */ for (how_used = labtable[i].how_used; how_used != NULL; how_used = how_used->next) { print_msg(labtable[i].lab, how_used->file_ref, how_used->line_ref, "referenced"); } } } } if (usage_label_unused) { head_printed = FALSE; for (i = 0; i < num_labels; i++) { if (!labtable[i].referenced) /* defined label is unused */ { if (!head_printed) { local_warn_head(mod_name, choose_filename(&labtable[i], file_def), labtable[i].line_def, (Lsymtab *)NULL, FALSE, "Labels defined but not used:"); head_printed = TRUE; } print_msg(labtable[i].lab, labtable[i].file_def, labtable[i].line_def, "defined"); } } } } /* * ref_error_check: ref_error_check is called to check whether * a non-executable stmt is referred to by a goto * * whether a non-format stmt is referred to by a format-id, * OR * whether an assign refers to a specification statement * * type1, type2, and type3 are reference types. * * if we are checking for goto errors, then type1 is LAB_GOTO, type2 * is LAB_DO, and type3 is LAB_CALL * otherwise, type1 is either LAB_IO or LAB_ASSIGN, and type2 & type3 * are LAB_NO_TYPE */ PRIVATE void ref_error_check(char *mod_name, int type1, int type2, int type3, Lab *label) { Lab_ref_list *how_used; unsigned head_printed = FALSE; /* has error header been printed? */ for (how_used = label->how_used; how_used != NULL; how_used = how_used->next) { if ((how_used->ref_type == type1) || (how_used->ref_type == type2) || (how_used->ref_type == type3)) { if (type1 == LAB_GOTO) { if (!head_printed) { local_err_head(mod_name, choose_filename(how_used, file_ref), how_used->line_ref, (Lsymtab *)NULL, FALSE, "Goto refers to a non-executable stmt"); head_printed = TRUE; } print_msg(label->lab, how_used->file_ref, how_used->line_ref, "referenced"); } else if (type1 == LAB_IO) { if (!head_printed) { local_err_head(mod_name, choose_filename(how_used, file_ref), how_used->line_ref, (Lsymtab *)NULL, FALSE, "Format-id refers to a non-format"); head_printed = TRUE; } print_msg(label->lab, how_used->file_ref, how_used->line_ref, "referenced"); } else if (type1 == LAB_ASSIGN) { if (!head_printed) { local_err_head(mod_name, choose_filename(how_used, file_ref), how_used->line_ref, (Lsymtab *)NULL, FALSE, "Assign refers to a specification stmt"); head_printed = TRUE; } print_msg(label->lab, how_used->file_ref, how_used->line_ref, "referenced"); } } } } /* * print_msg: prints error message detail; * string is either "defined" or "referenced" */ PRIVATE void print_msg(LABEL_t label, short file, LINENO_t line, const char string[]) { char detail[25]; (void)sprintf(detail, " <%d> %s", label, string); local_detail(file, line, (char *)NULL, detail); } /* * clear_footnotes */ PRIVATE void clear_footnotes(void) { int i; for (i = 0; i < num_incfiles; i++) { incfile_list[i].footnote = 0; } } /* * print_key: correlates bracketed footnote numbers * with include file names */ PRIVATE void print_key(int num_footnotes) { int i; /* footnote number */ int j; /* include file index */ char buf[6]; /* holds bracketed footnote # */ (void)fprintf(list_fd, "\n________\n\n"); for (i = 1; i <= num_footnotes; i++) { (void)sprintf(buf, "[%d]", i); (void)fprintf(list_fd, "%5s -- in include file: ", buf); for (j = 0; j < num_incfiles; j++) { if (incfile_list[j].footnote == i) { (void)fprintf(list_fd, "%s\n", incfile_list[j].fname); } } } } /* Keep track of number of statement labels use, max in any subprogram and total. */ void update_label_resources() { if (num_labels > max_labels) { max_labels = num_labels; } tot_label_count += num_labels; } ftnchek-3.3.1/loccheck.c0000644000031000002260000003250207370640211015477 0ustar moniotstaff00000000000000/* $Id: loccheck.c,v 1.17 2001/11/03 00:55:37 moniot Rel $ Functions that do local checks on each subprogram. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: check_flags() Outputs messages about used-before-set etc. check_mixed_common() checks common for nonportable mixed type find_sixclashes() Finds variables with the same first 6 chars. check_loose_ends() Miscellaneous end-of-subprog checks Private functions defined: has_nonalnum() True if string has non-alphanumeric char */ #include #include #include #include "ftnchek.h" #include "symtab.h" #include "plsymtab.h" #include "loccheck.h" /* Declarations of local functions */ PROTO(PRIVATE int has_nonalnum,( char *s )); /* Find symbols with nonstd chars _ $ */ int #if HAVE_STDC find_nonalnum_names(Lsymtab **sym_list) #else /* K&R style */ find_nonalnum_names(sym_list) Lsymtab *sym_list[]; #endif /* HAVE_STDC */ { int i,n; for(i=0,n=0;iinfo.comlist; ComListElement *clist; char *mod_name; int j,nvars; int has_char=FALSE,has_nonchar=FALSE; int prev_size = 0; /* initialize to remove lint warning about use before definition */ int this_size, this_type; if(chead == NULL) continue; mod_name = chead->module->name; clist=chead->com_list_array; nvars = chead->numargs; for(j=0; jline_declared, (Lsymtab *)NULL, TRUE, "Common block"); msg_tail(sym_list[i]->name); msg_tail("has mixed character and non-character variables (nonstandard)"); } break; } /* Check that variables are in descending order of type size */ if(j > 0) { if( this_size > prev_size ) { if(port_common_alignment) { local_warn_head(mod_name, choose_filename(sym_list[i],file_declared), sym_list[i]->line_declared, (Lsymtab *)NULL, TRUE, "Common block"); msg_tail(sym_list[i]->name); msg_tail("has long data type following short data type (may not be portable)"); } break; } } prev_size = this_size; } } } void #if HAVE_STDC check_flags(Lsymtab **list, int n, unsigned int used, unsigned int set, unsigned int ubs, const char *msg, const char *mod_name) #else /* K&R style */ check_flags(list,n,used,set,ubs,msg,mod_name) Lsymtab *list[]; int n; unsigned used,set,ubs; char *msg,*mod_name; #endif /* HAVE_STDC */ { int matches=0,col=0,unused_args=0,i,len; unsigned pattern = flag_combo(used,set,ubs); for(i=0;icommon_var ) /* common vars are immune */ continue; /* for args, do only 'never used' and then only if -usage=arg-unused given */ if( list[i]->argument && (pattern != flag_combo(0,0,0) || ! usage_arg_unused ) ) continue; /* skip 'never used' if non-arg and -usage=var-unused not given */ if( !(list[i]->argument) && pattern == flag_combo(0,0,0) && ! usage_var_unused ) continue; #ifdef ALLOW_INCLUDE /* Skip variables 'declared but not used' and parameters 'set but never used' if defined in include file. */ if( list[i]->defined_in_include && ( pattern == flag_combo(0,0,0) || (list[i]->parameter && pattern == flag_combo(0,1,0)) ) ) continue; #endif /* function return val: ignore 'set but never used' */ if( list[i]->entry_point && pattern == flag_combo(0,1,0) ) continue; if((unsigned)flag_combo(list[i]->used_flag,list[i]->set_flag, list[i]->used_before_set) == pattern) { /* Brief report style gives module name followed by simple list of offenders. */ if( brief ) { if(matches++ == 0) { local_warn_head(mod_name, top_filename, NO_LINE_NUM, (Lsymtab *)NULL, FALSE, msg); (void)fprintf(list_fd,"\n"); } len = strlen(list[i]->name); col += len = (len <= 10? 10: len) + 9; if(col > 78) { (void)fprintf(list_fd,"\n"); col = len; } (void)fprintf(list_fd,"%10s",list[i]->name); /* arg never used: tag with asterisk */ (void)fprintf(list_fd,"%-9s", list[i]->argument? (++unused_args,"*") : "" ); }/* brief */ /* Verbose report style gives file name and line number of each offender. */ else { LINENO_t lineno; int inc_index; char *filename; char *tag; char detail[MAXIDSIZE+MAX_TAG_LEN+6]; /* see sprintf below */ if( ubs ) { choose_tag(TAG_USED,list[i],&tag,&lineno); inc_index = list[i]->file_used; } else if( set ) { choose_tag(TAG_SET,list[i],&tag,&lineno); inc_index = list[i]->file_set; } else { choose_tag(TAG_DEFN,list[i],&tag,&lineno); inc_index = list[i]->file_declared; } if(inc_index >= 0) { filename = incfile_list[inc_index].fname; } else { filename = top_filename; } if(matches++ == 0) { local_warn_head(mod_name, filename, lineno, (Lsymtab *)NULL, FALSE, msg); } /* Make detail e.g. "FOO used" */ sprintf(detail," %s %s",list[i]->name,tag); local_detail(inc_index,lineno,(char *)NULL,detail); /* For used-before-set, say also not set or say where set. */ if( ubs ) { if( list[i]->set_flag ) { choose_tag(TAG_SET,list[i],&tag,&lineno); inc_index = list[i]->file_set; sprintf(detail," %s %s",list[i]->name,tag); local_detail(inc_index,lineno,(char *)NULL,detail); } else { msg_tail("; never set"); } } if(list[i]->argument) { ++unused_args; msg_tail("(dummy argument)"); } } matches++; } } if(brief && unused_args > 0) (void)fprintf(list_fd,"\n * Dummy argument"); } PRIVATE int #if HAVE_STDC has_nonalnum(char *s) /* Returns TRUE if s contains a $ or _ character and -f77 or -f90 is given. */ #else /* K&R style */ has_nonalnum(s) char *s; #endif /* HAVE_STDC */ { while( *s != '\0' ) { if( !isalnum(*s) ) { if( (*s) == '_' ) { if(f77_underscores) return TRUE; } else { /* treat all non _ same as $ */ if(f77_dollarsigns||f90_dollarsigns) return TRUE; } } s++; } return FALSE; } void #if HAVE_STDC check_nonpure(Lsymtab* sym_list[], int n, char *mod_name) #else /* K&R style */ check_nonpure(sym_list, n, mod_name) Lsymtab* sym_list[]; int n; char *mod_name; #endif { int i, com_vars_modified=0, /* count of common variables which are set */ args_modified=0; /* count of arguments which are set */ for(i=0; iargument || sym_list[i]->common_var) && sym_list[i]->set_flag) { if( (sym_list[i]->argument && !CASCADE_LIMIT(args_modified)) || (sym_list[i]->common_var && !CASCADE_LIMIT(com_vars_modified)) ) { char *filename = choose_filename(sym_list[i],file_set); local_warn_head(mod_name, filename, sym_list[i]->line_set, (Lsymtab *)NULL, TRUE, "Function"); if(sym_list[i]->assigned_flag) msg_tail("modifies"); else msg_tail("may modify"); if(sym_list[i]->argument) msg_tail("argument"); else msg_tail("common variable"); msg_tail(sym_list[i]->name); } else { break; } } } /* If quit early due to cascade limit, print "etc" */ if(error_cascade_limit > 0 && (args_modified > error_cascade_limit || com_vars_modified > error_cascade_limit)) { (void)fprintf(list_fd,"\netc..."); } } /* This routine catches syntax errors that have to wait till END is seen. At the moment, only looks if CHARACTER*(*) declarations are put on the wrong thing. Has to wait since can use it for ENTRY pt. Also checks if things SAVED that shouldn't be. Also fixes size_is_expression flags if IMPLICIT makes the variable so. */ void #if HAVE_STDC check_loose_ends(int curmodhash) #else /* K&R style */ check_loose_ends(curmodhash) int curmodhash; /* current_module_hash from fortran.y */ #endif /* HAVE_STDC */ { int i; for(i=0;i #include #include #include "ftnchek.h" #include "symtab.h" #include "plsymtab.h" extern int free_form; /* for choosing 'C' or '!' as comment char */ /* Declarations of local functions */ PROTO(PRIVATE char * base_filename,( char *curr_filename )); PROTO(PRIVATE void append_char_to_fragment,( int c )); PROTO(PRIVATE void append_string_to_fragment,( char *s )); PROTO(PRIVATE void append_expr_text_to_fragment,( char *s )); PROTO(PRIVATE void maybe_print_module_header,( void )); PROTO(PRIVATE void new_fragment,( void )); PROTO(PRIVATE void print_blanks,( int nblanks )); PROTO(PRIVATE void print_common_decls,( Lsymtab *sym_entry )); PROTO(PRIVATE void print_empty_comment_line,( void )); PROTO(PRIVATE void print_equivalence_decls,( Lsymtab *sym_entry )); PROTO(PRIVATE int count_undeclared_variables,( Lsymtab *sym_entry )); PROTO(PRIVATE void print_list_decls,( Lsymtab *sym_list[], int n, char *header, char *list_type_name )); PROTO(PRIVATE int print_list_name,( char *list_type_name, char *name )); PROTO(PRIVATE void print_declaration_class,( Lsymtab *sym_list[], int n, const char *header )); PROTO(PRIVATE void print_one_list_decls,( Lsymtab *sym_entry, char *list_type_name, char **pheader, int *pnd )); PROTO(PRIVATE void print_parameter_statement,( Lsymtab *symt )); PROTO(PRIVATE void print_selected_declarations,( Lsymtab *sym_list[], int n, int the_type, const char *the_type_name, const char * (*pheader) )); PROTO(PRIVATE int print_typename,( int the_type, const char *the_type_name, int the_size, Lsymtab *symt )); PROTO(PRIVATE int make_sym_list,( Lsymtab *sym_list[], int (*selector)(Lsymtab *sym_entry) )); PROTO(PRIVATE int select_arguments,( Lsymtab *sym_entry )); PROTO(PRIVATE void strip_blanks,(char *s)); #if 0 /* not currently used */ PROTO(PRIVATE int select_commons,( Lsymtab *sym_entry )); #endif PROTO(PRIVATE int select_externals_by_name,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_externals_by_type,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_intrinsics_by_name,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_intrinsics_by_type,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_locals,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_common_blocks,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_namelists,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_parameters,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_statement_functions,( Lsymtab *sym_entry )); PROTO(PRIVATE int sf3_internal_name,( Lsymtab *sym_entry )); PROTO(PRIVATE char * get_dimension_list,( Lsymtab *symt )); PROTO(PRIVATE char * get_parameter_value,( Lsymtab *symt )); PROTO(PRIVATE char * get_size_expression,( Lsymtab *symt )); #if 0 /* This is how Beebe wrote it */ #define ACTUAL_SIZE(p) (((p)->size == 0) ? \ std_size[the_type] : (p)->size) #else /* This is what it has to be if IMPLICIT types supported */ #define ACTUAL_SIZE(p) (get_size((p),sym_type)) #endif #define DECLARE_ONLY_UNDECLARED() (dcl_only_undeclared) #define DECLARE_COMPACT() (dcl_compact) #define NO_CONTINUATION_LINES() (!(dcl_use_continuations)) #define EXCL_SF3_DECLARATIONS() (dcl_excl_sftran3_internal_vars) #define ASTERISK_COMMENT_CHAR() (dcl_asterisk_comment_character) #define FREE_FORM() (dcl_free_form||free_form) #define KEYWORDS_LOWERCASE() (dcl_keywords_lowercase) #define LOWERCASE_COMMENT_CHARACTER() (dcl_lowercase_comment_character) #define VARIABLES_AND_CONSTANTS_LOWERCASE() (dcl_vars_and_consts_lowercase) #define ARRAY_VARS_DIMENSIONED() (!(dcl_no_array_dimensions)) #define COLUMN_WIDTH 13 #ifndef PFORT_FIRST_VARIABLE_COLUMN #define PFORT_FIRST_VARIABLE_COLUMN 26 /* to match Extended PFORT Verifier */ #endif PRIVATE int first_variable_column; #define NEXT_COLUMN(column) (first_variable_column + \ (((column) - first_variable_column + \ COLUMN_WIDTH - 1) / COLUMN_WIDTH)*COLUMN_WIDTH) #define isaletter(C) isalpha((int)(C)) /* define isidletter to allow underscore and/or dollar sign */ #define isidletter(C) (isalpha((int)(C)) || (C) == '_' || (C) == '$') #define makelower(C) (isupper((int)(C)) ? tolower((int)(C)) : (int)(C)) #define makeupper(C) (islower((int)(C)) ? toupper((int)(C)) : (int)(C)) PRIVATE char *begin_module; #define MAX_STMT (72 + 19*72 + 1) /* longest Fortran stmt */ PRIVATE char stmt_fragment[MAX_STMT]; PRIVATE char comment_char = 'C'; /* default value */ PRIVATE int std_size[] = /* NB: depends on type_XXX order in symtab.h */ { 0, /* unknown */ 4, /* INTEGER*4 */ 4, /* REAL*4 */ 8, /* DOUBLE PRECISION == REAL*8 */ 8, /* COMPLEX*8 */ 16, /* DOUBLE COMPLEX == COMPLEX*16 */ 4, /* LOGICAL*4 */ 1 /* CHARACTER*1 == CHARACTER */ }; PRIVATE int pos_fragment = 0; /* cursor in stmt_fragment buffer */ PRIVATE int dcl_indent; /* amount to indent declarations */ PRIVATE char * #if HAVE_STDC base_filename(char *curr_filename) #else /* K&R style */ base_filename(curr_filename) char *curr_filename; #endif /* HAVE_STDC */ { char *path_end=(char *)NULL; #ifdef UNIX path_end = strrchr(curr_filename,'/'); #endif #ifdef VMS path_end = strrchr(curr_filename,']'); if( path_end == (char *)NULL ) path_end = strrchr(curr_filename,':'); /* for symbolic names */ #endif #ifdef MSDOS /* look for either \ or / at end. */ path_end = strrchr(curr_filename,'\\'); if( path_end == (char *)NULL ) path_end = strrchr(curr_filename,'/'); #endif if( path_end == (char *)NULL ) path_end = curr_filename; else ++path_end; return (path_end); } PRIVATE void #if HAVE_STDC append_char_to_fragment(int c) #else /* K&R style */ append_char_to_fragment(c) int c; #endif /* HAVE_STDC */ { if (pos_fragment < (MAX_STMT - 1)) stmt_fragment[pos_fragment++] = c; } PRIVATE void #if HAVE_STDC append_string_to_fragment(char *s) #else /* K&R style */ append_string_to_fragment(s) char *s; #endif /* HAVE_STDC */ { while (*s) append_char_to_fragment(*s++); } /* Appends source text of an expression, up- or down-casing the letters according to pref. */ PRIVATE void #if HAVE_STDC append_expr_text_to_fragment(char *s) #else /* K&R style */ append_expr_text_to_fragment(s) char *s; #endif /* HAVE_STDC */ { int quote_char, inside_quote; inside_quote = FALSE; for (; *s; ++s) { if(! inside_quote) { if(*s == '\'' || *s == '"') { /* Start of a quote */ inside_quote = TRUE; quote_char = *s; } append_char_to_fragment(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*s) : makeupper(*s)); } else { /* inside quote */ if(*s == quote_char) { /* End of quote (quoted quote_char is handled as if consecutive strings) */ inside_quote=FALSE; } append_char_to_fragment(*s); } } } PRIVATE char * #if HAVE_STDC get_dimension_list(Lsymtab *symt) #else /* K&R style */ get_dimension_list(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { int n, dims; /* Get list of array dimensions from symbol table */ new_fragment(); append_char_to_fragment('('); dims = array_dims(symt->info.array_dim); for (n = 0; n < dims; ++n) { if (n > 0) append_char_to_fragment(','); append_expr_text_to_fragment(symt->src.textvec[n]); } append_char_to_fragment(')'); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } PRIVATE char * #if HAVE_STDC get_parameter_value(Lsymtab *symt) #else /* K&R style */ get_parameter_value(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { /* Construct parameter list "(NAME = value)" */ new_fragment(); append_char_to_fragment('('); append_expr_text_to_fragment(symt->name); append_string_to_fragment(" = "); append_expr_text_to_fragment(symt->info.param->src_text); append_char_to_fragment(')'); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } PRIVATE char * #if HAVE_STDC get_size_expression(Lsymtab *symt) #else /* K&R style */ get_size_expression(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { /* Get a CHARACTER size expression from the symbol table */ new_fragment(); append_char_to_fragment('*'); append_expr_text_to_fragment(get_size_text(symt,0)); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } void #if HAVE_STDC make_declarations(Lsymtab **sym_list, char *mod_name) #else /* K&R style */ make_declarations(sym_list,mod_name) Lsymtab *sym_list[]; char *mod_name; #endif /* HAVE_STDC */ { const char *header; char begin[72+1+72+1+2+1]; char *base_curr_filename; /* basename of current input file */ int len_base_curr_filename; if ( ! ANY_DCL_DECLARATIONS() ) return; base_curr_filename = base_filename(current_filename); len_base_curr_filename = strlen(base_curr_filename); /* Establish indentation and comment character for free form or fixed form. */ dcl_indent = 6; first_variable_column = PFORT_FIRST_VARIABLE_COLUMN; if (FREE_FORM()) { dcl_indent = DCL_FREEFORM_INDENT; first_variable_column = PFORT_FIRST_VARIABLE_COLUMN-(6-dcl_indent); comment_char = '!'; } else if (LOWERCASE_COMMENT_CHARACTER()) comment_char = 'c'; else if (ASTERISK_COMMENT_CHAR()) comment_char = '*'; else comment_char = 'C'; /* In the event there are no declarations to be output, we want the declaration file to be empty, because that reduces the number of files that the user has to deal with. In fact, if it IS empty, it will be deleted on close. Instead of printing the module header comment here, we point a global pointer at it, and then in the print_xxx() functions, print the header before the first declaration that is output. We also need to take care not be overwrite the begin[] array, which could happen if the module name or file name are exceptionally long. We therefore take at most 20 characters from the start of the module name, and at most 25 (so the total length of 72 is not surpassed) from the END of the base of the filename, discarding the directory path prefix. */ (void)sprintf(begin, "%c====>Begin Module %-20.20s File %-25.25s\n%c---->Makedcls Options: %-48s\n%c\n", comment_char, mod_name, (len_base_curr_filename > 25) ? (base_curr_filename + len_base_curr_filename - 25) : base_curr_filename, comment_char, EXCL_SF3_DECLARATIONS()? (DECLARE_ONLY_UNDECLARED() ? "Undeclared variables except SFTRAN3 internals" : "All variables except SFTRAN3 internals") : (DECLARE_ONLY_UNDECLARED() ? "Undeclared variables" : "All variables"), comment_char); begin_module = &begin[0]; print_selected_declarations(sym_list, make_sym_list(sym_list, select_intrinsics_by_name), type_ERROR, "INTRINSIC", (header = "Intrinsic functions", &header)); print_declaration_class(sym_list, make_sym_list(sym_list,select_intrinsics_by_type), "Built-in functions"); print_selected_declarations(sym_list, make_sym_list(sym_list, select_externals_by_name), type_ERROR, "EXTERNAL", (header = "External functions", &header)); print_declaration_class(sym_list, make_sym_list(sym_list,select_externals_by_type), (char*)NULL); print_declaration_class(sym_list, make_sym_list(sym_list,select_statement_functions), "Statement functions"); print_declaration_class(sym_list, make_sym_list(sym_list,select_parameters), "Parameter variables"); print_declaration_class(sym_list, make_sym_list(sym_list,select_arguments), "Argument variables"); print_declaration_class(sym_list, make_sym_list(sym_list,select_locals), "Local variables"); print_list_decls(sym_list, make_sym_list(sym_list,select_namelists), "Namelists","NAMELIST"); /* Common block declarations must be last, for dcl2inc to work correctly. */ print_list_decls(sym_list, make_sym_list(sym_list,select_common_blocks), "Common blocks","COMMON"); if (begin_module == (char*)NULL) /* then need a trailer comment */ (void)fprintf(dcl_fd, "%c====>End Module %-20.20s File %-25.25s\n", comment_char, mod_name, (len_base_curr_filename > 25) ? (base_curr_filename + len_base_curr_filename - 25) : base_curr_filename); } PRIVATE void maybe_print_module_header(VOID) { if (begin_module != (char*)NULL) { /* print module header comment only once */ (void)fputs(begin_module, dcl_fd); begin_module = (char*)NULL; } } PRIVATE void new_fragment(VOID) { pos_fragment = 0; } PRIVATE void #if HAVE_STDC print_blanks(int nblanks) #else /* K&R style */ print_blanks(nblanks) int nblanks; #endif /* HAVE_STDC */ { for ( ; nblanks > 0; --nblanks) (void)putc(' ',dcl_fd); } /* Routine to print namelist and common declarations. */ PRIVATE void #if HAVE_STDC print_common_decls(Lsymtab *sym_entry) /* COMMON block symbol table entry */ #else /* K&R style */ print_common_decls(sym_entry) Lsymtab *sym_entry; /* COMMON block symbol table entry */ #endif /* HAVE_STDC */ { int h; int n; Token *t; #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ static Lsymtab **sym_list=(Lsymtab **)NULL; if(sym_list == (Lsymtab **)NULL) { /* Initialize if not done before */ if( (sym_list=(Lsymtab **)calloc(LOCSYMTABSZ,sizeof(Lsymtab *))) == (Lsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for local symbol list"); } } #else Lsymtab *sym_list[LOCSYMTABSZ]; /* temp. list of symtab entries to print */ #endif for (n = 0, t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { h = t->value.integer; sym_list[n++] = hashtab[h].loc_symtab; } if (n > 0) { sort_lsymbols(sym_list,n); print_declaration_class(sym_list, n, "Common variables"); } } PRIVATE void print_empty_comment_line(VOID) { (void)putc(comment_char,dcl_fd); (void)putc('\n',dcl_fd); } PRIVATE void #if HAVE_STDC print_equivalence_decls(Lsymtab *sym_entry) /* COMMON block symbol table entry */ #else /* K&R style */ print_equivalence_decls(sym_entry) Lsymtab *sym_entry; /* COMMON block symbol table entry */ #endif /* HAVE_STDC */ { int h; int n; Lsymtab *s; Token *t; #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ static Lsymtab **sym_list=(Lsymtab **)NULL; if(sym_list == (Lsymtab **)NULL) { /* Initialize if not done before */ if( (sym_list=(Lsymtab **)calloc(LOCSYMTABSZ,sizeof(Lsymtab *))) == (Lsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for local symbol list"); } } #else Lsymtab *sym_list[LOCSYMTABSZ]; /* temp. list of symtab entries to print */ #endif for (n = 0, t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { h = t->value.integer; for (s = hashtab[h].loc_symtab, s = s->equiv_link; (s != NULL) && (s != hashtab[h].loc_symtab); s = s->equiv_link) sym_list[n++] = s; } if (n > 0) { sort_lsymbols(sym_list,n); print_declaration_class(sym_list, n, "Equivalenced common variables"); } } PRIVATE int #if HAVE_STDC count_undeclared_variables(Lsymtab *sym_entry) #else /* K&R style */ count_undeclared_variables(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { int count, h; Token *t; Lsymtab *symt; for (count = 0, t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { /* Loop over members */ h = t->value.integer; symt = hashtab[h].loc_symtab; if (datatype_of(symt->type) == type_UNDECL) count++; } return (count); } PRIVATE void #if HAVE_STDC print_list_decls(Lsymtab **sym_list, int n, char *header, char *list_type_name) #else /* K&R style */ print_list_decls(sym_list, n, header, list_type_name) Lsymtab *sym_list[]; int n; char *header; char *list_type_name; #endif /* HAVE_STDC */ { int i, nd; if (DECLARE_ONLY_UNDECLARED() && (strcmp(list_type_name,"NAMELIST") == 0)) /* These lists are always declared */ return; nd = 0; for (i=0; isrc.toklist != NULL) { if (strcmp(list_type_name,"COMMON") == 0) { /* then COMMON list */ if (!DECLARE_ONLY_UNDECLARED() || (DECLARE_ONLY_UNDECLARED() && (count_undeclared_variables(sym_list[i]) > 0))) { print_common_decls(sym_list[i]); if (!DECLARE_ONLY_UNDECLARED()) print_one_list_decls(sym_list[i], list_type_name, &header, &nd); print_equivalence_decls(sym_list[i]); } } else /* must be NAMELIST list */ print_one_list_decls(sym_list[i], list_type_name, &header, &nd); } } if ((nd > 0) && (strcmp(list_type_name,"COMMON") != 0)) print_empty_comment_line(); } /* routine to print COMMON or NAMELIST name between slashes. */ PRIVATE int #if HAVE_STDC print_list_name(char *list_type_name, char *name) #else /* K&R style */ print_list_name(list_type_name,name) char *list_type_name; char *name; #endif /* HAVE_STDC */ { int column, len; char *p; maybe_print_module_header(); /* Compact mode: COMMON /blknam/ Padded mode: COMMON / blknam / */ print_blanks(dcl_indent); column = dcl_indent; for (p = list_type_name; *p; ++p, ++column) (void)putc(KEYWORDS_LOWERCASE() ? makelower(*p) : makeupper(*p), dcl_fd); print_blanks(1); column++; (void)putc('/',dcl_fd); column++; if (!DECLARE_COMPACT()) { print_blanks(1); column++; } len = 0; if (strcmp(name,blank_com_name) != 0) { for (p=name; *p; ++p, ++len) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),dcl_fd); } column += len; if (!DECLARE_COMPACT()) { if (len <= 6) /* Max standard length */ { print_blanks(7-len); /* Print padding */ column += 7-len; } } (void)putc('/',dcl_fd); column++; if (DECLARE_COMPACT()) { print_blanks(1); column++; } else if (column < first_variable_column) { print_blanks(first_variable_column-column); column = first_variable_column; } else if (column == first_variable_column) { print_blanks(1); column++; print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } else { print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } return column; } PRIVATE void #if HAVE_STDC print_declaration_class(Lsymtab **sym_list, int n, const char *header) #else /* K&R style */ print_declaration_class(sym_list, n, header) Lsymtab *sym_list[]; int n; char *header; #endif /* HAVE_STDC */ { unsigned t; static int types_table[] = /* table defining output declaration order */ { /* (alphabetical by type name) */ type_STRING, type_COMPLEX, type_DCOMPLEX, type_DP, type_INTEGER, type_LOGICAL, type_REAL, }; if (n > 0) { for (t = 0; t < sizeof(types_table)/sizeof(types_table[0]); ++t) print_selected_declarations(sym_list, n, types_table[t], (char*)NULL, &header); } } PRIVATE void #if HAVE_STDC print_one_list_decls(Lsymtab *sym_entry, char *list_type_name, char **pheader, int *pnd) #else /* K&R style */ print_one_list_decls(sym_entry, list_type_name, pheader, pnd) Lsymtab *sym_entry; char *list_type_name; char **pheader; int *pnd; #endif /* HAVE_STDC */ { int column, need, next_column, nv; int ncontin; int h; Token *t; Lsymtab *symt; char *p; column = 0; ncontin = 0; /* count of continuation lines */ nv = 0; /* count of variables in statement */ for(t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { /* Loop over members */ h = t->value.integer; symt = hashtab[h].loc_symtab; if (column == 0) /* at beginning of line, so */ { /* we need a type name */ maybe_print_module_header(); if ((*pheader != (char*)NULL) && (strcmp(list_type_name,"COMMON") != 0)) { /* print header only once */ (void)fprintf(dcl_fd,"%c %s\n", comment_char,*pheader); print_empty_comment_line(); *pheader = (char*)NULL; /* so we don't print it again */ } column = print_list_name(list_type_name,sym_entry->name); nv = 0; /* no variables yet in statement */ ncontin = 0; ++(*pnd); /* count declarations produced */ } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); need = (int)strlen(symt->name); if ((next_column + need) > 72) /* then must start new line */ { if (nv>0 && (strcmp(list_type_name,"COMMON") == 0) && (NO_CONTINUATION_LINES() || ncontin == (FREE_FORM()?39:19))) { (void)putc('\n',dcl_fd); column = print_list_name(list_type_name,sym_entry->name); nv = 0; /* no variables yet in statement */ ncontin = 0; } else { if( FREE_FORM() ) { /* do a free-form continuation */ print_blanks(next_column-column); (void)fputs("&\n",dcl_fd); print_blanks(dcl_indent); column = dcl_indent; } else { /* do a fixed-form continuation */ (void)putc('\n',dcl_fd); print_blanks(5); (void)putc('x',dcl_fd); column = 6; } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); ++ncontin; } } if (nv > 0) /* multiple variables */ { (void)fputs(", ",dcl_fd); print_blanks(next_column - column - 2); column = next_column; } for (p = symt->name; *p; ++p) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),dcl_fd); column += need; nv++; /* count variables */ } if ((nv > 0) && (strcmp(list_type_name,"COMMON") == 0)) { if (column > 0) (void)putc('\n',dcl_fd); print_empty_comment_line(); column = 0; } if (column > 0) (void)putc('\n',dcl_fd); } PRIVATE void #if HAVE_STDC print_parameter_statement(Lsymtab *symt) #else /* K&R style */ print_parameter_statement(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { int column; int need; int i; column = print_typename(type_ERROR,"PARAMETER",0,symt); need = strlen(get_parameter_value(symt)); if ((column + need) > 72) /* then too long to fit on current line */ { if( FREE_FORM() ) { (void)fputs(" &\n",dcl_fd); print_blanks(dcl_indent); column = dcl_indent; } else { (void)fputs("\n x",dcl_fd); column = 6; } if ((column + need) > 72) { /* long parameter setting requires line break */ for (i = 0; stmt_fragment[i]; ++i) { if (column == 72) { if( FREE_FORM() ) { (void)fputs("&\n",dcl_fd); print_blanks(dcl_indent); (void)putc('&',dcl_fd); column = dcl_indent+1; } else { (void)fputs("\n x",dcl_fd); column = 6; } } (void)putc((int)stmt_fragment[i],dcl_fd); column++; } } else (void)fputs(stmt_fragment,dcl_fd); } else /* fits on current line */ (void)fputs(stmt_fragment,dcl_fd); (void)putc('\n',dcl_fd); } PRIVATE void #if HAVE_STDC print_selected_declarations(Lsymtab **sym_list, int n, int the_type, const char *the_type_name, const char * (*pheader)) /* **pheader is const, *pheader is not */ #else /* K&R style */ print_selected_declarations(sym_list, n, the_type, the_type_name, pheader) Lsymtab *sym_list[]; int n; int the_type; char *the_type_name; char **pheader; #endif /* HAVE_STDC */ { int column, i, last_size, need, next_column, nt, nv, ncontin, raw_type, sym_type, sym_size; char *p; column = 0; last_size = 0; nt = 0; /* count of type declaration stmts */ nv = 0; /* count of variables in statement */ for (i = 0; i < n; ++i) { /* loop over variables */ raw_type = datatype_of(sym_list[i]->type); if (DECLARE_ONLY_UNDECLARED()) { if (raw_type != type_UNDECL) continue; /* want declarations only for undeclared vars */ if (sym_list[i]->external) /* and not for explicit EXTERNAL */ continue; if (sym_list[i]->intrinsic) /* and not for explicit INTRINSIC */ continue; } sym_type = (raw_type == type_UNDECL) ? get_type(sym_list[i]) : datatype_of(sym_list[i]->type); if ((the_type != type_ERROR) && (sym_type != the_type)) continue; sym_size = ACTUAL_SIZE(sym_list[i]); if ((nv > 0) && (sym_size != last_size)) { /* have new length modifier, so must start new declaration */ (void)putc('\n',dcl_fd); nt++; /* count type declaration statements */ column = 0; ncontin = 0; nv = 0; } if (column == 0) /* at beginning of line, so */ { /* we need a type name */ maybe_print_module_header(); if (*pheader != (char*)NULL) { /* print header only once */ (void)fprintf(dcl_fd,"%c %s\n",comment_char,*pheader); print_empty_comment_line(); *pheader = (char*)NULL; /* so we don't print it again */ } column = print_typename(the_type,the_type_name, sym_size, sym_list[i]); last_size = sym_size; nv = 0; /* no variables yet in statement */ ncontin = 0; } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); need = (int)strlen(sym_list[i]->name); if (sym_list[i]->array_var /* leave space for "(...)" */ && ARRAY_VARS_DIMENSIONED()) need += strlen(get_dimension_list(sym_list[i])); if ((next_column + need) > 72) /* then must start new declaration */ { nt++; /* count type declaration statements */ if (nv>0 && (NO_CONTINUATION_LINES() || ncontin == 19)) { (void)putc('\n',dcl_fd); column = print_typename(the_type,the_type_name, sym_size, sym_list[i]); ncontin = 0; nv = 0; /* no variables yet in statement */ } else { if( FREE_FORM() ) { /* do a free-form continuation */ print_blanks(next_column-column); (void)fputs("&\n",dcl_fd); print_blanks(dcl_indent); column = dcl_indent; } else { /* do a fixed-form continuation */ (void)putc('\n',dcl_fd); print_blanks(5); (void)putc('x',dcl_fd); column = 6; } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); ++ncontin; } last_size = sym_size; } if (nv > 0) /* multiple variables */ { (void)fputs(", ",dcl_fd); print_blanks(next_column - column - 2); column = next_column; } for (p = sym_list[i]->name; *p; ++p) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),dcl_fd); if (sym_list[i]->array_var && ARRAY_VARS_DIMENSIONED()) (void)fputs(stmt_fragment,dcl_fd); column += need; nv++; /* count variables */ if (sym_list[i]->parameter) { (void)putc('\n',dcl_fd); print_parameter_statement(sym_list[i]); column = 0; nt++; nv = 0; } } if (column > 0) { (void)putc('\n',dcl_fd); nt++; /* count type declaration statements */ } if (nt > 0) print_empty_comment_line(); } PRIVATE int #if HAVE_STDC print_typename(int the_type, const char *the_type_name, int the_size, Lsymtab *symt) /* type_ERROR if typename non-NULL */ /* non-NULL overrides type_table[] use */ #else /* K&R style */ print_typename(the_type,the_type_name,the_size,symt) int the_type; /* type_ERROR if the_type_name non-NULL */ char *the_type_name; /* non-NULL overrides type_table[] use */ int the_size; Lsymtab *symt; #endif /* HAVE_STDC */ { /* return value is last column printed */ int column; char digits[sizeof("*18446744073709551616")]; /* big enough for 2^64 */ const char *p; char *size_expression; maybe_print_module_header(); print_blanks(dcl_indent); column = dcl_indent; for (p = (the_type_name == (char*)NULL) ? type_table[the_type] : the_type_name; *p; ++p, ++column) (void)putc(KEYWORDS_LOWERCASE() ? makelower(*p) : makeupper(*p), dcl_fd); if (symt != NULL) { if (((symt->size_is_adjustable && (the_type == type_STRING))) || (the_size == size_ADJUSTABLE)) /* happens only for CHARACTER*(*) */ { /* size_is_adjustable overrides the_size because def_parameter() */ /* in symtab.c replaced size_ADJUSTABLE with actual size. */ (void)fputs("*(*)",dcl_fd); column += 4; } else if (symt->size_is_expression && (the_type == type_STRING)) { size_expression = get_size_expression(symt); (void)fputs(size_expression,dcl_fd); column += strlen(size_expression); } else if ((the_size > 0) && (the_type != type_ERROR) && (the_size != std_size[the_type])) { /* supply length modifier for non-standard type sizes */ (void)sprintf(digits,"*%d",the_size); (void)fputs(digits,dcl_fd); column += strlen(digits); } } if (DECLARE_COMPACT()) { print_blanks(1); column++; } else if (column < first_variable_column) { print_blanks(first_variable_column-column); column = first_variable_column; } else if (column == first_variable_column) { print_blanks(1); column++; print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } else { print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } return (column); } PRIVATE int #if HAVE_STDC select_arguments(Lsymtab *sym_entry) #else /* K&R style */ select_arguments(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is a module argument) */ if (sym_entry->declared_external || sym_entry->invoked_as_func) return (0); else if (sym_entry->argument) return (1); else return (0); } #if 0 /* this function not currently used */ PRIVATE int #if HAVE_STDC select_commons(Lsymtab *sym_entry) #else /* K&R style */ select_commons(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is in a COMMON block) */ if (sym_entry->common_var) return (1); else return (0); } #endif /*0*/ PRIVATE int #if HAVE_STDC select_externals_by_name(Lsymtab *sym_entry) #else /* K&R style */ select_externals_by_name(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is external and must appear in EXTERNAL declaration) */ if (sym_entry->declared_intrinsic) /* must appear first, because symbols */ return (0); /* can be both declared_intrinsic and declared_external*/ /* ??? is this a bug in ftnchek 2.7 ??? */ else if (storage_class_of(sym_entry->type) == class_STMT_FUNCTION) return (0); else if (sym_entry->declared_external) return (1); else if (sym_entry->declared_intrinsic || sym_entry->intrinsic) return (0); else if (sym_entry->invoked_as_func) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_externals_by_type(Lsymtab *sym_entry) #else /* K&R style */ select_externals_by_type(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is external and must appear in a type declaration) */ if (storage_class_of(sym_entry->type) == class_STMT_FUNCTION) return (0); else if (sym_entry->declared_external) return (1); else if (sym_entry->declared_intrinsic) return (0); else if (sym_entry->intrinsic) { if (datatype_of(sym_entry->type) == type_UNDECL) { /* user provided no type declaration */ if ((sym_entry->info.intrins_info)->result_type == type_GENERIC) return (0); /* generics CANNOT have explicit type */ else return (1); /* not generic, so has explicit type */ } else /* user supplied an explicit type */ return (1); } else if (sym_entry->invoked_as_func) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_intrinsics_by_name(Lsymtab *sym_entry) #else /* K&R style */ select_intrinsics_by_name(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is intrinsic and must appear in INTRINSIC declaration) */ if (sym_entry->declared_intrinsic) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_intrinsics_by_type(Lsymtab *sym_entry) #else /* K&R style */ select_intrinsics_by_type(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is intrinsic and must appear in a type declaration) */ if (sym_entry->intrinsic && ((sym_entry->info.intrins_info)->result_type == type_GENERIC)) return (0); else return (select_intrinsics_by_name(sym_entry)); } PRIVATE int #if HAVE_STDC select_locals(Lsymtab *sym_entry) #else /* K&R style */ select_locals(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is a local variable) */ if (EXCL_SF3_DECLARATIONS() && sf3_internal_name(sym_entry)) return (0); else if (sym_entry->argument || sym_entry->common_var || sym_entry->declared_external || sym_entry->declared_intrinsic || sym_entry->entry_point || sym_entry->external || sym_entry->intrinsic || sym_entry->invoked_as_func || sym_entry->parameter) return (0); else return (1); } PRIVATE int #if HAVE_STDC select_common_blocks(Lsymtab *sym_entry) #else /* K&R style */ select_common_blocks(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is a COMMON block name) */ if (storage_class_of(sym_entry->type) == class_COMMON_BLOCK) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_namelists(Lsymtab *sym_entry) #else /* K&R style */ select_namelists(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is a NAMELIST name) */ if (storage_class_of(sym_entry->type) == class_NAMELIST) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_parameters(Lsymtab *sym_entry) #else /* K&R style */ select_parameters(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* return (symbol is a PARAMETER name) */ if (sym_entry->parameter) return (1); else return (0); } PRIVATE int #if HAVE_STDC select_statement_functions(Lsymtab *sym_entry) #else /* K&R style */ select_statement_functions(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { if (storage_class_of(sym_entry->type) == class_STMT_FUNCTION) return (1); else return (0); } PRIVATE int #if HAVE_STDC sf3_internal_name(Lsymtab *sym_entry) #else /* K&R style */ sf3_internal_name(sym_entry) Lsymtab *sym_entry; #endif /* HAVE_STDC */ { /* Return (symbol is an SFTRAN3 internal name). */ char *p = sym_entry->name; /* The SFTRAN3 preprocessor uses internal names of the form NPRddd, NXdddd, N2dddd, and N3dddd, where d is a decimal digit. */ if ((p[0] != 'N') || (strlen(p) != 6)) return (0); switch (p[1]) { case 'P': if ((p[2] == 'R') && isdigit(p[3]) && isdigit(p[4]) && isdigit(p[5])) return (1); else return (0); case 'X': /* fall through */ case '2': /* fall through */ case '3': if (isdigit(p[2]) && isdigit(p[3]) && isdigit(p[4]) && isdigit(p[5])) return (1); else return (0); default: return (0); } } PRIVATE int #if HAVE_STDC make_sym_list(Lsymtab **sym_list, int (*selector) (Lsymtab *)) #else /* K&R style */ make_sym_list(sym_list,selector) Lsymtab *sym_list[]; PROTO(int (*selector),( Lsymtab *sym_entry )); #endif /* HAVE_STDC */ { int i; int n; for (i = 0, n = 0; i < loc_symtab_top; ++i) { if (selector(&loc_symtab[i])) sym_list[n++] = &loc_symtab[i]; } if (n > 0) { if (selector == select_parameters) { /* Free form is not blank-insensitive, so go thru parameter declarations and remove any blanks from within numbers. */ if( FREE_FORM() ) { for(i=0; i < n; i++) { if( is_numeric_type(get_type(sym_list[i])) ) { strip_blanks(sym_list[i]->info.param->src_text); } } } /* original PARAMETER statement order must be preserved so that the expressions do not refer to as-yet-undefined parameter names */ sort_parameters(sym_list,n); } else sort_lsymbols(sym_list,n); } return (n); } /* Routine to remove whitespace from a string */ PRIVATE void strip_blanks(char *s) { char *t; for( t=s; *s != '\0'; s++ ) { if( !isspace(*s) ) *t++ = *s; } *t = '\0'; } ftnchek-3.3.1/makehtml.c0000644000031000002260000022123210164603212015521 0ustar moniotstaff00000000000000/* $Id: makehtml.c,v 1.17 2004/12/29 19:33:30 moniot Exp $ Routines to create HTML documents from FORTRAN analysis and comments */ /* Copyright (C) 2000 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ROBERT K. MONIOT OR FORDHAM UNIVERSITY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of ftnchek shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the author. */ /* Adapted from makedcls.c by Mark McVeigh Sept. 10, '01 */ /* Shared functions defined: make_html produces the html document */ #include #include #include #include #include "ftnchek.h" #include "symtab.h" #include "plsymtab.h" #include "tokdefs.h" #include "advance.h" /* for srcLine defn used by get_comments() */ extern int free_form; /* for choosing 'C' or '!' as comment char */ /* Declarations of local functions */ PROTO(PRIVATE char * base_filename,( char *curr_filename )); PROTO(PRIVATE char * str_end_strip,( char *str )); PROTO(PRIVATE void append_char_to_fragment,( int c )); PROTO(PRIVATE void append_string_to_fragment,( char *s )); PROTO(PRIVATE void append_expr_text_to_fragment,( char *s )); PROTO(PRIVATE void new_fragment,( void )); PROTO(PRIVATE void print_blanks,( int nblanks )); PROTO(PRIVATE void print_common_decls,( Lsymtab *sym_entry, char **header )); PROTO(PRIVATE void print_empty_comment_line,( void )); PROTO(PRIVATE void print_equivalence_decls,( Lsymtab *sym_entry, char **header )); PROTO(PRIVATE void print_list_decls,( Lsymtab *sym_list[], int n, char **header, char *list_type_name )); PROTO(PRIVATE int print_list_name,( char *list_type_name, char *name )); PROTO(PRIVATE void print_declaration_class,( Lsymtab *sym_list[], int n, char *header )); PROTO(PRIVATE void print_one_list_decls,( Lsymtab *sym_entry, char *list_type_name, char **pheader, int *pnd )); PROTO(PRIVATE void print_selected_declarations,( Lsymtab *sym_list[], int n, int the_type, char *the_type_name, char **pheader )); PROTO(PRIVATE int print_selected_common_decls,( Lsymtab *sym_list[], int n, int the_type, char *the_type_name, char **pheader )); PROTO(PRIVATE int print_selected_equiv_decls,( Lsymtab *sym_list[], int n, char **pheader)); PROTO(PRIVATE int print_typename,( int the_type, char *the_type_name, int the_size, Lsymtab *symt )); PROTO(PRIVATE int make_sym_list,( Lsymtab *sym_list[], int (*selector)(Lsymtab *sym_entry) )); PROTO(PRIVATE int make_unsorted_sym_list,( Lsymtab *sym_list[], int (*selector)(Lsymtab *sym_entry) )); PROTO(PRIVATE int select_arguments,( Lsymtab *sym_entry )); PROTO(PRIVATE void strip_blanks,(char *s)); PROTO(PRIVATE int select_externals_by_name,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_entry_points_by_name,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_intrinsics_by_name,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_locals,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_common_blocks,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_namelists,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_equivalences,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_parameters,( Lsymtab *sym_entry )); PROTO(PRIVATE int select_statement_functions,( Lsymtab *sym_entry )); PROTO(PRIVATE int sf3_internal_name,( Lsymtab *sym_entry )); PROTO(PRIVATE void get_comments,( char *routine_name, srcLine *mkhtml_bookmark)); PROTO(PRIVATE char * get_dimension_list,( Lsymtab *symt )); PROTO(PRIVATE char * get_parameter_value,( Lsymtab *symt )); PROTO(PRIVATE char * get_size_expression,( Lsymtab *symt )); PROTO(PRIVATE void htmlout_io_unit_usages,( void )); #if 0 /* This is how Beebe wrote it */ #define ACTUAL_SIZE(p) (((p)->size == 0) ? \ std_size[the_type] : (p)->size) #else /* This is what it has to be if IMPLICIT types supported */ #define ACTUAL_SIZE(p) (get_size((p),sym_type)) #endif #define DECLARE_ONLY_UNDECLARED() (html_only_undeclared) /*UNUSED*/ #define DECLARE_COMPACT() (html_compact) #define NO_CONTINUATION_LINES() (!(html_use_continuations)) #define EXCL_SF3_DECLARATIONS() (html_excl_sftran3_internal_vars) #define FREE_FORM() (html_free_form||free_form) #define KEYWORDS_LOWERCASE() (html_keywords_lowercase) #define VARIABLES_AND_CONSTANTS_LOWERCASE() (html_vars_and_consts_lowercase) #define ARRAY_VARS_DIMENSIONED() (!(html_no_array_dimensions)) #define SRC_COMMENT_MAX_WIDTH 66 /* This way the text of the HTML will * fit in comment lines in original * FORTRAN source. */ #define COLUMN_WIDTH 12 /* Fits 4 cols nicely in 66 columns * which works well for local var refs */ #define MY_COLUMN_WIDTH 16 /* Used to set the 2nd-Xth variable column * in common and equivalence references */ #ifndef PFORT_FIRST_VARIABLE_COLUMN #define PFORT_FIRST_VARIABLE_COLUMN 18 /* to match Extended PFORT Verifier */ #endif PRIVATE int first_variable_column; #define NEXT_COLUMN(column) (first_variable_column + \ (((column) - first_variable_column + \ COLUMN_WIDTH - 1) / COLUMN_WIDTH)*COLUMN_WIDTH) /* MY_NEXT_COLUMN is used to print common block and equivalence references */ #define MY_NEXT_COLUMN(column) (MY_COLUMN_WIDTH + \ (((column) - MY_COLUMN_WIDTH + MY_COLUMN_WIDTH-1) \ / MY_COLUMN_WIDTH)*MY_COLUMN_WIDTH) #define isaletter(C) isalpha((int)(C)) /* define isidletter to allow underscore and/or dollar sign */ #define isidletter(C) (isalpha((int)(C)) || (C) == '_' || (C) == '$') #define makelower(C) (isupper((int)(C)) ? tolower((int)(C)) : (int)(C)) #define makeupper(C) (islower((int)(C)) ? toupper((int)(C)) : (int)(C)) #define MAX_STMT (72 + 19*72 + 1) /* longest Fortran stmt */ PRIVATE char stmt_fragment[MAX_STMT]; PRIVATE Lsymtab *current_module; PRIVATE char comment_char = 'C'; /* default value */ PRIVATE int std_size[] = /* NB: depends on type_XXX order in symtab.h */ { 0, /* unknown */ 4, /* INTEGER*4 */ 4, /* REAL*4 */ 8, /* DOUBLE PRECISION == REAL*8 */ 8, /* COMPLEX*8 */ 16, /* DOUBLE COMPLEX == COMPLEX*16 */ 4, /* LOGICAL*4 */ 1 /* CHARACTER*1 == CHARACTER */ }; PRIVATE int pos_fragment = 0; /* cursor in stmt_fragment buffer */ PRIVATE int html_indent; /* amount to indent declarations */ static int types_table[] = /* table defining output declaration order */ { /* (alphabetical by type name) */ type_STRING, type_COMPLEX, type_DCOMPLEX, type_DP, type_INTEGER, type_LOGICAL, type_REAL, type_GENERIC, type_SUBROUTINE }; #include #include #include #ifdef VMS #include #else #include #endif /*================================================================================= * * Massage text strings to 1) remove newline (UNIX and DOS), 2) Expand tabs, * 3) Strip trailing spaces. * * Returns pointer to original string for convenience. * *================================================================================*/ PRIVATE char * #if HAVE_STDC massage_str( char *str ) #else /* K&R style */ massage_str( str ) char *str; #endif /* HAVE_STDC */ { int len,n,j; int tab = 8; for ( n = 0; n < (len=strlen( str ) ); ) { if ( len > 0 ) { if ( str[n] == '\t' ) { j = tab - ((n+1) % tab); memmove( &str[n+1+j], &str[n+1], len ); memset( &str[n], ' ', j+1 ); n += j; } /* Remove DOS and UNIX new lines */ else if ( str[n] == '\n' || str[n] == '\r' ) { str[n] = '\0'; /* No need to increment n it will be > len */ } else { n++; } } } str_end_strip( str ); /* Strip blanks from the end */ return( str ); } /*================================================================================= * * Convenience routine to strip leading blanks from a character array * *================================================================================*/ PRIVATE char * #if HAVE_STDC str_begin_strip( char *str ) #else /* K&R style */ str_begin_strip( str ) char *str; #endif /* HAVE_STDC */ { int n; if ( str == NULL ) return( str ); if ( (n = strspn( str, " " )) ) strcpy( str, &str[n] ); return( str ); } /*================================================================================= * * Convenience routine to strip trailing blanks from a character array * *================================================================================*/ PRIVATE char * #if HAVE_STDC str_end_strip( char *str ) #else /* K&R style */ str_end_strip( str ) char *str; #endif /* HAVE_STDC */ { int len; if ( str == NULL ) return( str ); len = strlen( str ) - 1; while ( len >= 0 && str[len] == ' ' ) { str[len] = '\0'; len--; } return( str ); } /*================================================================================= * * Convenience routine to strip leading and trailing blanks from a character array * *================================================================================*/ PRIVATE char * #if HAVE_STDC str_strip( char *str ) #else /* K&R style */ str_strip( str ) char *str; #endif /* HAVE_STDC */ { if ( str == NULL ) return( str ); return( str_begin_strip( str_end_strip( str ) ) ); } /*================================================================================= * * Re-read the FORTRAN source to get comments for HTML output. Only consider * lines that start with a comment char and are IMMEDIATELY adjacent to a * subprogram declaration. * *================================================================================*/ PRIVATE void get_comments( char *routine_name, /* Name of routine in source file */ srcLine *mkhtml_bookmark) /* line in source file where declared */ { char linein[1024]; char *buffer = NULL; /* buffer of massaged comment lines */ char *pbuf = NULL; char buff_end[] = " \n"; int buffcount = 0; int row_hdr = 0; int len; int min_leader = 132; char leader_srch[133]; int more_than_blank_lines = 0; /* Pointers into source buffer */ srcLine *srcPtr, *beginComments, *endComments; if ( routine_name == NULL ) return; str_strip( routine_name ); /*------------------------------------------------------------------------------ * * What we are trying to do is collect all the comments immediately before * and after the declaration of the routine of interest and save them to the * already open HTML file. * * Here is what this code used to do, up to version 1.14: * * 1. Go through the file collecting comments in buffer until there is an * executable statement that is NOT the declaration of the routine of * interest. * * 2. If the routine declaration was found mixed in with the collection of * comments then write out all the comments to the HTML file, clear the * buffer and re-initialize counter variables and close the file. * * 3. If the routine declarations was NOT found mixed with the current * collection of comments, clear the buffer, initialize counter variables * and continue reading. * * As of version 1.15, the code makes use of the source buffer so it * doesn't need to reopen file, and it also uses saved bookmark to * jump to the routine declaration. The effective behavior is the same. * *-----------------------------------------------------------------------------*/ /* Jump to bookmarked location of current subprogram. */ if( (srcPtr = mkhtml_bookmark) == (srcLine *)NULL ) { /* shouldn't happen */ oops_message(OOPS_NONFATAL,NO_LINE_NUM,NO_COL_NUM, "mkhtml_bookmark is NULL"); return; } /* Scan backward to beginning and forward to end * of surrounding comment block. */ beginComments = endComments = srcPtr; do { if( beginComments->prev == (srcLine *)NULL ) break; beginComments = beginComments->prev; } while( beginComments->comment ); do { if( endComments->next == (srcLine *)NULL ) break; endComments = endComments->next; } while( endComments->comment || endComments->contin ); /* Now go thru comment block, massaging it * into form suitable for the html, saving * massaged lines into a buffer. */ for( srcPtr=beginComments; srcPtr != endComments; srcPtr=srcPtr->next ) { /* Ignore completely blank lines in comment block. This option should be controlled by a command-line switch, not a define. */ #ifndef MKHTML_KEEP_BLANK_COMMENTS if(srcPtr->blank) continue; #endif /* Put comment lines into buffer for massaging */ if(srcPtr->comment) { strcpy(linein,srcPtr->line); if ( ! free_form ) linein[fixed_max_stmt_col] = '\0'; massage_str( linein ); /* expand tabs, strip the end of whitespace */ /*------------------------------------------------------------------------ * Handle POWERPLEX FORTRAN comment standard. POWERPLEX is a copywrited and * trademarked name of Framatome-ANP, Inc. * * "C* " Documentation card used when there is more than one (discard) * routine in the source file * "CC" Comments for the old documenter program (discard) * "CD" General description (keep) * "CDA" Arguments of subroutine or function with description (keep) * "CDC" ??? (discard) * "CDE" Restatement of subr or func definition with args (discard) * "CDH" Header (discard) * "CDP" Purpose (keep) * "CDZ" End of comments (discard) * *------------------------------------------------------------------------*/ if( makeupper(linein[0]) == 'C' ) { int c1 = makeupper(linein[1]); if( c1 == '*' || c1 == 'C' ) continue; /* discard POWERPLEX C* and CC */ if(c1 == 'D') { int c2 = makeupper(linein[2]); if(c2 == 'C' || c2 == 'E' || c2 == 'H' || c2 == 'Z' ) continue; /* discard POWERPLEX CDC, CDE, CDH, CDZ */ } } /* * Nobody writes comments where the comment char is immediately followed * by non-whitespace so we'll clear all columns starting with the comment * char followed by non-whitespace. */ for ( pbuf = linein; *pbuf != '\0' && *pbuf != ' '; ) *(pbuf++) = ' '; str_end_strip( linein ); /* Strip only the end so we don't lose format */ len = strspn( linein, " " ); /* Look for the first non-blank */ if ( len ) /* Line not blank after clearing col 72+ */ { more_than_blank_lines = 1; min_leader = min_leader < len ? min_leader : len; } else if ( buffcount == 0 ) /* empty comment & no non-blank comments yet */ { continue; } buffcount += strlen( linein ) + sizeof( buff_end ); pbuf = buffer; buffer = (char *)realloc( buffer, buffcount ); if ( pbuf == NULL ) buffer[0] = '\0'; (void)strcat( buffer, linein ); (void)strcat( buffer, buff_end ); } /* end if(srcPtr->comment) */ } /* end for( srcPtr=beginComments ... ) */ /* * This section dumps the comments to the open HTML file ONLY if * some nonblank comments were found surrounding the declaration. */ /* Only print if some non-blank lines were accumulated in the buffer */ if ( buffer && more_than_blank_lines ) { if ( row_hdr == 0 ) /* row_hdr is zero if the table header hasn't */ { /* been written */ fprintf( html_fd, "\n
Description
" );
                  row_hdr = 1;
                  }
               /* Remove the last \n and any end of line space */
               pbuf = buffer + strlen( buffer ) - 1;
               while ( pbuf > buffer && ( *pbuf == ' ' || *pbuf == '\n' || *pbuf == '\r' ) )
                  *(pbuf--) = '\0';

               /*
               *  min_leader is the minimum number of spaces on the left of the
               *  lines of text in the comment buffer. Use this value to left
               *  shift all the lines but without losing formatting.
               */
               /* Handle the first line of buffer */
               sprintf( leader_srch, "%*s", min_leader, " " );
               if ( strstr( buffer, leader_srch ) == buffer )
                  memmove( buffer, &buffer[min_leader],
                     strlen( &buffer[min_leader] )+1 );

               /*
               *  Handle the rest of the buffer which will contain \n followed by
               *  min_leader spaces.
               */
               sprintf( leader_srch, "\n%*s", min_leader, " " );
               pbuf = buffer;
               while ( (pbuf = strstr( pbuf, leader_srch ) ) )
                  {
                  pbuf++;                       /* Step past \n */
                  memmove( pbuf, &pbuf[min_leader],
                     strlen( &pbuf[min_leader] ) + 1);
                  }

               /* All done write it out to the HTML file */
               fprintf( html_fd, "%s", buffer );
               }

         /* Clear the buffer and reset important counters and vars */
         buffcount = 0;
         more_than_blank_lines = 0;
         min_leader = 132;
         if ( buffer ) free( buffer );
         buffer = pbuf = NULL;
	 mkhtml_bookmark = endComments; /* save a bookmark for next search */

   /* If there were ANY comments written to the HTML file close the HTML table */
   if ( row_hdr == 1 )
      fprintf( html_fd, "
\n" ); } /*================================================================================= * * Convenience routine determine filename only from path/filename * *================================================================================*/ PRIVATE char * #if HAVE_STDC base_filename(char *curr_filename) #else /* K&R style */ base_filename(curr_filename) char *curr_filename; #endif /* HAVE_STDC */ { char *path_end=(char *)NULL; #ifdef UNIX path_end = strrchr(curr_filename,'/'); #endif #ifdef VMS path_end = strrchr(curr_filename,']'); if( path_end == (char *)NULL ) path_end = strrchr(curr_filename,':'); /* for symbolic names */ #endif #ifdef MSDOS /* look for either \ or / at end. */ path_end = strrchr(curr_filename,'\\'); if( path_end == (char *)NULL ) path_end = strrchr(curr_filename,'/'); #endif if( path_end == (char *)NULL ) path_end = curr_filename; else ++path_end; return (path_end); } PRIVATE void #if HAVE_STDC append_char_to_fragment(int c) #else /* K&R style */ append_char_to_fragment(c) int c; #endif /* HAVE_STDC */ { if (pos_fragment < (MAX_STMT - 1)) stmt_fragment[pos_fragment++] = c; } PRIVATE void #if HAVE_STDC append_string_to_fragment(char *s) #else /* K&R style */ append_string_to_fragment(s) char *s; #endif /* HAVE_STDC */ { while (*s) append_char_to_fragment(*s++); } /* Appends source text of an expression, up- or down-casing the letters according to pref. */ PRIVATE void #if HAVE_STDC append_expr_text_to_fragment(char *s) #else /* K&R style */ append_expr_text_to_fragment(s) char *s; #endif /* HAVE_STDC */ { int quote_char = ' ', inside_quote; inside_quote = FALSE; for (; *s; ++s) { if(! inside_quote) { if(*s == '\'' || *s == '"') { /* Start of a quote */ inside_quote = TRUE; quote_char = *s; } append_char_to_fragment(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*s) : makeupper(*s)); } else { /* inside quote */ if(*s == quote_char) { /* End of quote (quoted quote_char is handled as if consecutive strings) */ inside_quote=FALSE; } append_char_to_fragment(*s); } } } PRIVATE char * #if HAVE_STDC get_dimension_list(Lsymtab *symt) #else /* K&R style */ get_dimension_list(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { int n, dims; /* Get list of array dimensions from symbol table */ new_fragment(); append_char_to_fragment('('); dims = array_dims(symt->info.array_dim); for (n = 0; n < dims; ++n) { if (n > 0) append_char_to_fragment(','); append_expr_text_to_fragment(symt->src.textvec[n]); } append_char_to_fragment(')'); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } PRIVATE char * #if HAVE_STDC get_parameter_value(Lsymtab *symt) #else /* K&R style */ get_parameter_value(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { /* Construct parameter list "(NAME = value)" */ new_fragment(); append_char_to_fragment('('); append_expr_text_to_fragment(symt->name); append_string_to_fragment(" = "); append_expr_text_to_fragment(symt->info.param->src_text); append_char_to_fragment(')'); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } PRIVATE char * #if HAVE_STDC get_size_expression(Lsymtab *symt) #else /* K&R style */ get_size_expression(symt) Lsymtab *symt; #endif /* HAVE_STDC */ { /* Get a CHARACTER size expression from the symbol table */ new_fragment(); append_char_to_fragment('*'); append_expr_text_to_fragment(get_size_text(symt,0)); append_char_to_fragment('\0'); return (&stmt_fragment[0]); } /*================================================================================= * * make_html - Generate HTML page(s) from ftnchek analysis and source embedded * comments. Creates one HTML page from each source analyzed * *================================================================================*/ void #if HAVE_STDC make_html( Lsymtab **sym_list, char *mod_name, Lsymtab *module ) /* entry of current module in symtab */ #else /* K&R style */ make_html( sym_list, mod_name, module ) Lsymtab *sym_list[]; char *mod_name; Lsymtab *module; /* entry of current module in symtab */ #endif /* HAVE_STDC */ { char *header; char module_str[256]; char modname[256]; char *base_curr_filename; /* basename of current input file */ int mod_type; /* datatype of this module */ int n, nargs; if ( ! ANY_HTML_DECLARATIONS() ) /* Just return if no work to be done */ return; if(html_fd == NULL) /* e.g. input from stdin */ return; base_curr_filename = base_filename(current_filename); /* Establish indentation and comment character for free form or fixed form. */ html_indent = 0; first_variable_column = PFORT_FIRST_VARIABLE_COLUMN; comment_char = ' '; /* Set up name & type, and see what kind of module it is */ module = hashtab[current_module_hash].loc_symtab; current_module = module; strcpy( modname, module->name ); mod_type = get_type(module); /* Print name & type of the module */ switch ( mod_type ) { case type_PROGRAM: (void)sprintf( module_str, "PROGRAM %s", modname ); break; case type_SUBROUTINE: (void)sprintf( module_str, "SUBROUTINE %s", modname ); break; case type_BLOCK_DATA: n = sprintf( module_str, "BLOCK DATA FUNCTION" ); /* * ftnchek assigns "%DAT0n" to unnamed common. We don't want this * appearing in the HTML so fix it. Named block data is fine */ if ( strncmp( modname, "%DAT", 4 ) == 0 ) strcpy( modname, "BLOCKDATA" ); else sprintf( &module_str[n], " %s", modname ); break; default: (void)sprintf( module_str, "%s FUNCTION %s", type_table[mod_type], modname ); break; } (void)fprintf( html_fd, "

%s", modname, module_str ); nargs = module->info.arglist->numargs; if ( mod_type == type_BLOCK_DATA ) /* Don't end BLOCK DATA with parens */ { (void)fprintf( html_fd, "

\n
\n" ); } else /* Not BLOCK DATA module type */ { fprintf( html_fd, " ( " ); for ( n = 0;n < nargs; n++ ) { fprintf( html_fd,"%s%s", module->info.arglist->arg_array[n].name, (n\n
\n" ); } print_declaration_class(sym_list, make_unsorted_sym_list(sym_list,select_arguments), "Argument Definitions (+ indicates " "altered content)"); /* Get special "doc" comments from source file */ get_comments( modname, mkhtml_bookmark); (void)fprintf( html_fd, "" "\n" "\n" "
Source file:%s
\n", base_curr_filename ); /* * Report I/O usage of this routine. ftnchek has already determined this * information listed by line number of operation (see also -symtab). * For the HTML output line number information is discarded in favor of * a summary. */ htmlout_io_unit_usages(); print_declaration_class(sym_list, make_sym_list(sym_list, select_entry_points_by_name), "Alternate Entry Definitions" ), print_declaration_class(sym_list, make_sym_list(sym_list, select_intrinsics_by_name), "Intrinsic Functions Called" ), print_declaration_class(sym_list, make_sym_list(sym_list,select_statement_functions), "Statement functions Defined"); print_declaration_class(sym_list, make_sym_list(sym_list, select_externals_by_name), "External Functions and Subroutines Called"); print_declaration_class(sym_list, make_sym_list(sym_list,select_parameters), "Parameter Variables Used"); print_declaration_class(sym_list, make_sym_list(sym_list,select_locals), "Local Variables
(+ indicates altered content)"); print_selected_equiv_decls(sym_list, make_sym_list(sym_list,select_equivalences), (header = "Referenced Equivalenced Variables " "(+ indicates altered content)", &header)); print_list_decls(sym_list, make_sym_list(sym_list,select_namelists), (header = "Namelists (+ indicates altered content)", &header), "NAMELIST" ); print_list_decls(sym_list, make_sym_list(sym_list,select_common_blocks), (header = "Referenced Common Block Variables " "(+ indicates altered content)", &header), "COMMON"); (void)fprintf(html_fd, "
\n
\n" ); } /* end of make_html() */ PRIVATE void new_fragment(VOID) { pos_fragment = 0; } PRIVATE void #if HAVE_STDC print_blanks(int nblanks) #else /* K&R style */ print_blanks(nblanks) int nblanks; #endif /* HAVE_STDC */ { for ( ; nblanks > 0; --nblanks) (void)putc(' ',html_fd); } /* Routine to print namelist and common declarations. */ PRIVATE void #if HAVE_STDC print_common_decls( Lsymtab *sym_entry, /* COMMON block symbol table entry */ char **header) /* Header to print IF there are variables printed*/ #else /* K&R style */ print_common_decls(sym_entry, header ) Lsymtab *sym_entry; /* COMMON block symbol table entry */ char **header; /* Header to print IF there are variables printed*/ #endif /* HAVE_STDC */ { int num_print = 0; int h; int n,typ; Token *t; #ifdef DYNAMIC_TABLES /* tables will be malloc'd at runtime */ static Lsymtab **sym_list=(Lsymtab **)NULL; if(sym_list == (Lsymtab **)NULL) { /* Initialize if not done before */ if( (sym_list=(Lsymtab **)calloc(LOCSYMTABSZ,sizeof(Lsymtab *))) == (Lsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for local symbol list"); } } #else Lsymtab *sym_list[LOCSYMTABSZ]; /* temp. list of symtab entries to print */ #endif for (n = 0, t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { h = t->value.integer; if ( hashtab[h].loc_symtab->used_flag || hashtab[h].loc_symtab->set_flag ) sym_list[n++] = hashtab[h].loc_symtab; } if (n > 0) { sort_lsymbols(sym_list,n); for (typ = 0; typ < sizeof(types_table)/sizeof(types_table[0]); ++typ) { num_print += print_selected_common_decls(sym_list, n, types_table[typ], sym_entry->name, header); } } } PRIVATE void print_empty_comment_line(VOID) { (void)putc('\n',html_fd); } PRIVATE void #if HAVE_STDC print_equivalence_decls( Lsymtab *sym_entry, char **header) /* COMMON block symbol table entry */ #else /* K&R style */ print_equivalence_decls( sym_entry, header ) Lsymtab *sym_entry; /* COMMON block symbol table entry */ char **header; /* Title text for report */ #endif /* HAVE_STDC */ { int h; int n; Lsymtab *s; Token *t; #ifdef DYNAMIC_TABLES /* tables will be malloc'd at runtime */ static Lsymtab **sym_list=(Lsymtab **)NULL; if(sym_list == (Lsymtab **)NULL) { /* Initialize if not done before */ if( (sym_list=(Lsymtab **)calloc(LOCSYMTABSZ,sizeof(Lsymtab *))) == (Lsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for local symbol list"); } } #else Lsymtab *sym_list[LOCSYMTABSZ]; /* temp. list of symtab entries to print */ #endif for ( n = 0, t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { h = t->value.integer; for ( s = hashtab[h].loc_symtab, s = s->equiv_link; (s != NULL) && (s != hashtab[h].loc_symtab); s = s->equiv_link) sym_list[n++] = s; } if (n > 0) { sort_lsymbols(sym_list,n); print_selected_equiv_decls(sym_list, n, header ); } } PRIVATE void #if HAVE_STDC print_list_decls(Lsymtab **sym_list, int n, char **header, char *list_type_name) #else /* K&R style */ print_list_decls(sym_list, n, header, list_type_name) Lsymtab *sym_list[]; int n; char **header; char *list_type_name; #endif /* HAVE_STDC */ { int i, nd; nd = 0; for (i=0; isrc.toklist != NULL) { if ( ( strcmp(list_type_name,"COMMON") == 0) || ( strcmp(list_type_name,"NAMELIST") == 0 ) ) { /* then COMMON list */ print_common_decls(sym_list[i], header ); if ( i == n-1 ) { (void)fprintf( html_fd, "\n" ); } } else if ( strcmp( list_type_name, "EQUIVALENCE" ) == 0 ) { print_equivalence_decls(sym_list[i], header ); if ( i == n-1 ) { (void)fprintf( html_fd, "\n" ); } } else /* must be NAMELIST list */ { (void)fprintf( html_fd, "
" );
            print_one_list_decls(sym_list[i], list_type_name, header, &nd);
            (void)fprintf( html_fd, "
\n" ); } } } if ((nd > 0) && (strcmp(list_type_name,"COMMON") != 0)) print_empty_comment_line(); } /* routine to print COMMON or NAMELIST name between slashes. */ PRIVATE int #if HAVE_STDC print_list_name(char *list_type_name, char *name) #else /* K&R style */ print_list_name(list_type_name,name) char *list_type_name; char *name; #endif /* HAVE_STDC */ { int column, len; char *p; /* Compact mode: COMMON /blknam/ Padded mode: COMMON / blknam / */ print_blanks(html_indent); column = html_indent; for (p = list_type_name; *p; ++p, ++column) (void)putc(KEYWORDS_LOWERCASE() ? makelower(*p) : makeupper(*p), html_fd); print_blanks(1); column++; (void)putc('/',html_fd); column++; if (!DECLARE_COMPACT()) { print_blanks(1); column++; } len = 0; if (strcmp(name,blank_com_name) != 0) { for (p=name; *p; ++p, ++len) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),html_fd); } column += len; if (!DECLARE_COMPACT()) { if (len <= 6) /* Max standard length */ { print_blanks(7-len); /* Print padding */ column += 7-len; } } (void)putc('/',html_fd); column++; if (DECLARE_COMPACT()) { print_blanks(1); column++; } else if (column < first_variable_column) { print_blanks(first_variable_column-column); column = first_variable_column; } else if (column == first_variable_column) { print_blanks(1); column++; print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } else { print_blanks(NEXT_COLUMN(column)-column); column = NEXT_COLUMN(column); } return column; } PRIVATE void #if HAVE_STDC print_declaration_class(Lsymtab **sym_list, int n, char *header) #else /* K&R style */ print_declaration_class(sym_list, n, header) Lsymtab *sym_list[]; int n; char *header; #endif /* HAVE_STDC */ { unsigned t; if (n > 0) { for (t = 0; t < sizeof(types_table)/sizeof(types_table[0]); ++t) { print_selected_declarations(sym_list, n, types_table[t], (char*)NULL, &header); } fprintf( html_fd, "\n" ); } } PRIVATE void #if HAVE_STDC print_one_list_decls(Lsymtab *sym_entry, char *list_type_name, char **pheader, int *pnd) #else /* K&R style */ print_one_list_decls(sym_entry, list_type_name, pheader, pnd) Lsymtab *sym_entry; char *list_type_name; char **pheader; int *pnd; #endif /* HAVE_STDC */ { int column, need, next_column, nv; int ncontin; int h; Token *t; Lsymtab *symt; char *p; column = 0; ncontin = 0; /* count of continuation lines */ nv = 0; /* count of variables in statement */ for(t = sym_entry->src.toklist->tokenlist; t != NULL; t = t->next_token) { /* Loop over members */ h = t->value.integer; symt = hashtab[h].loc_symtab; if ( hashtab[h].loc_symtab->used_flag || hashtab[h].loc_symtab->set_flag ) { if (column == 0) /* at beginning of line, so */ { /* we need a type name */ if ((*pheader != (char*)NULL) && (strcmp(list_type_name,"COMMON") != 0)) { /* print header only once */ (void)fprintf(html_fd,"%c %s\n", comment_char,*pheader); *pheader = (char*)NULL; /* so we don't print it again */ } column = print_list_name(list_type_name,sym_entry->name); nv = 0; /* no variables yet in statement */ ncontin = 0; ++(*pnd); /* count declarations produced */ } next_column = NEXT_COLUMN(nv==0?column:column + 2); need = (int)strlen(symt->name); if ((next_column + need) > SRC_COMMENT_MAX_WIDTH) /* ? start new line */ { if (nv>0 && (strcmp(list_type_name,"COMMON") == 0) && (NO_CONTINUATION_LINES() || ncontin == (FREE_FORM()?39:19))) { (void)putc('\n',html_fd); column = print_list_name(list_type_name,sym_entry->name); nv = 0; /* no variables yet in statement */ ncontin = 0; } else { if( FREE_FORM() ) { /* do a free-form continuation */ print_blanks(next_column-column); (void)fputs("&\n",html_fd); print_blanks(html_indent); column = html_indent; } else { /* do a fixed-form continuation */ (void)putc('\n',html_fd); print_blanks(5); (void)putc('x',html_fd); column = 6; } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); ++ncontin; } } if (nv > 0) /* multiple variables */ { (void)fputs(", ",html_fd); print_blanks(next_column - column - 2); column = next_column; } for (p = symt->name; *p; ++p) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),html_fd); column += need; nv++; /* count variables */ } } if ((nv > 0) && (strcmp(list_type_name,"COMMON") == 0)) { if (column > 0) (void)putc('\n',html_fd); print_empty_comment_line(); column = 0; } if (column > 0) (void)putc('\n',html_fd); } PRIVATE void #if HAVE_STDC print_selected_declarations(Lsymtab **sym_list, int n, int the_type, char *the_type_name, char **pheader) #else /* K&R style */ print_selected_declarations(sym_list, n, the_type, the_type_name, pheader) Lsymtab *sym_list[]; int n; int the_type; char *the_type_name; char **pheader; #endif /* HAVE_STDC */ { int column, i, last_size, need, next_column, nv; int ncontin = 0, raw_type, sym_type, sym_size; char *p; column = 0; last_size = 0; nv = 0; /* count of variables in statement */ for (i = 0; i < n; ++i) { /* loop over variables */ raw_type = datatype_of(sym_list[i]->type); sym_type = (raw_type == type_UNDECL) ? get_type(sym_list[i]) : datatype_of(sym_list[i]->type); if ((the_type != type_ERROR) && (sym_type != the_type)) continue; sym_size = ACTUAL_SIZE(sym_list[i]); if ((nv > 0) && (sym_size != last_size)) { /* have new length modifier, so must start new declaration */ (void)putc('\n',html_fd); column = 0; ncontin = 0; nv = 0; } if (column == 0) /* at beginning of line, so */ { /* we need a type name */ if (*pheader != (char*)NULL) { /* print header only once */ if ( strlen(*pheader) ) (void)fprintf(html_fd, "\n" "
%s
",*pheader);
               else
                  (void)fprintf(html_fd,"
" );

                *pheader = (char*)NULL; /* so we don't print it again */
            }
            column = print_typename(the_type,the_type_name, sym_size,
                                     sym_list[i]);
            last_size = sym_size;
            nv = 0;             /* no variables yet in statement */
            ncontin = 0;
        }
        if (DECLARE_COMPACT())
            next_column = (nv==0?column:column + 2);
        else
            next_column = NEXT_COLUMN(nv==0?column:column + 2);
        need = (int)strlen(sym_list[i]->name);

        /* Add space for '+' or ' ' identifier to indicate var modification      */
        need++;

        if (sym_list[i]->array_var     /* leave space for "(...)" */
            && ARRAY_VARS_DIMENSIONED())
            need += strlen(get_dimension_list(sym_list[i]));

        if ((next_column + need) > SRC_COMMENT_MAX_WIDTH)  /* ? start new declaration */
        {
            if (nv>0 && (NO_CONTINUATION_LINES() || ncontin == 19))
              {
                (void)putc('\n',html_fd);
                column = print_typename(the_type,the_type_name, sym_size,
                                     sym_list[i]);
                ncontin = 0;
                nv = 0;         /* no variables yet in statement */
              }
            else
              {
                if( FREE_FORM() ) { /* do a free-form continuation */
                  print_blanks(next_column-column);
                  (void)fputs("&
\n",html_fd); print_blanks(html_indent); column = html_indent; } else { /* do a fixed-form continuation */ (void)putc('\n',html_fd); print_blanks(5); (void)putc('x',html_fd); column = 6; } if (DECLARE_COMPACT()) next_column = (nv==0?column:column + 2); else next_column = NEXT_COLUMN(nv==0?column:column + 2); ++ncontin; } last_size = sym_size; } if (nv > 0) /* multiple variables */ { (void)fputs(", ",html_fd); print_blanks(next_column - column - 2); column = next_column; } /* Identify vars that are modified in this routine */ if ( sym_list[i]->assigned_flag && ! sym_list[i]->parameter ) (void)putc('+',html_fd); else (void)putc(' ',html_fd); for (p = sym_list[i]->name; *p; ++p) (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ? makelower(*p) : makeupper(*p),html_fd); if (sym_list[i]->array_var && ARRAY_VARS_DIMENSIONED()) (void)fputs(stmt_fragment,html_fd); column += need; nv++; /* count variables */ if (sym_list[i]->parameter) { fprintf( html_fd, "%*s", 38 - column, " " ); fprintf( html_fd, "%s\n",get_parameter_value(sym_list[i]) ); column = 0; nv = 0; } } if (column > 0) (void)putc('\n',html_fd); } PRIVATE int #if HAVE_STDC print_selected_equiv_decls( Lsymtab **sym_list, int n, char **pheader) #else /* K&R style */ int print_selected_equiv_decls(sym_list, n, pheader) Lsymtab *sym_list[]; int n; char **pheader; #endif /* HAVE_STDC */ { int column, i, next_column, sym_type=0, sym_size, block_name_col_width; char *p, scope_str[128]; Lsymtab *cur_sym, *tmp_sym; column = 0; block_name_col_width = first_variable_column + 1; for (i = 0; i < n; ++i) { /* loop over variables */ if ( sym_list[i]->equiv_link == NULL ) continue; if (column == 0) /* at beginning of line, so */ { /* we need a type name */ if ( *pheader != (char*)NULL ) { if ( strlen( *pheader ) ) (void)fprintf(html_fd, "\n\n
%s
",
                  *pheader);
            *pheader = (char *)NULL;
            (void)fprintf(html_fd, "\n" );
            }

         column += fprintf( html_fd, "\n%-*.*s",
                     block_name_col_width, block_name_col_width, "EQUIV" );
         }

      /*
      *  Circulate within current equivalence list to print all members.
      *  After each member is printed set it's equiv_link to NULL so we don't
      *  report it again.
      *
      *  NOTE: This affects the sym_list passed to make_html()
      *  Place this so remaining processing does not need the equiv_link.
      */
      cur_sym = sym_list[i];

      while ( cur_sym->equiv_link != NULL )
         {
         if ( column == 0 )
            column += fprintf( html_fd, "\n%*.*s",
                        block_name_col_width, block_name_col_width, "" );

         /*--- Print var type ---*/
         sym_size = ACTUAL_SIZE( cur_sym );
         sym_type = (datatype_of(cur_sym->type) == type_UNDECL) ?
            get_type(cur_sym) : datatype_of(cur_sym->type);
         column += print_typename(sym_type, NULL, sym_size, cur_sym);

         /*--- Print var name, but first prefix "set" flag if required ---*/
         next_column = MY_NEXT_COLUMN( column ) + 2; /* +2 to make it match common refs */
         if ( cur_sym->assigned_flag && ! cur_sym->parameter )
            (void)putc('+',html_fd);
         else
            (void)putc(' ',html_fd);
         column ++;

         /* Print var name upper or lower case as desired */
         for (p = cur_sym->name; *p; ++p)
            (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ?
                       makelower(*p) : makeupper(*p),html_fd);
         column += strlen( cur_sym->name );

         /* Append a hint that this is an array. Use "()" for array, "  " if not */
         column += fprintf( html_fd, "%s", cur_sym->array_var ? "()" : "  " );

         /* Finish up the var name print by spacing over for next "scope" column */
         for ( ; column < next_column; column++ ) (void)putc( ' ', html_fd );

         /*--- Print var scope ---*/
         if ( cur_sym->common_block )
            sprintf( scope_str, "COMMON /%s/", cur_sym->common_block->name );
         else
            sprintf( scope_str, "Local Var" );

         column += fprintf( html_fd, "%-s", scope_str );

         column = 0;
         tmp_sym = cur_sym->equiv_link;
         cur_sym->equiv_link = NULL;
         cur_sym = tmp_sym;
         }

      }

   if ( n > 0 )
      fprintf( html_fd, "
\n" ); return( n ); } PRIVATE int #if HAVE_STDC print_selected_common_decls( Lsymtab **sym_list, int n, int the_type, char *comname, char **pheader) #else /* K&R style */ int print_selected_common_decls(sym_list, n, the_type, comname, pheader) Lsymtab *sym_list[]; int n; int the_type; char *comname; char **pheader; #endif /* HAVE_STDC */ { int column, i, tv, last_size, need, next_column, nv, raw_type, sym_type, sym_size, block_name_col_width; char *p; column = 0; block_name_col_width = first_variable_column + 1; last_size = 0; nv = 0; /* count of variables in statement */ tv = 0; /* total number of vars printed */ for (i = 0; i < n; ++i) { /* loop over variables */ raw_type = datatype_of(sym_list[i]->type); sym_type = (raw_type == type_UNDECL) ? get_type(sym_list[i]) : datatype_of(sym_list[i]->type); if ((the_type != type_ERROR) && (sym_type != the_type)) continue; sym_size = ACTUAL_SIZE(sym_list[i]); if ((nv > 0) && (sym_size != last_size)) { /* have new length modifier, so must start new declaration */ (void)putc('\n',html_fd); column = 0; nv = 0; } if (column == 0) /* at beginning of line, so */ { /* we need a type name */ if ( *pheader != (char*)NULL ) { if ( strlen( *pheader ) ) (void)fprintf(html_fd, "\n\n
%s
",
                  *pheader);
            *pheader = (char *)NULL;
            }

         column += fprintf( html_fd, "%-*.*s",
                     block_name_col_width, block_name_col_width, comname );
         column += print_typename(the_type, NULL, sym_size, sym_list[i]);
         last_size = sym_size;
         nv = 0;             /* no variables yet in statement */
         }
      next_column = MY_NEXT_COLUMN( nv == 0 ? column : column + 2 );
      need = (int)strlen(sym_list[i]->name);

      /* Add space for '+' or ' ' identifier to indicate var modification      */
      need++;

      if (sym_list[i]->array_var     /* leave space for "(...)" */
           && ARRAY_VARS_DIMENSIONED())
           need += strlen(get_dimension_list(sym_list[i]));

      /*
      *  Start new declaration if we are out of space on the line and one or more
      *  vars have already been printed
      */
      if ( nv > 0 && (next_column + need) > SRC_COMMENT_MAX_WIDTH )
         {
         (void)putc('\n',html_fd);
         column = 0;
         column += fprintf( html_fd, "%-*.*s",
                     block_name_col_width, block_name_col_width, comname );
         column += print_typename(the_type,NULL, sym_size, sym_list[i]);
         nv = 0;              /* no variables yet in statement */
         last_size = sym_size;
         }
      if (nv > 0)             /* multiple variables */
         {
         (void)fputs(", ",html_fd);
         print_blanks(next_column - column - 2);
         column = next_column;
         }

      /* Identify vars that are modified in this routine */
      if ( sym_list[i]->assigned_flag && ! sym_list[i]->parameter )
         (void)putc('+',html_fd);
      else
         (void)putc(' ',html_fd);

      for (p = sym_list[i]->name; *p; ++p)
          (void)putc(VARIABLES_AND_CONSTANTS_LOWERCASE() ?
                      makelower(*p) : makeupper(*p),html_fd);
      tv ++;

      if (sym_list[i]->array_var
          && ARRAY_VARS_DIMENSIONED())
           (void)fputs(stmt_fragment,html_fd);
      column += need;
      nv++;                   /* count variables */
      if (sym_list[i]->parameter)
         {
         fprintf( html_fd, "%*s", 39 - column, " " );
         fprintf( html_fd, "%s\n",get_parameter_value(sym_list[i]) );
         column = 0;
         nv = 0;
         }
      }

   if (column > 0)
      (void)putc('\n',html_fd);

   return( tv );
   }

PRIVATE int
#if HAVE_STDC
print_typename(int the_type, char *the_type_name, int the_size, Lsymtab *symt)
                                /* type_ERROR if typename non-NULL */
                                /* non-NULL overrides type_table[] use */
#else /* K&R style */
print_typename(the_type,the_type_name,the_size,symt)
int     the_type;               /* type_ERROR if typename non-NULL */
char    *typename;              /* non-NULL overrides type_table[] use */
int     the_size;
Lsymtab *symt;
#endif /* HAVE_STDC */
{                               /* return value is last column printed */
    int column;
    char digits[sizeof("*18446744073709551616")]; /* big enough for 2^64 */
    char *p;
    char *size_expression;

    print_blanks(html_indent);
    column = html_indent;

    for (p = (the_type_name == (char*)NULL) ? type_table[the_type] : the_type_name;
         *p; ++p, ++column)
        (void)putc(KEYWORDS_LOWERCASE() ? makelower(*p) : makeupper(*p),
                   html_fd);
    if (symt != NULL) {
      if (((symt->size_is_adjustable && (the_type == type_STRING))) ||
          (the_size == size_ADJUSTABLE)) /* happens only for CHARACTER*(*) */
        {
            /* size_is_adjustable overrides the_size because def_parameter() */
            /* in symtab.c replaced size_ADJUSTABLE with actual size. */
            (void)fputs("*(*)",html_fd);
            column += 4;
        }
      else if (symt->size_is_expression && (the_type == type_STRING))
        {
            size_expression = get_size_expression(symt);
            (void)fputs(size_expression,html_fd);
            column += strlen(size_expression);
        }
      else if ((the_size > 0) &&
               (the_type != type_ERROR) &&
               (the_size != std_size[the_type]))
        {       /* supply length modifier for non-standard type sizes */
            (void)sprintf(digits,"*%d",the_size);
            (void)fputs(digits,html_fd);
            column += strlen(digits);
        }
    }
    if (DECLARE_COMPACT())
    {
        print_blanks(1);
        column++;
    }
    else if (column < first_variable_column)
    {
        print_blanks(first_variable_column-column);
        column = first_variable_column;
    }
    else  if (column == first_variable_column)
    {
        print_blanks(1);
        column++;
        print_blanks(NEXT_COLUMN(column)-column);
        column = NEXT_COLUMN(column);
    }
    else
    {
        print_blanks(NEXT_COLUMN(column)-column);
        column = NEXT_COLUMN(column);
    }
    return (column);
}


PRIVATE int
#if HAVE_STDC
select_arguments(Lsymtab *sym_entry)
#else /* K&R style */
select_arguments(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a module argument) */
    if (sym_entry->declared_external ||
        sym_entry->invoked_as_func)
        return (0);
    else if (sym_entry->argument)
        return (1);
    else
        return (0);
}


PRIVATE int
#if HAVE_STDC
 select_externals_by_name(
   Lsymtab *sym_entry )
#else /* K&R style */
 select_externals_by_name( sym_entry )
   Lsymtab *sym_entry;
#endif /* HAVE_STDC */
   {
   /* Select subroutines and external function calls that are NOT the current
   *  Module.
   */
   if ( sym_entry == current_module )
      return( 0 );
   else if (sym_entry->declared_intrinsic) /* must appear first, because symbols */
      return (0); /* can be both declared_intrinsic and declared_external*/
                    /* ??? is this a bug in ftnchek 2.7 ??? */
   else if ( datatype_of(sym_entry->type) == type_SUBROUTINE )
      return (1);
   else if (storage_class_of(sym_entry->type) == class_STMT_FUNCTION)
      return (0);
   else if (sym_entry->declared_external)
      return (1);
   else if (sym_entry->declared_intrinsic || sym_entry->intrinsic)
      return (0);
   else if (sym_entry->invoked_as_func)
      return (1);
   else
      return (0);
   }


PRIVATE int
#if HAVE_STDC
select_entry_points_by_name(Lsymtab *sym_entry)
#else /* K&R style */
select_intrinsics_by_name(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is intrinsic and must appear in INTRINSIC declaration) */
    if (sym_entry->entry_point && ! sym_entry->is_current_module )
        return (1);
    else
        return (0);
}

PRIVATE int
#if HAVE_STDC
select_intrinsics_by_name(Lsymtab *sym_entry)
#else /* K&R style */
select_intrinsics_by_name(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is intrinsic and must appear in INTRINSIC declaration) */
    if (sym_entry->declared_intrinsic || sym_entry->intrinsic )
        return (1);
    else
        return (0);
}


PRIVATE int
#if HAVE_STDC
select_locals(Lsymtab *sym_entry)
#else /* K&R style */
select_locals(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a local variable) */

    if (EXCL_SF3_DECLARATIONS() && sf3_internal_name(sym_entry))
        return (0);
    else if (sym_entry->argument ||
        sym_entry->common_var ||
        ( storage_class_of(sym_entry->type) == class_COMMON_BLOCK ) ||
        sym_entry->declared_external ||
        sym_entry->declared_intrinsic ||
        sym_entry->entry_point ||
        sym_entry->external ||
        sym_entry->intrinsic ||
        sym_entry->invoked_as_func ||
        sym_entry->parameter)
        return (0);
    else if ( sym_entry->used_flag || sym_entry->assigned_flag )
        return (1);
    else
        return( 0 );
}

PRIVATE int
#if HAVE_STDC
select_equivalences(Lsymtab *sym_entry)
#else /* K&R style */
select_equivalences(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a local variable) */

    if ( ( sym_entry->used_flag || sym_entry->assigned_flag ) &&
         ( sym_entry->equiv_link != NULL && sym_entry->equiv_link != sym_entry ) )
        return (1);
    else
        return( 0 );
}


PRIVATE int
#if HAVE_STDC
select_common_blocks(Lsymtab *sym_entry)
#else /* K&R style */
select_common_blocks(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a COMMON block name) */
    if (storage_class_of(sym_entry->type) == class_COMMON_BLOCK)
      {
      return (1);
      }
    else
        return (0);
}

PRIVATE int
#if HAVE_STDC
select_namelists(Lsymtab *sym_entry)
#else /* K&R style */
select_namelists(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a NAMELIST name) */
    if (storage_class_of(sym_entry->type) == class_NAMELIST)
        return (1);
    else
        return (0);
}

PRIVATE int
#if HAVE_STDC
select_parameters(Lsymtab *sym_entry)
#else /* K&R style */
select_parameters(sym_entry)
    Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    /* return (symbol is a PARAMETER name) */
    if (sym_entry->parameter && sym_entry->used_flag )
        return (1);
    else
        return (0);
}



PRIVATE int
#if HAVE_STDC
select_statement_functions(Lsymtab *sym_entry)
#else /* K&R style */
select_statement_functions(sym_entry)
     Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{
    if (storage_class_of(sym_entry->type) == class_STMT_FUNCTION)
        return (1);
    else
        return (0);
}


PRIVATE int
#if HAVE_STDC
sf3_internal_name(Lsymtab *sym_entry)
#else /* K&R style */
sf3_internal_name(sym_entry)
     Lsymtab *sym_entry;
#endif /* HAVE_STDC */
{    /* Return (symbol is an SFTRAN3 internal name). */
    char *p = sym_entry->name;

    /* The SFTRAN3 preprocessor uses internal names of the form NPRddd,
       NXdddd, N2dddd, and N3dddd, where d is a decimal digit. */

    if ((p[0] != 'N') || (strlen(p) != 6))
        return (0);
    switch (p[1])
    {
    case 'P':
        if ((p[2] == 'R') && isdigit(p[3]) && isdigit(p[4]) && isdigit(p[5]))
            return (1);
        else
            return (0);

    case 'X':                   /* fall through */
    case '2':                   /* fall through */
    case '3':
        if (isdigit(p[2]) && isdigit(p[3]) && isdigit(p[4]) && isdigit(p[5]))
            return (1);
        else
            return (0);

    default:
        return (0);
    }
}

PRIVATE int
#if HAVE_STDC
make_sym_list(Lsymtab **sym_list, int (*selector) (Lsymtab *))
#else /* K&R style */
make_sym_list(sym_list,selector)
     Lsymtab *sym_list[];
     PROTO(int (*selector),( Lsymtab *sym_entry ));
#endif /* HAVE_STDC */
{
    int i;
    int n;

    for (i = 0, n = 0; i < loc_symtab_top; ++i)
    {
        if (selector(&loc_symtab[i]))
            sym_list[n++] = &loc_symtab[i];
    }
    if (n > 0)
    {

        if (selector == select_parameters) {
                        /* Free form is not blank-insensitive, so go
                           thru parameter declarations and remove any
                           blanks from within numbers.
                        */
            if( FREE_FORM() ) {
                for(i=0; i < n; i++) {
                    if( is_numeric_type(get_type(sym_list[i])) ) {
                        strip_blanks(sym_list[i]->info.param->src_text);
                    }
                }
            }
        /* original PARAMETER statement order must be preserved so that
           the expressions do not refer to as-yet-undefined parameter names */
            sort_parameters(sym_list,n);
        }
        else
            sort_lsymbols(sym_list,n);
    }
    return (n);
}


PRIVATE int
#if HAVE_STDC
make_unsorted_sym_list(Lsymtab **sym_list, int (*selector) (Lsymtab *))
#else /* K&R style */
make_unsorted_sym_list(sym_list,selector)
     Lsymtab *sym_list[];
     PROTO(int (*selector),( Lsymtab *sym_entry ));
#endif /* HAVE_STDC */
{
    int i;
    int n;

    for (i = 0, n = 0; i < loc_symtab_top; ++i)
    {
        if (selector(&loc_symtab[i]))
            sym_list[n++] = &loc_symtab[i];
    }
    if (n > 0)
    {

        if (selector == select_parameters) {
                        /* Free form is not blank-insensitive, so go
                           thru parameter declarations and remove any
                           blanks from within numbers.
                        */
            if( FREE_FORM() ) {
                for(i=0; i < n; i++) {
                    if( is_numeric_type(get_type(sym_list[i])) ) {
                        strip_blanks(sym_list[i]->info.param->src_text);
                    }
                }
            }
        /* original PARAMETER statement order must be preserved so that
           the expressions do not refer to as-yet-undefined parameter names */
            sort_parameters(sym_list,n);
        }
        else
            sort_lsymbols(sym_list,n);
    }
    return (n);
}

                        /* Routine to remove whitespace from a string */
PRIVATE void
#if HAVE_STDC
strip_blanks(
   char *s)
#else /* K&R style */
strip_blanks( s )
   char *s;
#endif
   {
   char *t;
   for( t=s; *s != '\0'; s++ )
      {
      if ( !isspace(*s) )
         *t++ = *s;
      }
   *t = '\0';
   }

/*=================================================================================
*
*  Compare two structures (IO_Unit_Info).  If they are the same return 1,
*  otherwise return 0;
*
*================================================================================*/
PRIVATE int
#if HAVE_STDC
compare_info(
   IO_Unit_Info *io1,
   IO_Unit_Info *io2 )
#else /* K&R style */
compare_info( io1, io2 )
   IO_Unit_Info *io1;
   IO_Unit_Info *io2;
#endif
   {
   int i = 0;
   if ( io1->io_access == io2->io_access && io1->io_form == io2->io_form )
      if ( io1->unit_id == io2->unit_id )
         if ( io1->unit_no == io2->unit_no )
            i = 1;

   return( i );
   }

/*=================================================================================
*
*  Use the ftnchek operation types to accumulate a character string abbreviation
*  of the operations performed.
*
*================================================================================*/
PRIVATE void
#if HAVE_STDC
choose_opcode(
   char *opcode,
   int   io_operation )
#else /* K&R style */
choose_opcode( opcode, io_operation )
   char *opcode;
   int   io_operation;
#endif
   {
   switch( io_operation )
      {
      case tok_REWIND   : opcode[0] = 'A'; break;
      case tok_BACKSPACE: opcode[1] = 'B'; break;
      case tok_ENDFILE  : opcode[2] = 'E'; break;
      case tok_CLOSE    : opcode[3] = 'C'; break;
      case tok_INQUIRE  : opcode[4] = 'I'; break;
      case tok_OPEN     : opcode[5] = 'O'; break;
      case tok_READ     : opcode[6] = 'R'; break;
      case tok_WRITE    :
      case tok_PRINT    : opcode[7] = 'W'; break;
      }
   }

/*=================================================================================
*
*  Determine and set the access and form type based on
*  operation.  We want to get rid of "default" for read,
*  write, print and open but mark accordingly others
*================================================================================*/
PRIVATE void
#if HAVE_STDC
set_access_and_format_code(
   IO_Unit_Info *save_info )
#else /* K&R style */
set_access_and_format_code( sav_info )
   IO_Unit_Info *save_info;
#endif /* HAVE_STDC */
   {
   switch ( save_info->io_operation )
      {
      case tok_INQUIRE:
      case tok_CLOSE:
         save_info->io_access = IO_ACCESS_DEFAULT;
         save_info->io_form = IO_FORM_DEFAULT;
         break;

      case tok_BACKSPACE:
      case tok_REWIND:
      case tok_ENDFILE:
         save_info->io_access = IO_ACCESS_SEQUENTIAL;
         save_info->io_form = IO_FORM_DEFAULT;
         break;

      default:
         if ( save_info->io_access == IO_ACCESS_DEFAULT )
            save_info->io_access = IO_ACCESS_SEQUENTIAL;

         if ( save_info->io_form == IO_FORM_DEFAULT )
            {
            if ( save_info->io_access == IO_ACCESS_SEQUENTIAL )
               save_info->io_form = IO_FORM_FORMATTED;
            else
               save_info->io_form = IO_FORM_UNFORMATTED;
            }
         break;

      }  /* End switch */
   }


/*=================================================================================
*
*  Routine to summarize I/O usage for the HTML output module.  ftnchek generates
*  internal lists of I/O operations by line number.  This is too verbose for the
*  HTML summary so this routine produces a report of all I/O operations by each
*  unique combination of unit name, unit number, access type and format type.
*
*  We don't want to modify ftnchek's internal lists because they might be used
*  by some routine down-stream so local copies are made and destroyed after use.
*
*================================================================================*/
PRIVATE void
#if HAVE_STDC
htmlout_io_unit_usages(
   void )
#else /* K&R style */
htmlout_io_unit_usages( )
#endif
   {
   static int i, j;
   static char* IO_access[]={"    ","DIR","SEQ"};
   static char* IO_form[] ={"    ","UNF","FMTD"};

   static char  opcode[] = "          ";
   static IO_Unit_Info **my_ioinfo, *ioinfo_ptr;
   static const char *unit_name;
   static int h;

   IO_Unit_Info save_info = { 0 };

   if ( num_io_unit_usages > 0 )
      {
      fprintf(html_fd,"\n\n");
      fprintf(html_fd,"
I/O Operations:
" );
      fprintf(html_fd,"Unit ID  Unit No       Access  Form   Operation");

      /* Copy the io information structure to a new array so we can rework it */
      my_ioinfo = (IO_Unit_Info **) malloc( sizeof(IO_Unit_Info) * num_io_unit_usages );
      memcpy( my_ioinfo, io_unit_info,
         sizeof(IO_Unit_Info) * num_io_unit_usages );

      /*---------------------------------------------------------------------------
      *  I/O information is stored by line number.  We don't want line no. for the
      *  HTML summary so loop through the ftnchek list.  We have a current I/O
      *  item of interest.  It is compared with others in the list.  Each match of
      *  unit name, unit no., access type AND format type results in accumulation of
      *  operation code in var opcode and setting the line number to -1.
      *
      *  The next time through the loop ignores already counted operations by
      *  looking for a line number of -1.
      *--------------------------------------------------------------------------*/
      for ( i = 0; i < num_io_unit_usages; i++ )
         {
         /* A new io reference */
         ioinfo_ptr = (IO_Unit_Info *)((char *)my_ioinfo + i * sizeof(IO_Unit_Info));

         /* If line_num is -1 we already accounted for this reference so skip */
         if ( ioinfo_ptr->line_num != -1 )
            {
            /* compare the current I/O reference to determine "NEWNESS" */
            if ( compare_info( ioinfo_ptr, &save_info ) == 0 )
               {
               /* This is a new reference.  Copy to the holding area, save_info */
               memcpy( &save_info, ioinfo_ptr, sizeof( IO_Unit_Info ) );
               ioinfo_ptr->line_num = -1;

               /*
               *  Set access and format parameters for our summary report
               */
               set_access_and_format_code( &save_info );

               strcpy( opcode, "          " );        /* Initialize for this ref */
               choose_opcode( opcode, ioinfo_ptr->io_operation ); /* get abbrev */

               /*------------------------------------------------------------------
               *  Look down the list for other matching references accumulating
               *  opcode abbreviations and setting matching reference line_num
               *  to -1.
               *-----------------------------------------------------------------*/
               for ( j = i + 1; j < num_io_unit_usages; j++ )
                  {
                  ioinfo_ptr = (IO_Unit_Info *)((char *)my_ioinfo +
                               j * sizeof(IO_Unit_Info));
                  /*
                  *  Set access and format parameters for our summary report
                  */
                  set_access_and_format_code( ioinfo_ptr );

                  /* compare the current I/O reference to the saved reference */
                  if ( compare_info( ioinfo_ptr, &save_info ) == 1 )
                     {
                     /* References match so set line_num and get opcode */
                     ioinfo_ptr->line_num = -1;

                     choose_opcode( opcode, ioinfo_ptr->io_operation );
                     }
                  }

               /*------------------------------------------------------------------
               *  Now we should have all of one io reference with opcode
               *  summary.  Print out results
               *-----------------------------------------------------------------*/

               /* Print unit name and number or blank if unknown */

               if ( (h=save_info.unit_id) < 0)
                  {
                  /* handle cases of unknown and default */
                  unit_name = (h == IO_UNIT_DEFAULT)? "*": "";
                  }
               else
                  {
                  /* handle cases where it is an identifier, unit_id=hashnum */
                  unit_name = hashtab[h].name;
                  }

               /* Name portion */
               fprintf( html_fd, "\n%7s%8s", unit_name,
                  /* if id is a parameter, print name=value */
                  ( save_info.unit_id >= 0 &&
                    save_info.unit_no >= 0 ) ? "=" : " " );

               /* Unit number portion */
               if ( save_info.unit_no < 0 )
                  fprintf(html_fd,"%7s","");
               else
                  fprintf(html_fd,"%-7d",save_info.unit_no);

               /* Print out access type, format and operations summary */
               fprintf(html_fd,"   %4s  %4s    %-9s",
                      IO_access[save_info.io_access],
                      IO_form[save_info.io_form] ,
                      opcode );

               }
            }
         }

      /* All units have been written, finish up the html table */
      fprintf( html_fd, "\n"
         "\nOperation codes A=rewind,B=backspace,C=close,E=endfile"
         "\n                I=inquire,O=open,R=read,W=write" );
      fprintf( html_fd, "
\n" ); free( my_ioinfo ); } } ftnchek-3.3.1/message.c0000644000031000002260000003566410145703773015373 0ustar moniotstaff00000000000000/* $Id: message.c,v 1.12 2004/11/14 16:29:47 moniot Exp $ Error and warning routines */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include #include "ftnchek.h" PROTO(PRIVATE void error_message,( const char *filename, LINENO_t lineno, COLNO_t colno, const char *s, const char *tag )); PROTO(PRIVATE void lintstyle_error_message,( const char *filename, LINENO_t lineno, COLNO_t colno, const char *s, const char *tag )); PROTO(PRIVATE void oldstyle_error_message,( const char *filename, LINENO_t lineno, COLNO_t colno, const char *s, const char *tag )); void #if HAVE_STDC lex_error(const char *s) #else /* K&R style */ lex_error(s) char *s; #endif /* HAVE_STDC */ { syntax_error(line_num,col_num,s); } void #if HAVE_STDC yyerror(const char *s) #else /* K&R style */ yyerror(s) char *s; #endif /* HAVE_STDC */ { static int parserror_explanation_given = FALSE; syntax_error(line_num,col_num,s); /* Novices are often thrown by terminology, so we give them a little help. This message is only given once per run. Nov 2004: bison has reverted from "parse error" to "syntax error" but we'll keep the explanatory code in case it changes back in future. */ if( novice_help && ! parserror_explanation_given && strncmp(s,"parse error",sizeof("parse error")-1) == 0 ) { error_message((char *)NULL, NO_LINE_NUM, NO_COL_NUM, "(A parse error means that I am not able to make sense of this statement,", (char *)NULL ); msg_tail("because your program has broken some rule of Fortran syntax.)"); parserror_explanation_given = TRUE; } } void #if HAVE_STDC syntax_error(LINENO_t lineno, COLNO_t colno, const char *s) /* Syntax error message */ #else /* K&R style */ syntax_error(lineno,colno,s) /* Syntax error message */ LINENO_t lineno; COLNO_t colno; char *s; #endif /* HAVE_STDC */ { ++error_count; error_message(current_filename,lineno,colno,s,"Error"); } void #if HAVE_STDC warning(LINENO_t lineno, COLNO_t colno, const char *s) /* Print warning message */ #else /* K&R style */ warning(lineno,colno,s) LINENO_t lineno; COLNO_t colno; char *s; #endif /* HAVE_STDC */ { ++warning_count; error_message(current_filename,lineno,colno,s,"Warning"); } void #if HAVE_STDC ugly_code(LINENO_t lineno, COLNO_t colno, const char *s) /* -pretty message */ #else /* K&R style */ ugly_code(lineno,colno,s) LINENO_t lineno; COLNO_t colno; char *s; #endif /* HAVE_STDC */ { ++warning_count; error_message(current_filename,lineno,colno,s,"Possibly misleading appearance"); } void #if HAVE_STDC nonstandard(LINENO_t lineno, COLNO_t colno, int f90, int f95) #else /* K&R style */ nonstandard(lineno,colno, f90, f95) LINENO_t lineno; COLNO_t colno; int f90, f95; #endif /* HAVE_STDC */ { ++warning_count; if( f95 ) { error_message(current_filename,lineno,colno,"Syntax deleted in Fortran 95","Warning"); } else { error_message(current_filename,lineno,colno,"Nonstandard syntax","Warning"); if( f90 ) msg_tail("(not adopted in Fortran 90)"); } } void #if HAVE_STDC nonportable(LINENO_t lineno, COLNO_t colno, const char *s) /* Print warning about nonportable construction */ #else /* K&R style */ nonportable(lineno,colno,s) /* Print warning about nonportable construction */ LINENO_t lineno; COLNO_t colno; char *s; #endif /* HAVE_STDC */ { ++warning_count; error_message(current_filename,lineno,colno,s,"Nonportable usage"); } /* Routine to print messages from local symtab checking routines. */ void #if HAVE_STDC local_message(const char *filename, LINENO_t lineno, const char *s, const char *tag) #else /* K&R style */ local_message(filename, lineno, s, tag) char *filename; LINENO_t lineno; char *s; char *tag; #endif /* HAVE_STDC */ { error_message(filename,lineno,GLOBAL_NO_COL_NUM,s,tag); } /* Routine to print messages from global checking routines. Here the filename is given as an argument since it varies with each call. */ void #if HAVE_STDC global_warning(const char *filename, LINENO_t lineno, const char *s) #else /* K&R style */ global_warning(filename,lineno,s) char *filename; LINENO_t lineno; char *s; #endif /* HAVE_STDC */ { ++warning_count; error_message(filename,lineno,GLOBAL_NO_COL_NUM,s,"Warning"); } void #if HAVE_STDC global_message(const char *filename, LINENO_t lineno, const char *s) #else /* K&R style */ global_message(filename,lineno,s) char *filename; LINENO_t lineno; char *s; #endif /* HAVE_STDC */ { ++warning_count; error_message(filename,lineno,GLOBAL_NO_COL_NUM,s,NULL); } /* error_message prints out error messages and warnings. It now comes in two flavors. If using lintstyle_error_message(), messages are produced in style like UNIX lint: "main.f", line nn, col nn: Error: your message here Otherwise messages by oldstyle_error_message in old ftnchek style: Error near line nn col nn file main.f: your message here At this time, oldstyle_error_message is used when -novice is in effect, lintstyle_error_message otherwise. */ PRIVATE int errmsg_col; /* Crude macro to give number of digits in line and column numbers. Used by line wrap computation. */ #define NUM_DIGITS(n) ((n)<10?1:((n)<100?2:((n)<1000?3:(n)<10000?4:5))) PRIVATE void #if HAVE_STDC error_message(const char *filename,LINENO_t lineno, COLNO_t colno, const char *s, const char *tag) #else /* K&R style */ error_message(filename,lineno,colno,s,tag) char *filename; LINENO_t lineno; COLNO_t colno; char *s,*tag; #endif /* HAVE_STDC */ { if(novice_help) oldstyle_error_message(filename,lineno,colno,s,tag); else lintstyle_error_message(filename,lineno,colno,s,tag); } PRIVATE void #if HAVE_STDC lintstyle_error_message(const char *filename,LINENO_t lineno, COLNO_t colno, const char *s, const char *tag) #else /* K&R style */ lintstyle_error_message(filename,lineno,colno,s,tag) char *filename; LINENO_t lineno; COLNO_t colno; char *s,*tag; #endif /* HAVE_STDC */ { COLNO_t icol; extern LINENO_t prev_stmt_line_num; /* shared with advance.c */ errmsg_col=1; /* Keep track of line length */ /* Print the character ^ under the column number. But if colno == 0, error occurred in prior line. If colno is NO_COL_NUM, then print message without any column number given. N.B. colno == GLOBAL_COL_NUM means this is from local or global message routines, don't flush line out. */ if(lineno != NO_LINE_NUM && colno != GLOBAL_NO_COL_NUM) { if(colno == NO_COL_NUM) { /* colno == NO_COL_NUM means don't give column number.*/ (void)flush_line_out(lineno);/* print line if not printed yet */ } else if(colno != 0) { /* print line if not printed yet */ if( flush_line_out(lineno) ) { /* If it was printed, put ^ under the col */ (void)fprintf(list_fd,"\n%8s",""); for(icol=1; icol 0) /* Append include-file name if we are in one */ && filename != (char *)NULL ) { /* skip if multi-file message */ if(lineno == NO_LINE_NUM) { /* if no line no, preposition needed */ (void)fprintf(list_fd," in"); errmsg_col += 3; } (void)fprintf(list_fd," file %s",filename); errmsg_col += 6+(unsigned)strlen(filename); } }/*end if(tag != NULL)*/ if( s != (char *)NULL ) { if( tag != (char *)NULL ) { msg_tail(":"); } msg_tail(s); /* now append the message string */ } } /* msg_tail appends string s to current error message. It prints one word at a time, starting a new line when the message gets to be too long for one line. */ void #if HAVE_STDC msg_tail(const char *s) #else /* K&R style */ msg_tail(s) char *s; #endif /* HAVE_STDC */ { if( s[0] != '\0' ) { int wordstart,wordend,leading_skip,wordchars; /* Insert blanks between items. Exceptions: colon, semicolon, closing paren are used at start of some items and should not be separated from preceding item. */ if( s[0] != ':' && s[0] != ')' && s[0] != ';' ) { (void)fprintf(list_fd," "); errmsg_col++; } /* Each iteration of loop prints leading space and the nonspace characters of a word. Loop invariant: wordstart is index of leading space at start of word, wordend is index of space char following word. */ wordstart=0; while(s[wordstart] != '\0') { leading_skip = TRUE; for(wordend=wordstart; s[wordend] != '\0'; wordend++) { if(leading_skip) { /* If skipping leading space chars */ if(!isspace(s[wordend])) leading_skip = FALSE; /* go out of skip mode at nonspace */ } else { /* If scanning word chars */ if(isspace(s[wordend])) break; /* quit loop when space char found */ } } wordchars = wordend-wordstart; /* If word doesn't fit, wrap to next line */ if( wrap_column > 0 && (errmsg_col += wordchars) > wrap_column) { /* At start of line, replace zero or more blanks by one blank. */ (void)fprintf(list_fd,"\n "); while(isspace(s[wordstart])) { ++wordstart; --wordchars; } errmsg_col = wordchars+1; } /* Print the word */ while(wordstart < wordend) { (void)putc(s[wordstart++],list_fd); } } } } void #if HAVE_STDC oops_message(int severity, LINENO_t lineno, COLNO_t colno, const char *s) #else /* K&R style */ oops_message(severity,lineno,colno,s) int severity; LINENO_t lineno; COLNO_t colno; char *s; #endif /* HAVE_STDC */ { (void)fflush(list_fd); (void)fprintf(stderr,"\nOops"); if(lineno != NO_LINE_NUM) { (void)fprintf(stderr," at line %u",lineno); if(colno != NO_COL_NUM) (void)fprintf(stderr," at col %u",colno); } (void)fprintf(stderr," in file %s",current_filename); (void)fprintf(stderr," -- %s",s); if(severity == OOPS_FATAL) { (void)fprintf(stderr,"\nFtnchek aborted\n"); exit(1); } } void #if HAVE_STDC oops_tail(const char *s) #else /* K&R style */ oops_tail(s) char *s; #endif /* HAVE_STDC */ { (void)fprintf(stderr," %s",s); } /* Routine to convert a long unsigned int to a string. This uses a static array, so only one call can be in action at a time. Intended for use when msg_tail must print an integer. */ char * #if HAVE_STDC ulongtostr(unsigned long num) #else /* K&R style */ ulongtostr(num) unsigned long num; #endif /* HAVE_STDC */ { static char str[MAX_ULONGTOSTR]; (void)sprintf(str,"%lu",num); return str; } ftnchek-3.3.1/options.c0000644000031000002260000021634710164602435015433 0ustar moniotstaff00000000000000/* $Id: options.c,v 1.42 2004/12/29 19:27:25 moniot Exp $ Definitions of command-line options and routines to set them. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #if HAVE_STRINGS_H #include /* we use strncasecmp */ #endif #include #include "ftnchek.h" #include "options.h" /* Prototypes of external routines defined below */ #include "utils.h" /* we use strncasecmp */ typedef enum { /* for isacheck fields. Used to suppress -nocheck */ NOT_A_CHECK, IS_A_CHECK } isacheck_t; /* Define WarnOptionList struct here */ typedef struct { char *name; /* user knows the sub-setting by this name */ int *flag; /* ptr to the option variable itself */ char *explanation; /* for use by -warning=help */ } WarnOptionList; /* Define StrsettingList struct here */ typedef struct { char *name; /* user knows the setting by this name */ char **strvalue; /* the string argument goes here */ char *turnon, *turnoff; /* e.g. "all", "none" */ isacheck_t isacheck; /* tells -nocheck to turn it off */ WarnOptionList *option_list;/* this holds the set of options */ /* For compatibility with -option=num form: */ PROTO(void (*numeric_form_handler),(int num, char *setting_name)); char *explanation; /* for use by -help */ } StrsettingList; extern int yydebug; /* for grammar debugging via -yydebug */ /* Prototypes of private routines defined */ PROTO(PRIVATE void append_include_path,( char *new_path )); PROTO(PRIVATE FILE *find_rc,( void )); PROTO(PRIVATE void list_warn_options,( StrsettingList *strsetting )); PROTO(PRIVATE void make_env_name,( char *env_name, char *option_name )); PROTO(PRIVATE void mutual_exclude, ( WarnOptionList wList[], const char *opt_name, int *thisflag, int *otherflags[] )); PROTO(PRIVATE void process_warn_string, ( char *warn_string, StrsettingList *strsetting )); PROTO(PRIVATE int str_to_num,(char *s)); PROTO(PRIVATE int read_setting,( char *s, int *setvalue, char *name, int minlimit, int maxlimit, int turnoff, int turnon, int min_default_value, int max_default_value )); PROTO(PRIVATE void set_warn_option, ( char *s, WarnOptionList warn_option[] )); PROTO(PRIVATE void set_warn_option_value, ( int *flag, int value)); PROTO(PRIVATE void update_str_options,( StrsettingList *strset )); PROTO(PRIVATE int wildcard_match, (char *pat, char *str)); /* The following routines handle compatibility with older numeric form of settings that are now WarnOptionLists. */ PROTO(PRIVATE void argcheck_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void arraycheck_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void calltree_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void comcheck_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void intrinsic_numeric_option,( int value, char *setting_name )); PROTO(PRIVATE void makedcl_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void mkhtml_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void source_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void usage_numeric_option, ( int value, char *setting_name )); PROTO(PRIVATE void numeric_option_error,( char *s, int minlimit, int maxlimit )); /* Here we define the commandline options. Most options are boolean switchopts, with "no" prefix to unset them. Others (called settings) are numeric quantities, defined using "=num". A third category (strsettings) are string quantities, eg filenames. The argument "?" will cause list of options to be printed out. For VMS, options can be prefixed with either "-" or "/", but messages will use the canonical form. Since VMS allows options to be smushed together, end-of-option is signalled by either NUL or the / of next option. */ #ifdef OPTION_PREFIX_SLASH #define OPT_PREFIX '/' /* Canonical VMS prefix for commandline options */ #define END_OF_OPT( C ) ((C) == '\0' || (C) == '/') #else #define OPT_PREFIX '-' /* Canonical Unix prefix for commandline options */ #define END_OF_OPT( C ) ((C) == '\0') #endif #define OPT_MATCH_LEN 3 /* Options are matched only in 1st 3 chars */ #define NUM_SWITCHES (sizeof(switchopt)/sizeof(switchopt[0])) #define NUM_SETTINGS (sizeof(setting)/sizeof(setting[0])) #define NUM_STRSETTINGS (sizeof(strsetting)/sizeof(strsetting[0])) #define MAX_OPT_LEN 32 /* Big enough to hold any warn option name */ /* Adding new options: New options with boolean (switchopt) or numeric (setting) values can be added to the lists below by inserting a definition using the same syntax as the others, and declaring the controlled variable with a line in ftnchek.h of the form: OPT(type,name,default-value); No other changes are needed. (For boolean options, make sure they precede "-debug" in order for them to appear in the -help page.) New options with string values (strsetting) are added similarly, but they have option_list and numeric_form_handler fields that must also be defined. The strsettings come in two flavors: those whose string value is used literally (like -include) and those whose string value is a list of sub-options (like -f77). For the first type, just set the option_list and numeric_form_handler fields to NULL. For the second type, create a new WarnOptionList following the pattern of f77_warn_option. This list must precede the strsettings definition. For each item in this list, a corresponding char * variable (e.g. f77_warn_list) must be declared as well. Then insert the name of the list into the option_list field, and the name of the companion variable into the strvalue field, of the strsetting entry. The numeric_form_handler field is used for strsettings that used to take a numeric value and have been converted to the option-list form. See usage_numeric_handler for an example of how these work. This field is NULL if there is no handler. If there is a handler, put its prototype with the others above, add the code at a suitable point in this file, and put its name in the numeric_form_handler field of the WarnOptionList. */ /* Option definitions: */ /* List of switches is defined first. Each entry gives the name and the corresponding flag variable to be set or cleared. See set_option() for processing of switches. N.B. list_options() will suppress printing of any options whose explanation starts with "debug" unless the -debug switch was previously given. */ PRIVATE struct { char *name; /* User knows it by this name */ int *switchflag; /* Pointer to variable that controls it */ char *explanation; /* For use by -help */ isacheck_t isacheck; /* Tells -nocheck to turn it off */ } switchopt[]={ {"brief", &brief, "briefer form of error messages",NOT_A_CHECK}, {"check", &do_check, "perform checking",IS_A_CHECK}, {"declare", &decls_required, "list undeclared variables",IS_A_CHECK}, {"division", &div_check, "catch possible div by 0",IS_A_CHECK}, {"extern", &usage_ext_undefined, "check if externals defined",IS_A_CHECK}, {"help", &help_screen, "print help screen",NOT_A_CHECK}, {"library", &library_mode, "treat next files as library",NOT_A_CHECK}, {"list", &do_list, "print program listing",NOT_A_CHECK}, {"novice", &novice_help, "extra help for novices",NOT_A_CHECK}, {"pure", &pure_functions, "functions have no side effects",IS_A_CHECK}, {"quiet", &quiet, "less verbose output",NOT_A_CHECK}, {"reference", &print_ref_list, "print who-calls-who reference list",NOT_A_CHECK}, {"resources", &show_resources, "show info on resource usage",NOT_A_CHECK}, {"sixchar", &sixclash, "catch nonunique names",IS_A_CHECK}, {"sort", &print_topo_sort, "prerequisite-order sort of modules",NOT_A_CHECK}, {"symtab", &do_symtab, "print symbol table info",NOT_A_CHECK}, #ifdef VCG_SUPPORT {"vcg", &print_vcg_list, "print call graph in vcg format",NOT_A_CHECK}, #endif {"version", &print_version, "print version number",NOT_A_CHECK}, {"volatile", &comcheck_volatile, "assume volatile common blocks",IS_A_CHECK}, {"debug", &debug_latest, "debug latest code",IS_A_CHECK}, {"global", &debug_glob_symtab, "debug global symtab info",IS_A_CHECK}, {"grammar", &debug_parser, "debug printout in parser",IS_A_CHECK}, {"hashtable", &debug_hashtab, "debug printout of hashtable",IS_A_CHECK}, {"local", &debug_loc_symtab, "debug local symtab info",IS_A_CHECK}, #if defined(DEBUG_FORLEX) || defined(DEBUG_IS_KEYWORD) {"tokens", &debug_lexer, "debug printout in lexer",IS_A_CHECK}, #endif {"yydebug", &yydebug, "debug via yydebug",IS_A_CHECK}, }; /* List of settings is defined here. Each entry gives the name, the corresponding variable, the range of permitted values, the value for turning it off, the values to assign if below or above the limits rsptly, whether it is a check to be turned off by -nocheck, followed by brief explanation. See set_option() for processing. */ PRIVATE struct { char *name; int *setvalue; int minlimit,maxlimit,turnoff,turnon,min_default_value,max_default_value; isacheck_t isacheck; char *explanation; } setting[]={ {"columns", &fixed_max_stmt_col, 72, MAXLINE, 72, MAXLINE, 72, MAXLINE, NOT_A_CHECK, "max fixed-form line length processed"}, {"errors",&error_cascade_limit, 0, 999, 0, DEF_ERROR_CASCADE_LIMIT, 0, 999, NOT_A_CHECK, "max number of error messages per cascade"}, {"pointersize",&given_ptrsize, 1, 16, PTRSIZE, PTRSIZE, 1, 16, NOT_A_CHECK, "standard pointer size in bytes"}, {"wordsize", &given_wordsize, 0, 16, 0, BpW, 0, 16, NOT_A_CHECK, "standard wordsize in bytes (0=no default)"}, {"wrap", &wrap_column, 0, 999, 0, WRAP_COLUMN, 0, 999, NOT_A_CHECK, "width of page to wrap error messages"}, }; /* Now we define the various "warn list" options. Each has a char* pointer used to point to the options given with the command-line argument. Each entry in the WarnOptionList has the name of the sub-option, the address of the flag variable it controls, and an explanation used when printing the help page for the option. Each list must be alphabetized or at least options with matching prefix strings must be adjacent. When a new option list is defined, it must also be entered into strsetting array below. */ PRIVATE char *argcheck_warn_list=(char *)NULL;/* Arg mismatches to warn about */ PRIVATE WarnOptionList argcheck_warn_option[]={ { #if ARGCHECK_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL,"Function Argument Mismatch Warning"},/* Title for list */ {"arrayness", &argcheck_arrayness, "argument arrayness mismatch"}, {"type", &argcheck_argtype, "argument type mismatch"}, {"function-type", &argcheck_functype, "function type mismatch"}, {"number", &argcheck_argnumber, "wrong number of arguments"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *arraycheck_warn_list=(char *)NULL;/* Arg arrayness warnings */ PRIVATE WarnOptionList arraycheck_warn_option[]={ { #if ARRAYCHECK_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL,"Argument Arrayness Mismatch Warning"},/* Title for list */ {"dimensions", &arraycheck_dims, "different number of dimensions"}, {"size", &arraycheck_size, "different number of elements"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *calltree_opt_list=(char *)NULL;/* Subprogram call graph options */ PRIVATE WarnOptionList calltree_option[]={ /* not really a warning */ { "none" /* used by -help */ , (int *)NULL,"Call-Tree Output"},/* Title for list */ {"prune", &call_tree_prune, "prune repeated subtrees"}, {"reference", &print_ref_list, "produce call tree in who-calls-who format"}, {"sort", &call_tree_sort, "sort call tree alphabetically"}, {"tree", &print_call_tree, "produce call tree in text format"}, #ifdef VCG_SUPPORT {"vcg", &print_vcg_list, "produce call tree in vcg format"}, #endif {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *comcheck_warn_list=(char *)NULL;/* Common block mismatch warnings */ PRIVATE WarnOptionList comcheck_warn_option[]={ { #if COMCHECK_ALL "dimensions,exact,length,type" /* used by -help */ #else "none" #endif , (int *)NULL,"Common Block Mismatch Warning"},/* Title for list */ {"dimensions", &comcheck_dims, "arrays differ in dimensions"}, {"exact", &comcheck_by_name, "require variable-by-variable correspondence"}, {"length", &comcheck_length, "blocKs differ in total length"}, {"type", &comcheck_type, "data type mismatch at corresponding locations"}, {"volatile", &comcheck_volatile, "assume blocks are volatile"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *crossref_opt_list=(char *)NULL; /* Cross-ref listing options */ PRIVATE WarnOptionList crossref_option[]={ /* not a warning */ { "none" /* used by -help */ , (int *)NULL, "Cross-Ref Output"}, /* Title for list */ {"calls", &print_xref_list, "print call cross-reference list"}, {"common", &print_com_xrefs, "print common block cross-reference list"}, {"labels", &print_lab_refs, "print label cross-reference list"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; /* Here define list of -f77 warning options. These are set or cleared by -[no]f77=list option. Note that the variables are FALSE if feature is ALLOWED, and TRUE if feature is to be WARNED about. */ PRIVATE char *f77_warn_list=(char *)NULL; /* Non F77 extensions to warn about */ PRIVATE WarnOptionList f77_warn_option[]={ { #if F77_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Fortran 77 Warning"}, /* Title for list */ {"accept-type", &f77_accept_type, "ACCEPT and TYPE I/O statements"}, {"array-bounds", &f77_array_bounds, "array bounds expressions"}, {"assignment-stmt", &f77_assignment, "assignment involving array"}, {"attribute-based-decl",&f77_attrbased_typedecl, "attribute-based (:: -style) variable declaration"}, {"automatic-array", &f77_automatic_array, "local array of variable size"}, {"backslash", &f77_unix_backslash, "Unix backslash escape in strings"}, {"byte", &f77_byte, "BYTE data type"}, {"case-construct", &f77_case_construct, "CASE construct"}, {"character", &f77_char_extension, "Character variable defined length <= 0"}, {"common-subprog-name",&f77_common_subprog_name, "Common block & subprog with same name"}, {"construct-name", &f77_construct_name, "Construct names on DO statements"}, {"continuation", &f77_20_continue, "More than 19 continuation lines"}, {"cpp", &f77_unix_cpp, "Unix C preprocessor directives"}, {"cray-pointer", &f77_cray_pointers, "Cray pointer syntax"}, {"cycle-exit", &f77_cycle_exit, "CYCLE or EXIT statement"}, {"d-comment", &f77_d_comment, "Debug comments starting with D"}, {"dec-tab" , &f77_dec_tabs, "DEC Fortran tab-formatted source"}, {"do-enddo", &f77_do_enddo, "DO loop extensions"}, {"double-complex", &f77_double_complex, "Double complex datatype"}, {"format-dollarsign", &f77_format_dollarsigns, "$ control code in FORMAT"}, {"format-edit-descr", &f77_format_extensions, "Nonstandard edit descriptors"}, {"function-noparen", &f77_function_noparen, "FUNCTION defined without parens"}, {"implicit-none", &f77_implicit_none, "IMPLICIT NONE statement"}, {"include", &f77_include, "INCLUDE statement"}, {"initializer", &f77_initializers, "Variable initializer in declaration"}, {"inline-comment", &f77_inline_comment, "Inline comments starting with !"}, {"internal-list-io", &f77_internal_list_io, "List-directed I/O to internal file"}, {"intrinsic", &f77_intrinsics, "Nonstandard intrinsic functions"}, {"io-keywords", &f77_io_keywords, "Nonstandard I/O keywords"}, {"long-line", &f77_overlength, "Statements with code past 72 columns"}, {"long-name", &f77_long_names, "Identifiers over 6 chars"}, {"mixed-common", &f77_mixed_common, "Mixed char and nonchar data in common"}, {"mixed-expr", &f77_mixed_expr, "Incompatible type combinations in exprs"}, {"name-dollarsign", &f77_dollarsigns, "$ or other nonalnum (except _) in identifiers"}, {"name-underscore", &f77_underscores, "Underscores in identifiers"}, {"namelist", &f77_namelist, "NAMELIST statement"}, {"param-implicit-type",&f77_param_implicit_type, "implicit typing of PARAMETERs"}, {"param-intrinsic", &f77_param_intrinsic, "Intrinsics and **real in PARAMETER defns"}, {"param-noparen", &f77_param_noparen, "PARAMETER statement without parens"}, {"pointer", &f77_pointers, "Fortran 90 pointer syntax"}, {"quad-constant", &f77_quad_constants, "Quad precision constants like 1.23Q4"}, {"quotemark", &f77_quotemarks, "Strings delimited by \"quote marks\""}, {"relops", &f77_relops, "Relational operators < <= == /= > >="}, {"semicolon", &f77_semicolon, "Semicolon as statement separator"}, {"statement-order", &f77_stmt_order, "Statement out of order"}, {"typeless-constant", &f77_typeless_constants, "Typeless constants like Z'19AF'"}, {"type-size", &f77_typesize, "Sized type declarations like REAL*8"}, {"variable-format", &f77_variable_format, "Variable format repeat spec or field size"}, {"vms-io", &f77_io_keywords, /* same as "io-keywords" */ "Nonstandard I/O keywords"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *f90_warn_list=(char *)NULL; /* Non F90 extensions to warn about */ PRIVATE WarnOptionList f90_warn_option[]={ { #if F90_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Fortran 90 Violation Warning"},/* Title for list */ {"accept-type", &f90_accept_type, "ACCEPT and TYPE I/O statements"}, {"backslash", &f90_unix_backslash, "Unix backslash escape in strings"}, {"byte", &f90_byte, "BYTE data type"}, {"continuation", &f90_continue, "Too many or empty continuation lines"}, {"cpp", &f90_unix_cpp, "Unix C preprocessor directives"}, {"cray-pointer", &f90_cray_pointers, "Cray pointer syntax"}, {"d-comment", &f90_d_comment, "Debug comments starting with D"}, {"dec-tab" , &f90_dec_tabs, "DEC Fortran tab-formatted source"}, {"double-complex", &f90_double_complex, "Double complex datatype"}, {"format-dollarsign", &f90_format_dollarsigns, "$ control code in FORMAT"}, {"format-edit-descr", &f90_format_extensions, "Nonstandard edit descriptors"}, /* Note: f90_freeform_space == misc_warn, not controlled here */ {"function-noparen", &f90_function_noparen, "FUNCTION defined without parens"}, {"initializer", &f90_initializers, "Variable initializer using / / in declaration"}, {"intrinsic", &f90_intrinsics, "Nonstandard intrinsic functions"}, {"io-keywords", &f90_io_keywords, "Nonstandard I/O keywords"}, {"long-line", &f90_overlength, "Statements with code past max columns"}, {"mixed-expr", &f90_mixed_expr, "Incompatible type combinations in exprs"}, {"name-dollarsign", &f90_dollarsigns, "$ in identifiers"}, {"param-implicit-type",&f90_param_implicit_type, "implicit typing of PARAMETERs"}, {"param-noparen", &f90_param_noparen, "PARAMETER statement without parens"}, {"quad-constant", &f90_quad_constants, "Quad precision constants like 1.23Q4"}, {"statement-order", &f90_stmt_order, "Statement out of order"}, {"type-size", &f90_typesize, "Sized type declarations like REAL*8"}, {"typeless-constant", &f90_typeless_constants, "Nonstandard constants like X'19AF'"}, {"variable-format", &f90_variable_format, "Variable format repeat spec or field size"}, {"vms-io", &f90_io_keywords, /* same as "io-keywords" */ "Nonstandard I/O keywords"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *f95_warn_list=(char *)NULL; /* Non F95 old syntax to warn about */ PRIVATE WarnOptionList f95_warn_option[]={ { #if F95_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Fortran 95 Violation Warning"},/* Title for list */ {"real-do", &f95_real_do, "real DO variable"}, {"pause", &f95_pause, "PAUSE stmt"}, {"assign", &f95_assign, "ASSIGN stmt, assigned GOTO, assigned format"}, {"h-edit", &f95_Hedit, "H edit descriptor"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; #ifndef STANDARD_INTRINSICS PRIVATE char *intrinsic_option_list=(char *)NULL; /* intrinsic fcn options */ PRIVATE WarnOptionList intrinsic_option[]={ { /* Define -help message. This is not done right... */ #if (DEF_INTRINSIC_SET & 2) "unix" #else #if (DEF_INTRINSIC_SET & 4) "vms" #else #if (DEF_INTRINSIC_SET & 1) "common" #else "none" #endif #endif #endif , (int *)NULL, "Intrinsic Function"}, /* Title for list */ {"extra", &intrinsic_set_extra, "recognize commonly supported nonstandard intrinsics"}, {"iargc-no-argument", &intrinsic_iargc_no_argument, "iargc takes no arguments"}, {"iargc-one-argument",&intrinsic_iargc_one_argument, "iargc takes one argument"}, {"rand-no-argument", &intrinsic_rand_no_argument, "rand takes no arguments"}, {"rand-one-argument", &intrinsic_rand_one_argument, "rand takes one argument"}, {"unix", &intrinsic_set_unix, "recognize some unix intrinsics"}, {"vms", &intrinsic_set_vms, "recognize some vms intrinsics"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; #endif /* not STANDARD_INTRINSICS */ /* makedcls is not really a warning list, but it uses the same style of control. */ PRIVATE char *makedcl_warn_list=(char *)NULL; /* Make-declarations options */ PRIVATE WarnOptionList makedcl_warn_option[]={ {"none" /* used by -help */ , (int *)NULL, "Make Type-Declarations"}, /* Title for list */ {"asterisk-comment", &dcl_asterisk_comment_character, "use asterisk as comment character"}, {"comment-char-lowercase",&dcl_lowercase_comment_character, "use lowercase c as comment character"}, {"compact", &dcl_compact, "compact output format"}, {"declarations", &dcl_declarations, "produce file of declarations"}, {"exclude-sftran3", &dcl_excl_sftran3_internal_vars, "omit SFTRAN3 internal variables"}, {"free-form", &dcl_free_form, "produce declarations in free form"}, {"keywords-lowercase",&dcl_keywords_lowercase, "output keywords in lowercase"}, {"suppress-array-dimensions",&dcl_no_array_dimensions, "do not declare array dimensions"}, {"undeclared-only", &dcl_only_undeclared, "declare only undeclared things"}, {"use-continuation-lines",&dcl_use_continuations, " use continuation lines"}, {"vars-and-consts-lowercase",&dcl_vars_and_consts_lowercase, "output variables and constants in lowercase"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; /* makehtmls is not really a warning list, but it uses the same style of control. */ PRIVATE char *mkhtml_warn_list=(char *)NULL; /* Make-declarations options */ PRIVATE WarnOptionList mkhtml_warn_option[]={ {"none" /* used by -help */ , (int *)NULL, "Make HTML Documents"}, /* Title for list */ {"compact", &html_compact, "compact output format"}, {"documents", &html_documents, "produce html documents"}, {"exclude-sftran3", &html_excl_sftran3_internal_vars, "omit SFTRAN3 internal variables"}, {"free-form", &html_free_form, "produce declarations in free form"}, {"keywords-lowercase",&html_keywords_lowercase, "output keywords in lowercase"}, {"suppress-array-dimensions",&html_no_array_dimensions, "do not declare array dimensions"}, #if 0 {"undeclared-only", &html_only_undeclared, "declare only undeclared things"}, #endif {"use-continuation-lines",&html_use_continuations, " use continuation lines"}, {"vars-and-consts-lowercase",&html_vars_and_consts_lowercase, "output variables and constants in lowercase"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *port_warn_list=(char *)NULL; /* Nonportable things to warn about */ PRIVATE WarnOptionList port_warn_option[]={ { #if PORT_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Portability Warning"}, /* Title for list */ {"backslash", &port_backslash, "Backslash in standard-conforming strings"}, {"common-alignment", &port_common_alignment, "COMMON not in descending size order"}, {"hollerith", &port_hollerith, "Hollerith constants (except in FORMAT)"}, {"long-string", &port_long_string, "Strings over 255 chars long"}, {"mixed-equivalence", &port_mixed_equiv, "Different data types equivalenced"}, {"mixed-size", &port_mixed_size, "Default and explicit size types mixed"}, {"real-do", &port_real_do, "Non-integer DO loops"}, {"param-implicit-type",&port_param_implicit_type, "Implicit type of PARAMETER differs from default type"}, {"tab", &port_tabs, "Tabs in source code"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *pretty_warn_list=(char *)NULL; /* Misleading things to warn about */ PRIVATE WarnOptionList pretty_warn_option[]={ { #if PRETTY_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Appearance Warning"}, /* Title for list */ {"alternate-return", &pretty_alt_return, "Alternate return out of range"}, {"embedded-space", &pretty_extra_space, "Space in variable names or operators"}, {"continuation", &pretty_contin, "Continuation mark following comment line"}, {"long-line", &pretty_overlength, "Lines over 72 columns"}, {"missing-space", &pretty_no_space, "Missing space between variable & keyword"}, {"multiple-common", &pretty_multiple_common, "COMMON declared in multiple stmts"}, {"multiple-namelist", &pretty_multiple_namelist, "NAMELIST declared in multiple stmts"}, {"parentheses", &pretty_parens, "Parentheses around a variable"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; /* Project file is not really a warning list, but it uses the same style of control. */ PRIVATE char *project_warn_list=(char *)NULL; /* Project file options */ PRIVATE WarnOptionList project_warn_option[]={ {"none" , (int *)NULL, "Project File"}, /* Title for list */ {"create", &make_project_file, "Create project file"}, {"trim-calls", &proj_trim_calls, "Keep minimum information about subprogram calls"}, {"trim-common", &proj_trim_common, "Keep minimum information about common blocks"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; /* Source format is not really a warning list, but it uses the same style of control. */ PRIVATE char *source_form_list=(char *)NULL; /* Source format options */ PRIVATE WarnOptionList source_form_option[]={ { #if VMS_INCLUDE "vms-include" /* For -help. This ignores the unlikely possibility that other options may also be turned on by default. */ #else "none" #endif , (int *)NULL, "Source Format"}, /* Title for list */ {"dec-param-standard-type",&source_dec_param_std_type, "DEC Fortran PARAMETERs typed as if standard"}, {"dec-tab", &source_dec_tab, "DEC Fortran tab-format"}, {"fixed", &source_fixed_form, "force fixed source form"}, {"free", &source_free_form, "force free source form"}, {"param-implicit-type",&source_param_implicit, "implicit typing of PARAMETERs by value"}, {"unix-backslash", &source_unix_backslash, "UNIX-style backslash escape char"}, {"vms-include", &source_vms_include, "VMS-style INCLUDE statement"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *stylecheck_warn_list=(char *)NULL; /* block structure style warnings */ PRIVATE WarnOptionList stylecheck_warn_option[]={ { #if STYLECHECK_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL,"Picky Warnings About Block Structures"},/* Title for list */ {"block-if", &style_req_block_if, "require block IF or logical IF"}, {"construct-name", &style_req_construct_name, "require named block constructs"}, {"distinct-do", &style_shared_do_terminator, "DO loops not to share terminator"}, {"do-construct", &style_req_do_construct, "require ENDDO or CONTINUE as terminator of DO"}, {"do-enddo", &style_req_enddo, "require ENDDO as terminator of DO"}, {"end-name", &style_req_end_name, "require subprogram name on structured END statements"}, {"format-stmt", &style_labeled_format, "object to FORMAT statements"}, {"goto", &style_goto, "object to GOTO statements"}, {"labeled-stmt", &style_labeled_exec, "object to labeled statements except FORMAT"}, {"program-stmt", &style_req_prog_stmt, "require PROGRAM statement at head of program"}, {"structured-end", &style_req_structured_end, "require END PROGRAM et al, not plain END"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *trunc_warn_list=(char *)NULL; /* Truncation pitfalls to warn about */ PRIVATE WarnOptionList trunc_warn_option[]={ { #if TRUNC_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Truncation Warning"}, /* Title for list */ {"int-div-exponent", &trunc_int_div_exponent, "int/int used as exponent"}, {"int-div-real", &trunc_int_div_real, "int/int converted to real"}, {"int-div-zero", &trunc_int_div_zero, "int/int = constant 0 "}, {"int-neg-power", &trunc_int_neg_power, "int**(-int), usually equals 0"}, {"promotion", &trunc_promotion, "lower precision promoted to higher"}, {"real-do-index", &trunc_real_do_index, "real DO index with int bounds"}, {"real-subscript", &trunc_real_subscript, "real array subscript"}, {"significant-figures",&trunc_sigfigs, "single precision const overspecified"}, {"size-demotion", &trunc_size_demotion, "higher precision truncated to lower, same type"}, {"type-demotion", &trunc_type_demotion, "higher precision truncated to lower, different type"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; PRIVATE char *usage_warn_list=(char *)NULL; /* Variable usages to warn about */ PRIVATE WarnOptionList usage_warn_option[]={ { #if USAGE_ALL "all" /* used by -help */ #else "none" #endif , (int *)NULL, "Usage Warning"}, /* Title for list */ {"arg-alias", &usage_arg_alias_modified, "scalar argument same as another is modified"}, {"arg-array-alias", &usage_array_alias_modified, "argument in same array as another is modified"}, {"arg-common-alias", &usage_arg_common_modified, "scalar argument same as common variable, either is modified"}, {"arg-common-array-alias", &usage_array_common_modified, "array argument same as common variable, either is modified"}, {"arg-const-modified", &usage_arg_modified, "constant or expression argument is modified"}, {"arg-unused", &usage_arg_unused, "dummy argument declared but not used"}, {"com-block-unused", &usage_com_block_unused, "whole common block declared but not used"}, {"com-block-volatile", &usage_com_block_volatile, "common block may lose definition if volatile"}, {"com-var-set-unused", &usage_com_var_set_unused, "common variable set but not used"}, {"com-var-uninitialized", &usage_com_var_uninitialized, "common variable used but not set"}, {"com-var-unused", &usage_com_var_unused, "common variable declared but not used"}, {"do-index-modified", &usage_do_var_modified, "active DO index variable modified"}, {"ext-multiply-defined", &usage_ext_multiply_defined, "external multiply defined"}, {"ext-declared-only", &usage_ext_declared_only, "name declared EXTERNAL but not defined or used"}, {"ext-undefined", &usage_ext_undefined, /* Also touched by -extern */ "external declared or used but not defined (= -external)"}, {"ext-unused", &usage_ext_unused, "external defined but not used"}, {"label-undefined", &usage_label_undefined, "label used but undefined"}, {"label-unused", &usage_label_unused, "label defined but unused"}, {"var-set-unused", &usage_var_set_unused, "local variable set but not used"}, {"var-uninitialized", &usage_var_uninitialized, "local variable used before set"}, {"var-unused", &usage_var_unused, "local variable declared but not used"}, {(char *)NULL, (int *)NULL, (char *)NULL}, }; /* List of strsettings is defined here. Each entry gives the name of the corresponding string variable, value to set if "=str" omitted, and brief explanation. See set_option() for processing. */ /*** (struct was declared above: repeated in comment here for reference) StrsettingList { char *name; char **strvalue; char *turnon, *turnoff; isacheck_t isacheck; WarnOptionList *option_list; PROTO(void (*numeric_form_handler),(int num, char *setting_name)); char *explanation; };***/ PRIVATE StrsettingList strsetting[]={ {"arguments", &argcheck_warn_list, "all", "none", IS_A_CHECK, argcheck_warn_option, argcheck_numeric_option, "check subprogram argument agreement"}, {"array", &arraycheck_warn_list, "all", "none", IS_A_CHECK, arraycheck_warn_option, arraycheck_numeric_option, "check subprogram argument arrayness agreement"}, {"calltree", &calltree_opt_list, "tree", "none", NOT_A_CHECK, calltree_option, calltree_numeric_option, "subprogram call graph options"}, {"common", &comcheck_warn_list, "all", "none", IS_A_CHECK, comcheck_warn_option, comcheck_numeric_option, "check for common block mismatches"}, {"crossref", &crossref_opt_list, "all", "none", NOT_A_CHECK, crossref_option, NULL, "cross-ref printing options"}, {"f77", &f77_warn_list, "all", "none", IS_A_CHECK, f77_warn_option, NULL, "warn about non-F77 extensions"}, {"f90", &f90_warn_list, "all", "none", IS_A_CHECK, f90_warn_option, NULL, "warn about non-F90 syntax"}, {"f95", &f95_warn_list, "all", "none", IS_A_CHECK, f95_warn_option, NULL, "warn about non-F95 syntax"}, {"identifier-chars", &idletter_list, DEF_IDLETTER_LIST, "", NOT_A_CHECK, (WarnOptionList *)NULL, NULL, "non-alphabetic chars allowed in identifiers"}, #ifdef ALLOW_INCLUDE {"include", &include_path, (char *)NULL, (char *)NULL, NOT_A_CHECK, (WarnOptionList *)NULL, NULL, "include-file directory"}, #endif #ifndef STANDARD_INTRINSICS {"intrinsic", &intrinsic_option_list, "all", "none", NOT_A_CHECK, intrinsic_option, intrinsic_numeric_option, "specify intrinsic function options"}, #endif /* makedcls: turnon="declarations" instead of "all" */ {"makedcls", &makedcl_warn_list, "declarations", "none", NOT_A_CHECK, makedcl_warn_option, makedcl_numeric_option, "make type declaration statements"}, /* mkhtml similar to makedcls */ {"mkhtml", &mkhtml_warn_list, "documents","none",NOT_A_CHECK, mkhtml_warn_option, mkhtml_numeric_option, "create html documents"}, {"output", &out_fname, (char *)NULL, (char *)NULL, NOT_A_CHECK, (WarnOptionList *)NULL, NULL, "output file name"}, {"portability",&port_warn_list,"all", "none", IS_A_CHECK, port_warn_option, NULL, "warn about portability problems"}, {"pretty", &pretty_warn_list,"all", "none", IS_A_CHECK, pretty_warn_option, NULL, "warn about deceiving appearances"}, {"project", &project_warn_list,"all", "none", NOT_A_CHECK, project_warn_option, NULL, "create project file"}, {"source", &source_form_list,"all", "none", NOT_A_CHECK, source_form_option, source_numeric_option, "select source format options"}, {"style", &stylecheck_warn_list, "all", "none", IS_A_CHECK, stylecheck_warn_option, NULL, "catch violations of structured style"}, {"truncation",&trunc_warn_list,"all", "none", IS_A_CHECK, trunc_warn_option, NULL, "check for truncation pitfalls"}, {"usage", &usage_warn_list,"all", "none", IS_A_CHECK, usage_warn_option, usage_numeric_option, "warn about variable and common block usage problems"}, }; /* get_env_options picks up any options defined in the environment. A switch or setting is defined according to the value of an environment variable whose name is the switch or setting name (uppercased), prefixed by the string ENV_PREFIX (e.g. FTNCHEK_). For settings and strsettings, the value of the environment variable gives the value to be used. For switches, the environment variable is set to "0" or "NO" to turn the switch off, or to any other value (including null) to turn it on. */ void get_env_options(VOID) { /* Size of env_option_name must be at least 1 + strlen(ENV_PREFIX) + max over i of strlen of switchopt[i].name, setting[i].name, strsetting[i].name. */ #define ENV_OPTION_NAME_LEN 32 char env_option_name[ENV_OPTION_NAME_LEN]; char *value; unsigned i, checklen; /* The following code checks size of ENV_OPTION_NAME_LEN, which may become too small as option names are added. This could be commented out in released code, but it's a minor overhead for insurance. */ checklen = 0; for(i=0; i turnon*/ if(value[0] == '\0' || strncasecmp(value,"1",strlen(value)) == 0 || strncasecmp(value,"yes",strlen(value)) == 0 ) { *(strsetting[i].strvalue) = strsetting[i].turnon; } else if(strncasecmp(value,"no",strlen(value)) == 0) { *(strsetting[i].strvalue) = strsetting[i].turnoff; } else { /* Otherwise use the given value */ *(strsetting[i].strvalue) = value; } if( *(strsetting[i].strvalue) == (char *)NULL ) { (void)fflush(list_fd); (void)fprintf(stderr, "Environment variable %s needs string value: ignored\n", env_option_name); } else { update_str_options(&strsetting[i]); } } } } /* Routine to concatenate ENV_PREFIX onto option name and uppercase the result. */ PRIVATE void #if HAVE_STDC make_env_name(char *env_name, char *option_name) #else /* K&R style */ make_env_name( env_name, option_name) char *env_name, *option_name; #endif /* HAVE_STDC */ { int i,c; (void)strcat(strcpy(env_name,ENV_PREFIX),option_name); for(i=sizeof(ENV_PREFIX)-1; (c=env_name[i]) != '\0'; i++) { if( islower(c) ) env_name[i] = toupper(c); } } /* get_rc_options picks up options from an "rc" file. */ void get_rc_options(VOID) { FILE *rc_fp; char rc_option_string[MAX_RC_LINE]; int i; rc_option_string[0] = '-'; if( (rc_fp = find_rc()) != (FILE *)NULL ) { for(;;) { if( fgets(rc_option_string+1,sizeof(rc_option_string)-1,rc_fp) == (char *)NULL) break; /* Terminate line at start of comment. This also changes final \n to \0. */ for(i=1; rc_option_string[i] != '\0'; i++) { if(rc_option_string[i] == RC_COMMENT_CHAR || isspace(rc_option_string[i])) { rc_option_string[i] = '\0'; break; } } if(i==1) /* Skip blank line */ continue; set_option(rc_option_string,"startup file"); } } } /* find_rc locates the "rc" file. */ PRIVATE FILE * find_rc(VOID) { FILE *fp; char *fname; char *homedir=getenv("HOME"); /* Allocate enough space to hold rc file name. Now you see why so many apps have buffer-overrun bugs. */ if( (fname = (char *)malloc(MAX(sizeof(UNIX_RC_FILE),sizeof(NONUNIX_RC_FILE)) + (homedir!=NULL?strlen(homedir): #ifdef SPECIAL_HOMEDIR strlen(SPECIAL_HOMEDIR) #else 0 #endif ) #ifdef UNIX +1 /* for the "/" */ #endif )) == (char *)NULL ) { (void)fflush(list_fd); (void)fprintf(stderr,"\nCannot allocate memory for init file path"); return (FILE *)NULL; } /* Look first for file in local directory */ (void)strcpy(fname,UNIX_RC_FILE); if( (fp=fopen(fname,"r")) == (FILE *)NULL) { /* Look for alternate name in local directory */ (void)strcpy(fname,NONUNIX_RC_FILE); if( (fp=fopen(fname,"r")) == (FILE *)NULL) { /* Allow local option of special home directory for non-unix (usually VMS) systems. */ #ifdef SPECIAL_HOMEDIR if(homedir == (char *)NULL) { homedir = SPECIAL_HOMEDIR; } #endif /* If not found, look in home directory */ if(homedir != (char *)NULL) { (void)strcpy(fname,homedir); #ifdef UNIX (void)strcat(fname,"/"); #endif (void)strcat(fname,UNIX_RC_FILE); if( (fp=fopen(fname,"r")) == (FILE *)NULL) { /* If look for alternate name in home directory */ (void)strcpy(fname,homedir); #ifdef UNIX (void)strcat(fname,"/"); #endif (void)strcat(fname,NONUNIX_RC_FILE); if( (fp=fopen(fname,"r")) == (FILE *)NULL) { /* no more alternatives */ } } }/* end if homedir != NULL */ } } free(fname); return fp; } /* set_option processes an option from command line. Argument s is the option string. First look if s starts with "no" or "no-", and if so, check if the rest matches a boolean switch name from list in switchopt[]. If it matches, corresponding flag is set to FALSE. If no match, then s is compared to the same switch names without the "no", and if match is found, corresponding flag is set to TRUE. Finally, special flags are handled. If still no match, an error message is generated. */ void #if HAVE_STDC set_option(char *s, const char *where) /* Option to interpret, including initial - */ /* String to identify cmd line vs rc file */ #else /* K&R style */ set_option(s,where) char *s, /* Option to interpret, including initial - */ *where; /* String to identify cmd line vs rc file */ #endif /* HAVE_STDC */ { unsigned i; int offset, orig_offset; int prefix_no=FALSE; /* look for noswitch flags first since otherwise an option starting with no might take precedence. */ offset=1; /* offset is no. of chars from s[0] to switch name */ /* Allow either "-" or "--" prefix */ if( #ifdef OPTION_PREFIX_SLASH s[0] == '-' && /* if / allowed, make sure this is -- not /- */ #endif s[1] == '-' ) { ++offset; } orig_offset = offset; if( strncmp(s+offset,"no",2) == 0 ) { prefix_no = TRUE; offset += 2; if( s[offset] == '-' ) /* Allow "no" or "no-" */ offset += 1; } if( prefix_no ) { /* "no" found */ for(i=0; i maxlimit) { given_val = max_default_value; Ok = FALSE; } if(! Ok ) { (void)fflush(list_fd); (void)fprintf(stderr,"\nSetting: %s",name); (void)fprintf(stderr," outside limits %d to %d", minlimit,maxlimit); (void)fprintf(stderr,": set to default %d\n",given_val); } *(setvalue) = given_val; } return 0; } /* Handle actions needed to update things after getting a non-null strsetting option. */ PRIVATE void #if HAVE_STDC update_str_options(StrsettingList *strset) #else /* K&R style */ update_str_options(strset) StrsettingList *strset; #endif /* HAVE_STDC */ { /* Handle necessary action for -out=listfile */ if(strset->strvalue == &out_fname) must_open_outfile = TRUE; /* Update include path */ #ifdef ALLOW_INCLUDE if(strset->strvalue == &include_path) { append_include_path(include_path); } #endif /* Handle warnings like -f77=list */ if(strset->option_list != (WarnOptionList *)NULL) { char *s = *(strset->strvalue); int numvalue; /* Allow old-fashioned -flag=num for some */ if( strset->numeric_form_handler != NULL && (numvalue = str_to_num(s)) >= 0 ) { (*(strset->numeric_form_handler))(numvalue,strset->name); } else { process_warn_string(s, strset); } } } /* Routine to return -1 if string is not all digits and not null; otherwise returns integer value of string. */ PRIVATE int #if HAVE_STDC str_to_num(char *s) #else str_to_num(s) char *s; #endif { int value=0; if( s == NULL || *s == '\0' ) return -1; while( *s != '\0' ) { if(! isdigit(*s) ) return -1; else value = value*10 + ((*s)-'0'); s++; } return value; } /* Process list of warn options. */ PRIVATE void #if HAVE_STDC process_warn_string(char *warn_string, StrsettingList *s) #else /* K&R style */ process_warn_string( warn_string, s ) char *warn_string; /* Names of options to set */ StrsettingList *s; /* Warning-list option */ #endif /* HAVE_STDC */ { int i,c; char opt_buf[MAX_OPT_LEN+1]; WarnOptionList *warn_option = s->option_list; if(strcmp(warn_string,"help") == 0) { /* Print warning help screen */ list_warn_options(s); return; } else { /* Loop on warn options in string */ while(!END_OF_OPT(*warn_string)) { /* Copy next warn option into buffer */ for(i=0; !END_OF_OPT(*warn_string); ) { c = *warn_string++; if(c == ',' || c == ':') /* quit when reach next warn option */ break; if(ioption_list; ++actioncount; /* Treat as an action so if no files, quit */ (void)fprintf(list_fd,"\n%s Options:",warn_option[0].explanation); for(i=1; warn_option[i].name != (char *)NULL; i++) { (void)fprintf(list_fd,"\n %s [%s]: %s", warn_option[i].name, *(warn_option[i].flag)? "yes" : "no", warn_option[i].explanation); } (void)fprintf(list_fd,"\nPrefix option name with no- to turn off option"); if(s->turnon != (char *)NULL) { (void)fprintf(list_fd,"\nIf no options given, equivalent to %c%s=%s", OPT_PREFIX, s->name, s->turnon); } (void)fprintf(list_fd,"\nSpecial keywords:"); (void)fprintf(list_fd,"\n %s: %s","help","Print this list"); (void)fprintf(list_fd,"\n %s: %s","all","Set all options"); (void)fprintf(list_fd,"\n %s: %s","none","Clear all options"); (void)fprintf(list_fd,"\n"); } /* Routine to set warning options to given values */ PRIVATE void #if HAVE_STDC set_warn_option(char *s, WarnOptionList *warn_option) #else /* K&R style */ set_warn_option(s, warn_option ) char *s; WarnOptionList *warn_option; #endif /* HAVE_STDC */ { int i, matchlen, offset; int value; if(s == NULL) /* This happens when -nocheck handles -intrinsic */ return; /* Special keyword "all": set all options on */ if(strcmp(s,"all") == 0) { for(i=1; warn_option[i].name != (char *)NULL; i++) set_warn_option_value(warn_option[i].flag,TRUE); return; } /* Special keyword "none": set all options off */ else if(strcmp(s,"none") == 0 ) { for(i=1; warn_option[i].name != (char *)NULL; i++) set_warn_option_value(warn_option[i].flag,FALSE); return; } else { /* Look for "no-" prefix on option name */ if(strncmp(s,"no-",strlen("no-")) == 0) { offset = strlen("no-"); value = FALSE; } else { offset = 0; value = TRUE; } /* See if the given option has a wildcard */ if( strchr(s,'*') == NULL ) { /* No wildcard: go thru list to find a match at minimum nonambiguous length. */ for(i=1,matchlen=1; warn_option[i].name != (char *)NULL; i++) { /* Look for a match at current matchlen, then if found see if unique. List must have names with matching prefixes adjacent. */ while(strncmp(s+offset,warn_option[i].name,matchlen) == 0) { if(warn_option[i+1].name == (char *)NULL || strncmp(s+offset,warn_option[i+1].name,matchlen) != 0) { set_warn_option_value(warn_option[i].flag,value); return; } else { if( s[offset+matchlen] == '\0' || warn_option[i].name[matchlen] == '\0') { (void)fflush(list_fd); (void)fprintf(stderr, "\nAmbiguous %s Option: %s: ignored\n", warn_option[0].explanation,s); return; } ++matchlen; } } } } else { /* Wildcard in pattern: find all matches. */ int matches=0; for(i=1; warn_option[i].name != (char *)NULL; i++) { if( wildcard_match(s+offset,warn_option[i].name) == 0 ) { ++matches; set_warn_option_value(warn_option[i].flag,value); } } /* If nothing matched, drop out for warning */ if(matches > 0 ) { return; } } } (void)fflush(list_fd); (void)fprintf(stderr,"\nNo Such %s Option: %s: ignored\n", warn_option[0].explanation,s); return; } /* set_warn_option_value sets values of warnlist-style flags, and also handles special cases of mutually exclusive flags and suchlike. */ PRIVATE void #if HAVE_STDC set_warn_option_value(int *flag, int value) #else /* K&R style */ set_warn_option_value(flag, value ) int *flag; int value; #endif /* HAVE_STDC */ { /* handle mutual exclusions here */ if( value ) { if ( flag == &print_call_tree || flag == &print_ref_list #ifdef VCG_SUPPORT || flag == &print_vcg_list #endif ) { /* Can select only one of -call=tree,ref,vcg */ static int *calltree_mutual_exc_flags[]={ &print_call_tree, &print_ref_list, #ifdef VCG_SUPPORT &print_vcg_list, #endif (int *)NULL }; mutual_exclude(calltree_option,"calltree", flag, calltree_mutual_exc_flags); } else { if( flag == &source_fixed_form || flag == &source_free_form ) { /* Cannot set -source=fixed,free */ static int *source_form_mutual_exc_flags[]={ &source_fixed_form, &source_free_form, (int *)NULL }; mutual_exclude(source_form_option,"source", flag,source_form_mutual_exc_flags); } if( flag == &source_free_form || flag == &source_dec_tab ) { /* Cannot have -source=dec-tabs with -source=free */ static int *dec_tab_mutual_exc_flags[]={ &source_dec_tab, &source_free_form, (int *)NULL }; mutual_exclude(source_form_option,"source", flag,dec_tab_mutual_exc_flags); } } } /* Here we actually set the value. */ *flag = value; } PRIVATE void #if HAVE_STDC mutual_exclude( WarnOptionList wList[], const char *opt_name, int *thisflag, int *otherflags[] ) #else mutual_exclude( wList, opt_name, thisflag, otherflags ) WarnOptionList wList[]; char *opt_name; int *thisflag; int *otherflags[]; #endif { int i,j, thisflag_index= -1; /* Find thisflag in the list */ for(i=0; wList[i].name != NULL; i++) { if(wList[i].flag == thisflag) { thisflag_index = i; break; } } if( thisflag_index < 0 ) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM,"mutual_exclude routine"); } else { for(j=0; otherflags[j] != NULL; j++) { if( otherflags[j] == thisflag ) /* thisflag cannot conflict with self */ continue; if( *(otherflags[j]) ) { /* exclusion conflict found: trace it */ for(i=0; wList[i].name != NULL; i++) { if(wList[i].flag == otherflags[j]) { (void)fprintf(stderr, "\nWarning: %c%s option %s overrides previous option %s\n", #ifdef OPTION_PREFIX_SLASH '/', #else '-', #endif opt_name, wList[thisflag_index].name,wList[i].name); break; } } *(otherflags[j]) = FALSE; /* turn off the conflicting option */ } } } } /* The next few routines implement the "grandfathering" of those settings that were changed from numeric to warning-option string form, so the numeric form will still be acceptable. */ PRIVATE void #if HAVE_STDC argcheck_numeric_option( int value, char *setting_name ) #else argcheck_numeric_option( value, setting_name ) int value; char *setting_name; #endif { if( value < 0 || value > 3) { numeric_option_error(setting_name,0,3); return; } argcheck_argnumber = ((value & 01) != 0); argcheck_arrayness = argcheck_argtype = argcheck_functype = ((value & 02) != 0); } PRIVATE void #if HAVE_STDC arraycheck_numeric_option( int value, char *setting_name ) #else arraycheck_numeric_option( value, setting_name ) int value; char *setting_name; #endif { if( value < 0 || value > 3) { numeric_option_error(setting_name,0,3); return; } arraycheck_dims = ((value & 01) != 0); arraycheck_size = ((value & 02) != 0); } PRIVATE void #if HAVE_STDC calltree_numeric_option( int value, char *setting_name ) #else calltree_numeric_option( value, setting_name ) int value; char *setting_name; #endif { int format; if( value < 0 || value > 15) { numeric_option_error(setting_name,0,15); return; } format = (value & 0x3); /* Low-order two bits => output format */ /* if no format specified, tree is default provided number is nonzero. */ print_call_tree = (format == 1) || (format == 0 && value != 0); print_ref_list = (format == 2); #ifdef VCG_SUPPORT print_vcg_list = (format == 3); #endif call_tree_prune = ((value & 0x4) == 0); /* Include 4 for no-prune */ call_tree_sort = ((value & 0x8) == 0); /* Include 8 for no-sort */ } PRIVATE void #if HAVE_STDC comcheck_numeric_option( int value, char *setting_name ) #else comcheck_numeric_option( value, setting_name ) int value; char *setting_name; #endif { if( value < 0 || value > 3) { numeric_option_error(setting_name,0,3); return; } comcheck_type = (value >= 1); comcheck_length = (value >= 2); comcheck_dims = comcheck_by_name = (value == 3); /*comcheck_volatile was controlled by -volatile flag, not here. */ } PRIVATE void #if HAVE_STDC intrinsic_numeric_option( int value, char *setting_name ) #else intrinsic_numeric_option( value, setting_name ) int value; char *setting_name; #endif { int intrins_set = value % 10; int rand_form = (value/10) % 10; int iargc_form = (value/100) % 10; if( value < 0 || intrins_set > 3 || rand_form > 2 || iargc_form > 2) { numeric_option_error(setting_name,0,223); return; } intrinsic_set_extra = (intrins_set != 0); intrinsic_set_unix = (intrins_set == 2); intrinsic_set_vms = (intrins_set == 3); intrinsic_rand_no_argument = (rand_form == 0 || rand_form == 2); intrinsic_rand_one_argument = (rand_form == 1 || rand_form == 2); intrinsic_iargc_no_argument = (iargc_form == 0 || iargc_form == 2); intrinsic_iargc_one_argument = (iargc_form == 1 || iargc_form == 2); } PRIVATE void #if HAVE_STDC makedcl_numeric_option( int value, char *setting_name ) #else makedcl_numeric_option( value, setting_name ) int value; char *setting_name; #endif { /* makedcls options, old style = sum of numbers as spelled out below */ if( value < 0 || value > 0x7ff ) { numeric_option_error(setting_name,0,0x7ff); return; } dcl_declarations = (value != 0); dcl_only_undeclared = ((value & 0x0002) != 0); dcl_compact = ((value & 0x0004) != 0); dcl_use_continuations = ((value & 0x0008) != 0); dcl_keywords_lowercase = ((value & 0x0010) != 0); dcl_vars_and_consts_lowercase = ((value & 0x0020) != 0); dcl_excl_sftran3_internal_vars = ((value & 0x0040) != 0); dcl_asterisk_comment_character = ((value & 0x0080) != 0); dcl_lowercase_comment_character = ((value & 0x0100) != 0); dcl_no_array_dimensions = ((value & 0x0200) != 0); dcl_free_form = ((value & 0x0400) != 0); } PRIVATE void #if HAVE_STDC mkhtml_numeric_option( int value, char *setting_name ) #else mkhtml_numeric_option( value, setting_name ) int value; char *setting_name; #endif { /* mkhtml options, old style = sum of numbers as spelled out below */ if( value < 0 || value > 0x7ff ) { numeric_option_error(setting_name,0,0x7ff); return; } html_documents = (value != 0); html_only_undeclared = ((value & 0x0002) != 0); html_compact = ((value & 0x0004) != 0); html_use_continuations = ((value & 0x0008) != 0); html_keywords_lowercase = ((value & 0x0010) != 0); html_vars_and_consts_lowercase = ((value & 0x0020) != 0); html_excl_sftran3_internal_vars = ((value & 0x0040) != 0); html_no_array_dimensions = ((value & 0x0200) != 0); html_free_form = ((value & 0x0400) != 0); } PRIVATE void #if HAVE_STDC source_numeric_option( int value, char *setting_name ) #else source_numeric_option( value, setting_name ) int value; char *setting_name; #endif { /* source format options, old style = sum of: 1=DEC Fortran tab-format 2=VMS-style INCLUDE statement 4=UNIX-style backslash escape char 8=implicit typing of standard-form PARAMETERs 16=standard typing of DEC-Fortran-form PARAMETERs */ if( value < 0 || value > 15 ) { numeric_option_error(setting_name,0,15); return; } source_dec_tab = ((value & 1) != 0); source_vms_include = ((value & 2) != 0); source_unix_backslash = ((value & 4) != 0); source_param_implicit = ((value & 8) != 0); source_dec_param_std_type = ((value & 0x10) != 0); } PRIVATE void #if HAVE_STDC usage_numeric_option( int value, char *setting_name ) #else usage_numeric_option( value, setting_name ) int value; char *setting_name; #endif { int var_usage = value % 10; int com_usage = (value/10) % 10; int ext_usage = (value/100) % 10; if( value < 0 || var_usage > 3 || com_usage > 3 || ext_usage > 3 ) { numeric_option_error(setting_name,0,333); return; } /* Set flag variables according to the old rules: ones digit = vars, tens = com, hundreds = ext 1 = used-not-defined, 2 = unused, 3 = all Note: the variable com-block-volatile is not touched here. */ usage_var_uninitialized = usage_arg_modified = usage_arg_alias_modified = usage_array_alias_modified = usage_arg_common_modified = usage_array_common_modified = ((var_usage & 0x1)!=0); usage_var_set_unused = usage_var_unused = usage_arg_unused = ((var_usage & 0x2)!=0); usage_com_var_uninitialized = ((com_usage & 0x1)!=0); usage_com_var_set_unused = usage_com_block_unused = usage_com_var_unused = ((com_usage & 0x2)!=0); usage_ext_multiply_defined = usage_ext_declared_only = usage_ext_undefined = ((ext_usage & 0x1)!=0); usage_ext_unused = ((ext_usage & 0x2)!=0); } PRIVATE void #if HAVE_STDC numeric_option_error( char *setting_name, int minlimit, int maxlimit ) #else numeric_option_error( setting_name, minlimit, maxlimit ) char *setting_name; int minlimit; int maxlimit; #endif { (void)fflush(list_fd); (void)fprintf(stderr,"\nSetting: %s outside limits %d to %d", setting_name,minlimit,maxlimit); (void)fprintf(stderr,": setting ignored\n"); } /* Routine to turn off all switches and numeric settings except -word and -wrap. The effect is as if -no had been given for each switch and setting. Useful when other features like calltree are being used and checking is not needed. */ void turn_off_checks(VOID) { unsigned i; /* Put all switches to FALSE */ for(i=0; i match */ } else { /* Try to match rest of patt with str starting at some point from here to end. We do a small optimization to avoid the recursive call in many cases. */ while(sc != '\0') { if( sc == pc && wildcard_match(p,s) == 0 ) return 0; sc = *s++; } return 1; /* No match found */ } } } return (sc != '\0'); /* End of pattern: OK if end of string */ } void #if HAVE_STDC list_options(FILE *fd)/* List all commandline options, strsettings, and settings */ #else /* K&R style */ list_options(fd)/* List all commandline options, strsettings, and settings */ FILE *fd; #endif /* HAVE_STDC */ { unsigned i; /* Print the copyright notice */ (void)fprintf(fd,"\n%s",COPYRIGHT_DATE); (void)fprintf(fd,"\n%s\n",COPYRIGHT_NOTICE); /* Note: Headings say "default" but to be accurate they should say "current value". This would be confusing. */ (void)fprintf(fd,"\nCommandline options [default]:"); for(i=0; ilink = (IncludePathNode *)NULL; new_path_node->include_path = new_path; /* Append the new node at end of list */ if((p=include_path_list) == (IncludePathNode *)NULL) include_path_list = new_path_node; else { while(p->link != (IncludePathNode *)NULL) p = p->link; p->link = new_path_node; } } #ifdef DEBUG_INCLUDE_PATH /* Print path as it grows */ if(getenv("DEBUG")) { (void)fprintf(list_fd,"\nINCLUDE path="); for(p=include_path_list; p != (IncludePathNode *)NULL; p=p->link) { (void)fprintf(list_fd,"%s ",p->include_path); } (void)fprintf(list_fd,"\n"); } #endif } #endif/*ALLOW_INCLUDE*/ ftnchek-3.3.1/options.h0000644000031000002260000000340507635367462015446 0ustar moniotstaff00000000000000/* $Id: options.h,v 1.5 2003/03/09 07:45:38 landrito Exp $ Declarations of things shared between ftnchek.c and options.c Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ PROTO(void get_env_options,( void )); PROTO(void get_rc_options,( void )); PROTO(void list_options,( FILE *fd )); PROTO(void set_option,( char *s, const char *where )); PROTO(void turn_off_checks,( void )); /* The following variables are not for options, but the OPT macro does what is needed, namely give them a home and proper initialization. */ OPT(int,actioncount,0); /* Incremented when file read or -help printed */ OPT(int,must_open_outfile,FALSE); /* Flag set to TRUE when out=name given */ ftnchek-3.3.1/pgsymtab.c0000644000031000002260000002616007360157147015567 0ustar moniotstaff00000000000000/* $Id: pgsymtab.c,v 1.39 2001/10/07 22:59:51 moniot Rel $ Warning message routines for printing of global symbol table info */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: argcmp_error_head prints intro to argument mismatch comcmp_error_head prints intro to common mismatch arg_error_report Follow-on message about an argument mismatch sub_error_report Error message line about one subprogram invocation com_error_report Error message line about one common block declaration comvar_error_report Error message line about one common var mismatch sort_gsymbols sort a list of Gsymtab ptrs alphabetically */ #include #include #include #include "ftnchek.h" #define PGSYMTAB #include "symtab.h" #include "pgsymtab.h" /* Private functions defined: */ PROTO(PRIVATE void arg_error_locate,( ArgListHeader *alh )); PROTO(PRIVATE int cmp_error_head,(const char *name, const char *tag, const char *filename, LINENO_t lineno, const char *msg )); PROTO(PRIVATE void com_error_locate,( ComListHeader *clh )); PROTO(PRIVATE void error_report,( const char *module_name, const char *filename, LINENO_t lineno, const char *topfile, LINENO_t top_lineno, int i, const char *item_tag, const char *item_name, const char *msg )); PROTO(PRIVATE void module_locate, (const char *name)); PROTO(PRIVATE void novice_err_locate,( const char *filename, LINENO_t linenum )); PROTO(PRIVATE void novice_inc_locate,( const char *filename, const char *topfile, LINENO_t top_linenum )); PROTO(PRIVATE void report_intro,( const char *filename, LINENO_t lineno, const char *topfile, LINENO_t top_lineno )); /* Var used to control spaces betw message blocks */ PRIVATE int global_warning_count=0; /**** Definitions of shared functions ****/ /* Intro line of warning about subprogram argument mismatches. */ int #if HAVE_STDC argcmp_error_head(const char *name, ArgListHeader *alh, const char *msg) #else /* K&R style */ argcmp_error_head(name, alh, msg) char *name; ArgListHeader *alh; char *msg; #endif /* HAVE_STDC */ { return cmp_error_head(name,"Subprogram", alh->filename, alh->line_num, msg); } /* Ditto for common block declaration mismatches. */ int #if HAVE_STDC comcmp_error_head(const char *name, ComListHeader *clh, const char *msg) #else /* K&R style */ comcmp_error_head(name, clh, msg) char *name; ComListHeader *clh; char *msg; #endif /* HAVE_STDC */ { return cmp_error_head(name,"Common block", clh->filename, clh->line_num, msg); } /* Follow-on message about an argument mismatch */ void #if HAVE_STDC arg_error_report(ArgListHeader *alh, const char *argtype, int i, const char *msg) #else /* K&R style */ arg_error_report(alh, argtype, i, msg) ArgListHeader *alh; char *argtype; int i; char *msg; #endif /* HAVE_STDC */ { error_report(alh->module->name, alh->filename,alh->line_num,alh->topfile,alh->top_line_num, i,argtype,alh->arg_array[i].name,msg); } /* Formats an error message line about one subprogram invocation. */ void #if HAVE_STDC sub_error_report(ArgListHeader *alh, const char *msg) #else /* K&R style */ sub_error_report(alh, msg) ArgListHeader *alh; const char *msg; #endif /* HAVE_STDC */ { report_intro(alh->filename,alh->line_num,alh->topfile,alh->top_line_num); msg_tail(msg); arg_error_locate(alh); } /* Formats an error message line about one common block declaration. */ void #if HAVE_STDC com_error_report(ComListHeader *clh, const char *msg) #else /* K&R style */ com_error_report(clh, msg) ComListHeader *clh; char *msg; #endif /* HAVE_STDC */ { report_intro(clh->filename,clh->line_num,clh->topfile,clh->top_line_num); msg_tail(msg); com_error_locate(clh); } /* Formats an error message line about one common var mismatch. */ void #if HAVE_STDC comvar_error_report(ComListHeader *clh, int i, const char *msg) #else /* K&R style */ comvar_error_report(clh, i, msg) ComListHeader *clh; int i; char *msg; #endif /* HAVE_STDC */ { error_report(clh->module->name, clh->filename,clh->line_num,clh->topfile,clh->top_line_num, i,"Variable",clh->com_list_array[i].name,msg); } /**** Definitions of private functions ****/ PRIVATE int at_position_printed; /* Increment error count, and if it is 1, print header for arg or com mismatch error messages. If it is past limit, print "etc" and return TRUE, otherwise return FALSE. */ PRIVATE int #if HAVE_STDC cmp_error_head(const char *name, const char *tag, const char *filename, LINENO_t lineno, const char *msg) #else /* K&R style */ cmp_error_head(name, tag, filename, lineno, msg) char *name; char *tag; char *filename; LINENO_t lineno; char *msg; #endif /* HAVE_STDC */ { /* stop after limit: probably a cascade */ if( CASCADE_LIMIT(cmp_error_count) ) { (void)fprintf(list_fd,"\n etc..."); return TRUE; } /* (For expert mode, line number helps smart editors, but in novice mode it looks silly to have a line number for a mismatch involving two lines.) */ if(novice_help) { filename = (char *)NULL; lineno = NO_LINE_NUM; } if(cmp_error_count == 1) { /* If -noquiet mode, put a space between successive warnings. */ if( (global_warning_count != 0) && !quiet) (void)fprintf(list_fd,"\n"); global_warning_count++; global_warning(filename,lineno,tag); msg_tail(name); msg_tail(msg); } else { /* for "and at position n" on new line */ global_message(filename,lineno," and"); } at_position_printed = FALSE; return FALSE; } PRIVATE void #if HAVE_STDC error_report(const char *module_name, const char *filename, LINENO_t lineno, const char *topfile, LINENO_t top_lineno, int i, const char *item_tag, const char *item_name, const char *msg) #else /* K&R style */ error_report(module_name, filename, lineno, topfile, top_lineno, i, item_tag, item_name, msg) char *module_name; char *filename; LINENO_t lineno; char *topfile; LINENO_t top_lineno; int i; char *item_tag; char *item_name; char *msg; #endif /* HAVE_STDC */ { if( ! at_position_printed ) { char posn[12+3*sizeof(int)+2]; (void)sprintf(posn,"at position %d:",i+1); msg_tail(posn); at_position_printed = TRUE; } report_intro(filename,lineno,topfile,top_lineno); msg_tail(item_tag); msg_tail(item_name); /* Print module name, and for -novice mode, location info that was suppressed before. */ module_locate(module_name); if( novice_help ) { /* Error location itself */ novice_err_locate(filename,lineno); /* Location where included */ novice_inc_locate(filename,topfile,top_lineno); } msg_tail(msg); } PRIVATE void #if HAVE_STDC report_intro(const char *filename, LINENO_t lineno, const char *topfile, LINENO_t top_lineno) #else /* K&R style */ report_intro(filename, lineno, topfile, top_lineno) char *filename; LINENO_t lineno; char *topfile; LINENO_t top_lineno; #endif /* HAVE_STDC */ { /* In expert mode, if error is in include file, need to give info about it. */ if( ! novice_help && filename != topfile) { global_message(filename,lineno,"(location of error)"); global_message(topfile,top_lineno,"(where included) "); } else { global_message(filename,lineno," "); } } /* Gives module and in novice mode line, filename for error messages */ PRIVATE void #if HAVE_STDC arg_error_locate(ArgListHeader *alh) #else /* K&R style */ arg_error_locate(alh) ArgListHeader *alh; #endif /* HAVE_STDC */ { /* Module (subprogram) containing the error. This gets printed in both modes. */ module_locate(alh->module->name); if( novice_help ) { /* Error location itself */ novice_err_locate(alh->filename,alh->line_num); /* Location where included */ novice_inc_locate(alh->filename,alh->topfile,alh->top_line_num); } } PRIVATE void #if HAVE_STDC com_error_locate(ComListHeader *clh) #else /* K&R style */ com_error_locate(clh) ComListHeader *clh; #endif /* HAVE_STDC */ { /* Module (subprogram) containing the error. This gets printed in both modes. */ module_locate(clh->module->name); if( novice_help ) { /* Error location itself */ novice_err_locate(clh->filename,clh->line_num); /* Location where included */ novice_inc_locate(clh->filename,clh->topfile,clh->top_line_num); } } PRIVATE void #if HAVE_STDC module_locate(const char *name) #else /* K&R style */ module_locate(name) const char *name; #endif /* HAVE_STDC */ { msg_tail("in module"); msg_tail(name); } /* Non-include part of location, novice mode */ PRIVATE void #if HAVE_STDC novice_err_locate(const char *filename, LINENO_t linenum) #else /* K&R style */ novice_err_locate(filename,linenum) char *filename; LINENO_t linenum; #endif /* HAVE_STDC */ { msg_tail("line"); msg_tail(ulongtostr((unsigned long)linenum)); msg_tail("file"); msg_tail(filename); } /* Include-file part of location, novice mode */ PRIVATE void #if HAVE_STDC novice_inc_locate(const char *filename, const char *topfile, LINENO_t top_linenum) #else /* K&R style */ novice_inc_locate(filename,topfile,top_linenum) char *filename; char *topfile; LINENO_t top_linenum; #endif /* HAVE_STDC */ { if(filename != topfile) { /* Track include filename */ msg_tail("(included at line"); msg_tail(ulongtostr((unsigned long)top_linenum)); msg_tail("in"); msg_tail(topfile); msg_tail(")"); } } void #if HAVE_STDC sort_gsymbols (Gsymtab **glist, int n) /* same as sort_lsymbols */ #else /* K&R style */ sort_gsymbols ( glist,n ) Gsymtab *glist[]; int n; #endif /* HAVE_STDC */ { int i,j,swaps; for (i=0; i=i+1; j--){ if ((strcmp (glist[j-1]->name, glist[j]->name)) >0) { Gsymtab *temp = glist[j-1]; /* swap ptrs j and j-1 */ glist[j-1] = glist[j]; glist[j] = temp; swaps++; } } if (swaps == 0) break; } } ftnchek-3.3.1/pgsymtab.h0000644000031000002260000000426007360157127015567 0ustar moniotstaff00000000000000/* $Id: pgsymtab.h,v 1.5 2001/10/07 22:59:35 moniot Rel $ Declarations used by routines printing global symtab information */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #ifdef PGSYMTAB #define PG_SHARED #else #define PG_SHARED extern #endif PROTO(int comcmp_error_head,(const char *name, ComListHeader *clh, const char *msg)); PROTO(void com_error_report,(ComListHeader *clh, const char *msg)); void com_xref_list(VOID); PROTO(void comvar_error_report,(ComListHeader *clh,int i,const char *msg)); PROTO(void sub_error_report,(ArgListHeader *alh, const char *msg)); PROTO(int argcmp_error_head,(const char *name, ArgListHeader *alh, const char *msg)); PROTO(void arg_error_report, (ArgListHeader *alh,const char *argtype,int i,const char *msg)); PROTO(void sort_gsymbols ,( Gsymtab *glist[], int n )); PG_SHARED int cmp_error_count; /* Macro for testing whether an arglist or comlist header is irrelevant for purposes of error checking: i.e. it comes from an unvisited library module. */ #define irrelevant(list) ((list)->module->library_module &&\ !(list)->module->visited_somewhere) ftnchek-3.3.1/plsymtab.c0000644000031000002260000005504507640177554015605 0ustar moniotstaff00000000000000/* $Id: plsymtab.c,v 1.33 2003/03/26 01:16:28 moniot Exp $ Routines associated with printing of local symbol table info */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: local_err_head Prints module name and file name (for errors) local_warn_head Prints module name and file name (for warnings) debug_symtabs() Prints debugging info about symbol tables choose_tag Decides on tag & line no to use print_lsyms Prints symbol lists print_lsyms_briefly Brief symbol lists print_variables Prints variable symbol table sort_lsymbols Sorts a list of Lsymtab ptrs alphabetically sort_parameters Sorts Lsymtab list by seq num instead of name Private functions defined: local_msg_head Print error/warning head. print_lsyms_verbosely(sym_list,n,do_types) Verbose symbol lists. */ #include #include #include #include "ftnchek.h" #define PLSYMTAB #include "symtab.h" #include "plsymtab.h" /* Declarations of local functions */ PROTO(PRIVATE void local_msg_head,( const char *problem, const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg )); PROTO(PRIVATE int print_lsyms_verbosely,( Lsymtab **sym_list, int n, int do_types )); PROTO(PRIVATE int print_var_type,( FILE *fd, const Lsymtab *symt )); #ifdef DEBUG_SYMTABS PROTO(PRIVATE void print_arg_array,( ArgListHeader *arglist )); PROTO(PRIVATE void print_com_array,( ComListHeader *cmlist )); PROTO(PRIVATE void print_tokenlist,( TokenListHeader *toklist )); #endif void #if HAVE_STDC sort_parameters(Lsymtab **sp, int n) /* sort a given list by sequence num instead of name */ #else /* K&R style */ sort_parameters(sp,n) Lsymtab **sp; int n; #endif /* HAVE_STDC */ { int i,j,swaps; for (i = 0; i < n; i++) { swaps = 0; for (j = n-1; j >= i+1; j--) { if ( sp[j-1]->info.param->seq_num > sp[j]->info.param->seq_num ) { Lsymtab *temp = sp[j-1]; /* swap ptrs j and j-1 */ sp[j-1] = sp[j]; sp[j] = temp; swaps ++; } } if(swaps == 0) break; } } void #if HAVE_STDC sort_lsymbols(Lsymtab **sp, int n) /* bubble-sorts a given list */ #else /* K&R style */ sort_lsymbols(sp,n) Lsymtab **sp; int n; #endif /* HAVE_STDC */ { int i,j,swaps; for(i=0;i=i+1;j--) { if((strcmp(sp[j-1]->name, sp[j]->name)) > 0) { Lsymtab *temp = sp[j-1]; /* swap ptrs j and j-1 */ sp[j-1] = sp[j]; sp[j] = temp; swaps ++; } } if(swaps == 0) break; } } void #if HAVE_STDC local_err_head(const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg) #else /* K&R style */ local_err_head(mod_name, filename, lineno, symt, force_lineno, msg) char *mod_name; /* name of module where warning reported */ char *filename; /* -1 if not an include file */ LINENO_t lineno; Lsymtab *symt; /* line number for expert-style warnings */ int force_lineno; /* print line number even if brief/novice */ char *msg; /* error message */ #endif /* HAVE_STDC */ { local_msg_head("Error", mod_name, filename, lineno, symt, force_lineno, msg); ++error_count; } void #if HAVE_STDC local_warn_head(const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg) #else /* K&R style */ local_warn_head(mod_name, filename, lineno, symt, force_lineno, msg) char *mod_name; /* name of module where warning reported */ char *filename; /* file name within which problem occurred */ LINENO_t lineno; /* line number for expert-style warnings */ Lsymtab *symt; /* symbol table entry of the item */ int force_lineno; /* print line number even if brief/novice */ char *msg; /* error message */ #endif /* HAVE_STDC */ { local_msg_head("Warning", mod_name, filename, lineno, symt, force_lineno, msg); ++warning_count; } PRIVATE void #if HAVE_STDC local_msg_head(const char *problem, const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg) #else /* K&R style */ local_msg_head(problem, mod_name, filename, lineno, symt, force_lineno, msg) char *problem; /* Error or Warning */ char *mod_name; /* name of module where warning reported */ char *filename; /* file name within which problem occurred */ LINENO_t lineno; /* line number for expert-style warnings */ Lsymtab *symt; /* symbol table entry of the item */ int force_lineno; /* print line number even if brief/novice */ char *msg; /* error message */ #endif /* HAVE_STDC */ { char intro[MAXIDSIZE+19]; /* introduction to warning/error message */ char *tag; /* placeholder in choose_tag call */ /* Line number makes no sense in brief or novice modes, except when no detail follows. For that case, caller sets force_lineno = 1. In verbose expert mode, must get the right line number to accompany message, matching the line number that will appear with the first detail item (pointed to symt). Caller sets symt to NULL to cause given lineno to be used. */ if( (brief || novice_help) && ! force_lineno) { lineno = NO_LINE_NUM; } else if( symt != (Lsymtab *)NULL ) { choose_tag(TAG_DEFN,symt,&tag,&lineno); /* Use include-file name if applicable */ filename = choose_filename(symt,file_used); } if( ! quiet ) /* space between warning blocks */ (void)fprintf(list_fd,"\n"); (void)sprintf(intro,"%s in module %s",problem,mod_name); local_message(filename,lineno,msg,intro); } /* Print list of symbols, either in brief many-per-line style, or verbosely one-per-line. */ int #if HAVE_STDC print_lsyms(Lsymtab **sym_list, int n, int do_types) #else /* K&R style */ print_lsyms(sym_list,n,do_types) Lsymtab **sym_list; int n; int do_types; #endif /* HAVE_STDC */ { if(brief) return print_lsyms_briefly(sym_list,n,do_types); else return print_lsyms_verbosely(sym_list,n,do_types); } /* This routine prints symbol names in brief format. If do_types is true also prints types, with * next to implicitly typed identifiers, and returns count thereof. */ int #if HAVE_STDC print_lsyms_briefly(Lsymtab **sym_list, int n, int do_types) #else /* K&R style */ print_lsyms_briefly(sym_list,n,do_types) Lsymtab **sym_list; int n; int do_types; #endif /* HAVE_STDC */ { int i,col=0,len,implicits=0; (void)fprintf(list_fd,"\n"); for(i=0;iname);/* len=actual length of name */ /* Revise len to max(10,len)+extra 9=width of field to be printed. Adjust column count to see where this will take us. */ col += len = (len <= 10? 10: len) + 9; /* If this will run past 78 start a new line */ if(col > 78) { (void)fprintf(list_fd,"\n"); col = len; } (void)fprintf(list_fd,"%10s",sym_list[i]->name);/* Print the name in 10 cols */ if( do_types ) { /* Optionally print the datatype */ if(sym_list[i]->intrinsic) (void)fprintf(list_fd,": intrns "); else { (void)fprintf(list_fd,":"); (void) print_var_type(list_fd,sym_list[i]); if(datatype_of(sym_list[i]->type) == type_UNDECL) { implicits++; /* Flag and count undeclareds */ (void)fprintf(list_fd,"*"); } else if(sym_list[i]->size == size_DEFAULT) (void)fprintf(list_fd," "); (void)fprintf(list_fd," "); } } else /* Otherwise just 9 blanks */ (void)fprintf(list_fd,"%9s",""); } (void)fprintf(list_fd,"\n"); return implicits; }/*print_lsyms_briefly*/ /* This routine prints symbol names in verbose format, one per line with line number where defined and a tag message ("declared" or "first occurrence"). If do_types is true, also prints types, with * next to implicitly typed identifiers, and returns count thereof. */ PRIVATE int #if HAVE_STDC print_lsyms_verbosely(Lsymtab **sym_list, int n, int do_types) #else /* K&R style */ print_lsyms_verbosely(sym_list,n,do_types) Lsymtab **sym_list; int n; int do_types; #endif /* HAVE_STDC */ { int i,implicits=0; char msgbuf[6+MAX_TAG_LEN+MAXIDSIZE]; /* see sprintf below */ for(i=0;iname, tag) > (int)sizeof(msgbuf)-1 ) { oops_message(OOPS_NONFATAL,NO_LINE_NUM,NO_COL_NUM, "buffer too small in print_lsyms_verbosely for"); msg_tail(msgbuf); } inc_index = sym_list[i]->file_declared; local_detail(inc_index,lineno,(char *)NULL,msgbuf); if( do_types ) { /* Optionally print the datatype */ if(sym_list[i]->intrinsic) msg_tail("(intrinsic function)"); else { int t,s; t = get_type(sym_list[i]); s = get_size(sym_list[i],t); msg_tail("with type"); msg_tail(typespec(t,(s != size_DEFAULT),s,FALSE,0L)); if(datatype_of(sym_list[i]->type) == type_UNDECL) { implicits++; /* Flag and count undeclareds */ msg_tail("(implicitly typed)"); } } } } return implicits; }/*print_lsyms_verbosely*/ /* This routine handles the messy business of tracing a local warning detail back into an include file. The argument inc_index is the index into incfile_list for the instance (declared, used, set) being reported. If that is -1 then no include file is involved. Otherwise the table entry gives the include file name and the line in top file where the file was included. */ void local_detail(int inc_index, LINENO_t lineno, const char *tag, const char *msg) { char *fname; if( inc_index >= 0 ) { fname = incfile_list[inc_index].fname; } else { fname = top_filename; } /* Issue the main message here. */ local_message(fname,lineno,tag,msg); if( inc_index >= 0 ) { local_message(top_filename, incfile_list[inc_index].line, tag, novice_help?" included":" (where included)"); } } /* This routine prints the variables nicely, and returns count of number implicitly defined. */ int #if HAVE_STDC print_variables(Lsymtab **sym_list, int n) #else /* K&R style */ print_variables(sym_list,n) Lsymtab **sym_list; int n; #endif /* HAVE_STDC */ { int i,implicits=0,adjustables=0; (void)fprintf(list_fd,"\n "); for(i=0; i<4; i++) { (void)fprintf(list_fd,"%5sName Type Dims",""); /* 12345678901234567890 template for above*/ } for(i=0; iname); adjustables += print_var_type(list_fd,sym_list[i]); /* Print a * next to implicitly declared variables */ if(datatype_of(sym_list[i]->type) == type_UNDECL ) { implicits++; (void)fprintf(list_fd,"*"); } else if(sym_list[i]->size == size_DEFAULT) (void)fprintf(list_fd," "); /* print blank if no size or * */ /* print no. of dimensions next to var name */ if(sym_list[i]->array_var) { (void)fprintf(list_fd," %ld", array_dims(sym_list[i]->info.array_dim)); } else { (void)fprintf(list_fd,"%2s",""); } } if(adjustables > 0) (void)fprintf(list_fd,"\nchar+ indicates adjustable size"); (void)fprintf(list_fd,"\n"); return implicits; }/*print_variables*/ PRIVATE int #if HAVE_STDC print_var_type(FILE *fd, const Lsymtab *symt) /* Prints type name then size if explicit */ #else /* K&R style */ print_var_type(fd,symt) /* Prints type name then size if explicit */ #endif /* HAVE_STDC */ /* Returns 1 if adjustable size, else 0 */ #if HAVE_STDC #else /* K&R style */ FILE *fd; Lsymtab *symt; #endif /* HAVE_STDC */ { int adjustable=0; int t = get_type(symt); int s = get_size(symt,t); (void)fprintf(fd," %4s",type_name[t]); /* Usually either size or * will be printed, and usually size is 1 digit. So mostly we print 1 column in the next set of (void)fprintf's. Output will be ragged if size > 9 or implicit type has explicit size. */ if( s != size_DEFAULT ) { if(t != type_STRING || s > 1) (void)fprintf(fd,"%d",s); else if(s == size_ADJUSTABLE) { adjustable++; (void)fprintf(fd,"+"); } else (void)fprintf(fd," "); } return adjustable; } #ifdef DEBUG_SYMTABS PRIVATE void print_arg_array(arglist) /* prints type and flag info for arguments */ ArgListHeader *arglist; { int i, count; ArgListElement *a; count = arglist->numargs; if(arglist->external_decl || arglist->actual_arg) count = 0; a = arglist->arg_array; (void)fprintf(list_fd, "\n Arg list in module %s file %s line %u", arglist->module->name, arglist->filename, arglist->line_num ); if( arglist->topfile != arglist->filename ) (void)fprintf(list_fd, " (topfile %s line %u)", arglist->topfile, arglist->top_line_num ); (void)fprintf(list_fd,": defn%d call%d ext%d arg%d", arglist->is_defn, arglist->is_call, arglist->external_decl, arglist->actual_arg); if(count == 0) (void)fprintf(list_fd,"\n\t(Empty list)"); else { for (i=0; iname ); } } }/* print_arg_array */ #endif #ifdef DEBUG_SYMTABS /* prints type and dimen info for common vars */ PRIVATE void print_com_array(cmlist) ComListHeader *cmlist; { int i, count; ComListElement *c; count = cmlist->numargs; c = cmlist->com_list_array; (void)fprintf(list_fd, "\n Com list in module %s file %s line %u", cmlist->module->name, cmlist->filename, cmlist->line_num ); if( cmlist->topfile != cmlist->filename ) (void)fprintf(list_fd, " (topfile %s line %u)", cmlist->topfile, cmlist->top_line_num ); (void)fprintf(list_fd, ": anyuse%d anyset%d saved%d", cmlist->any_used, cmlist->any_set, cmlist->saved ); if(count == 0) (void)fprintf(list_fd,"\n\t(Empty list)"); else { for (i=0; itokenlist; while(t != NULL){ ++numargs; (void)fprintf(list_fd,"\n\t%d ",numargs); (void)fprintf(list_fd," %s %s %s", t->src_text, class_name[storage_class_of(t->TOK_type)], type_name[datatype_of(t->TOK_type)] ); t = t->next_token; } if(numargs == 0) (void)fprintf(list_fd,"\n\t(Empty list)"); } }/* print_tokenlist */ #endif void debug_symtabs(VOID) /* Debugging output: hashtable and symbol tables */ { #ifdef DEBUG_SYMTABS /* local symtab info printout is very incomplete */ if(debug_loc_symtab) { int i; (void)fprintf(list_fd,"\nLocal Symbol table:\n"); for(i=0; i < loc_symtab_top; i++) { (void)fprintf(list_fd, "\n%4d %s type %s %s", i, loc_symtab[i].name, class_name[storage_class_of(loc_symtab[i].type)], type_name[datatype_of(loc_symtab[i].type)] ); if( loc_symtab[i].size != size_DEFAULT ) (void)fprintf(list_fd, "*%ld", loc_symtab[i].size ); if(loc_symtab[i].common_block != NULL) (void)fprintf(list_fd, "\n\t item %ld in block %s", loc_symtab[i].common_index, loc_symtab[i].common_block->name ); switch( storage_class_of(loc_symtab[i].type) ) { case class_SUBPROGRAM: case class_COMMON_BLOCK: print_tokenlist(loc_symtab[i].info.toklist); break; } } (void)fprintf(list_fd,"\n"); } if(debug_hashtab) { int i; (void)fprintf(list_fd,"\n\nContents of hashtable\n"); for(i=0; inext; } break; } case class_SUBPROGRAM:{ ArgListHeader *alist; alist=glob_symtab[i].info.arglist; while(alist != NULL){ print_arg_array(alist); alist = alist->next; } break; } } } } #endif }/* debug_symtabs*/ /* Figure out the appropriate message to use based on what kind of item. Special cases: if symbol is an external, its line_declared is not set, so we need to change to line_used and say "referenced" instead of "defined"; if current module is a function it has class_VAR but should say "declared" even if not typed. */ void #if HAVE_STDC choose_tag(int tag_type, const Lsymtab *symt, char **tag, LINENO_t *lineno) #else /* K&R style */ choose_tag(tag_type, symt, tag, lineno) int tag_type; /* what kind of tag: defn, set, used */ Lsymtab *symt; /* the item for which tag is needed */ char **tag; /* output var = string, e.g. "defined" */ LINENO_t *lineno; /* output var = relevant line number */ #endif /* HAVE_STDC */ { /* Maintainer note: the tags defined below must not exceed MAX_TAG_LEN defined in plsymtab.h. */ switch(tag_type) { case TAG_DEFN: (*lineno) = symt->line_declared; switch( storage_class_of(symt->type) ) { case class_VAR: if(datatype_of(symt->type) == type_UNDECL && !(symt->argument) /* args are considered declared */ && symt != hashtab[current_module_hash].loc_symtab) (*tag) = "first occurrence"; else (*tag) = "declared"; break; case class_COMMON_BLOCK: (*tag) = "declared"; break; default: /* subprograms & stmt functions */ (*tag) = "defined"; if( (*lineno) == NO_LINE_NUM ) { /* External routines not explicitly declared will have line_declared unset. (Stmt functions never do.) Use invocation instead. */ (*tag) = "referenced"; (*lineno) = symt->line_used; } break; } break; case TAG_USED: (*lineno) = symt->line_used; (*tag) = "used"; break; case TAG_SET: (*lineno) = symt->line_set; if(storage_class_of(symt->type) != class_VAR) (*tag) = "defined"; else { if(symt->assigned_flag) (*tag) = "set"; else (*tag) = "may be set"; } break; default: /* for our forgetful authors, just in case */ oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "choose_tag called with unimplemented tag type"); break; }/* switch(tag_type) */ #ifdef DEVELOPMENT /* bug catcher */ if(strlen(*tag) > MAX_TAG_LEN) { (void)fprintf(stderr,"\n%s",*tag); oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "choose_tag yields tag longer than MAX_TAG_LEN"); } #endif } ftnchek-3.3.1/plsymtab.h0000644000031000002260000000511307360157026015570 0ustar moniotstaff00000000000000/* $Id: plsymtab.h,v 1.12 2001/10/07 22:58:30 moniot Rel $ Declarations of things used by local symbol table printing and make-declarations routines. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ PROTO(void local_err_head,( const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg )); PROTO(void local_warn_head,( const char *mod_name, const char *filename, LINENO_t lineno, const Lsymtab *symt, int force_lineno, const char *msg )); PROTO(void local_detail,(int inc_index, LINENO_t lineno, const char *tag, const char *msg)); PROTO(void choose_tag,(int tag_type, const Lsymtab *symt, char **tag, LINENO_t *lineno)); PROTO(int print_lsyms,( Lsymtab **sym_list, int n, int do_types )); PROTO(int print_lsyms_briefly,( Lsymtab **sym_list, int n, int do_types )); PROTO(int print_variables,( Lsymtab **sym_list, int n )); PROTO(void sort_lsymbols,( Lsymtab **sp, int n )); PROTO(void sort_parameters,( Lsymtab **sp, int n )); /* This macro returns file name of where symbol was declared, used, or set, allowing for include file location. The parameter X is one of file_declared, file_used, file_set. */ #define choose_filename(SYMT,X) ((SYMT)->X >= 0? incfile_list[(SYMT)->X].fname: \ top_filename) /* Tag types for choose_tag */ #define TAG_DEFN 0 #define TAG_SET 1 #define TAG_USED 2 /* Maximum tag length in choose_tag */ #define MAX_TAG_LEN 16 /* strlen("first occurrence") */ ftnchek-3.3.1/prlists.c0000644000031000002260000006267407641634342015452 0ustar moniotstaff00000000000000/* $Id: prlists.c,v 1.10 2003/03/30 18:35:14 moniot Exp $ Definition of process_lists() and associated routines that transfer argument and common-block lists from local to global symbol table Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ #include #include #include "ftnchek.h" #include "symtab.h" #include "symutils.h" /* Private routines */ PROTO(PRIVATE ComListHeader * make_com_array,( Token *t )); PROTO(PRIVATE ArgListHeader * make_arg_array,( Token *t )); PROTO(PRIVATE void make_arg_names,( Token *tlist, ArgListHeader *alhead, ArgListHeader *prev_alhead )); PROTO(PRIVATE void make_com_names,( Token *tlist, ComListHeader *clhead, ComListHeader *prev_clhead )); PROTO(PRIVATE ArgListHeader * make_arrayless_alist,( void )); PROTO(PRIVATE ArgListHeader * make_dummy_arg_array ,( Token *t )); #ifndef T_ALLOC PROTO(PRIVATE ArgListElement * new_arglistelement,( unsigned count )); PROTO(PRIVATE ArgListHeader * new_arglistheader,( void )); PROTO(PRIVATE ComListElement * new_comlistelement,( unsigned count )); PROTO(PRIVATE ComListHeader * new_comlistheader,( void )); #endif void #if HAVE_STDC process_lists(int curmodhash) /* Places pointer to linked list of arrays in global symbol table */ #else /* K&R style */ process_lists(curmodhash) /* Places pointer to linked list of arrays in global symbol table */ #endif /* HAVE_STDC */ #if HAVE_STDC /* current_module_hash from fortran.y */ #else /* K&R style */ int curmodhash; /* current_module_hash from fortran.y */ #endif /* HAVE_STDC */ { int i, h; unsigned long hnum; Gsymtab *curr_gsymt; Gsymtab *gsymt; TokenListHeader *head_ptr; if( (curr_gsymt= (curmodhash == -1) ? NULL:hashtab[curmodhash].glob_symtab) == NULL) { oops_message(OOPS_NONFATAL,NO_LINE_NUM,NO_COL_NUM, "module not in global symtab:"); oops_tail(hashtab[curmodhash].name); } else { if(curr_gsymt->internal_entry) {/* protect ourself */ if(misc_warn) { warning(NO_LINE_NUM,NO_COL_NUM, "entry point redefined as module"); msg_tail(curr_gsymt->name); msg_tail(": previous definition overridden"); } curr_gsymt->link.child_list = NULL; } curr_gsymt->internal_entry = FALSE; } for (i=0; itokenlist, (head_ptr = head_ptr->next) != NULL){ while(tok_ptr->next_token != NULL){ tok_ptr = tok_ptr->next_token; } tok_ptr->next_token = head_ptr->tokenlist; } /* Original token list is in reverse order. Reverse it so order is correct. */ head_ptr = loc_symtab[i].info.toklist; head_ptr->tokenlist = reverse_tokenlist(head_ptr->tokenlist); /* Keep a copy for use by makedecls */ loc_symtab[i].src.toklist = head_ptr; /* Now make it into array for global table */ c=make_com_array(head_ptr->tokenlist); c->module = curr_gsymt; c->filename = head_ptr->filename; c->topfile = top_filename; c->line_num = head_ptr->line_num; c->top_line_num = head_ptr->top_line_num; c->saved = global_save || loc_symtab[i].saved; /* add names to com list */ make_com_names(head_ptr->tokenlist, c,gsymt->info.comlist); c->next = gsymt->info.comlist; gsymt->info.comlist = c; /* Replace token list by comlist for check_mixed_common */ loc_symtab[i].info.comlist = c; } }/* end if(head_ptr != NULL) */ break; /* end case class_COMMON_BLOCK */ /* Are we inside a function or subroutine? */ case class_VAR: if(loc_symtab[i].entry_point) { if((gsymt=hashtab[h].glob_symtab) == NULL) { oops_message(OOPS_NONFATAL,NO_LINE_NUM,NO_COL_NUM, "subprog not in global symtab:"); oops_tail(loc_symtab[i].name); } else { ArgListHeader *a; int implied_type; /* Make each token list into an array of args for global table */ while (head_ptr != NULL){ a=make_dummy_arg_array(head_ptr->tokenlist); make_arg_names(head_ptr->tokenlist, a,gsymt->info.arglist); implied_type = get_type(&(loc_symtab[i])); a->type = type_byte( class_SUBPROGRAM,implied_type); a->size = get_size(&(loc_symtab[i]),implied_type); a->module = curr_gsymt; a->filename = head_ptr->filename; a->topfile = top_filename; a->line_num = head_ptr->line_num; a->top_line_num = head_ptr->top_line_num; a->next = gsymt->info.arglist; gsymt->info.arglist = a; /* store arglist in local symtab for project file */ loc_symtab[i].info.arglist = a; head_ptr = head_ptr->next; }/* end while (head_ptr != NULL) */ /* used_flag=1 does not imply call of the routine itself unless it is recursive. (Recursive procs are not implemented yet.) So do not copy it from local to global symbol table. */ if(loc_symtab[i].set_flag) gsymt->set_flag = gsymt->set_this_file = TRUE; if(loc_symtab[i].library_module) gsymt->library_module = TRUE; gsymt->defined = TRUE; if(gsymt != curr_gsymt) { gsymt->internal_entry = TRUE; gsymt->link.module = curr_gsymt; } } }/* end if(loc_symtab[i].entry_point) */ break; /* end case class_VAR */ case class_SUBPROGRAM: if((gsymt=hashtab[h].glob_symtab) == NULL) { oops_message(OOPS_NONFATAL,NO_LINE_NUM,NO_COL_NUM, "subprog not in global symtab:"); oops_tail(loc_symtab[i].name); } else { ArgListHeader *a; int implied_type; while (head_ptr != NULL){ if(head_ptr->external_decl || head_ptr->actual_arg) a=make_arrayless_alist(); else { a=make_arg_array(head_ptr->tokenlist); #ifdef DEBUG_ARG_ALIAS if(debug_latest) { int j; (void)fprintf(list_fd,"\n%s arg-same-as: ", loc_symtab[i].name); for(j=0; jnumargs; j++) { (void)fprintf(list_fd," %d",a->arg_array[j].same_as); } (void)fprintf(list_fd,"\n%s args in common: ", loc_symtab[i].name); for(j=0; jnumargs; j++) { if(a->arg_array[j].common_block) { (void)fprintf(list_fd,"\n%d = %s[%ld]", j+1, a->arg_array[j].common_block->name, a->arg_array[j].common_index); } } } #endif make_arg_names(head_ptr->tokenlist, a,gsymt->info.arglist); } implied_type = get_type(&(loc_symtab[i])); a->type = type_byte( class_SUBPROGRAM,implied_type); a->size = get_size(&(loc_symtab[i]),implied_type); a->module = curr_gsymt; a->filename = head_ptr->filename; a->topfile = top_filename; a->line_num = head_ptr->line_num; a->top_line_num = head_ptr->top_line_num; a->external_decl = head_ptr->external_decl; a->actual_arg = head_ptr->actual_arg; a->next = gsymt->info.arglist; gsymt->info.arglist = a; /* put arglist into local symtab for project file use */ loc_symtab[i].info.arglist = a; head_ptr = head_ptr->next; } if(loc_symtab[i].used_flag) gsymt->used_flag = gsymt->used_this_file = TRUE; if(loc_symtab[i].invoked_as_func) gsymt->invoked_as_func = gsymt->invoked_as_func_this_file = TRUE; } /* Add this guy to linked list of children, unless never actually used. */ if(loc_symtab[i].used_flag) { ChildList *node= (ChildList *)calloc(1,sizeof(ChildList)); node->child = gsymt; node->next = curr_gsymt->link.child_list; curr_gsymt->link.child_list = node; } if(loc_symtab[i].declared_external) gsymt->declared_external = gsymt->declared_external_this_file = TRUE; break;/* end case class_SUBPROGRAM*/ case class_NAMELIST: if(head_ptr != NULL) { Token *tok_ptr; /* Link up possibly multiple declarations of the same namelist in this module into one big list */ while (tok_ptr = head_ptr->tokenlist, (head_ptr = head_ptr->next) != NULL){ while(tok_ptr->next_token != NULL){ tok_ptr = tok_ptr->next_token; } tok_ptr->next_token = head_ptr->tokenlist; } /* Original token lists are in reverse order. Reverse it so order is correct. */ head_ptr = loc_symtab[i].info.toklist; head_ptr->tokenlist = reverse_tokenlist(head_ptr->tokenlist); } /* Keep a copy for use by makedecls */ loc_symtab[i].src.toklist = head_ptr; break;/* end case class_NAMELIST*/ }/* end switch */ }/* end for (i=0; iTOK_type; /* use evaluated type, not symt */ arglist[i].size = s->size; arglist[i].same_as = i; /* initialize to same-as-self */ /* Keep track of array and external declarations */ if( is_true(ID_EXPR,s->TOK_flags) ){ int h = s->value.integer; Lsymtab *symt = hashtab[h].loc_symtab; if( (arglist[i].array_var = symt->array_var) == 0 ) { /* change scalars to 0 dims, size 1 */ arglist[i].info.array_dim = array_dim_info(0,1); } else { arglist[i].info.array_dim = symt->info.array_dim; } arglist[i].declared_external = symt->declared_external; /* If arg is in common, record where, for checking violation of 15.9.3.6. */ if( symt->common_var ) { Lsymtab *eq = symt; do { /* follow equivalence chain to find ptr to block */ if( eq->common_block != NULL ) { break; } eq = eq->equiv_link; } while(eq != symt); arglist[i].common_block = eq->common_block; /*assert !NULL */ arglist[i].common_index = eq->common_index; } /* Look for other arg that is same as this, also for checking violation of 15.9.3.6. */ { Token *p=t; unsigned j; for(j=0; jTOK_flags) ){ int is_same = FALSE; int ph = p->value.integer; Lsymtab *psymt = hashtab[ph].loc_symtab; Lsymtab *eq = psymt; do { /* follow equivalence chain */ if( eq == symt ) { is_same = TRUE; break; } eq = eq->equiv_link; } while(eq != psymt); if( is_same ) { /* Swap indices so each is_same as other This does right thing if >2 are same. */ int tmp = arglist[i].same_as; arglist[i].same_as = arglist[j].same_as; arglist[j].same_as = tmp; break; /* quit j loop */ } } p = p->next_token; } } } else { arglist[i].info.array_dim = array_dim_info(0,1); arglist[i].array_var = FALSE; arglist[i].declared_external = FALSE; } arglist[i].array_element = arglist[i].array_var && !is_true(ARRAY_ID_EXPR,s->TOK_flags); if( is_true(LVALUE_EXPR,s->TOK_flags) ){ arglist[i].is_lvalue = TRUE; /* is_true(f,x) yields 0 or non-0: convert to 0 or 1 */ arglist[i].set_flag = is_true(SET_FLAG,s->TOK_flags)? TRUE: FALSE; arglist[i].assigned_flag = is_true(ASSIGNED_FLAG,s->TOK_flags)? TRUE: FALSE; arglist[i].used_before_set = is_true(USED_BEFORE_SET,s->TOK_flags)? TRUE: FALSE; arglist[i].active_do_var = is_true(DO_VARIABLE,s->TOK_flags)? TRUE: FALSE; } else { /* it is an expression or constant, not an lvalue */ arglist[i].is_lvalue = FALSE; arglist[i].set_flag = TRUE; arglist[i].assigned_flag = FALSE; arglist[i].used_before_set = FALSE; arglist[i].active_do_var = FALSE; } s = s->next_token; } alhead->numargs = (short)count; alhead->is_defn = FALSE; alhead->is_call = TRUE; alhead->external_decl = FALSE; alhead->actual_arg = FALSE; if (count == 0) alhead->arg_array = NULL; else alhead->arg_array = arglist; return(alhead); }/* make_arg_array */ PRIVATE void #if HAVE_STDC make_arg_names(Token *tlist, ArgListHeader *alhead, ArgListHeader *prev_alhead) #else /* K&R style */ make_arg_names(tlist, alhead, prev_alhead) Token *tlist; ArgListHeader *alhead, *prev_alhead; #endif /* HAVE_STDC */ { int h, i, n, prev_n; Token *s; #ifdef KEEP_ARG_NAMES char *name; char expr_text[MAXEXPRTEXT+2]; /* big enough for 1 extra */ #else static char expr[]="expr", /* text strings to use */ var[]="var"; #endif ArgListElement *arglist, *prev_arglist; n = alhead->numargs; if(n > 0) { arglist = alhead->arg_array; if(prev_alhead != NULL) { prev_n = prev_alhead->numargs; prev_arglist = prev_alhead->arg_array; } for(i=0, s=tlist; inext_token) { /* Use symtab name for id's but note that array elements come thru with ID_EXPR true but want to use expr tree for them.*/ if(is_true(ID_EXPR,s->TOK_flags) && !is_true(ARRAY_ELEMENT_EXPR,s->TOK_flags)) { #ifdef KEEP_ARG_NAMES h = s->value.integer; name = hashtab[h].loc_symtab->name; #else name = var; #endif } else { /* expression */ #ifdef KEEP_ARG_NAMES int ncopied; ncopied = cp_tree_src_text(expr_text, (s->left_token == NULL? s: /* Primary */ s->left_token), /* Expr tree */ MAXEXPRTEXT+1); if(ncopied > MAXEXPRTEXT) /* Longer than the limit: */ /* replace tail by dots */ (void)strcpy(expr_text+MAXEXPRTEXT-2,".."); name = expr_text; #else arglist[i].name = expr; #endif } #ifdef KEEP_ARG_NAMES /* Try to avoid allocating space again */ if(prev_alhead != NULL && i < prev_n && strcmp(name,prev_arglist[i].name) == 0) { name = prev_arglist[i].name; } else if(is_true(ID_EXPR,s->TOK_flags) && !is_true(ARRAY_ELEMENT_EXPR,s->TOK_flags)) { if(hashtab[h].glob_symtab != NULL) { name = hashtab[h].glob_symtab->name; } else if(hashtab[h].com_glob_symtab != NULL) { name = hashtab[h].com_glob_symtab->name; } else /* No luck: put it into global space */ name = new_global_string(name); } else name = new_global_string(name); #endif arglist[i].name = name; } } } /* Following routine converts a list of common block tokens into a list of dimen_info-type pairs. */ PRIVATE ComListHeader * #if HAVE_STDC make_com_array(Token *t) /* List of tokens */ #else /* K&R style */ make_com_array(t) Token *t; /* List of tokens */ #endif /* HAVE_STDC */ { Token *s; Lsymtab *symt; int h; unsigned i, count; ComListHeader *clhead; ComListElement *comlist; count = arg_count(t); if(((clhead=new_comlistheader()) == (ComListHeader *) NULL) || (count != 0 && ((comlist=new_comlistelement(count)) == (ComListElement *) NULL))){ oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Out of malloc space for common list"); } s = t; for(i=0; ivalue.integer; symt = hashtab[h].loc_symtab; comlist[i].name = NULL; /* names are added later by make_com_list */ if( (comlist[i].dimen_info = symt->info.array_dim) == 0) /* change scalars to 0 dims, size 1 */ comlist[i].dimen_info = array_dim_info(0,1); comlist[i].type = get_type(symt); comlist[i].size = get_size(symt,(int)comlist[i].type); comlist[i].used = symt->used_flag; comlist[i].set = symt->set_flag; comlist[i].used_before_set = symt->used_before_set; comlist[i].assigned = symt->assigned_flag; if (comlist[i].used) clhead->any_used = TRUE; if (comlist[i].set) clhead->any_set = TRUE; s = s->next_token; } clhead->numargs = (short)count; if (count == 0) clhead->com_list_array = NULL; else clhead->com_list_array = comlist; return(clhead); } /* make_com_array */ PRIVATE void #if HAVE_STDC make_com_names(Token *tlist, ComListHeader *clhead, ComListHeader *prev_clhead) #else /* K&R style */ make_com_names(tlist, clhead, prev_clhead) Token *tlist; ComListHeader *clhead, *prev_clhead; #endif /* HAVE_STDC */ { int h, i, n, prev_n; Token *s; ComListElement *comlist, *prev_comlist; char *name; comlist = clhead->com_list_array; n = clhead->numargs; if(prev_clhead != NULL) { prev_n = prev_clhead->numargs; prev_comlist = prev_clhead->com_list_array; } for(i=0, s=tlist; inext_token) { h = s->value.integer; name = hashtab[h].loc_symtab->name; /* Try to avoid allocating new global space for name: Check if the variable matches a global name (unlikely) or name of corresponding variable in previous declaration of same block used the same name (likely), and if so, re-use the global string. Otherwise allocate new space in global table. */ if(prev_clhead != NULL && i < prev_n && strcmp(name,prev_comlist[i].name) == 0) { name = prev_comlist[i].name; } else if(hashtab[h].glob_symtab != NULL) { name = hashtab[h].glob_symtab->name; } else if(hashtab[h].com_glob_symtab != NULL) { name = hashtab[h].com_glob_symtab->name; } else /* No luck: put it into global space */ name = new_global_string(name); comlist[i].name = name; } } PRIVATE ArgListHeader * #if HAVE_STDC make_dummy_arg_array (Token *t) /* List of tokens */ #else /* K&R style */ make_dummy_arg_array (t) Token *t; /* List of tokens */ #endif /* HAVE_STDC */ { unsigned i; unsigned count; Token *s; ArgListElement *arglist; ArgListHeader *alhead; count = arg_count(t); if(((alhead=new_arglistheader()) == (ArgListHeader *) NULL) || (count != 0 && ((arglist=new_arglistelement(count)) == (ArgListElement *) NULL))){ oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Out of malloc space for dummy argument list"); } s = t; for(i=0; iTOK_flags) ){ int implied_type; int h = s->value.integer; Lsymtab *symt = hashtab[h].loc_symtab; if( (arglist[i].info.array_dim = symt->info.array_dim) == 0) /* change scalars to 0 dims, size 1 */ arglist[i].info.array_dim = array_dim_info(0,1); implied_type = get_type(symt); arglist[i].type = type_byte(storage_class_of(symt->type), implied_type); arglist[i].size = get_size(symt,implied_type); arglist[i].same_as = i; /* always is same-as-self */ arglist[i].is_lvalue = TRUE; arglist[i].set_flag = symt->set_flag; arglist[i].assigned_flag = symt->assigned_flag; arglist[i].used_before_set = symt->used_before_set; arglist[i].array_var = symt->array_var; arglist[i].array_element = FALSE; arglist[i].declared_external = symt->declared_external; } else { /* It is a label */ arglist[i].info.array_dim = 0; arglist[i].type = s->TOK_type; arglist[i].size = 0; arglist[i].is_lvalue = FALSE; arglist[i].set_flag = FALSE; /* Don't currently do labels */ arglist[i].assigned_flag = FALSE; arglist[i].used_before_set = FALSE; arglist[i].array_var = FALSE; arglist[i].array_element = FALSE; arglist[i].declared_external = FALSE; } s = s->next_token; } alhead->numargs = (short)count; alhead->is_defn = TRUE; alhead->is_call = FALSE; alhead->external_decl = FALSE; alhead->actual_arg = FALSE; if (count == 0) alhead->arg_array = NULL; else alhead->arg_array = arglist; return(alhead); }/* make_dummy_arg_array */ /* This routine makes an empty argument list: used for EXTERNAL declarations of subprograms. */ PRIVATE ArgListHeader * make_arrayless_alist(VOID) { ArgListHeader *alhead; if(((alhead=new_arglistheader()) == (ArgListHeader *) NULL) ) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Out of malloc space for external decl"); } alhead->numargs = 0; alhead->is_defn = FALSE; alhead->is_call = FALSE; alhead->arg_array = NULL; return(alhead); }/* make_arrayless_arglist */ #ifndef T_ALLOC /* This routine allocates permanent space for argument list elements in chunks for efficiency. It returns a pointer to space for count consecutive elements. */ PRIVATE ArgListElement * #if HAVE_STDC new_arglistelement(unsigned int count) #else /* K&R style */ new_arglistelement(count) unsigned count; #endif /* HAVE_STDC */ { static unsigned long arglistspace_bot=0; static ArgListElement *arglist_space=NULL; arglist_element_used += count; /* For -resources */ if(arglistspace_bot < count) { unsigned long numalloc = (count > ARGLISTELTSZ? count: ARGLISTELTSZ); arglist_space=(ArgListElement *)calloc(numalloc,sizeof(ArgListElement)); if(arglist_space == (ArgListElement *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for argument list"); return (ArgListElement *)NULL; /*NOTREACHED*/ } arglistspace_bot = numalloc; } /* Slots are allocated from top down */ arglistspace_bot -= count; return arglist_space + arglistspace_bot; } /* This routine allocates permanent space for argument list headers in chunks for efficiency. Returns a pointer to space for one header. */ PRIVATE ArgListHeader * new_arglistheader(VOID) { static unsigned long arglistheadspace_bot=0; static ArgListHeader *arglisthead_space; arglist_head_used++; if(arglistheadspace_bot < 1) { arglisthead_space= (ArgListHeader *)calloc(ARGLISTHEADSZ,sizeof(ArgListHeader)); if(arglisthead_space == (ArgListHeader *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for argument list header"); return (ArgListHeader *)NULL; /*NOTREACHED*/ } arglistheadspace_bot = ARGLISTHEADSZ; } /* Slots are allocated from top down */ return arglisthead_space + (--arglistheadspace_bot); } /* Returns pointer to space for count consecutive common list elements. */ PRIVATE ComListElement * #if HAVE_STDC new_comlistelement(unsigned int count) #else /* K&R style */ new_comlistelement(count) unsigned count; #endif /* HAVE_STDC */ { static unsigned long comlistspace_bot=0; static ComListElement *comlist_space=NULL; comlist_element_used += count; /* For -resources */ if(comlistspace_bot < count) { unsigned long numalloc = (count > COMLISTELTSZ? count: COMLISTELTSZ); comlist_space=(ComListElement *)calloc(numalloc,sizeof(ComListElement)); if(comlist_space == (ComListElement *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for common block list"); return (ComListElement *)NULL; /*NOTREACHED*/ } comlistspace_bot = numalloc; } /* Slots are allocated from top down */ comlistspace_bot -= count; return comlist_space + comlistspace_bot; } /* Returns pointer to space for one common block header */ PRIVATE ComListHeader * new_comlistheader(VOID) { static unsigned long comlistheadspace_bot=0; static ComListHeader *comlisthead_space; comlist_head_used++; if(comlistheadspace_bot < 1) { comlisthead_space= (ComListHeader *)calloc(COMLISTHEADSZ,sizeof(ComListHeader)); if(comlisthead_space == (ComListHeader *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for common block header"); return (ComListHeader *)NULL; /*NOTREACHED*/ } comlistheadspace_bot = COMLISTHEADSZ; } /* Slots are allocated from top down */ return comlisthead_space + (--comlistheadspace_bot); } #endif /*T_ALLOC*/ ftnchek-3.3.1/prlocsym.c0000644000031000002260000005170307635405114015605 0ustar moniotstaff00000000000000/* $Id: prlocsym.c,v 1.22 2003/03/17 17:47:56 moniot Exp $ Prints local symbol table, calling local checking routines along the way. */ /* Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." */ /* Shared functions defined: print_loc_symbols(curmodhash) Prints local symtab info. */ #include #include #include #include "ftnchek.h" #include "symtab.h" #include "plsymtab.h" #include "loccheck.h" PROTO(PRIVATE void print_io_unit_usages,(VOID)); PROTO(PRIVATE void sort_io_unit_usages,(VOID)); PROTO(PRIVATE int cmp_io_units, ( IO_Unit_Info *u1, IO_Unit_Info *u2 )); void print_loc_symbols(VOID) { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ static Lsymtab **sym_list=(Lsymtab **)NULL; #else Lsymtab *sym_list[LOCSYMTABSZ]; /* temp. list of symtab entries to print */ #endif int mod_type, /* datatype of this module */ this_is_a_function; /* flag for treating funcs specially */ Lsymtab *module; /* entry of current module in symtab */ char *mod_name; /* module name */ int imps=0, /* count of implicitly declared identifiers */ numentries; /* count of entry points of module */ if (dcl_fd == (FILE*)NULL) dcl_fd = stdout; #ifdef DYNAMIC_TABLES if(sym_list == (Lsymtab **)NULL) { /* Initialize if not done before */ if( (sym_list=(Lsymtab **)calloc(LOCSYMTABSZ,sizeof(Lsymtab *))) == (Lsymtab **)NULL) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for local symbol list"); } } #endif /* Keep track of statement counts for -resource */ tot_exec_stmt_count += exec_stmt_count; if(exec_stmt_count > max_exec_stmt_count) max_exec_stmt_count = exec_stmt_count; /* Keep track of symbol table and string usage */ if(loc_symtab_top > max_loc_symtab) { max_loc_symtab = loc_symtab_top; } if(loc_str_top + extra_locstrspace > max_loc_strings) { max_loc_strings = loc_str_top + extra_locstrspace; } if(srctextspace_top + extra_srctextspace > max_srctextspace) { max_srctextspace = srctextspace_top + extra_srctextspace; } if(token_head_space_top + extra_tokheadspace > max_tokenlists) { max_tokenlists=token_head_space_top + extra_tokheadspace; } if(param_info_space_top + extra_paraminfospace > max_paraminfo) { max_paraminfo=param_info_space_top + extra_paraminfospace; } if(token_space_top + extra_tokspace > max_token_space) { max_token_space = token_space_top + extra_tokspace; } if(ptrspace_top + extra_ptrspace > max_ptrspace) { max_ptrspace = ptrspace_top + extra_ptrspace; } update_label_resources(); /* Do the same in label handler */ /* Global symbols only increase in number */ max_glob_symtab = glob_symtab_top; /* Set up name & type, and see what kind of module it is */ module = hashtab[current_module_hash].loc_symtab; mod_name = module->name; mod_type = get_type(module); if( mod_type != type_PROGRAM && mod_type != type_SUBROUTINE && mod_type != type_COMMON_BLOCK && mod_type != type_BLOCK_DATA ) this_is_a_function = TRUE; else this_is_a_function = FALSE; /* Print name & type of the module */ if(do_symtab) { int i; for(i=0,numentries=0;i 1) { sort_lsymbols(sym_list,numentries); } (void)fprintf(list_fd,"\n\nModule %s:",mod_name); if( this_is_a_function ) (void)fprintf(list_fd," func:"); (void)fprintf(list_fd," %4s",type_name[mod_type]); /* Print a * next to non-declared function name */ if(datatype_of(module->type) == type_UNDECL ) { (void)fprintf(list_fd,"*"); imps++; } (void)fprintf(list_fd,"\n"); /* Print Entry Points (skip if only one, since it is same as module name) */ if(do_symtab && numentries > 1) { (void)fprintf(list_fd,"\nEntry Points\n"); (void) print_lsyms_briefly(sym_list,numentries,FALSE); } /* End of printing module name and entry points */ }/*if(do_symtab)*/ /* Print the externals */ if(do_symtab) { int i,n; for(i=0,n=0;iintrins_flags & (f77_intrinsics?I_NONF77:I_NONF90))) { sym_list[n++] = &loc_symtab[i]; } } if(n != 0) { sort_lsymbols(sym_list,n); local_warn_head(mod_name, choose_filename(sym_list[0],file_used), sym_list[0]->line_used, (Lsymtab *)NULL, FALSE, f77_intrinsics? "Non Fortran 77" : "Non Fortran 90"); msg_tail("intrinsic functions referenced:"); (void) print_lsyms(sym_list,n,FALSE); } }/*if(f77_intrinsics || f90_intrinsics)*/ /* issue -f77 warning for identifiers longer than 6 characters */ if(f77_long_names) { int i,n; for(i=0,n=0;i (unsigned)6) sym_list[n++] = &loc_symtab[i]; } if(n != 0) { sort_lsymbols(sym_list,n); local_warn_head(mod_name, top_filename, NO_LINE_NUM, sym_list[0], FALSE, "Names longer than 6 chars (nonstandard):"); (void) print_lsyms(sym_list,n,FALSE); } } /* If -f77 flag given, list names with underscore or dollarsign */ if(f77_underscores || f77_dollarsigns || f90_dollarsigns) { int n; n = find_nonalnum_names(sym_list); if(n != 0) { sort_lsymbols(sym_list,n); local_warn_head(mod_name, top_filename, NO_LINE_NUM, sym_list[0], FALSE, "Names containing nonstandard characters:"); (void) print_lsyms(sym_list,n,FALSE); } }/*if(f77_underscores || f77_dollarsigns || f90_dollarsigns)*/ /* Print out clashes in first six chars of name */ if(sixclash) { int n; n = find_sixclashes(sym_list); if(n != 0) { sort_lsymbols(sym_list,n); /* Use the right line number */ local_warn_head(mod_name, top_filename, NO_LINE_NUM, sym_list[0], FALSE, "Identifiers which are not unique in first six chars:"); (void) print_lsyms(sym_list,n,FALSE); }/* end if(n != 0) */ }/* end if(sixclash) */ /* If portability flag was given, check equivalence groups for mixed type. */ if(port_mixed_equiv || port_mixed_size || local_wordsize==0) { int i,j,n; int port_imps=0; Lsymtab *equiv; /* scan thru table for equivalenced variables */ for(i=0;iequiv_link; } while(equiv != &loc_symtab[i]); /* complete the circle */ /* Check for mixed types */ if(n != 0) { int mixed_type = FALSE, mixed_size = FALSE, mixed_default_size = FALSE; int t1,t2,s1,s2,defsize1,defsize2; t1 = get_type(sym_list[0]); s1 = get_size(sym_list[0],t1); defsize1 = (s1 == size_DEFAULT); if(s1 == size_DEFAULT) s1 = type_size[t1]; for(j=1; j 0 ) { print_io_unit_usages(); } /* print table of stmt labels */ if(misc_warn || usage_label_undefined || usage_label_unused || do_symtab || print_lab_refs) { sort_labtable(); if(do_symtab) { print_labels(); } if(print_lab_refs) { print_label_refs(); } if(misc_warn || usage_label_undefined || usage_label_unused) { check_labels(mod_name); } } make_declarations(sym_list,mod_name); /* Recreate a FULL list of local symbols */ { int i, n; for(i=0,n=0;i= 0 && no >= 0)? "=": " "); if( no < 0 ) fprintf(list_fd,"%7s",""); else fprintf(list_fd,"%-7d",no); fprintf(list_fd," %4s %4s %-9s", IO_access[io_unit_info[i].io_access], IO_form[io_unit_info[i].io_form], keytok_name(op)); old_id = id; old_no = no; old_op = op; old_acc = io_unit_info[i].io_access; old_form = io_unit_info[i].io_form; cols = 43; /* amount of stuff printed so far */ } /* print line number(s) after info */ if(cols+7 > wrap_column) { fprintf(list_fd,"\n%43s",""); cols = 43; } fprintf(list_fd,"%6d ", io_unit_info[i].line_num); cols = cols+7; } } /* Routine to sort the io_unit_usages array. It uses bubble sort * since the array is normally not very long and should be nearly * sorted already in most cases. */ PRIVATE void sort_io_unit_usages(VOID) { int i, j; for(i = 0; i < num_io_unit_usages-1; i++) { int numswaps=0; for(j = num_io_unit_usages-2; j >= i; j--) { if( cmp_io_units(&io_unit_info[j],&io_unit_info[j+1]) > 0 ) { IO_Unit_Info hold = io_unit_info[j+1]; io_unit_info[j+1] = io_unit_info[j]; io_unit_info[j] = hold; numswaps++; } } if(numswaps == 0) break; } } /* Function to determine ordering of two I/O unit info entries. The * primary sort key is the unit number or unit id. If unit number is * known, it takes precedence, and sort is in numeric order. * Otherwise sort is alphabetic by unit id, with the default unit=* * treated as an id that comes before all alphabetic names. If unit * number or id compares equal, then sort is by operation, access and * form. (It should be rare for access and form to differ if * operation is the same, but the possibility cannot be ruled out.) * Line number is not used as a sort key since list arrives in * line-number order and bubble sort preserves initial order. */ PRIVATE int cmp_io_units( IO_Unit_Info *u1, IO_Unit_Info *u2 ) { int no1 = u1->unit_no; int no2 = u2->unit_no; if( no1 == no2 ) { /* same unit no or both unknown */ /* if unit no unknown, compare unit id name */ if( no1 == IO_UNIT_UNKNOWN ) { int id1 = u1->unit_id; int id2 = u2->unit_id; if( id1 == id2 ) { /* same name: sort by operation, form, access */ if( u1->io_operation != u2->io_operation ) return u1->io_operation - u2->io_operation; else if( u1->io_access != u2->io_access ) return u1->io_access - u2->io_access; else return u1->io_form - u2->io_form; } else { /* different names: sort by name */ if( id1 == IO_UNIT_DEFAULT ) { return -1; /* '*' precedes all names */ } else if( id2 == IO_UNIT_DEFAULT ) { return 1; } else if( id1 >= 0 && id2 >= 0 ) { /* they have names: compare */ return strcmp(hashtab[id1].name,hashtab[id2].name); } else { return id1 - id2; /* shouldn't happen */ } } } else { /* if same unit no, sort by operation */ if( u1->io_operation != u2->io_operation ) return u1->io_operation - u2->io_operation; else if( u1->io_access != u2->io_access ) return u1->io_access - u2->io_access; else return u1->io_form - u2->io_form; } } else { /* diff unit nos */ if( no1 == IO_UNIT_UNKNOWN ) { return 1; /* unit ids follow unit nos */ } else if( no2 == IO_UNIT_UNKNOWN ){ return -1; } else { return no2 < no1; } } } ftnchek-3.3.1/project.c0000644000031000002260000007562707531726051015417 0ustar moniotstaff00000000000000/* $Id: project.c,v 1.12 2002/08/24 15:54:17 moniot Rel $ project.c: Project-file I/O routines. Copyright (c) 2001 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Acknowledgement: the above permission notice is what is known as the "MIT License." Routines included: Shared routines: void proj_file_out() writes data from symbol table to project file. void proj_file_in() reads data from project file to symbol table. Private routines: int has_defn() TRUE if external has defn in current file int has_call() TRUE if external has call in current file int count_com_defns() Counts multiple common defns. void proj_alist_out() Outputs argument lists void proj_clist_out() Outputs common lists void proj_arg_info_in() Inputs argument lists void proj_com_info_in() Inputs common lists */ #include #include #include "ftnchek.h" #define PROJECT #include "symtab.h" #include /* Two options, proj_trim_calls and proj_trim_common, control whether Ftnchek creates project files with partial or complete global symbol table information. If these options are TRUE (the usual case), the action is: in library mode, keep only subprogram definitions, those external references not defined in the current file, and only one instance of each common block. In non-library mode, keep, besides the above, one call of a given routine from each module, and all common block declarations. Setting proj_trim_calls to FALSE causes all definitions and calls to be kept. Setting proj_trim_common to FALSE causes all common block instances to be kept. (In this case the action is the same whether or not in library mode.) These options formerly were controlled by compile-time define PROJ_KEEPALL. They are useful mainly for debugging ftnchek and for using the project files for purposes other than ftnchek. */ #define PROJFILE_COOKIE "FTNCHEK_" /* first part of magic cookie */ PROTO(PRIVATE int count_com_defns,( ComListHeader *clist )); PROTO(PRIVATE char *getstrn,(char s[], int n, FILE *fd)); PROTO(PRIVATE int has_call,( ArgListHeader *alist )); PROTO(PRIVATE int has_defn,( ArgListHeader *alist )); PROTO(PRIVATE int nil,( void )); PROTO(PRIVATE void proj_alist_out,( Gsymtab *gsymt, FILE *fd, int do_defns, int locally_defined )); PROTO(PRIVATE void proj_arg_info_in,( FILE *fd, char *filename, int is_defn )); PROTO(PRIVATE void proj_clist_out,( Gsymtab *gsymt, FILE *fd )); PROTO(PRIVATE void proj_com_info_in,( FILE *fd, char *filename )); PRIVATE int #if HAVE_STDC has_defn(ArgListHeader *alist) /* Returns TRUE if list has defns */ #else /* K&R style */ has_defn(alist) /* Returns TRUE if list has defns */ ArgListHeader *alist; #endif /* HAVE_STDC */ { while( alist != NULL && alist->topfile == top_filename ) { if(alist->is_defn) return TRUE; alist = alist->next; } return FALSE; } PRIVATE int #if HAVE_STDC has_call(ArgListHeader *alist) /* Returns TRUE if list has calls or defns */ #else /* K&R style */ has_call(alist) /* Returns TRUE if list has calls or defns */ ArgListHeader *alist; #endif /* HAVE_STDC */ { while( alist != NULL && alist->topfile == top_filename) { if( alist->is_call || alist->actual_arg ) return TRUE; alist = alist->next; } return FALSE; } PRIVATE int #if HAVE_STDC count_com_defns(ComListHeader *clist) /* Returns number of common decls in list */ #else /* K&R style */ count_com_defns(clist) /* Returns number of common decls in list */ ComListHeader *clist; #endif /* HAVE_STDC */ { int count=0; while( clist != NULL && clist->topfile == top_filename ) { ++count; clist = clist->next; } return count; } /* proj_file_out: writes data from symbol table to project file. */ #define WRITE_STR(LEADER,S) (void)(fprintf(fd,LEADER), fprintf(fd," %s",S)) #define WRITE_ARG(LEADER,S) (void)(fprintf(fd,LEADER), fprintf(fd," %s",S)) #define WRITE_NUM(LEADER,NUM) (void)(fprintf(fd,LEADER), fprintf(fd," %ld",NUM)) #define NEXTLINE (void)fprintf(fd,"\n") void #if HAVE_STDC proj_file_out(FILE *fd) #else /* K&R style */ proj_file_out(fd) FILE *fd; #endif /* HAVE_STDC */ { Gsymtab *sym_list[GLOBSYMTABSZ]; /* temp. list of symtab entries to print */ char sym_has_defn[GLOBSYMTABSZ]; char sym_has_call[GLOBSYMTABSZ]; if(fd == NULL) return; WRITE_STR(PROJFILE_COOKIE,PROJECT_VERSION); /* magic cookie */ NEXTLINE; WRITE_STR("file",top_filename); NEXTLINE; { /* Make list of subprograms defined or referenced in this file */ int i,numexts,numdefns,numcalls,do_defns,pass; ArgListHeader *alist; for(i=0,numexts=numdefns=numcalls=0;iname); else WRITE_STR(" external",sym_list[i]->name); WRITE_NUM(" class",(long)storage_class_of(sym_list[i]->type)); WRITE_NUM(" type",(long)datatype_of(sym_list[i]->type)); WRITE_NUM(" size",(long)sym_list[i]->size); /* Flag values stored are cumulative only for current file so they will not depend on what files were previously read in current run. When project file is read, flags will be ORed into Gsymtab as is done in process_lists. */ (void)fprintf(fd," flags %d %d %d %d %d %d %d %d", sym_list[i]->used_this_file, sym_list[i]->set_this_file, sym_list[i]->invoked_as_func_this_file, sym_list[i]->declared_external_this_file, /* N.B. library_module included here but is not restored */ sym_list[i]->library_module, 0, /* Flags for possible future use */ 0, 0); NEXTLINE; proj_alist_out(sym_list[i],fd,do_defns,(int)sym_has_defn[i]); } }/* end for i */ NEXTLINE; }/*end for pass */ } { int i,numblocks,numdefns; ComListHeader *clist; for(i=0,numblocks=numdefns=0;itopfile == top_filename ) { /* No keepall: save only one com decl if -lib mode */ if( proj_trim_common && library_mode) numdefns++; else /* keepall or -nolib mode: keep all com decls */ numdefns += count_com_defns(clist); sym_list[numblocks++] = &glob_symtab[i]; } } WRITE_NUM(" comblocks",(long)numdefns); NEXTLINE; for(i=0; iinfo.arglist; ArgListElement *arg; int i,n; unsigned long diminfo; Gsymtab *last_calling_module; /* This loop runs thru only those arglists that were created in the current top file. */ last_calling_module = NULL; while( a != NULL && a->topfile == top_filename) { /* do_defns mode: output only definitions */ if( (do_defns && a->is_defn) || (!do_defns && !a->is_defn) ) /* keep only externals not satisfied in this file in -lib mode, otherwise keep one actual call from each module. */ if( ! proj_trim_calls || (a->is_defn || !locally_defined || (!library_mode && (a->is_call || a->actual_arg) && a->module != last_calling_module)) ) { last_calling_module = a->module; if(a->is_defn) (void)fprintf(fd," defn\n"); else (void)fprintf(fd," call\n"); WRITE_STR(" module",a->module->name); WRITE_STR(" file",a->filename); WRITE_NUM(" line",(long)a->line_num); WRITE_NUM(" top",(long)a->top_line_num); WRITE_NUM(" class",(long)storage_class_of(a->type)); WRITE_NUM(" type",(long)datatype_of(a->type)); WRITE_NUM(" size",(long)a->size); (void)fprintf(fd," flags %d %d %d %d", a->is_defn, a->is_call, a->external_decl, a->actual_arg); NEXTLINE; n=a->numargs; if(a->is_defn || a->is_call) { WRITE_NUM(" args",(long)n); NEXTLINE; } /* Next lines, 2 per argument. 1st line: position number & name or source text of expr 2nd line: type, array dims, array size, flags */ arg = a->arg_array; for(i=0; iname; WRITE_STR(" cblk",cblk); } WRITE_NUM(" cndx",(long)arg[i].common_index); WRITE_NUM(" same",(long)arg[i].same_as); (void)fprintf(fd," flags %d %d %d %d %d %d %d %d", arg[i].is_lvalue, arg[i].set_flag, arg[i].assigned_flag, arg[i].used_before_set, arg[i].array_var, arg[i].array_element, arg[i].declared_external, arg[i].active_do_var); NEXTLINE; } }/* end if(do_defn...)*/ a = a->next; }/* end while(a!=NULL)*/ (void)fprintf(fd," end\n"); }/*proj_alist_out*/ /* proj_clist_out writes common var list data from symbol table to project file. */ PRIVATE void #if HAVE_STDC proj_clist_out(Gsymtab *gsymt, FILE *fd) #else /* K&R style */ proj_clist_out(gsymt,fd) Gsymtab *gsymt; FILE *fd; #endif /* HAVE_STDC */ { ComListHeader *c=gsymt->info.comlist; ComListElement *cvar; int i,n; while( c != NULL && c->topfile == top_filename ) { WRITE_STR(" block",gsymt->name); WRITE_NUM(" class",(long)storage_class_of(gsymt->type)); WRITE_NUM(" type",(long)datatype_of(gsymt->type)); NEXTLINE; WRITE_STR(" module",c->module->name); WRITE_STR(" file",c->filename); WRITE_NUM(" line",(long)c->line_num); WRITE_NUM(" top",(long)c->top_line_num); (void)fprintf(fd," flags %d %d %d %d", c->any_used, c->any_set, c->saved, 0); /* Flag for possible future use */ NEXTLINE; WRITE_NUM(" vars",(long)(n=c->numargs)); NEXTLINE; /* Next lines, 2 per variable. 1st line: position number, name. 2nd line: class, type, array dims, array size */ cvar = c->com_list_array; for(i=0; inext; }/* end while c != NULL */ } #undef WRITE_STR #undef WRITE_NUM #undef NEXTLINE /* proj_file_in: Reads a project file, storing info in global symbol table. See proj_file_out and its subroutines for the current project file format. */ #define MAXNAME 127 /* Max string that will be read in: see READ_STR below */ /* Macros for error-flagging input */ PRIVATE int nil(VOID)/* to make lint happy */ { return 0; } #define READ_ERROR (oops_message(OOPS_FATAL,proj_line_num,NO_COL_NUM,\ "error reading project file"),nil()) #define READ_OK nil() #define READ_FIRST_STR(LEADER,STR) (fscanf(fd,LEADER), \ fscanf(fd,"%127s",STR)) #define READ_STR(LEADER,STR) ((void)((fscanf(fd,LEADER)==0 &&\ fscanf(fd,"%127s",STR)==1)? READ_OK:READ_ERROR)) #define READ_ARG(LEADER,STR) ((void)((fscanf(fd,LEADER)==0 && fgetc(fd)==' ' &&\ (getstrn(STR,MAXNAME+1,fd)!=NULL)==1)? READ_OK:READ_ERROR)) #define READ_NUM(LEADER,NUM) ((void)((fscanf(fd,LEADER)==0 &&\ fscanf(fd,"%d",&NUM)==1)? READ_OK:READ_ERROR)) #define READ_LONG(LEADER,NUM) ((void)((fscanf(fd,LEADER)==0 &&\ fscanf(fd,"%ld",&NUM)==1)? READ_OK:READ_ERROR)) #define NEXTLINE {int c;while( (c=fgetc(fd)) != EOF && c != '\n') continue;\ if(c == EOF) READ_ERROR; else ++proj_line_num;} PRIVATE unsigned proj_line_num; /* Line number in proj file for diagnostic output */ void #if HAVE_STDC proj_file_in(FILE *fd) #else /* K&R style */ proj_file_in(fd) FILE *fd; #endif /* HAVE_STDC */ { char buf[MAXNAME+1],*topfilename=NULL; int retval; unsigned numentries,ientry, numexts,iext, numblocks,iblock; proj_line_num = 1; /* Allow project file to contain (manually) concatenated project files. These will be processed as if the separate project files were sequentially provided as arguments. */ do { while( (retval=READ_FIRST_STR(PROJFILE_COOKIE,buf)) == 1) { if( strcmp(buf,PROJECT_VERSION) != 0 ) { (void)fprintf(stderr, "\nProject file is not correct version -- must be re-created\n"); exit(1); } NEXTLINE; /* Save filename in permanent storage */ READ_STR("file",buf); topfilename = new_global_string(buf); NEXTLINE; #ifdef DEBUG_PROJECT printf("\nread file %s\n",topfilename); #endif READ_NUM(" entries",numentries); /* Get no. of entry points */ NEXTLINE; #ifdef DEBUG_PROJECT printf("read entries %d\n",numentries); #endif /* Read defn arglists */ for(ientry=0; ientrysize = id_size; } else if(is_defn) gsymt->size = id_size; /* Set library_module flag if project file was created with -lib mode in effect, or is now taken in -lib mode */ if(is_defn && (library_mode || id_library_module)) { gsymt->library_module = TRUE; } if(is_defn) gsymt->defined = TRUE; if(id_used_flag) gsymt->used_flag = TRUE; if(id_set_flag) gsymt->set_flag = TRUE; if(id_invoked) gsymt->invoked_as_func = TRUE; if(id_declared) gsymt->declared_external = TRUE; while( fscanf(fd,"%5s",sentinel), #ifdef DEBUG_PROJECT printf("sentinel=[%s]\n",sentinel), #endif strcmp(sentinel,(is_defn?"defn":"call")) == 0) { ArgListHeader *ahead; ArgListElement *alist; #ifdef KEEP_ARG_NAMES ArgListHeader *prev_ahead; ArgListElement *prev_alist; unsigned prev_n; #endif NEXTLINE; READ_STR(" module",module_name); READ_STR(" file",file_name); READ_NUM(" line",alist_line); /* line number */ READ_NUM(" top",alist_topline); /* topfile line number */ READ_NUM(" class",alist_class); /* class as in ArgListHeader */ READ_NUM(" type",alist_type); /* type as in ArgListHeader */ READ_LONG(" size",alist_size); /* size as in ArgListHeader */ if(fscanf(fd," flags %d %d %d %d", &alist_is_defn, &alist_is_call, &alist_external_decl, &alist_actual_arg) != 4) READ_ERROR; NEXTLINE; #ifdef DEBUG_PROJECT printf("read alist class %d type %d line %d\n", alist_class,alist_type,alist_line); #endif /* Find current module in symtab. If not there, make a global symtab entry for it. It will be filled in eventually when processing corresponding entry. */ h = hash_lookup(module_name); if( (module = hashtab[h].glob_symtab) == NULL) { module = install_global((int)h,type_UNDECL,class_SUBPROGRAM); } if(module->internal_entry) { warning(NO_LINE_NUM,NO_COL_NUM, "entry point redefined as module"); msg_tail(module->name); msg_tail(": redefinition ignored"); } else { if(is_defn) { if(module != gsymt) { #ifdef DEBUG_PROJECT printf("\nLinking entry %s to module %s", gsymt->name,module->name); #endif gsymt->internal_entry = TRUE; gsymt->link.module=module; /* interior entry: link it to module */ } } else { /* call: add to child list */ /* Avoid duplication on child list. It will have just been placed there on previous project-file entry, so it will be the first child on the list. */ #ifdef DEBUG_PROJECT printf("\nChild %s of module %s", gsymt->name,module->name); #endif if(module->link.child_list == NULL || module->link.child_list->child != gsymt) { ChildList *node= (ChildList *)calloc(1,sizeof(ChildList)); #ifdef DEBUG_PROJECT printf(" linked in"); #endif node->child = gsymt; node->next = module->link.child_list; module->link.child_list = node; } #ifdef DEBUG_PROJECT else { printf(" (duplicate)"); } #endif } } if(alist_is_defn || alist_is_call) { READ_NUM(" args",numargs); NEXTLINE; } else numargs = 0; #ifdef DEBUG_PROJECT printf("read numargs %d\n",numargs); #endif /* ** if(!is_defn) { ** gsymt->used_flag = TRUE; ** } */ /* Create arglist structure */ if(((ahead=(ArgListHeader *) calloc(1, sizeof(ArgListHeader))) == (ArgListHeader *) NULL) || (numargs != 0 && ((alist=(ArgListElement *) calloc(numargs,sizeof(ArgListElement))) == (ArgListElement *) NULL))){ oops_message(OOPS_FATAL,proj_line_num,NO_COL_NUM, "out of malloc space for argument list"); } /* Initialize arglist and link it to symtab */ ahead->type = type_byte(alist_class,alist_type); ahead->size = alist_size; ahead->numargs = (short)numargs; ahead->arg_array = (numargs==0? NULL: alist); ahead->module = module; ahead->topfile = filename; /* try to avoid reallocating space for same name */ ahead->filename = (strcmp(file_name,filename)==0? filename: (strcmp(file_name,prev_file_name)==0? prev_file_name: (prev_file_name=new_global_string(file_name)))); ahead->line_num = alist_line; ahead->top_line_num = alist_topline; ahead->is_defn = alist_is_defn; ahead->is_call = alist_is_call; ahead->external_decl = alist_external_decl; ahead->actual_arg = alist_actual_arg; ahead->next = prev_ahead = gsymt->info.arglist; gsymt->info.arglist = ahead; if(prev_ahead != NULL) { prev_n = prev_ahead->numargs; prev_alist = prev_ahead->arg_array; } /* Fill arglist array from project file */ for(iarg=0; iargnumargs = (short)numvars; chead->line_num = clist_line; chead->top_line_num = clist_topline; chead->com_list_array = (numvars==0? NULL: clist); chead->module = module; chead->topfile = filename; chead->any_used = clist_any_used; chead->any_set = clist_any_set; chead->saved = clist_saved; /* try to avoid reallocating space for same name */ chead->filename = (strcmp(file_name,filename)==0? filename: (strcmp(file_name,prev_file_name)==0? prev_file_name: (prev_file_name=new_global_string(file_name)))); chead->next = prev_chead = gsymt->info.comlist; gsymt->info.comlist = chead; if(prev_chead != NULL) { prev_n = prev_chead->numargs; prev_clist = prev_chead->com_list_array; } /* Fill comlist array from project file */ for(ivar=0; ivar #include #include "ftnchek.h" #include "symtab.h" #include "symspace.h" #include "symutils.h" PROTO(PRIVATE TokenListHeader * new_tokhead,( void )); PRIVATE StrSpace * curr_loc_strspace; /* Ptr to current local string space struct */ PRIVATE StrSpace * curr_srctextspace; /* Ptr to current token string space struct */ PRIVATE ParamInfoSpace * curr_paraminfospace; /* Ptr to current param info space struct */ PRIVATE TokHeadSpace * curr_tokheadspace; /* Ptr to current TokHeadSpace struct */ PRIVATE TokenSpace * curr_tokspace; /* Ptr to current TokenSpace struct */ PRIVATE PtrSpace * curr_ptrspace; /* Ptr to current PtrSpace struct */ void init_globals(VOID) /* Clears the global symbol table */ { glob_symtab_top = 0; /* Neither of these stmts is really needed. */ glob_strings_used = 0; /* local strings are now permanently stored */ curr_loc_strspace = &lstrspace; loc_str_top = 0; extra_locstrspace = 0; }/*init_globals*/ void init_symtab(VOID) /* Clears the local symbol table */ { int i,h; /* Define factor equal to ratio of time to clear hashtable entry by looking up in symbol table to time to clear it directly. This factor is used to choose the method of clearing out the hashtab. */ #ifndef HINITFACTOR #define HINITFACTOR 20 #endif /* Clear the hash table of local symbol refs */ if( loc_symtab_top < HASHSZ/HINITFACTOR ) { /* few local symbols: look them up in symtab */ for(i=0; iline_num = t->line_num; TH_ptr->top_line_num = (current_filename == top_filename? t->line_num: top_file_line_num); TH_ptr->filename = current_filename; /* Clear all the flags */ TH_ptr->external_decl = FALSE; TH_ptr->actual_arg = FALSE; TH_ptr->tokenlist = NULL; TH_ptr->next = NULL; return TH_ptr; } PRIVATE TokenListHeader * new_tokhead(VOID) { if(token_head_space_top == TOKHEADSPACESZ) { if(curr_tokheadspace->next == (TokHeadSpace *)NULL) { TokHeadSpace *new_tokheadspace; if( (new_tokheadspace = (TokHeadSpace *)malloc(sizeof(TokHeadSpace))) == (TokHeadSpace *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for token list header"); return (TokenListHeader *)NULL; /*NOTREACHED*/ } else { new_tokheadspace->next = (TokHeadSpace *)NULL; curr_tokheadspace->next = new_tokheadspace; } } curr_tokheadspace = curr_tokheadspace->next; extra_tokheadspace += TOKHEADSPACESZ; token_head_space_top = 0; } return curr_tokheadspace->tokheadspace + token_head_space_top++; } /* this routine allocates room in global stringspace (top down) for string s, and copies it there. */ char * #if HAVE_STDC new_global_string(char *s) #else /* K&R style */ new_global_string(s) char *s; #endif /* HAVE_STDC */ { static unsigned long glob_str_bot = 0; static char *glob_strspace; unsigned count = strlen(s) + 1;/* no. of chars needed including final nul */ glob_strings_used += count; /* keep track for -resource */ if(glob_str_bot < count) { unsigned long numalloc = (count > STRSPACESZ? count: STRSPACESZ); glob_strspace = (char *)calloc(numalloc,sizeof(char)); if(glob_strspace == (char *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for global strings"); return (char *)NULL; /*NOTREACHED*/ } glob_str_bot = numalloc; } glob_str_bot -= count; /*pre-decrement*/ return strcpy(glob_strspace+glob_str_bot,s); }/*new_global_string*/ /* Allocate space for string s in local string space (bottom up), and copy it there. */ char * #if HAVE_STDC new_local_string(char *s) #else /* K&R style */ new_local_string(s) char *s; #endif /* HAVE_STDC */ { int count = strlen(s) + 1; /* No. of chars needed including final nul */ int orig_top = loc_str_top; loc_str_top += count; if(loc_str_top > STRSPACESZ) { StrSpace *new_loc_strspace; new_loc_strspace = (StrSpace *)malloc(sizeof(StrSpace)); if(new_loc_strspace == (StrSpace *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for local strings"); return (char *)NULL; /*NOTREACHED*/ } else { new_loc_strspace->next = (StrSpace *)NULL; curr_loc_strspace->next = new_loc_strspace; } curr_loc_strspace = curr_loc_strspace->next; extra_locstrspace += orig_top; /* Remember amount used so far */ orig_top = 0; loc_str_top = count; } return strcpy(curr_loc_strspace->strspace+orig_top,s); }/* new_local_string */ ParamInfo * new_param_info(VOID) /* Allocates space for parameter info field */ { if(param_info_space_top == PARAMINFOSPACESZ) { if(curr_paraminfospace->next == (ParamInfoSpace *)NULL) { ParamInfoSpace *new_paraminfospace; if( (new_paraminfospace = (ParamInfoSpace *)malloc(sizeof(ParamInfoSpace))) == (ParamInfoSpace *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for parameter info"); return (ParamInfo *)NULL; /*NOTREACHED*/ } else { new_paraminfospace->next = (ParamInfoSpace *)NULL; curr_paraminfospace->next = new_paraminfospace; } } curr_paraminfospace = curr_paraminfospace->next; extra_paraminfospace += PARAMINFOSPACESZ; param_info_space_top = 0; } return curr_paraminfospace->paraminfospace + param_info_space_top++; } void #if HAVE_STDC free_textvec(char **p) /*ARGSUSED0*/ #else /* K&R style */ free_textvec(p) /*ARGSUSED0*/ char **p; #endif /* HAVE_STDC */ { /* No action necessary since all the space is freed in a lump at end of processing module */ } char ** #if HAVE_STDC new_textvec(int n) /* Allocates space for array of n char ptrs */ #else /* K&R style */ new_textvec(n) /* Allocates space for array of n char ptrs */ int n; #endif /* HAVE_STDC */ { int orig_top = ptrspace_top; ptrspace_top += n; if( ptrspace_top > PTRSPACESZ) { if(curr_ptrspace->next == (PtrSpace *)NULL) { PtrSpace *new_ptrspace; if( (new_ptrspace = (PtrSpace *)malloc(sizeof(PtrSpace))) == (PtrSpace *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for pointers to text"); return (char **)NULL; /*NOTREACHED*/ } else { new_ptrspace->next = (PtrSpace *)NULL; curr_ptrspace->next = new_ptrspace; } } curr_ptrspace = curr_ptrspace->next; extra_ptrspace += orig_top; orig_top = 0; ptrspace_top = n; } return curr_ptrspace->ptrspace + orig_top; } /* Routine to allocate space for a string containing source text of a token. */ char * #if HAVE_STDC new_src_text_alloc(int size) /* length counting nul */ #else /* K&R style */ new_src_text_alloc(size) int size; /* length counting nul */ #endif /* HAVE_STDC */ { int orig_top = srctextspace_top; srctextspace_top += size; if(srctextspace_top > STRSPACESZ) { StrSpace *new_srctextspace; new_srctextspace = (StrSpace *)malloc(sizeof(StrSpace)); if(new_srctextspace == (StrSpace *)NULL) { oops_message(OOPS_FATAL,line_num,col_num, "Cannot alloc space for token text"); return (char *)NULL; /*NOTREACHED*/ } else { new_srctextspace->next = (StrSpace *)NULL; curr_srctextspace->next = new_srctextspace; } curr_srctextspace = curr_srctextspace->next; extra_srctextspace += orig_top; /* Remember amount used so far */ orig_top = 0; srctextspace_top = size; } return curr_srctextspace->strspace + orig_top; } /* Tokens that are 1 char long have their src_text stored in this array, indexed by their codes. Avoids duplication of strings, wasting space. */ PRIVATE char onechar_text[2*(MAX_CHAR_CODE+1)]; /* Routine to get space for string containing source text of token and copy it to there. */ char * #if HAVE_STDC new_src_text(const char *s, int len) /* string (final nul not needed) */ /* length not counting nul */ #else /* K&R style */ new_src_text(s,len) char *s; /* string (final nul not needed) */ int len; /* length not counting nul */ #endif /* HAVE_STDC */ { int i; char *new_s; /* If it is a single char, it goes into the special array. Otherwise allocate space for it. */ if(len <= 1) new_s = &onechar_text[s[0]*2]; else new_s = new_src_text_alloc(len+1); for(i=0; inext == (TokenSpace *)NULL) { TokenSpace *new_tokspace; if( (new_tokspace = (TokenSpace *)malloc(sizeof(TokenSpace))) == (TokenSpace *)NULL) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, "Cannot alloc space for tokens"); return (Token *)NULL; /*NOTREACHED*/ } else { new_tokspace->next = (TokenSpace *)NULL; curr_tokspace->next = new_tokspace; } } curr_tokspace = curr_tokspace->next; extra_tokspace += TOKENSPACESZ; /* Keep track of how much for -resource */ token_space_top = 0; } return curr_tokspace->tokenspace + token_space_top++; } ftnchek-3.3.1/symspace.h0000644000031000002260000000055107353507570015567 0ustar moniotstaff00000000000000/* $Id: symspace.h,v 1.3 2001/09/24 01:42:16 moniot Rel $ Prototypes of routines & shared variables defined in symspace.c */ PROTO(TokenListHeader * make_TL_head,( Token *t )); PROTO(char * new_local_string,( char *s )); PROTO(ParamInfo * new_param_info,( void )); SYM_SHARED long parameter_count; /* Count of parameters for keeping them in order */ ftnchek-3.3.1/symtab.c0000644000031000002260000022124107714525214015232 0ustar moniotstaff00000000000000/* $Id: symtab.c,v 1.45 2003/08/07 19:37:48 moniot Exp $ Definitions of symbol table maintenance routines and hash table functions Copyright (c) 1999 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ROBERT K. MONIOT OR FORDHAM UNIVERSITY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of ftnchek shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the author. */ /* I. Symtab Symbol table routines for Fortran program checker. Shared functions defined: call_func(id,arg) Handles function invocations. call_subr(id,arg) Handles CALL statements. declare_type(id,datatype,size) Handles TYPE statements. def_arg_name(id) Handles func/subr argument lists. def_array_dim(id,arg) Handles dimensioning declarations. def_com_block(id) Handles common blocks and SAVE stmts. def_com_variable(id) Handles common block lists. int def_curr_module(id) Identifies symbol as current module. def_equiv_name(id) Initializes equivalence list items. def_ext_name(id) Handles external lists. def_function(datatype,size,size_text,id,args) Installs function name in global table. def_intrins_name(id) Handles intrinsic lists. def_parameter(id,value) Handles parameter_defn_item def_stmt_function(id) Declares a statement function. do_ASSIGN(id) Handles ASSIGN stmts. do_assigned_GOTO(id) Handles assigned GOTO. do_ENTRY(id,args,hashno) Processes ENTRY statement. do_RETURN(hashno,keyword) Processes RETURN statement. equivalence(id1,id2) equivalences two variables int get_type(symt) Finds out data type of symbol, or uses implicit typing to establish its type. int get_size(symt,type) Finds out size of symbol's datatype. unsigned hash_lookup(s) Looks up identifier in hashtable. init_globals() Initializes global symbol info. init_symtab() Clears local symbol table & removes locals from stringspace. Also restores default implicit data typing. Gsymtab* install_global(t,datatype,storage_class) Installs indentifier in global symbol table. Lsymtab* install_local(t,datatype,storage_class) Installs indentifier in local symbol table. ref_array(id,subscrs) Handles array references ref_variable(id) Handles accessing variable name. set_implicit_type(type,size,c1,c2) Processes IMPLICIT statement. stmt_function_stmt(id) Finishes processing stmt func defn. char * token_name(t) Returns ptr to token's symbol's name. use_actual_arg(id) Handles using a variable as actual arg. use_io_keyword(id_keywd,id_val,class) Handles i/o control specifier. use_len_arg(id) Handles arguments passed to LEN. use_lvalue(id) Handles assignment to a variable. use_parameter(id) Handles data_constant_value & data_repeat_factor. use_variable(id) Sets used-flag for a variable used in expr. */ /* private functions defined: call_external(symt,id,arg) places token list of args into local symtab check_intrins_args(arg, defn) Checks call seq of intrinsic functions check_stmt_function_args(symt,id,arg) ditto for statement functions */ #include #include #include #define SYMTAB #include "ftnchek.h" #include "symtab.h" #include "symspace.h" #include "symutils.h" #include "intrins.h" #include "tokdefs.h" #ifdef DEVELOPMENT /* for maintaining the program */ #define DEBUG_SIZES #endif PROTO(PRIVATE void call_external,( Lsymtab *symt, Token *id, Token *arg )); PROTO(PRIVATE void check_intrins_args,( Token *id, Token *arg )); PROTO(PRIVATE void check_stmt_function_args,( const Lsymtab *symt, Token *id, Token *arg )); PROTO(PRIVATE Lsymtab* install_local,( int h, int datatype, int storage_class )); PROTO(PRIVATE void use_function_arg,( Token *id )); PROTO(PRIVATE void use_len_arg,( Token *id )); #ifdef DEBUG_SIZES PROTO(extern void print_sizeofs,( void )); /* in symtab.c */ #endif /* Apply an attribute to a variable */ /* N.B. Legality checking deferred to END */ /* N. extra B.: allocatable, pointer, and target flags ignored at present */ void apply_attr(Token *id, /* token of variable to apply attr to */ int attr) /* token class of attr to apply */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } /* macro to set an attribute bit in symtab: if already set, flag the error, otherwise set the bit in all equivalenced entries. */ #define check_and_set_attr( ATTRBIT ) if( (symt->ATTRBIT) ) { \ syntax_error(id->line_num,id->col_num,"redundant"); \ msg_tail(keytok_name(attr)); msg_tail("declaration"); } \ else { Lsymtab *equiv=symt; \ do{ \ equiv->ATTRBIT = TRUE; \ equiv = equiv->equiv_link; \ } while(equiv != symt); } switch( attr ) { case tok_ALLOCATABLE: check_and_set_attr(allocatable); break; case tok_POINTER: check_and_set_attr(pointer); break; case tok_SAVE: check_and_set_attr(saved); break; case tok_TARGET: check_and_set_attr(target); break; } #undef check_and_set_attr } /* This routine handles the saving of arg lists which is done by call_func and call_subr. Also called by def_namelist to save its variable list. */ PRIVATE void #if HAVE_STDC call_external(Lsymtab *symt, Token *id, Token *arg) #else /* K&R style */ call_external(symt,id,arg) Lsymtab *symt; Token *id,*arg; #endif /* HAVE_STDC */ { TokenListHeader *TH_ptr; /* Insert the new list onto linked list of token lists */ TH_ptr= make_TL_head(id); TH_ptr->tokenlist = (arg == NULL ? NULL: arg->next_token); TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; #ifdef DEBUG_EXPRTREES if(debug_latest) { fprintf(list_fd,"\nSubprogram %s :: ",symt->name); if(arg != NULL) print_expr_list(arg->next_token); } #endif } /*call_external*/ void #if HAVE_STDC call_func(Token *id, Token *arg) /* Process function invocation */ #else /* K&R style */ call_func(id,arg) /* Process function invocation */ Token *id, *arg; #endif /* HAVE_STDC */ { int t, h=id->value.integer; Lsymtab *symt; Gsymtab *gsymt; IntrinsInfo *defn; if( (symt = (hashtab[h].loc_symtab)) == NULL){ symt = install_local(h,type_UNDECL,class_SUBPROGRAM); symt->info.toklist = NULL; } else { /* protect ourself against nonsense */ if( symt->array_var || symt->parameter ) { syntax_error(id->line_num,id->col_num, "identifier was previously declared a non-function:"); msg_tail(symt->name); symt->array_var = symt->parameter = FALSE; symt->info.toklist = NULL; } } t = datatype_of(symt->type); /* Symbol seen before: check it & change class */ if(storage_class_of(symt->type) == class_VAR) { symt->type = type_byte(class_SUBPROGRAM,t); symt->info.toklist = NULL; } /* See if intrinsic. If so, set flag, save info */ if(!symt->external && !symt->intrinsic && !symt->argument && (defn = find_intrinsic(symt->name)) != NULL) { /* First encounter with intrinsic fcn: store info */ symt->intrinsic = TRUE; symt->info.intrins_info = defn; } /* Update set/used status of variables in arg list. This is deferred to now to allow intrinsics to be treated as pure functions regardless of pure_function flag. */ if(arg != NULL) { Token *a=arg; intrins_flags_t nonpure, /* flag if function may modify arg */ i_len; /* special handling for intrinsic LEN */ if(symt->intrinsic) { nonpure = symt->info.intrins_info->intrins_flags&I_NONPURE; i_len = symt->info.intrins_info->intrins_flags&I_LEN; } else { nonpure = ! pure_functions; i_len = FALSE; } /* Token list is in reverse order. Restore args to original order. */ arg->next_token = reverse_tokenlist(arg->next_token); while( (a=a->next_token) != NULL) { if(is_true(ID_EXPR,a->TOK_flags)){ if( nonpure ) { /* Treat impure function like subroutine call */ use_actual_arg(a); use_variable(a); } else { if(i_len) use_len_arg(a); /* LEN is sui generis */ else /* Pure-function invocation checks u-b-s */ use_function_arg(a); } } } } /* If intrinsic, do checking now. Otherwise, save arg list to be checked later. */ if(symt->intrinsic) { /* It is intrinsic: check it */ if(misc_warn) check_intrins_args(id,arg); } else { /* It is not intrinsic: install in global table */ switch(storage_class_of(symt->type)) { case class_SUBPROGRAM: symt->external = TRUE; if((!symt->argument) && (gsymt=(hashtab[h].glob_symtab)) == NULL) { gsymt = install_global(h,type_UNDECL,class_SUBPROGRAM); gsymt->info.arglist = NULL; } /* store arg list in local table */ call_external(symt,id,arg); break; case class_STMT_FUNCTION: symt->external = TRUE; if(misc_warn) check_stmt_function_args(symt,id,arg); break; } } if(! symt->used_flag) { /* record first line where used */ symt->line_used = id->line_num; symt->file_used = inctable_index; } symt->used_flag = TRUE; symt->invoked_as_func = TRUE; } /*call_func*/ void #if HAVE_STDC call_subr(Token *id, Token *arg) /* Process call statements */ #else /* K&R style */ call_subr(id,arg) /* Process call statements */ Token *id, *arg; #endif /* HAVE_STDC */ { int t, h=id->value.integer; Lsymtab *symt; Gsymtab *gsymt; #ifndef STANDARD_INTRINSICS IntrinsInfo *defn; #endif if( (symt = (hashtab[h].loc_symtab)) == NULL){ symt = install_local(h,type_SUBROUTINE,class_SUBPROGRAM); symt->info.toklist = NULL; } else { /* protect ourself against nonsense */ if( symt->array_var || symt->parameter ) { syntax_error(id->line_num,id->col_num, "identifier was previously declared a non-subroutine:"); msg_tail(symt->name); symt->array_var = symt->parameter = FALSE; symt->info.toklist = NULL; } } t=datatype_of(symt->type); /* Symbol seen before: check it & change class */ if( (storage_class_of(symt->type) == class_VAR || symt->external ) && t == type_UNDECL) { t = type_SUBROUTINE; symt->info.toklist = NULL; } symt->type = type_byte(class_SUBPROGRAM,t); /* Since nonstandard intrinsics include some subroutines, see if it is in intrinsic list. Or if declared intrinsic, then accept it as such and do checking now. Otherwise, save arg list to be checked later. */ #ifndef STANDARD_INTRINSICS if(!symt->external && !symt->intrinsic && (defn = find_intrinsic(symt->name)) != NULL) { /* First encounter with intrinsic fcn: store info */ symt->intrinsic = TRUE; symt->info.intrins_info = defn; } #endif /* Token list is in reverse order. Restore args to original order. */ if(arg != NULL) arg->next_token = reverse_tokenlist(arg->next_token); if(symt->intrinsic) { /* It is intrinsic: check it */ if(misc_warn) check_intrins_args(id,arg); } else { /* It is not intrinsic: install in global table */ symt->external = TRUE; if((!symt->argument) && (gsymt=(hashtab[h].glob_symtab)) == NULL) { gsymt = install_global(h,type_UNDECL,class_SUBPROGRAM); gsymt->info.arglist = NULL; } /* store arg list in local table */ call_external(symt,id,arg); } if(! symt->used_flag) { /* record first line where used */ symt->line_used = id->line_num; symt->file_used = inctable_index; } symt->used_flag = TRUE; }/*call_subr*/ /* check out consistency of intrinsic argument list */ PRIVATE void #if HAVE_STDC check_intrins_args(Token *id, Token *arg) #else /* K&R style */ check_intrins_args(id, arg) Token *id; Token *arg; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt=hashtab[h].loc_symtab; IntrinsInfo *defn=symt->info.intrins_info; unsigned args_given = ((arg == NULL)?0:arg_count(arg->next_token)); int numargs; unsigned short flags; Token *t; numargs = defn->num_args; flags = defn->intrins_flags; /* positive numargs: must agree */ if( (numargs >= 0 && (args_given != (unsigned)numargs)) /* 1 or 2 arguments allowed */ || (numargs == I_1or2 && (args_given != 1 && args_given != 2)) /* numargs == -2: 2 or more */ || (numargs == I_2up && (args_given < 2)) /* 0 or 1 argument allowed */ || (numargs == I_0or1 && (args_given != 0 && args_given != 1)) ){ LINENO_t linenum; COLNO_t colnum; if(arg==NULL) {linenum=id->line_num; colnum=id->col_num;} else {linenum = arg->line_num; colnum = arg->col_num;} syntax_error(linenum,colnum, "wrong number of arguments for intrinsic function"); msg_tail(defn->name); } #ifdef DEBUG_EXPRTREES if(debug_latest) { fprintf(list_fd,"\nIntrinsic %s :: ",defn->name); if(arg != NULL) print_expr_list(arg->next_token); } #endif if(arg != NULL && numargs != 0) { Token *prev_t, /* one operand in type propagation */ fake_op; /* operator in binexpr_type call */ t = arg->next_token; /* Copy type & size info into result */ arg->tclass = t->tclass; arg->tsubclass = t->tsubclass; #ifndef TOK_type arg->TOK_type = t->TOK_type; #endif #ifndef TOK_flags arg->TOK_flags = t->TOK_flags; #endif arg->size = t->size; prev_t = t; while(t != NULL) { if(intrins_arg_cmp(defn,t)) { /* Propagate data type thru the list. Resulting type info is stored in args token. */ if(prev_t != t && ! (flags & I_MIXED_ARGS) ) { /* Set up a pretend expr term for binexpr */ fake_op.tclass = ','; fake_op.line_num = prev_t->line_num; fake_op.col_num = prev_t->col_num; fake_op.src_text = ","; binexpr_type(prev_t,&fake_op,t,arg); } prev_t = t; } t = t->next_token; }/* end while */ }/* end arg != NULL */ }/* check_intrins_args */ PRIVATE void #if HAVE_STDC check_stmt_function_args(const Lsymtab *symt, Token *id, Token *arg) #else /* K&R style */ check_stmt_function_args(symt,id,arg) Lsymtab *symt; Token *id,*arg; #endif /* HAVE_STDC */ { unsigned n1,n2,n; unsigned i; Token *t1,*t2; t1 = symt->info.toklist->tokenlist; t2 = ((arg==NULL)? NULL: arg->next_token); n1 = arg_count(t1); n2 = arg_count(t2); if(n1 != n2) { syntax_error(id->line_num,id->col_num, "function invoked with incorrect number of arguments"); } n = (n1 < n2? n1: n2); for(i=0; iTOK_type != t2->TOK_type) { syntax_error(t2->line_num,t2->col_num, "function argument is of incorrect datatype"); } #else stmt_fun_arg_cmp(symt,t1,t2); #endif t1 = t1->next_token; t2 = t2->next_token; } } void #if HAVE_STDC declare_type(Token *id, int datatype, long int size, char *size_text) #else /* K&R style */ declare_type(id,datatype,size,size_text) Token *id; int datatype; long size; char *size_text; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt=hashtab[h].loc_symtab; if( (symt) == NULL) { symt = install_local(h,datatype,class_VAR); symt->size = size; symt->size_is_adjustable = id->size_is_adjustable; symt->size_is_expression = id->size_is_expression; symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* Symbol has been seen before: check it */ /* Intrinsic: see if type is consistent */ if( symt->intrinsic ) { IntrinsInfo *defn = symt->info.intrins_info; int rettype = defn->result_type, argtype = defn->arg_type; /* N.B. this test catches many but not all errors */ if( (rettype != type_GENERIC && datatype != rettype) || (rettype == type_GENERIC && !((1<line_num,id->col_num, "Declared type "); msg_tail(type_name[datatype]); msg_tail(" is invalid for intrinsic function: "); msg_tail(symt->name); } } } if(datatype_of(symt->type) != type_UNDECL) { syntax_error(id->line_num,id->col_num, "symbol redeclared: "); msg_tail(symt->name); } else { /* Now give it the declared type */ symt->type = type_byte(storage_class_of(symt->type),datatype); symt->size = size; symt->size_is_adjustable = id->size_is_adjustable; symt->size_is_expression = id->size_is_expression; /* Type declaration overrides implicit declarations as line where declared. */ symt->line_declared = id->line_num; symt->file_declared = inctable_index; } /* Issue error if already defined as a parameter */ if( symt->parameter ) { syntax_error(id->line_num,id->col_num, "type declaration must precede PARAMETER definition"); } } /* If character type, save the source text of the size specification. If it is an array already dimensioned, add size_text to tail of src.textvec, otherwise place size_text in src.text if it is character type, except for parameter, which shouldn't happen. */ if( datatype_of(symt->type) == type_STRING ) { if(symt->array_var) { int i, dims = array_dims(symt->info.array_dim); char **tvec = new_textvec(dims+1); for(i=0; isrc.textvec[i]; tvec[dims] = size_text; /* Copy size text to new last element */ free_textvec(symt->src.textvec); /* Free the old list */ symt->src.textvec = tvec; /* Replace old list with new */ } else if( ! symt->parameter ) { symt->src.text = size_text; } } #ifdef DEBUG_EXPRTREES if(debug_latest) { fprintf(list_fd,"\n %s",type_table[datatype]); size_text = get_size_text(symt,0); if(size_text != NULL) { fprintf(list_fd," * %s",size_text); } else { if(symt->size != size_DEFAULT) fprintf(list_fd," * %d",symt->size); } fprintf(list_fd," %s",symt->name); } #endif /* Under -port=long-string warn if char size > 255 */ if(port_long_string) { if(datatype == type_STRING && size > 255) nonportable(id->line_num,id->col_num, "character variable length exceeds 255"); } }/*declare_type*/ void #if HAVE_STDC def_arg_name(Token *id) /* Process items in argument list */ #else /* K&R style */ def_arg_name(id) /* Process items in argument list */ #endif /* HAVE_STDC */ #if HAVE_STDC #else /* K&R style */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* Symbol has been seen before: check it */ } symt->argument = TRUE; }/*def_arg_name*/ void #if HAVE_STDC def_array_dim(Token *id, Token *arg) /* Process dimension lists */ /* arg previously defined as int */ #else /* K&R style */ def_array_dim(id,arg) /* Process dimension lists */ Token *id,*arg; /* arg previously defined as int */ #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* Symbol has been seen before: check it */ if(storage_class_of(symt->type) != class_VAR || symt->parameter || symt->entry_point) { syntax_error(id->line_num,id->col_num, "Entity cannot be dimensioned: "); msg_tail(symt->name); return; } } symt->array_var = TRUE; if(!equivalence_flag){ /* some checking should be done here */ if(symt->info.array_dim != 0) syntax_error(id->line_num,id->col_num, "Array redimensioned"); else symt->info.array_dim = array_dim_info(arg->TOK_dims, arg->TOK_elts); } /* Save text of dimension exprs in a list of strings in symtab entry. If array is of type character, the text of size expression is already in src.text, and is saved at tail of the list of dim strings. */ { int i, dims=arg->TOK_dims, is_char = (datatype_of(symt->type) == type_STRING); char **tvec; char *size_text=symt->src.text; Token *t; int auto_array=FALSE; /* records whether automatic array */ /* Restore dim list to correct order */ arg->next_token = reverse_tokenlist(arg->next_token); symt->src.textvec = tvec = new_textvec(is_char?dims+1:dims); /* Store dimension expr text in list */ for(i=0, t=arg->next_token; inext_token) { tvec[i] = ( t->left_token == NULL ? new_tree_text(t): new_tree_text(t->left_token) ); /* Do some -f77 checking while we're here */ if( !symt->argument && !is_true(PARAMETER_EXPR,t->TOK_flags) ) { /* Section 5.1.2.1 */ auto_array = TRUE; if(f77_automatic_array ) { nonstandard(t->line_num,t->col_num,0,0); msg_tail(": local array cannot have variable size"); } } } /* Novices sometimes put FUNCTION decl late. Only likely in a type declaration stmt. */ if(auto_array && novice_help && curr_stmt_class != tok_DIMENSION && curr_stmt_class != tok_COMMON && strncmp(symt->name,"FUNCTION",8) == 0) { warning(id->line_num,id->col_num, "Possible intended function declaration is not first line of module"); } /* If character type, store size expr text in tail of list. */ if(is_char) tvec[dims] = size_text; #ifdef DEBUG_EXPRTREES if(debug_latest) { int type=datatype_of(symt->type); fprintf(list_fd,"\n %s", (type == type_UNDECL)?"DIMENSION":type_table[type]); if(is_char) fprintf(list_fd," * %s",symt->src.textvec[dims]); fprintf(list_fd," %s ( ",symt->name); for(i=0; isrc.textvec[i]); if(i < dims-1) fprintf(list_fd," , "); } fprintf(list_fd," )"); } #endif } }/*def_array_dim*/ void #if HAVE_STDC def_com_block(Token *id, Token *comlist) /* Process common blocks and save_stmt */ #else /* K&R style */ def_com_block(id,comlist) /* Process common blocks and save_stmt */ Token *id, *comlist; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; Gsymtab *gsymt; TokenListHeader *TH_ptr; extern LINENO_t true_prev_stmt_line_num;/* set by fortran.y */ /* Install name in global symbol table */ if( (gsymt=hashtab[h].com_glob_symtab) == NULL) { gsymt = install_global(h,type_COMMON_BLOCK,class_COMMON_BLOCK); gsymt->info.comlist = NULL; } if( (symt = hashtab[h].com_loc_symtab) == NULL){ symt = install_local(h,type_COMMON_BLOCK,class_COMMON_BLOCK); symt->info.toklist = NULL; } /* Record 1st location of declaration */ if( symt->info.toklist == NULL ) { symt->line_declared = id->line_num; symt->file_declared = inctable_index; } if(pretty_multiple_common) { /* Flag declarations of same block in separate statements unless separated only by comments. Use front token of previous tokenlist which is last token of decl. */ if( symt->info.toklist != NULL && symt->info.toklist->tokenlist->line_num < true_prev_stmt_line_num) { ugly_code(id->line_num,id->col_num, "Common block declared in more than one statement"); } } /* Insert the new list onto linked list of token lists */ if(comlist != NULL) { /* Will be NULL only for SAVE, in which case skip */ TH_ptr= make_TL_head(id); TH_ptr->tokenlist = comlist->next_token; TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; { /* For each variable in the list, record a pointer to this common block and variable's index in the block. Note that token list is still in reverse order at this time, so we count backwards. */ Token *c = comlist->next_token; int indx; /* Add to the block's total count, and start indexing there. */ indx = (symt->common_index += arg_count(c)); while(c != NULL) { Lsymtab *com_var = hashtab[c->value.integer].loc_symtab; com_var->common_block = gsymt; com_var->common_index = indx--; c = c->next_token; } } } if(! symt->used_flag) { /* record first line where used */ symt->line_used = id->line_num; symt->file_used = inctable_index; } if(! symt->set_flag) { /* record first line where set */ symt->line_set = id->line_num; symt->file_set = inctable_index; } symt->set_flag = TRUE; symt->used_flag = TRUE; }/*def_com_block*/ void #if HAVE_STDC def_com_variable(Token *id) /* Process items in common block list */ #else /* K&R style */ def_com_variable(id) /* Process items in common block list */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* Symbol has been seen before: check it */ if(symt->common_var /* Already in common? */ /* But if it is equivalenced, suppress the warning. Equivs in common are not handled in present version. */ && symt->equiv_link == symt ) { syntax_error(id->line_num,id->col_num, "Variable cannot be in common twice"); } else if(symt->entry_point || symt->parameter || symt->argument || symt->external || symt->intrinsic) { syntax_error(id->line_num,id->col_num, "Item cannot be placed in common"); return; } if(symt->size == size_ADJUSTABLE) { /* CHARACTER *(*) */ syntax_error(id->line_num,id->col_num, "Common variable cannot have adjustable size"); symt->size = 1; } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ equiv->common_var = TRUE; /* set the flag even if not legit */ equiv = equiv->equiv_link; } while(equiv != symt); } }/*def_com_variable*/ /* This guy sets the flag in symbol table saying the id is the current module. It returns the hash code for later reference. Also bookmarks the source line so the declaration can be found in src buffer (currently only used by mkhtml). */ int #if HAVE_STDC def_curr_module(Token *id) #else /* K&R style */ def_curr_module(id) Token *id; #endif /* HAVE_STDC */ { int hashno = id->value.integer; hashtab[hashno].loc_symtab->is_current_module = TRUE; mark_module_srcline(id->line_num); /* save mkhtml_bookmark */ return hashno; }/*def_curr_module*/ void def_do_variable(Token *id) /* Treat DO index variable in DO stmt */ { int h=id->value.integer; Lsymtab *symt; if((symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { if(symt->active_do_var) { syntax_error(id->line_num,id->col_num, "DO variable is already in use in an enclosing DO loop"); } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->set_flag) { /* record first line where set */ equiv->line_set = id->line_num; equiv->file_set = inctable_index; } if(! equiv->used_flag) { /* record first line where used */ equiv->line_used = id->line_num; equiv->file_used = inctable_index; } equiv->set_flag = TRUE; equiv->assigned_flag = TRUE; equiv->used_flag = TRUE; equiv->active_do_var = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } } void #if HAVE_STDC def_equiv_name(Token *id) /* Process equivalence list elements */ #else /* K&R style */ def_equiv_name(id) /* Process equivalence list elements */ Token *id; #endif /* HAVE_STDC */ { ref_variable(id); /* Put it in symtab */ /* No other action needed: processing of equiv pairs is done by equivalence() */ }/*def_equiv_name*/ void #if HAVE_STDC def_ext_name(Token *id) /* Process external lists */ #else /* K&R style */ def_ext_name(id) /* Process external lists */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt = hashtab[h].loc_symtab) == NULL){ symt = install_local(h,type_UNDECL,class_SUBPROGRAM); symt->info.toklist = NULL; symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else if(symt->entry_point){ /* protect ourself from nonsense */ syntax_error(id->line_num,id->col_num, "Subprogram cannot declare itself external:"); msg_tail(symt->name); return; } else if(symt->array_var || symt->parameter){ /* worse nonsense */ syntax_error(id->line_num,id->col_num, "Identifier was previously declared non-external:"); msg_tail(symt->name); return; } else { /* Symbol seen before: check it & change class */ if(storage_class_of(symt->type) == class_VAR) { symt->info.toklist = NULL; } symt->type = type_byte(class_SUBPROGRAM,datatype_of(symt->type)); } if(symt->intrinsic){ syntax_error(id->line_num,id->col_num, "Cannot declare same subprogram both intrinsic and external:"); msg_tail(symt->name); } else{ symt->external = TRUE; if(!symt->argument){ TokenListHeader *TH_ptr; Gsymtab *gsymt; if( (gsymt=hashtab[h].glob_symtab) == NULL) { gsymt = install_global(h,type_UNDECL,class_SUBPROGRAM); gsymt->info.arglist = NULL; } TH_ptr=make_TL_head(id); TH_ptr->external_decl = TRUE; TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; } } symt->declared_external = TRUE; }/*def_ext_name*/ void #if HAVE_STDC def_function(int datatype, long int size, char *size_text, Token *id, Token *args) #else /* K&R style */ def_function(datatype,size,size_text,id,args) #endif /* HAVE_STDC */ /* Installs function or subroutine name */ #if HAVE_STDC /* in global table */ #else /* K&R style */ int datatype; /* in global table */ long size; char *size_text; Token *id,*args; #endif /* HAVE_STDC */ { int storage_class; int h=id->value.integer; Lsymtab *symt; Gsymtab *gsymt; TokenListHeader *TH_ptr; storage_class = class_SUBPROGRAM; if((symt = (hashtab[h].loc_symtab)) == NULL) { /* Symbol is new to local symtab: install it. Since this is the current routine, it has storage class of a variable. */ symt = install_local(h,datatype,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; symt->size = size; symt->src.text = size_text; } if(! symt->entry_point) /* seen before but not as entry */ symt->info.toklist = NULL; if(symt->external) { /* warn if entry point was declared external */ syntax_error(id->line_num,id->col_num, "Entry point was declared external:"); msg_tail(symt->name); /* try to undo the damage */ symt->type = type_byte(class_VAR,datatype_of(symt->type)); symt->external = FALSE; } if((gsymt = (hashtab[h].glob_symtab)) == NULL) { /* Symbol is new to global symtab: install it */ gsymt = install_global(h,datatype,storage_class); gsymt->size = size; gsymt->info.arglist = NULL; } else { /* Symbol is already in global symtab. Put the declared datatype into symbol table. */ gsymt->type = type_byte(storage_class,datatype); gsymt->size = size; } /* Restore args list to original order */ if(args != NULL) args->next_token = reverse_tokenlist(args->next_token); /* Insert the new list onto linked list of token lists */ TH_ptr=make_TL_head(id); /* If this is an implied PROGRAM statement it may occur in an include file, which we do not want to appear in diagnostic messages about it. */ if(top_filename != current_filename && datatype == type_PROGRAM) { TH_ptr->filename = top_filename; TH_ptr->line_num = top_file_line_num; } TH_ptr->tokenlist = (args == NULL ? NULL: args->next_token); TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; symt->entry_point = TRUE; /* library mode: set the flag so no complaint will be issued if function never invoked. */ if(library_mode) symt->library_module = TRUE; if(datatype == type_PROGRAM) { #ifdef VCG_SUPPORT /* Get name of file containing main module */ main_filename = top_filename; #endif } }/*def_function*/ void #if HAVE_STDC def_intrins_name(Token *id) /* Process intrinsic lists */ #else /* K&R style */ def_intrins_name(id) /* Process intrinsic lists */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt = hashtab[h].loc_symtab) == NULL){ symt = install_local(h,type_UNDECL,class_SUBPROGRAM); symt->line_declared = id->line_num; symt->file_declared = inctable_index; symt->info.toklist = NULL; } else { /* Symbol seen before: check it & change class */ if(storage_class_of(symt->type) == class_VAR) { symt->info.toklist = NULL; } symt->type = type_byte(class_SUBPROGRAM,datatype_of(symt->type)); } /* Place info about intrinsic datatype in local symtab. If not found, it will be treated as external. */ if(symt->external){ syntax_error(id->line_num,id->col_num, "Cannot declare same subprogram both intrinsic and external:"); msg_tail(symt->name); } else{ IntrinsInfo *defn; symt->declared_intrinsic = TRUE; if( (defn=find_intrinsic(symt->name)) == NULL ) { if(misc_warn) { warning(id->line_num,id->col_num, "Unknown intrinsic function: "); msg_tail(symt->name); msg_tail("Treated as if user-defined"); } /* Here treat as if EXTERNAL declaration */ def_ext_name(id); return; } else { /* Found in info table: set intrins flag and store pointer to definition info. */ symt->intrinsic = TRUE; symt->info.intrins_info = defn; } } symt->declared_external = TRUE; }/*def_intrins_name*/ void #if HAVE_STDC def_namelist(Token *id, Token *list) /* Process NAMELIST declaration */ #else /* K&R style */ def_namelist(id,list) /* Process NAMELIST declaration */ Token *id,*list; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; extern LINENO_t true_prev_stmt_line_num;/* set by fortran.y */ if( (symt=hashtab[h].loc_symtab) == NULL) { /* First encounter: install in local symtab */ symt = install_local(h,type_NAMELIST,class_NAMELIST); symt->line_declared = id->line_num; symt->file_declared = inctable_index; symt->info.toklist = NULL; } /* protect ourself against nonsense */ else if( symt->array_var || symt->parameter || symt->entry_point ) { syntax_error(id->line_num,id->col_num, "identifier was previously declared a non-namelist"); return; } else if(pretty_multiple_namelist) { /* Flag declarations of same namelist in separate statements unless separated only by comments. Use front token of previous tokenlist which is last token of decl. */ if((symt->info.toklist != NULL) && (symt->info.toklist->tokenlist->line_num < true_prev_stmt_line_num)) { ugly_code(id->line_num,id->col_num, "Namelist declared in more than one statement"); } } call_external(symt,id,list); /* attach list to symt->info.toklist */ }/*def_namelist*/ void #if HAVE_STDC def_namelist_item(Token *id) /* Process NAMELIST list elements */ #else /* K&R style */ def_namelist_item(id) /* Process NAMELIST list elements */ Token *id; #endif /* HAVE_STDC */ { ref_variable(id); /* Put it in symtab */ }/*def_namelist_name*/ void #if HAVE_STDC def_parameter(Token *id, Token *val, int noparen)/* Process parameter_defn_item */ #else /* K&R style */ def_parameter(id,val,noparen) /* Process parameter_defn_item */ Token *id,*val; int noparen; /* parenthesis-less form */ #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* protect ourself against nonsense */ if( symt->array_var || symt->external || symt->intrinsic || symt->entry_point ) { syntax_error(id->line_num,id->col_num, "identifier cannot be a parameter:"); msg_tail(symt->name); return; } } if(! symt->set_flag) { /* record first line where set */ symt->line_set = id->line_num; symt->file_set = inctable_index; } symt->set_flag = TRUE; symt->parameter = TRUE; symt->info.param = new_param_info(); symt->info.param->seq_num = ++parameter_count; /* If parameter type is not declared, then if it is DEC parenthesis-less form (and -source=dec-param not given) or if standard form and -source=parameter-implicit option is given, get type from value. Warn about it under -f77, or under -port if the data type is not same as F77 default. */ if( ((noparen && !source_dec_param_std_type) ||(!noparen && source_param_implicit)) && (datatype_of(symt->type) == type_UNDECL) ) { int val_type = datatype_of(val->TOK_type); if( f77_param_implicit_type || f90_param_implicit_type ) { nonstandard(id->line_num,id->col_num,f90_param_implicit_type,0); msg_tail(": PARAMETER implicitly typed"); if( get_type(symt) != val_type ) msg_tail("differently from default type"); } else if( port_param_implicit_type && get_type(symt) != val_type ) { nonportable(id->line_num,id->col_num, ": PARAMETER implicitly typed differently from default type"); } symt->type = type_byte(class_VAR,val_type); symt->size = val->size; } /* Integer parameters: save value in symtab entry. Other types not saved. Need these since used in array dims */ switch(get_type(symt)) { case type_INTEGER: symt->info.param->value.integer = int_expr_value(val); #ifdef DEBUG_PARAMETERS if(debug_latest) (void)fprintf(list_fd,"\nPARAMETER %s = %d", symt->name,symt->info.param->value.integer); #endif break; /* Character parameter: if declared adjustable i.e. *(*) then inherit size of const */ case type_STRING: if(symt->size == size_ADJUSTABLE && datatype_of(val->TOK_type) == type_STRING) symt->size = val->size; symt->info.param->value.string = char_expr_value(val); break; case type_REAL: case type_DP: case type_COMPLEX: symt->info.param->value.dbl = float_expr_value(val); default: break; } /* Save the source text of value for declaration */ symt->info.param->src_text = new_tree_text( (val->left_token == NULL? val: /* Primary */ val->left_token) /* Expr tree */ ); #ifdef DEBUG_EXPRTREES if(debug_latest) { fprintf(list_fd,"\n PARAMETER ( %s = %s ) ", symt->name, symt->info.param->src_text); } #endif }/*def_parameter*/ void /* Installs statement function name in local table */ #if HAVE_STDC def_stmt_function(Token *id, Token *args) #else /* K&R style */ def_stmt_function(id, args) Token *id, *args; #endif /* HAVE_STDC */ { int t,h=id->value.integer; Lsymtab *symt; TokenListHeader *TH_ptr; if((symt = (hashtab[h].loc_symtab)) == NULL) { /* Symbol is new to local symtab: install it. */ symt = install_local(h,type_UNDECL,class_STMT_FUNCTION); symt->info.toklist = NULL; } else { if(storage_class_of(symt->type) == class_VAR) { symt->info.toklist = NULL; } } symt->line_declared = id->line_num; symt->file_declared = inctable_index; /* Restore args to original order for sake of checking phase */ if(args != NULL) args->next_token = reverse_tokenlist(args->next_token); /* Save dummy arg list in symbol table */ TH_ptr= make_TL_head(id); TH_ptr->tokenlist = (args == NULL ? NULL: args->next_token); TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; t=datatype_of(symt->type); /* Symbol seen before: check it & change class */ /* check, check, check ... */ if(storage_class_of(symt->type) == class_VAR) symt->type = type_byte(class_STMT_FUNCTION,t); symt->external = TRUE; }/*def_stmt_function*/ void #if HAVE_STDC do_ASSIGN(Token *id) /* Process ASSIGN statement */ #else /* K&R style */ do_ASSIGN(id) /* Process ASSIGN statement */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { if(get_type(symt) != type_INTEGER) { syntax_error(id->line_num,id->col_num, "Variable must be an integer: "); msg_tail(symt->name); } if(symt->active_do_var) { syntax_error(id->line_num,id->col_num, "Cannot assign label to active DO index"); } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->set_flag) { /* record first line where set */ equiv->line_set = id->line_num; equiv->file_set = inctable_index; } equiv->set_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*do_ASSIGN*/ void #if HAVE_STDC do_assigned_GOTO(Token *id) /* Process assigned_goto */ #else /* K&R style */ do_assigned_GOTO(id) /* Process assigned_goto */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { if(get_type(symt) != type_INTEGER) { syntax_error(id->line_num,id->col_num, "Variable must be an integer: "); msg_tail(symt->name); } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->used_flag) { /* record first line where used */ equiv->line_used = id->line_num; equiv->file_used = inctable_index; } if(! equiv->set_flag) equiv->used_before_set = TRUE; equiv->used_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*do_assigned_GOTO*/ void #if HAVE_STDC do_ENTRY(Token *id, Token *args, int hashno) /* Processes ENTRY statement */ #else /* K&R style */ do_ENTRY(id,args,hashno) /* Processes ENTRY statement */ Token *id,*args; int hashno; #endif /* HAVE_STDC */ { int datatype; if(hashno == -1) { /* -1 signifies headerless program */ datatype = type_PROGRAM; } else { datatype = datatype_of(hashtab[hashno].loc_symtab->type); } switch(datatype) { case type_PROGRAM: case type_BLOCK_DATA: case type_COMMON_BLOCK: syntax_error(id->line_num,NO_COL_NUM, "You cannot have an entry statement here"); break; case type_SUBROUTINE: /* Subroutine entry */ def_function(type_SUBROUTINE,size_DEFAULT,(char *)NULL, id,args); break; default: /* Function entry */ def_function(type_UNDECL,size_DEFAULT,(char *)NULL, id,args); break; } }/*do_ENTRY*/ /* This routine checks whether a RETURN statement is valid at the present location, and if it is, looks for possible failure to assign return value of function. Returns 1 if RETURN is valid here, 0 if not. */ int #if HAVE_STDC do_RETURN(int hashno, Token *keyword) /* current module hash number */ /* tok_RETURN, or tok_END if implied RETURN */ #else /* K&R style */ do_RETURN(hashno,keyword) int hashno; /* current module hash number */ Token *keyword; /* tok_RETURN, or tok_END if implied RETURN */ #endif /* HAVE_STDC */ { int i,datatype, valid=1; if(hashno == -1) { /* -1 signifies headerless program */ datatype = type_PROGRAM; } else { datatype = datatype_of(hashtab[hashno].loc_symtab->type); } switch(datatype) { case type_PROGRAM: case type_BLOCK_DATA: if(keyword->tclass == tok_RETURN) { syntax_error(keyword->line_num,keyword->col_num, "You cannot have a RETURN statement here!"); valid = 0; } break; case type_SUBROUTINE: /* Subroutine return: OK */ break; default: /* Function return: check whether entry points have been assigned values. */ for(i=0; iline_num,keyword->col_num, loc_symtab[i].name); msg_tail("not set when RETURN encountered"); } } } break; } return valid; }/*do_RETURN*/ void #if HAVE_STDC equivalence(Token *id1, Token *id2) #else /* K&R style */ equivalence(id1,id2) Token *id1, *id2; #endif /* HAVE_STDC */ { int h1=id1->value.integer, h2=id2->value.integer; Lsymtab *symt1,*symt2,*temp; /* install the variables in symtab if not seen before */ if( (symt1=hashtab[h1].loc_symtab) == NULL) { symt1 = install_local(h1,type_UNDECL,class_VAR); symt1->line_declared = id1->line_num; symt1->file_declared = inctable_index; } if( (symt2=hashtab[h2].loc_symtab) == NULL) { symt2 = install_local(h2,type_UNDECL,class_VAR); symt2->line_declared = id2->line_num; symt2->file_declared = inctable_index; } /* Check for legality. Ought to do complementary checks elsewhere. */ if(symt1 == symt2 || symt1->parameter || symt2->parameter || symt1->entry_point || symt2->entry_point || symt1->argument || symt2->argument || symt1->external || symt2->external) { syntax_error(id1->line_num,id1->col_num, "illegal to equivalence these"); } /* now swap equiv_links so their equiv lists are united */ else { temp = symt1->equiv_link; symt1->equiv_link = symt2->equiv_link; symt2->equiv_link = temp; } /* If either guy is in common, both are in common */ if(symt1->common_var || symt2->common_var) { Lsymtab *equiv=symt1; do { equiv->common_var = TRUE; equiv = equiv->equiv_link; } while(equiv != symt1); } } int #if HAVE_STDC get_size(const Lsymtab *symt, int type) /* ARGSUSED1 */ #else /* K&R style */ get_size(symt,type) /* ARGSUSED1 */ #endif /* HAVE_STDC */ /* Returns size of symbol if explicitly declared or declared using IMPLICIT type*size statement. Otherwise returns size_DEFAULT. */ #if HAVE_STDC /* Evaluated datatype: not used at present */ #else /* K&R style */ Lsymtab *symt; int type; /* Evaluated datatype: not used at present */ #endif /* HAVE_STDC */ { int datasize=symt->size; int datatype = datatype_of(symt->type); if(datatype != type_UNDECL) /* Declared? */ return datasize; /* if declared, use it */ else { int first_char=(int)symt->name[0]; if(first_char == '$') first_char = 'Z'+1; if(first_char == '_') first_char = 'Z'+2; return implicit_size[first_char - 'A']; } } char * #if HAVE_STDC get_size_text(const Lsymtab *symt, int type) /* ARGSUSED1 */ /* Evaluated datatype: not used at present */ #else /* K&R style */ get_size_text(symt,type) /* ARGSUSED1 */ Lsymtab *symt; int type; /* Evaluated datatype: not used at present */ #endif /* HAVE_STDC */ { int datatype = datatype_of(symt->type); if(datatype != type_UNDECL) { /* Declared: use text in symtab entry */ if(symt->array_var) return symt->src.textvec[array_dims(symt->info.array_dim)]; else return symt->src.text; } else { /* Undeclared: use implicit value */ int first_char=(int)symt->name[0]; if(first_char == '$') first_char = 'Z'+1; if(first_char == '_') first_char = 'Z'+2; return implicit_len_text[first_char - 'A']; } } int #if HAVE_STDC get_type(const Lsymtab *symt) /* Returns data type of symbol, using implicit if necessary */ #else /* K&R style */ get_type(symt) /* Returns data type of symbol, using implicit if necessary */ Lsymtab *symt; #endif /* HAVE_STDC */ { int datatype = datatype_of(symt->type); if(datatype != type_UNDECL) /* Declared? */ return datatype; /* Yes: use it */ else if(storage_class_of(symt->type) == class_SUBPROGRAM && !symt->invoked_as_func ) /* Function never invoked: assume subr */ return type_SUBROUTINE; else if (symt->invoked_as_func && symt->intrinsic) { IntrinsInfo *defn; defn = find_intrinsic(symt->name); if (defn != (IntrinsInfo *)NULL) return defn->result_type; } /* Fell through, so type must be determined by first letter of name */ { int first_char=(int)symt->name[0]; /* kluge: treat any nonalpha chars other than _ as if they are $. */ if( !isalpha(first_char) && first_char != '_' ) first_char = 'Z'+1; if(first_char == '_') first_char = 'Z'+2; return implicit_type[first_char - 'A']; } }/*get_type*/ /* hash_lookup finds identifier in hashtable and returns its index. If not found, a new hashtable entry is made for it, and the identifier string s is copied to local stringspace. */ unsigned #if HAVE_STDC hash_lookup(char *s) #else /* K&R style */ hash_lookup(s) char *s; #endif /* HAVE_STDC */ { unsigned h; unsigned long hnum; hnum = hash(s); while(h = hnum%HASHSZ, hashtab[h].name != NULL && strcmp(hashtab[h].name,s) != 0) { hnum = rehash(hnum); /* Resolve clashes */ } if(hashtab[h].name == NULL) { hashtab[h].name = new_local_string(s); hashtab[h].loc_symtab = NULL; hashtab[h].glob_symtab = NULL; hashtab[h].com_loc_symtab = NULL; hashtab[h].com_glob_symtab = NULL; } return h; }/*hash_lookup*/ void init_tables(VOID) /* Allocates table space */ { #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ if( ((loc_symtab=(Lsymtab*)calloc(LOCSYMTABSZ,sizeof(Lsymtab))) == (Lsymtab*)NULL) || ((glob_symtab=(Gsymtab*)calloc(GLOBSYMTABSZ,sizeof(Gsymtab))) == (Gsymtab*)NULL) || ((hashtab=(HashTable*)calloc(HASHSZ,sizeof(HashTable))) == (HashTable*)NULL) ) { oops_message(OOPS_FATAL,NO_LINE_NUM,NO_COL_NUM, "Cannot malloc space for tables"); } #endif } Gsymtab* #if HAVE_STDC install_global(int h, int datatype, int storage_class) /* Install a global symbol */ /* hash index */ #else /* K&R style */ install_global(h,datatype,storage_class) /* Install a global symbol */ int h; /* hash index */ int datatype,storage_class; #endif /* HAVE_STDC */ { Gsymtab *gsymt = &glob_symtab[glob_symtab_top]; if(glob_symtab_top == GLOBSYMTABSZ) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, #ifdef LARGE_MACHINE "out of space in global symbol table\n\ Recompile me with larger GLOBSYMTABSZ value\n" #else "out of space in global symbol table\n\ Recompile me with LARGE_MACHINE option\n" #endif ); } else { /* Store symtab pointer in hash table */ if(storage_class == class_COMMON_BLOCK) hashtab[h].com_glob_symtab = gsymt; else hashtab[h].glob_symtab = gsymt; clear_symtab_entry(gsymt); /* Duplicate copy of string into global stringspace */ gsymt->name = new_global_string(hashtab[h].name); /* Set symtab info fields */ gsymt->type = type_byte(storage_class,datatype); gsymt->size = type_size[datatype]; if(storage_class == class_COMMON_BLOCK) gsymt->info.comlist = NULL; else gsymt->info.arglist = NULL; gsymt->link.child_list = NULL; ++glob_symtab_top; } return (gsymt); }/*install_global*/ PRIVATE Lsymtab* #if HAVE_STDC install_local(int h, int datatype, int storage_class) /* Install a local symbol */ /* hash index */ #else /* K&R style */ install_local(h,datatype,storage_class) /* Install a local symbol */ int h; /* hash index */ int datatype,storage_class; #endif /* HAVE_STDC */ { Lsymtab *symt = &loc_symtab[loc_symtab_top]; if(loc_symtab_top == LOCSYMTABSZ) { oops_message(OOPS_FATAL,line_num,NO_COL_NUM, #ifdef LARGE_MACHINE "out of space in local symbol table\n\ Recompile me with larger LOCSYMTABSZ value\n" #else "out of space in local symbol table\n\ Recompile me with LARGE_MACHINE option\n" #endif ); } else { if(storage_class == class_COMMON_BLOCK) hashtab[h].com_loc_symtab = symt; else hashtab[h].loc_symtab = symt; clear_symtab_entry(symt); symt->name = hashtab[h].name; symt->info.array_dim = 0; /* Set symtab info fields */ symt->type = type_byte(storage_class,datatype); symt->size = type_size[datatype]; symt->src.text = NULL; symt->equiv_link = symt; /* equivalenced only to self */ symt->common_block = (Gsymtab*)NULL; symt->common_index = 0; if(incdepth > 0) symt->defined_in_include = TRUE; symt->line_declared = symt->line_set = symt->line_used = NO_LINE_NUM; /* initialize indices in incfile table */ symt->file_declared = symt->file_set = symt->file_used = -1; ++loc_symtab_top; } return symt; }/*install_local*/ /* Get value specified by an integer-expression token. This will be either an identifier, which should be a parameter whose value is in the symbol table, or else an expression token as propagated by exprtype.c routines, with value stored in the token. */ int #if HAVE_STDC int_expr_value(Token *t) #else /* K&R style */ int_expr_value(t) Token *t; #endif /* HAVE_STDC */ { if(!is_true(EVALUATED_EXPR,t->TOK_flags)) {/* something bogus */ /* warn if error message not already given */ if(is_true(PARAMETER_EXPR,t->TOK_flags)) if(misc_warn) warning(t->line_num,t->col_num, "Constant not evaluated: value of 0 assumed"); } else { if( is_true(ID_EXPR,t->TOK_flags) ) { /* Identifier: better be a parameter */ int h=t->value.integer; Lsymtab *symt = hashtab[h].loc_symtab; if(symt == NULL || !(symt->parameter) ) { syntax_error(t->line_num,t->col_num, "symbolic constant required"); } else { return symt->info.param->value.integer; } } /* Otherwise, it is a const or expr, use token.value.integer */ else { return t->value.integer; } } /* Unsuccessful: return value of 0 */ return 0; }/*int_expr_value*/ DBLVAL #if HAVE_STDC float_expr_value(Token *t) #else /* K&R style */ float_expr_value(t) Token *t; #endif /* HAVE_STDC */ { if(is_true(LIT_CONST,t->TOK_flags)) return t->value.dbl; else return (DBLVAL)0; /* float values are not propagated */ } char * #if HAVE_STDC char_expr_value(Token *t) #else /* K&R style */ char_expr_value(t) Token *t; #endif /* HAVE_STDC */ { if(is_true(LIT_CONST,t->TOK_flags)) return t->value.string; else return NULL; /* char values are not propagated */ } /* note_filename(): This routine is called by main prog to give symbol table routines access to current input file name, to be stored in function arg list headers and common list headers, for the use in diagnostic messages. Since filenames are from argv, they are permanent, so pointer is copied, not the string. */ void #if HAVE_STDC note_filename(char *s) #else /* K&R style */ note_filename(s) char *s; #endif /* HAVE_STDC */ { current_filename = s; top_filename = s; }/* note_filename */ /* Routine to output expression tree via msg_tail. For use in error/warning routines. */ void msg_expr_tree(const Token *t) { char textbuf[25]; int ncopied = cp_tree_src_text(textbuf, t->left_token == NULL?t:t->left_token, sizeof(textbuf)-1); msg_tail(textbuf); if( ncopied == sizeof(textbuf)-1 ) msg_tail(".."); } #ifdef DEBUG_EXPRTREES /* Routines to print out expr tree src text */ void print_src_text(t) Token *t; { char textbuf[256]; (void) cp_tok_src_text(textbuf,t,sizeof(textbuf)-1); fprintf(list_fd,"%s",textbuf); } void print_expr_tree(t) Token *t; { char textbuf[256]; (void) cp_tree_src_text(textbuf,t,sizeof(textbuf)-1); fprintf(list_fd,"%s",textbuf); } void print_expr_list(t) Token *t; { char textbuf[256]; (void) cp_list_src_text(textbuf,t,sizeof(textbuf)-1); fprintf(list_fd,"%s",textbuf); } #endif void #if HAVE_STDC ref_array(Token *id, Token *subscrs) /* Array reference: install in symtab */ #else /* K&R style */ ref_array(id,subscrs) /* Array reference: install in symtab */ Token *id, *subscrs; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt=hashtab[h].loc_symtab; /* Restore subscripts to original order */ subscrs->next_token = reverse_tokenlist(subscrs->next_token); if(symt == NULL){ oops_message(OOPS_NONFATAL,line_num,NO_COL_NUM, "undeclared variable has dim info:"); oops_tail(hashtab[h].name); symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else{ /* check that subscrs match dimension info */ if(arg_count(subscrs->next_token)!=array_dims(symt->info.array_dim)){ syntax_error(subscrs->line_num,subscrs->col_num, "array"); msg_tail(symt->name); msg_tail("referenced with wrong no. of subscripts"); } } }/* ref_array */ void #if HAVE_STDC ref_namelist(Token *id, int stmt_class) #else /* K&R style */ ref_namelist(id,stmt_class) Token *id; int stmt_class; #endif /* HAVE_STDC */ { Token *t; TokenListHeader *toklist; int h=id->value.integer; Lsymtab *symt=hashtab[h].loc_symtab; if(symt == NULL){ oops_message(OOPS_NONFATAL,line_num,NO_COL_NUM, "undeclared identifier is a namelist:"); oops_tail(hashtab[h].name); symt = install_local(h,type_NAMELIST,class_NAMELIST); symt->line_declared = id->line_num; symt->file_declared = inctable_index; symt->info.toklist = NULL; } /* Go thru token list of namelist variables, setting flags appropriately. We can't use use_lvalue or use_variable here, since the line number of token in list is that of the namelist declaration, so we use our own code here. */ toklist = symt->info.toklist; if (toklist != NULL){ t = toklist->tokenlist; while(t != NULL){ /* set flags for all equivalenced vars */ int th=t->value.integer; Lsymtab *tsymt,*equiv; if((tsymt=hashtab[th].loc_symtab) == NULL) { /* can't happen */ tsymt = install_local(th,type_UNDECL,class_VAR); tsymt->line_declared = id->line_num; tsymt->file_declared = inctable_index; } equiv=tsymt; if(stmt_class == tok_READ) /* code like use_lvalue */ do{ if(! equiv->set_flag) { /* record first line where set */ equiv->line_set = id->line_num; equiv->file_set = inctable_index; } equiv->set_flag = TRUE; equiv->assigned_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != tsymt); else /* tok_WRITE: code like use_variable */ do{ if(! equiv->used_flag) { /* record first line where used */ equiv->line_used = id->line_num; equiv->file_used = inctable_index; } if(! equiv->set_flag) { equiv->used_before_set = TRUE; } equiv->used_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != tsymt); t = t->next_token; } } } void #if HAVE_STDC ref_identifier(Token *id) /* Identifier reference: install in symtab */ #else /* K&R style */ ref_identifier(id) Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt = hashtab[h].loc_symtab; if( symt == NULL) { symt = install_local(h,type_UNDECL,class_VAR); } }/*ref_identifier*/ void #if HAVE_STDC ref_variable(Token *id) /* Variable reference: install in symtab */ #else /* K&R style */ ref_variable(id) /* Variable reference: install in symtab */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt = hashtab[h].loc_symtab; if( symt == NULL) { symt = install_local(h,type_UNDECL,class_VAR); } if(symt->line_declared == NO_LINE_NUM) { symt->line_declared = id->line_num; /* implicit declaration */ symt->file_declared = inctable_index; } }/*ref_variable*/ void #if HAVE_STDC save_com_block(Token *id) /* Process SAVEing of a common block */ /* N.B. Legality checking deferred to END */ #else /* K&R style */ save_com_block(id) /* Process SAVEing of a common block */ Token *id; /* N.B. Legality checking deferred to END */ #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; /* N.B. SAVE does not create a global table entry */ if( (symt = hashtab[h].com_loc_symtab) == NULL){ symt = install_local(h,type_COMMON_BLOCK,class_COMMON_BLOCK); symt->info.toklist = NULL; /* record location in case never declared */ symt->line_declared = id->line_num; symt->file_declared = inctable_index; } if(symt->saved) { syntax_error(id->line_num,id->col_num, "redundant SAVE declaration"); } else symt->saved = TRUE; } /* Following routine sets the implicit typing of characters in range c1 to c2 to the given type. */ void #if HAVE_STDC set_implicit_type(int type, long int size, char *len_text, int c1, int c2) /* Data type of IMPLICIT declaration */ /* Type size or size_DEFAULT if not given */ /* Source text of length spec */ /* First character of range */ /* Last character of range */ #else /* K&R style */ set_implicit_type(type,size,len_text,c1,c2) int type; /* Data type of IMPLICIT declaration */ long size; /* Type size or size_DEFAULT if not given */ char *len_text; /* Source text of length spec */ int c1; /* First character of range */ int c2; /* Last character of range */ #endif /* HAVE_STDC */ { int c; if(c1 == '$') c1 = 'Z'+1; if(c2 == '$') c2 = 'Z'+1; if(c1 == '_') c1 = 'Z'+2; if(c2 == '_') c2 = 'Z'+2; if(c2 < c1) { yyerror("IMPLICIT range must be in alphabetical order"); } else { /* Fill in the lookup table for the given range of chars */ for(c=c1; c<=c2; c++) { implicit_type[c-'A'] = type; implicit_size[c-'A'] = size; implicit_len_text[c-'A'] = len_text; } } }/*set_implicit_type*/ /* Finish processing statement function. Clears all used-before-set flags of ordinary variables. Reason: statement functions are processed like assignment to an array element, setting ubs flags. At this point, no valid setting of ubs flags should be possible, so clearing them will elim false messages.*/ void #if HAVE_STDC stmt_function_stmt(Token *id) /* ARGSUSED0 */ /* Not used at present */ #else /* K&R style */ stmt_function_stmt(id) /* ARGSUSED0 */ Token *id; /* Not used at present */ #endif /* HAVE_STDC */ { int i; for(i=0; ivalue.integer].name; }/*token_name*/ void undef_do_variable( int h ) /* Make DO index variable inactive */ { Lsymtab *symt=hashtab[h].loc_symtab; if( symt != NULL ) /* Just in case: it should always be defined */ { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ equiv->active_do_var = FALSE; equiv = equiv->equiv_link; } while(equiv != symt); } } void #if HAVE_STDC use_actual_arg(Token *id) /* like use_lvalue except does not set assigned_flag */ #else /* K&R style */ use_actual_arg(id) /* like use_lvalue except does not set assigned_flag */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if((symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* If an external other than an intrinsic, set up tokenlist for "call". If intrinsic, check legality of this usage.) */ if(storage_class_of(symt->type) == class_SUBPROGRAM) { if(symt->intrinsic) { IntrinsInfo *defn = symt->info.intrins_info; if( !(symt->declared_intrinsic) ) { if(misc_warn) { warning(id->line_num,id->col_num, defn->name); msg_tail("not declared INTRINSIC"); } } if( (defn->intrins_flags&I_NOTARG) ) { syntax_error(id->line_num,id->col_num, defn->name); msg_tail("intrinsic function cannot be a subprogram argument"); } } else { /* External subprogram as actual arg */ TokenListHeader *TH_ptr; TH_ptr= make_TL_head(id); TH_ptr->actual_arg = TRUE; TH_ptr->next = symt->info.toklist; symt->info.toklist = TH_ptr; } } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->set_flag) { /* record first line where set */ equiv->line_set = id->line_num; equiv->file_set = inctable_index; } equiv->set_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*use_actual_arg*/ PRIVATE void #if HAVE_STDC use_function_arg(Token *id) /* Like use_variable but invokes use_actual_arg if id is an external (subprogram) passed as arg of a function. This routine is used when pure_functions flag is set. */ #else /* K&R style */ use_function_arg(id) /* Like use_variable but first invokes use_actual_arg only if id is an external (subprogram) passed as arg of a function. This routine is used when pure_functions flag is set. */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } if(storage_class_of(symt->type) == class_SUBPROGRAM) use_actual_arg(id); use_variable(id); }/*use_function_arg*/ void #if HAVE_STDC use_implied_do_index(Token *id) #else /* K&R style */ use_implied_do_index(id) Token *id; #endif /* HAVE_STDC */ { /* Like use_lvalue and use_variable but clears ubs flag. This is because we cannot handle used-before-set properly in this case, and the odds are that ubs was set in the preceding I/O list. */ int h=id->value.integer; Lsymtab *symt; use_lvalue(id); use_variable(id); symt=hashtab[h].loc_symtab; symt->used_before_set = FALSE; }/*use_implied_do_index*/ PRIVATE void #if HAVE_STDC use_len_arg(Token *id) /* Set the use-flag of arg to intrinsic LEN. */ #else /* K&R style */ use_len_arg(id) /* Set the use-flag of arg to intrinsic LEN. */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } { /* set flags for all equivalenced vars. Do not set the used-before-set flag since LEN argument does not need to be defined. */ Lsymtab *equiv=symt; do{ if(! equiv->used_flag) { /* record first line where used */ equiv->line_used = id->line_num; equiv->file_used = inctable_index; } equiv->used_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*use_len_arg*/ void #if HAVE_STDC use_lvalue(Token *id) /* handles scalar lvalue */ #else /* K&R style */ use_lvalue(id) /* handles scalar lvalue */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if((symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } else { /* check match to previous invocations and update */ } /* F77 standard section 11.10.5 prohibits modifying DO variable except thru loop mechanism. */ if(symt->active_do_var) { if(usage_do_var_modified) { syntax_error(id->line_num,id->col_num, "active DO index is modified"); } } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->set_flag) { /* record first line where set */ equiv->line_set = id->line_num; equiv->file_set = inctable_index; } equiv->set_flag = TRUE; equiv->assigned_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*use_lvalue*/ void /* Process data_constant_value & data_repeat_factor */ #if HAVE_STDC use_parameter(Token *id) #else /* K&R style */ use_parameter(id) Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } if(! symt->parameter) { syntax_error(id->line_num,id->col_num, "must be a parameter"); /*** symt->parameter = TRUE;**/ /*oops: must define info etc.*/ } if(! symt->set_flag) { symt->used_before_set = TRUE; } if(! symt->used_flag) { /* record first line where used */ symt->line_used = id->line_num; symt->file_used = inctable_index; } symt->used_flag = TRUE; }/*use_parameter*/ void #if HAVE_STDC use_variable(Token *id) /* Set the use-flag of variable. */ #else /* K&R style */ use_variable(id) /* Set the use-flag of variable. */ Token *id; #endif /* HAVE_STDC */ { int h=id->value.integer; Lsymtab *symt; if( (symt=hashtab[h].loc_symtab) == NULL) { symt = install_local(h,type_UNDECL,class_VAR); symt->line_declared = id->line_num; symt->file_declared = inctable_index; } { /* set flags for all equivalenced vars */ Lsymtab *equiv=symt; do{ if(! equiv->used_flag) { /* record first line where used */ equiv->line_used = id->line_num; equiv->file_used = inctable_index; } if(! equiv->set_flag) { equiv->used_before_set = TRUE; } equiv->used_flag = TRUE; equiv = equiv->equiv_link; } while(equiv != symt); } }/*use_variable*/ /* Routine to provide a string with type followed by one of: "", "*n" where n is the declared size of an item, "(l)" where l is the declared array length of an item, or "*n(l)". Note: cannot be used twice in same statement, since it uses a static buffer for the result. */ char * #if HAVE_STDC typespec(int t, int has_size, long size, int has_len, long len) #else /* K&R style */ typespec(t,has_size, size, has_len, len) int t; /* data type code */ int has_size, /* whether it has *size spec */ has_len; /* whether it has (len) spec */ long size, /* value of size */ len; /* value of len */ #endif /* HAVE_STDC */ { /* Size of buffer allows 3 digits for each byte, which is slightly more than necessary. */ static char buf[MAX_TYPESPEC]; strncpy(buf,type_name[t],4); buf[4] = '\0'; if(has_size) { (void) sprintf(buf+strlen(buf),"*%ld",size); } if(has_len) { (void) sprintf(buf+strlen(buf),"(%ld)",len); } return buf; } /* End of symtab.c */ /* II. Hash */ /* hash.c: performs a hash function This was formerly a separate file. */ extern int sixclash; /* flag to check clashes in 1st 6 chars of name */ unsigned long #if HAVE_STDC hash(const char *s) #else /* K&R style */ hash(s) char *s; #endif /* HAVE_STDC */ { unsigned long sum = 0, wd; unsigned j; if(sixclash) { /* special hashing for six-char limit */ unsigned i = 0; while (i < 6 && s[i] != '\0') { wd = 0; for(j=1; j <= sizeof(long) && i < 6 && s[i] != '\0'; i++,j++) { wd += (unsigned long)(s[i] & 0xff) << (sizeof(long) - j) * 8;} sum ^= wd;} } else { /* the usual case */ while( *s != '\0' ) { wd = 0; for(j=1; j <= sizeof(long) && *s != '\0'; j++) { wd += (unsigned long)(*s++ & 0xff) << (sizeof(long) - j) * 8;} sum ^= wd;} } return sum; } /* rehash performs a rehash for resolving clashes. */ #ifdef COUNT_REHASHES unsigned long rehash_count=0; #endif unsigned long #if HAVE_STDC rehash(unsigned long hnum) #else /* K&R style */ rehash(hnum) unsigned long hnum; #endif /* HAVE_STDC */ { #ifdef COUNT_REHASHES rehash_count++; #endif return hnum+1; } /* End of hash */ #ifdef DEBUG_SIZES void print_sizeofs() /* For development: print sizeof for various data structures */ { #ifdef __STDC__ #define PrintObjSize(OBJ) (void)fprintf(list_fd,#OBJ " size = %d\n",sizeof(OBJ)) #else /* K&R form */ #define PrintObjSize(OBJ) (void)fprintf(list_fd,"OBJ size = %d\n",sizeof(OBJ)) #endif PrintObjSize(char *); PrintObjSize(Token); PrintObjSize(Lsymtab); PrintObjSize(Gsymtab); PrintObjSize(HashTable); PrintObjSize(ArgListHeader); PrintObjSize(ArgListElement); PrintObjSize(ComListHeader); PrintObjSize(ComListElement); PrintObjSize(TokenListHeader); PrintObjSize(InfoUnion); PrintObjSize(IntrinsInfo); PrintObjSize(ParamInfo); PrintObjSize(ChildList); } #endif ftnchek-3.3.1/symtab.h0000644000031000002260000007551307714524162015251 0ustar moniotstaff00000000000000/* $Id: symtab.h,v 1.43 2003/08/07 19:28:50 moniot Exp $ Shared declarations for symbol-table routines. Note: uses declarations in ftnchek.h. Copyright (c) 1999 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ROBERT K. MONIOT OR FORDHAM UNIVERSITY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of ftnchek shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the author. */ #define SYMTAB_H /* for intrins.h */ #ifdef SYMTAB /* "home" for variables is symtab.c */ #define SYM_SHARED #else #define SYM_SHARED extern #endif #ifdef DYNAMIC_TABLES #ifdef __TURBOC__ /* Turbo C has only one free() */ #define cfree free #endif #endif /* Statement sequence info for fortran.y and to give hints to forlex.c */ #define SEQ_HEADER 1 #define SEQ_IMPLICIT 2 #define SEQ_SPECIF 3 #define SEQ_STMT_FUN 4 #define SEQ_EXEC 5 #define SEQ_END 6 /* Separate sequence defs to allow checking f90 sequence requirements. */ #define F90_SEQ_HEADER 1 #define F90_SEQ_USE 2 #define F90_SEQ_IMPLICIT_NONE 3 #define F90_SEQ_IMPLICIT 4 #define F90_SEQ_SPECIF 5 #define F90_SEQ_EXEC 6 #define F90_SEQ_CONTAINS 7 #define F90_SEQ_INTERNAL 8 #define F90_SEQ_END 9 /* Definitions of symbol table information */ /* Token subclasses (classes are in tokdefs.h) */ #define relop_EQ 0 #define relop_NE 1 #define relop_LE 2 #define relop_LT 3 #define relop_GE 4 #define relop_GT 5 /* Storage Class types for variables, consts, and externals */ #define class_VAR 0 #define class_SUBPROGRAM 1 #define class_COMMON_BLOCK 2 #define class_STMT_FUNCTION 3 #define class_LABEL 4 #define class_NAMELIST 5 /* Data types for variables, consts, and externals */ /* N.B. 0 thru 7 are wired into lookup tables in exprtype.c */ #define type_UNDECL 0 #define type_ERROR 0 /* for result of erroneous operation */ #define type_INTEGER 1 #define type_REAL 2 #define type_DP 3 #define type_COMPLEX 4 #define type_DCOMPLEX 5 #define type_LOGICAL 6 #define type_STRING 7 #define type_HOLLERITH 8 #define type_GENERIC 9 #define type_SUBROUTINE 10 #define type_COMMON_BLOCK 11 #define type_PROGRAM 12 #define type_BLOCK_DATA 13 #define type_LABEL 14 #define type_NAMELIST 15 #define size_DEFAULT (0L) /* code for standard numeric sizes */ #define size_ADJUSTABLE (-1L) /* codes for special char string lengths */ #define size_UNKNOWN (-2L) /* Defns for support of quad precision. It is implemented as REAL*4n, not a genuine type of its own, since no QUAD type declaration exists. Here n = BpW or whatever wordsize is set at runtime. */ #define type_QUAD type_REAL #define size_QUAD (4*type_size[type_REAL]) #define type_CQUAD type_COMPLEX #define size_CQUAD (8*type_size[type_REAL]) /* test for types usable in exprs */ #define is_computational_type(t) ((unsigned)(t) <= (unsigned)type_HOLLERITH) /* test for numeric types */ #define is_numeric_type(t) ((unsigned)(t) <= (unsigned)type_DCOMPLEX) /* test for arith, char, or logical type */ #define is_const_type(t) (((unsigned)(t)>(unsigned)0) && ((unsigned)(t)<=(unsigned)type_STRING)) /* test for numeric or logical type */ #define is_num_log_type(t) ((unsigned)(t) <= type_LOGICAL) /* test for real/d.p./complex/d.complx type */ #define is_float_type(t) ((unsigned)(t)>=type_REAL && (unsigned)(t)<=type_DCOMPLEX) /* Type categories equate DoubleP to Real, Double Complex to Complex, and Hollerith to Int to simplify expression type propagation and argument checking. Computational types only, except that since subroutine can be passed as an argument, table goes up that high. */ SYM_SHARED unsigned char type_category[] #ifdef SYMTAB ={ type_UNDECL, type_INTEGER, type_REAL, type_REAL, type_COMPLEX, type_COMPLEX, type_LOGICAL, type_STRING, type_INTEGER, type_GENERIC, type_SUBROUTINE, } #endif ; /* Equivalence types equate Real, DoubleP, Complex and Double Complex, for use in checking mixed equivalence and mixed common, since it is standard and portable to interpret complex as a pair of real values: real part and imag part */ SYM_SHARED unsigned char equiv_type[] #ifdef SYMTAB ={ type_UNDECL, type_INTEGER, type_REAL, type_REAL, type_REAL, type_REAL, type_LOGICAL, type_STRING, type_INTEGER} #endif ; /* * statement types referencing labels */ #define LAB_NO_TYPE 0 /* label never defined */ #define LAB_SPECIFICATION 1 #define LAB_FORMAT 2 #define LAB_EXECUTABLE 3 #define LAB_GOTO 4 #define LAB_ASSIGN 5 #define LAB_DO 6 #define LAB_IO 7 #define LAB_CALL 8 SYM_SHARED char *lab_type_name[] #ifdef SYMTAB = { "undef", "specif", "format", "exec", "goto", "assign", "do", "I/O", "arg", } #endif ; typedef unsigned char BYTE; /* Array of class and type name translations */ SYM_SHARED char *class_name[] #ifdef SYMTAB = { "", "subprog", "common", "stmt fun", "label", "namelist", } #endif ; SYM_SHARED char *type_name[] /* Type names as used in warnings etc. */ #ifdef SYMTAB = { "undf", "intg", "real", "dble", "cplx", "dcpx", "logl", "char", "holl", "genr", "subr", "comm", "prog", "data", "labl", "naml", } #endif ; SYM_SHARED char *type_table[] /* Names as used in FORTRAN statements */ #ifdef SYMTAB = { "??ERROR??", "INTEGER", "REAL", "DOUBLE PRECISION", "COMPLEX", "DOUBLE COMPLEX", /* could be "COMPLEX*16" too */ "LOGICAL", "CHARACTER", /* The rest do not appear in actual use, here for completeness only */ "HOLLERITH", "GENERIC", "SUBROUTINE", "COMMON", "PROGRAM", "BLOCK DATA", "LABEL", "NAMELIST", } #endif ; /* Here declare typical sizes of objects of each data type, for use in checking argument and common block size matchups. BpW (bytes per word) is defined in ftnchek.h */ SYM_SHARED BYTE type_size[] #ifdef SYMTAB ={ 0, /*undf*/ BpW, /*intg*/ BpW, /*real*/ 2*BpW, /*dble*/ 2*BpW, /*cplx*/ 4*BpW, /*dcpx*/ BpW, /*logl*/ 1, /*char*/ BpW, /*holl*/ 0, /*genr*/ 0, /*subr*/ 0, /*comm*/ 0, /*prog*/ 0, /*data*/ 0, /*labl*/ 0, /*naml*/ } #endif ; /* implicit and default typing lookup table. Two extra spots provided to accommodate '$' and '_' too. The size defns should accommodate EBCDIC as well as ASCII. */ SYM_SHARED int implicit_type[('Z'-'A'+1)+2], /* indexed by [char - 'A'] */ implicit_size[('Z'-'A'+1)+2]; SYM_SHARED char *implicit_len_text[('Z'-'A'+1)+2]; /* Declaration of Token data structure. N.B. do not change without consulting preamble of fortran.y for uses with nonterminals. */ /* temporary equivs for future separate fields */ /* these are for array-bounds tokens */ #define TOK_dims tclass #define TOK_elts tsubclass #define TOK_start tclass #define TOK_end tsubclass struct tokstruct { union { long integer; DBLVAL dbl; char *string; } value; /* Value of constant */ struct tokstruct *left_token, /* Left child in expr tree */ *next_token; /* Right child or next in linked list */ char *src_text; /* Original text string of token */ long tclass,tsubclass; /* Token category and subcategory */ long size; /* sizeof(datatype) */ long TOK_type; /* Storage class & data type of identifier */ unsigned TOK_flags:32; /* Exprtype flags (see defns below) */ LINENO_t line_num; /* Line where token occurred */ COLNO_t col_num; /* Column where token occurred */ unsigned size_is_adjustable : 1; unsigned size_is_expression : 1; }; typedef struct tokstruct Token; #ifdef YYSTYPE #undef YYSTYPE #endif #define YYSTYPE Token /* Type defn for yylval and Yacc stack */ SYM_SHARED long loc_symtab_top, /* Next avail spot in local symbol table */ glob_symtab_top; /* Ditto global */ SYM_SHARED unsigned long loc_str_top; /* Top of local stringspace */ SYM_SHARED unsigned long srctextspace_top; /* Top of token src text space */ SYM_SHARED unsigned long ptrspace_top; /* Top of pointer space */ SYM_SHARED unsigned long param_info_space_top; /* Top of parameter info space */ SYM_SHARED unsigned long token_space_top, /* Top of token space */ token_head_space_top; /* Top of TL_head space */ /* Counts of extra items dynamically allocated, for -resource */ SYM_SHARED int extra_locstrspace, extra_paraminfospace, extra_srctextspace, extra_tokheadspace, extra_tokspace, extra_ptrspace; SYM_SHARED LINENO_t top_file_line_num; SYM_SHARED int global_save; /* module contains SAVE with no list */ /* Define names for anonymous things */ #ifdef SYMTAB char blank_com_name[] = "%BLANK", /* id for blank common entry in symtab */ unnamed_prog[]="%MAIN", /* id for unnamed program module */ unnamed_block_data[]="%DAT00"; /* id for unnamed block data module */ int block_data_number=0; /* count of multiple anonymous block data */ #else extern char blank_com_name[], unnamed_prog[], unnamed_block_data[]; extern int block_data_number; #endif typedef int LABEL_t; /* a label (0-99999) */ #define NO_LABEL ((LABEL_t)-1) /* label never used/defined */ /* Symbol table argument list declarations */ typedef union { /* InfoUnion: misc info about symtab entry */ unsigned long array_dim; /* array size and no. of dims */ struct ALHead *arglist; /* ptr to func/subr argument list */ struct CMHead *comlist; /* ptr to common block list */ struct TLHead *toklist; /* ptr to token list */ struct IInfo *intrins_info;/* ptr to intrinsic func info */ struct PInfo *param; /* parameter information field */ } InfoUnion; typedef struct { /* ArgListElement: holds subprog argument data */ char *name; /* name of dummy arg or text of actual arg */ InfoUnion info; struct gSymtEntry *common_block; /* block it belongs to if any */ long common_index; /* index in block */ long size; BYTE type; short same_as; /* index if two actual arguments the same */ unsigned is_lvalue: 1, set_flag: 1, assigned_flag: 1, used_before_set: 1, array_var: 1, array_element: 1, declared_external: 1, active_do_var: 1; } ArgListElement; typedef struct ALHead { /* ArgListHeader: head node of argument list */ long size; BYTE type; short numargs; ArgListElement *arg_array; struct gSymtEntry *module; char *filename,*topfile; LINENO_t line_num,top_line_num; unsigned is_defn: 1, is_call: 1, external_decl: 1, /* EXTERNAL decl, not arg list */ actual_arg: 1; /* subprog passed as arg */ struct ALHead *next; } ArgListHeader; /* Symbol table common block list declarations */ typedef struct { /* ComListElement: holds common var data */ char *name; /* name of common variable */ unsigned long dimen_info; long size; BYTE type; unsigned /* copies of flags from symtab */ used:1, set:1, used_before_set:1, assigned:1, marked:1; /* for listing of offenders */ } ComListElement; typedef struct CMHead { /* ComListHeader: head node of common var list */ short numargs; LINENO_t line_num,top_line_num; ComListElement *com_list_array; struct gSymtEntry *module; char *filename,*topfile; struct CMHead *next; unsigned any_used:1, /* any of its variables accessed */ any_set:1, /* any of its variables set */ saved:1; /* declared in SAVE statement */ } ComListHeader; typedef struct TLHead { /* TokenListHeader: head node of token list */ Token *tokenlist; struct TLHead *next; char *filename; LINENO_t line_num, top_line_num; unsigned external_decl:1, actual_arg:1; } TokenListHeader; /* Structure for intrinsic-function info */ /* Define special num_args values for intrinsics that have variable numbers of arguments. */ #define I_1or2 (-1) /* 1 or 2 arguments */ #define I_2up (-2) /* 2 or more arguments */ #define I_0or1 (-3) /* 0 or 1 argument */ /* for intrins_flags field */ /* Integer-valued intrinsics that are evaluated if args const */ #define I_ABS 0x1 #define I_SIGN 0x2 #define I_DIM 0x3 #define I_MOD 0x4 #define I_MAX 0x5 #define I_MIN 0x6 #define I_ICHAR 0x7 #define I_LEN 0x8 #define I_INDEX 0x9 #define I_EVALUATED 0xf /* any bit of digit set */ /* Various properties of intrinsics*/ #define I_F77 0x00 /* Standard intrinsic (no flag: placeholder) */ #define I_NONF77 0x10 /* Nonstandard */ #define I_MIXED_ARGS 0x20 /* Has mixed arg types */ #define I_NONPURE 0x40 /* Arg need not be set when called */ #define I_C_TO_R 0x80 /* Complex -> real in generic form */ #define I_NOTARG 0x100 /* Not allowed as actual argument */ #define I_SP_R 0x200 /* special for REAL function */ #define I_CHAR 0x400 /* special handling for CHAR function */ #define I_QARG 0x800 /* Arg type is R*16 or X*32 */ #define I_QUAD 0x1000 /* Result type is R*16 or X*32 */ #define I_EXTRA 0x2000 /* commonly found extra intrinsics */ #define I_VMS 0x4000 /* VMS systems only */ #define I_UNIX 0x8000 /* Unix systems only */ #define I_NONF90 0x10000 /* Not in F90 standard */ /* Define flag type big enough for 17 bits */ #if (SIZEOF_SHORT > 2) typedef unsigned short intrins_flags_t; #else #if (SIZEOF_INT > 2) typedef unsigned int intrins_flags_t; #else #if (SIZEOF_LONG > 2) typedef unsigned long intrins_flags_t; #endif #endif #endif typedef struct IInfo{ char *name; short num_args, arg_type, result_type; intrins_flags_t intrins_flags; /* nonstandard, mixed arg types */ } IntrinsInfo; /* Structure for parameter info */ typedef struct PInfo{ char *src_text; /* source text of parameter value */ union { long integer; /* integer value */ DBLVAL dbl; /* float value */ char *string; /* character string value */ } value; int seq_num; /* position in parameter definitions */ } ParamInfo; /* Structure for call-tree child list */ typedef struct childlist { struct gSymtEntry *child; /* Pointer to child's symtab entry */ struct childlist *next;/* Pointer to next child on list */ } ChildList; /* Identifier symbol table declaration */ typedef struct lSymtEntry{ char *name; /* Identifier name in stringspace */ InfoUnion info; union{ char *text; /* Source text string */ char **textvec; /* List of source text strings */ TokenListHeader *toklist; /* for namelist & common block makedecls */ } src; struct lSymtEntry *equiv_link; /* Link for equivalence lists */ /* common_block is a ptr to block if this is a common variable, and common_index is its position (starting from 1). For block, common_index is the count of variables in it. */ struct gSymtEntry *common_block; long common_index; long size; /* Size of object in bytes */ /* Object can be referenced in an include file. Next fields are line numbers within file where object is referred to, then come indexes into include-file list. */ LINENO_t line_declared, line_set, line_used; short file_declared, file_set, file_used; BYTE type; /* Type & storage class: see macros below */ /* Flags */ unsigned used_flag: 1, /* value is accessed (read from variable) */ set_flag: 1, /* variable is set or passed as subr arg */ assigned_flag: 1, /* value is really set (by assignment stmt) */ used_before_set: 1,/* set_flag is not set when used_flag is set */ is_current_module: 1, /* this symtab entry is the main module */ library_module: 1, /* module was processed in -library mode */ active_do_var: 1, /* variable is an active DO index */ array_var: 1, /* variable is dimensioned */ common_var: 1, /* variable is in common */ entry_point: 1, /* name of an entry point */ parameter: 1, /* name of a parameter */ argument: 1, /* dummy argument */ external: 1, /* function or subr called by this routine */ intrinsic: 1, /* intrinsic function */ saved: 1, /* named in SAVE statement */ allocatable: 1, /* has ALLOCATABLE attribute */ pointer: 1, /* has POINTER attribute */ target: 1, /* has TARGET attribute */ invoked_as_func: 1, /* usage as f(x) was seen */ defined_in_include: 1, /* to suppress some warnings if unused */ declared_external: 1, /* explicitly declared external */ declared_intrinsic: 1; /* explicitly declared intrinsic */ unsigned size_is_adjustable : 1; /* CHARACTER*(*) declaration */ unsigned size_is_expression : 1; /* CHARACTER*(expr) declaration */ } Lsymtab; typedef struct gSymtEntry{ /* Global symbol table element */ char *name; /* Identifier name in stringspace */ InfoUnion info; union { struct childlist *child_list; /* List of callees (for module) */ struct gSymtEntry *module; /* Module (for interior entry) */ } link; long size; BYTE type; /* Type & storage class: see macros below */ /* Flags. See remarks above */ unsigned used_flag: 1, set_flag: 1, assigned_flag: 1, recursive: 1, library_module: 1, internal_entry: 1, /* entry point other than at the top */ invoked_as_func: 1, visited: 1, /* this entry point is in call tree */ visited_somewhere: 1, /* some entry point of module is in call tree */ defined: 1, /* is defined somewhere */ defined_in_include: 1, declared_external: 1, /* The following flags are for project-file use. They get reset when a file is opened and accumulate values as file is read. */ used_this_file: 1, set_this_file: 1, invoked_as_func_this_file: 1, declared_external_this_file: 1; } Gsymtab; /* Identifier hashtable declaration */ typedef struct hashEntry { char *name; /* Identifier name in stringspace */ Lsymtab *loc_symtab, /* Local symtab entry for vars etc. */ *com_loc_symtab;/* Local symtab entry for common blocks */ Gsymtab *glob_symtab, /* Global symtab entry for vars etc. */ *com_glob_symtab;/* Global symtab entry for common blocks */ } HashTable; SYM_SHARED int current_module_hash /* hashtable index of current module name */ #ifdef SYMTAB = -1 #endif ; /* Symbolic names for I/O access modes */ typedef enum { IO_ACCESS_DEFAULT, IO_ACCESS_DIRECT, IO_ACCESS_SEQUENTIAL } IO_ACCESS_TYPE; /* Symbolic names for I/O forms */ typedef enum { IO_FORM_DEFAULT, IO_FORM_UNFORMATTED, IO_FORM_FORMATTED } IO_FORM_TYPE; #define IO_UNIT_UNKNOWN -1 #define IO_UNIT_DEFAULT -2 /* For unit=* */ /* Struct for I/O unit usage */ typedef struct { int line_num; /* location of I/O usage */ int unit_no; /* unit number if known, else UNKNOWN */ int unit_id; /* hash num of unit if variable, else UNKNOWN or DEFAULT */ IO_ACCESS_TYPE io_access; /* access mode of file */ IO_FORM_TYPE io_form; /* form specified for file */ int io_operation; /* input, output, open, close, etc. */ } IO_Unit_Info; SYM_SHARED IO_Unit_Info* io_unit_info /* Array of I/O usage instances */ #ifdef SYMTAB = (IO_Unit_Info*)NULL #endif ; SYM_SHARED int max_io_unit_usages /* current size of I/O usage array */ #ifdef SYMTAB = 0 #endif ; SYM_SHARED int num_io_unit_usages /* number of I/O usage instances in list */ #ifdef SYMTAB = 0 #endif ; /* Struct for include-file list */ typedef struct { char *fname; /* name of include file */ LINENO_t line; /* line of topfile where included */ short footnote; /* footnote number--for printing labels */ } IncFile; SYM_SHARED IncFile* incfile_list #ifdef SYMTAB = (IncFile*)NULL #endif ; SYM_SHARED int num_incfiles /* number of include-files in list */ #ifdef SYMTAB = 0 #endif ; SYM_SHARED short inctable_index; /* index of current include-file in list */ /* Struct for chunks of string space */ typedef struct STSpace { struct STSpace *next; char strspace[STRSPACESZ]; } StrSpace; /* Struct for providing chunks of space for parameter info. */ typedef struct PISpace { struct PISpace *next; ParamInfo paraminfospace[PARAMINFOSPACESZ]; } ParamInfoSpace; /* Struct for providing chunks of space for token list headers for arg lists etc. */ typedef struct THSpace { struct THSpace *next; TokenListHeader tokheadspace[TOKHEADSPACESZ]; } TokHeadSpace; /* Struct for providing chunks of space for tokens for arg lists etc. */ typedef struct TSpace { struct TSpace *next; Token tokenspace[TOKENSPACESZ]; } TokenSpace; /* Struct for providing chunks of space for pointers to array & param text */ typedef struct PSpace { struct PSpace *next; char * ptrspace[PTRSPACESZ]; } PtrSpace; /* Macro to zero out symbol table entry */ #define clear_symtab_entry(S) {register unsigned i;\ for(i=0;i> 4)) #define type_byte(SCLASS,DTYPE) ((unsigned)(((SCLASS)<<4) + (DTYPE))) /* This macro is for pattern matching in flag checking */ #define flag_combo(A,B,C) (((A)<<2) | ((B)<<1) | (C)) /* These macros are for dimensions & sizes of arrays */ #define array_dims(dim_info) ((dim_info)&0xF) #define array_size(dim_info) ((dim_info)>>4) #define array_dim_info(dim,size) (((long)(size)<<4)+(dim)) /* Defns used by expression type propagation mechanisms in fortran.y and exprtype.c The flags go in token.TOK_flags Make sure size of TOK_flags declared above suffices for largest item in the list below. */ #define make_true(flag,x) ((x) |= ((unsigned)flag)) /* x.flag <-- true */ #define make_false(flag,x) ((x) &= ~((unsigned)flag)) /* x.flag <-- false */ #define is_true(flag,x) ((x) & (flag)) /* x.flag == true? */ #define copy_flag(flag,x,y) ((x) |= ((y)&((unsigned)flag))) /* x.flag <-- y.flag */ #define ID_EXPR 0x1 /* a variable */ #define LVALUE_EXPR 0x2 /* assignable */ #define CONST_EXPR 0x4 /* compile-time constant per std 6.7*/ #define LIT_CONST 0x8 /* a number or string literal */ #define ARRAY_ID_EXPR 0x10 /* an array or array element */ #define ARRAY_ELEMENT_EXPR 0x20 /* an array element */ #define INT_QUOTIENT_EXPR 0x40 /* contains INT/INT */ #define STMT_FUNCTION_EXPR 0x80 #define PARAMETER_EXPR 0x100/* == CONST_EXPR || intrinsic || **real */ #define EVALUATED_EXPR 0x200 /* token.value has value of expr */ #define SET_FLAG 0x400 /* id may be set */ #define ASSIGNED_FLAG 0x800 /* id is set in assignment stmt */ #define USED_BEFORE_SET 0x1000 /* id used beforre set */ #define COMPLEX_FLAG 0x2000 /* remembers complex_const_allowed */ #define CHAR_ID_EXPR 0x4000 /* char var or array elt not substr */ #define DIM_BOUND_EXPR 0x8000 /* no array or func ref (5.1.1.1) */ #define IN_ASSIGN 0x10000 /* for tracking assgn stmt lhs */ #define COMMA_FLAG 0x20000/* keeps track of extra or missing commas in exprlists (obsolete) */ #define NONSTD_USAGE_FLAG 0x40000 /* concentrator for -f77 warnings */ #define NOT_DO_TERMINAL_STMT 0x80000 /* stmt illegal as end of DO loop */ #define DO_VARIABLE 0x100000 /* id is active DO index variable */ #define SYNTAX_ERROR_FLAG 0x200000/* concentrator for syntax errors */ #ifdef DYNAMIC_TABLES /* tables will be mallocked at runtime */ SYM_SHARED Lsymtab *loc_symtab #ifdef SYMTAB =(Lsymtab *)NULL #endif ; SYM_SHARED Gsymtab *glob_symtab #ifdef SYMTAB =(Gsymtab *)NULL #endif ; SYM_SHARED HashTable *hashtab #ifdef SYMTAB =(HashTable *)NULL #endif ; #else /* static tables declared at compile time */ /* Each major table is housed in a separate file so that on IBM PC architecture with huge memory model each will be in its own 64K segment not all in one. */ #ifndef PLSYMTAB extern #endif Lsymtab loc_symtab[LOCSYMTABSZ]; /* Local identifiers */ #ifndef PGSYMTAB extern #endif Gsymtab glob_symtab[GLOBSYMTABSZ]; /* Global identifiers: subrs and com blks */ #ifndef EXPRTYPE extern #endif HashTable hashtab[HASHSZ]; /* Hash table for identifier lookup */ #endif/* end static tables */ /* The following tables start life as statically declared tables, but when add'l space is needed, new structs of same kind will be allocated and linked via next field of struct. Because they are dynamically extended, they are not in the DYNAMIC_TABLES section or its complement above. Note that as global variables they start off at 0, so next field of each is implicitly initialized to NULL. */ #ifndef FORLEX extern #endif TokenSpace tokspace; /* Tokens for arg lists etc */ #ifndef PROJECT extern #endif TokHeadSpace tokheadspace;/* Tokenlist headers */ #ifndef PROJECT extern #endif ParamInfoSpace paraminfospace;/* Parameter info structs */ #ifndef PROJECT extern #endif PtrSpace ptrspace; /* Space for storing arrays of pointers */ #ifndef SYMTAB extern #endif StrSpace lstrspace; /* String space for local identifiers */ #ifndef SYMTAB extern #endif StrSpace srctextspace;/* String space for token source text */ /* Shared routines */ /* in exprtype.c */ PROTO(void assignment_stmt_type,( Token *term1, Token *equals, Token *term2 )); PROTO(void binexpr_type,( Token *term1, Token *op, Token *term2, Token *result )); PROTO(void check_initializer_type, ( Token *assignee_list, Token *equals, Token *expr_list)); PROTO(void func_ref_expr,( Token *id, Token *args, Token *result )); PROTO(void primary_id_expr,( Token *id, Token *primary )); PROTO(void stmt_fun_arg_cmp,( const Lsymtab *symt, const Token *d_arg, const Token *a_arg )); PROTO(int substring_size,( Token *id, Token *limits )); PROTO(void unexpr_type,( Token *term1, Token *op, Token *result )); PROTO(int intrins_arg_cmp,( IntrinsInfo *defn, Token *t)); /* in advance.c */ PROTO(int see_double_colon,( void )); PROTO(void mark_module_srcline,( LINENO_t line_num )); /* in forlex.c */ PROTO(void implied_id_token,( Token *t, char *s )); PROTO(int yylex,( void )); /* in keywords.c */ PROTO(char *keytok_name,(int tclass)); /* in fortran.y/fortran.c */ PROTO(void check_seq_header,( Token *t )); /* in prlocsym.c */ PROTO(void print_loc_symbols,( void )); /* in makehtml.c */ PROTO(void make_html,(Lsymtab **sym_list, char *mod_name, Lsymtab *module )); /* in makedcls.c */ PROTO(void make_declarations,( Lsymtab *sym_list[], char *mod_name )); /* in symtab.c */ PROTO(void apply_attr,( Token *id, int attr )); PROTO(void call_func,( Token *id, Token *arg )); PROTO(void call_subr,( Token *id, Token *arg )); PROTO(char * char_expr_value,( Token *t )); PROTO(void check_loose_ends,( int curmodhash )); PROTO(void declare_type,( Token *id, int datatype, long size, char *size_text )); PROTO(void def_arg_name,( Token *id )); PROTO(void def_array_dim,( Token *id, Token *arg )); PROTO(void def_com_block,( Token *id, Token *comlist )); PROTO(void def_com_variable,( Token *id )); PROTO(int def_curr_module,( Token *id )); PROTO(void def_do_variable,( Token *id )); PROTO(void def_equiv_name,( Token *id )); PROTO(void def_ext_name,( Token *id )); PROTO(void def_function,( int datatype, long size, char *size_text, Token *id, Token *args )); PROTO(void def_intrins_name,( Token *id )); PROTO(void def_namelist,( Token *id, Token *list )); PROTO(void def_namelist_item,( Token *id )); PROTO(void def_parameter,( Token *id, Token *val, int noparen )); PROTO(void def_stmt_function,( Token *id, Token *args )); PROTO(void do_ASSIGN,( Token *id )); PROTO(void do_assigned_GOTO,( Token *id )); PROTO(void do_ENTRY,( Token *id, Token *args, int hashno )); PROTO(int do_RETURN,( int hashno, Token *keyword )); PROTO(void equivalence,( Token *id1, Token *id2 )); PROTO(DBLVAL float_expr_value,( Token *t )); PROTO(int get_size,( const Lsymtab *symt, int type )); PROTO(char * get_size_text,( const Lsymtab *symt, int type )); PROTO(int get_type,( const Lsymtab *symt )); PROTO(unsigned hash_lookup,( char *s )); PROTO(Gsymtab* install_global,( int h, int datatype, int storage_class )); PROTO(int int_expr_value,( Token *t )); PROTO(char * new_global_string,( char *s )); PROTO(void free_textvec,( char **p )); PROTO(char * new_src_text,( const char *s, int len )); PROTO(char * new_src_text_alloc,( int size )); PROTO(char * new_tree_text,( Token *t )); PROTO(char ** new_textvec,( int n )); PROTO(Token * new_token,( void )); PROTO(void msg_expr_tree, (const Token *t)); #ifdef DEBUG_EXPRTREES PROTO(void print_src_text,( Token *t )); PROTO(void print_expr_tree,( Token *t )); PROTO(void print_expr_list,( Token *t )); #endif PROTO(void process_lists,( int curmodhash )); PROTO(void record_io_unit_id, (Token *id)); PROTO(void record_io_usage, (Token *stmt)); PROTO(void ref_array,( Token *id, Token *subscrs )); PROTO(void ref_namelist,( Token *id, int stmt_class )); PROTO(void ref_identifier,( Token *id )); PROTO(void ref_variable,( Token *id )); PROTO(void save_com_block,( Token *id )); PROTO(void set_implicit_type,( int type, long size, char *len_text, int c1, int c2 )); PROTO(void stmt_function_stmt,( Token *id )); PROTO(char * token_name,( Token *t )); PROTO(void undef_do_variable,( int h )); PROTO(void use_actual_arg,( Token *id )); PROTO(void use_implied_do_index,( Token *id )); PROTO(void use_io_keyword,( Token *keyword, Token *value, int stmt_class )); PROTO(void use_special_open_keywd,( Token *id )); PROTO(void use_lvalue,( Token *id )); PROTO(void use_parameter,( Token *id )); PROTO(void use_variable,( Token *id )); PROTO(char* typespec, ( int t, int has_size, long size, int has_len, long len)); /* The following size is conservative, to make sure no buffer overruns occur. */ /* Maximum length of a typespec() result. */ #define MAX_TYPESPEC (4+4+6*sizeof(long)) /* in symtab.c (formerly hash.c) */ PROTO(unsigned long hash,( const char *s )); PROTO(unsigned long rehash,( unsigned long hnum )); /* To stop printing errors after limit is reached, unless limit is 0. Increment error count even if don't print. */ #define CASCADE_LIMIT(ERROR_COUNT) (++(ERROR_COUNT) > error_cascade_limit \ && error_cascade_limit > 0) /* prototypes of label routines */ void init_labtable(void); void print_labels(void); void print_label_refs(void); void check_labels(char *mod_name); void sort_labtable(void); int def_label(Token *t, int type); void def_do_label(Token *t); void ref_label(Token *t, int type); void update_label_resources(void); ftnchek-3.3.1/symutils.c0000644000031000002260000001253007360156723015625 0ustar moniotstaff00000000000000/* $Id: symutils.c,v 1.3 2001/10/07 22:57:23 moniot Rel $ Routines used by symbol-table processing routines. */ #include #include #include "ftnchek.h" #include "symtab.h" #include "symutils.h" unsigned #if HAVE_STDC arg_count(const Token *t) /* Counts the number of arguments in a token list */ #else /* K&R style */ arg_count(t) /* Counts the number of arguments in a token list */ Token *t; #endif /* HAVE_STDC */ { unsigned count; count = 0; while(t != NULL){ count++; t = t->next_token; } return(count); } /* Routines to copy src text strings from an expression tree into a char array. Given max no. of chars (excl. nul) to transfer. Result is always nul-terminated. Total no. of non-nul chars stored is returned. */ int #if HAVE_STDC cp_tok_src_text(char *s, const Token *t, int max) /* Copies src text from a token */ /* The destination string */ /* Expression tree */ /* Max no. of chars to transfer (excl. nul)*/ #else /* K&R style */ cp_tok_src_text(s,t,max) /* Copies src text from a token */ char *s; /* The destination string */ Token *t; /* Expression tree */ int max; /* Max no. of chars to transfer (excl. nul)*/ #endif /* HAVE_STDC */ { int i,j; #ifndef LEX_RAWSTRINGS if( ! is_true(LIT_CONST,t->TOK_flags) || t->TOK_type != type_byte(class_VAR,type_STRING)) #endif { j=0; #if 0 /* this needs to be done only for actual, not dummy arg */ if(t->TOK_type == type_byte(class_LABEL,type_LABEL)) s[j++] = '*'; /* for subroutine arg = *label */ #endif for(i=0; jsrc_text[i] != '\0'; i++) { s[j++] = t->src_text[i]; } } #ifndef LEX_RAWSTRINGS else { /* Strings must be undigested */ int quote_char; quote_char = t->src_text[0]; for(i=j=0; jsrc_text[i] != '\0'; i++) { s[j++] = t->src_text[i]; if(i>0 && t->src_text[i] == quote_char) /* Double a quoted quote */ if(j < max) s[j++] = quote_char; } if(j < max) s[j++] = quote_char; /* Add the final quote */ } #endif s[j] = '\0'; /* Terminate with nul character */ return j; /* Return total xferred */ } int #if HAVE_STDC cp_tree_src_text(char *s, const Token *t, int max) /* Copies src text from expr tree */ /* The destination string */ /* Expression tree */ /* Max number of chars to transfer (exc. nul)*/ #else /* K&R style */ cp_tree_src_text(s,t,max) /* Copies src text from expr tree */ char *s; /* The destination string */ Token *t; /* Expression tree */ int max; /* Max number of chars to transfer (exc. nul)*/ #endif /* HAVE_STDC */ { int ncopied=0; if(t != NULL) { if(t->left_token == NULL) { /* Primary */ ncopied += cp_tok_src_text(s+ncopied,t,max-ncopied); } else { /* Expr tree */ if(t->next_token != (Token *)NULL) { /* binary subtree */ ncopied += cp_tree_src_text(s+ncopied,t->left_token,max-ncopied); /* root node */ ncopied += cp_tok_src_text(s+ncopied,t,max-ncopied); if(t->tclass == '(') { /* Array, substring, or function ref */ ncopied += cp_list_src_text(s+ncopied,t->next_token,max-ncopied); if(max-ncopied > 0) { s[ncopied++] = ')'; /* Add left parenthesis */ s[ncopied] = '\0'; } } else { ncopied += cp_tree_src_text(s+ncopied,t->next_token,max-ncopied); } } else { /* parent node */ ncopied = cp_tok_src_text(s+ncopied,t,max-ncopied); /* unary subtree */ ncopied += cp_tree_src_text(s+ncopied,t->left_token,max-ncopied); if(t->tclass == '(') { /* Parenthesized subexpression */ if(max-ncopied > 0) { s[ncopied++] = ')'; /* Add left parenthesis */ s[ncopied] = '\0'; } } } } } return ncopied; } int #if HAVE_STDC cp_list_src_text(char *s, const Token *t, int max) /* Copies text from a tokenlist */ /* The destination string */ /* Expression tree */ /* Max number of chars to transfer (exc. nul)*/ #else /* K&R style */ cp_list_src_text(s,t,max) /* Copies text from a tokenlist */ char *s; /* The destination string */ Token *t; /* Expression tree */ int max; /* Max number of chars to transfer (exc. nul)*/ #endif /* HAVE_STDC */ { int ncopied=0; while( t != NULL) { if(t->left_token == NULL) { /* Primary */ ncopied += cp_tok_src_text(s+ncopied,t,max-ncopied); } else { /* Print tree at this point in list */ ncopied += cp_tree_src_text(s+ncopied,t->left_token,max-ncopied); } t = t->next_token; if(t != NULL) { /* If next one coming, print the comma */ if(max-ncopied > 0) { /* Parenthesized subexpression */ s[ncopied++] = ','; s[ncopied] = '\0'; } } } return ncopied; } /* this guy reverses a tokenlist and returns a pointer to the new head. */ Token * #if HAVE_STDC reverse_tokenlist(Token *t) #else /* K&R style */ reverse_tokenlist(t) Token *t; #endif /* HAVE_STDC */ { Token *curr,*next,*temp; if(t == NULL) return t; curr = t; next = curr->next_token; while(next != NULL) { temp = next->next_token; next->next_token = curr; curr = next; next = temp; } t->next_token = NULL; /* former head is now tail */ return curr; /* curr now points to new head */ } ftnchek-3.3.1/symutils.h0000644000031000002260000000062307360156737015637 0ustar moniotstaff00000000000000/* $Id: symutils.h,v 1.2 2001/10/07 22:57:35 moniot Rel $ Prototypes of routines defined in symutils.c */ PROTO(unsigned arg_count,( const Token *t )); PROTO(int cp_tree_src_text,( char *s, const Token *t, int max )); PROTO(int cp_tok_src_text,( char *s, const Token *t, int max )); PROTO(int cp_list_src_text,( char *s, const Token *t, int max )); PROTO(Token * reverse_tokenlist,( Token *t )); ftnchek-3.3.1/tokdefs.h0000644000031000002260000001421410142554345015373 0ustar moniotstaff00000000000000/* A Bison parser, made by GNU Bison 1.875c. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { tok_identifier = 258, tok_array_identifier = 259, tok_label = 260, tok_integer_const = 261, tok_real_const = 262, tok_dp_const = 263, tok_quad_const = 264, tok_complex_const = 265, tok_dcomplex_const = 266, tok_logical_const = 267, tok_string = 268, tok_hollerith = 269, tok_edit_descriptor = 270, tok_letter = 271, tok_relop = 272, tok_AND = 273, tok_OR = 274, tok_EQV = 275, tok_NEQV = 276, tok_NOT = 277, tok_power = 278, tok_concat = 279, tok_lparen = 280, tok_pointer_assignment = 281, tok_ACCEPT = 282, tok_ALLOCATABLE = 283, tok_ALLOCATE = 284, tok_ASSIGN = 285, tok_BACKSPACE = 286, tok_BLOCKDATA = 287, tok_BYTE = 288, tok_CALL = 289, tok_CASE = 290, tok_CASEDEFAULT = 291, tok_CHARACTER = 292, tok_CLOSE = 293, tok_COMMON = 294, tok_COMPLEX = 295, tok_CONTINUE = 296, tok_CYCLE = 297, tok_DATA = 298, tok_DEALLOCATE = 299, tok_DIMENSION = 300, tok_DO = 301, tok_DOUBLECOMPLEX = 302, tok_DOUBLEPRECISION = 303, tok_DOWHILE = 304, tok_ELSE = 305, tok_END = 306, tok_ENDBLOCKDATA = 307, tok_ENDDO = 308, tok_ENDFILE = 309, tok_ENDFUNCTION = 310, tok_ENDIF = 311, tok_ENDPROGRAM = 312, tok_ENDSELECT = 313, tok_ENDSUBROUTINE = 314, tok_ENTRY = 315, tok_EQUIVALENCE = 316, tok_EXTERNAL = 317, tok_EXIT = 318, tok_FORMAT = 319, tok_FUNCTION = 320, tok_GOTO = 321, tok_IF = 322, tok_IMPLICIT = 323, tok_INCLUDE = 324, tok_INQUIRE = 325, tok_INTEGER = 326, tok_INTRINSIC = 327, tok_LOGICAL = 328, tok_NAMELIST = 329, tok_NONE = 330, tok_NULLIFY = 331, tok_OPEN = 332, tok_PARAMETER = 333, tok_PAUSE = 334, tok_POINTER = 335, tok_PRINT = 336, tok_PROGRAM = 337, tok_READ = 338, tok_REAL = 339, tok_RETURN = 340, tok_REWIND = 341, tok_SAVE = 342, tok_SELECTCASE = 343, tok_STOP = 344, tok_SUBROUTINE = 345, tok_TARGET = 346, tok_THEN = 347, tok_TO = 348, tok_TYPE = 349, tok_WHILE = 350, tok_WRITE = 351, tok_illegal = 352, tok_empty = 353, EOS = 127, REDUCE = 354 }; #endif #define tok_identifier 258 #define tok_array_identifier 259 #define tok_label 260 #define tok_integer_const 261 #define tok_real_const 262 #define tok_dp_const 263 #define tok_quad_const 264 #define tok_complex_const 265 #define tok_dcomplex_const 266 #define tok_logical_const 267 #define tok_string 268 #define tok_hollerith 269 #define tok_edit_descriptor 270 #define tok_letter 271 #define tok_relop 272 #define tok_AND 273 #define tok_OR 274 #define tok_EQV 275 #define tok_NEQV 276 #define tok_NOT 277 #define tok_power 278 #define tok_concat 279 #define tok_lparen 280 #define tok_pointer_assignment 281 #define tok_ACCEPT 282 #define tok_ALLOCATABLE 283 #define tok_ALLOCATE 284 #define tok_ASSIGN 285 #define tok_BACKSPACE 286 #define tok_BLOCKDATA 287 #define tok_BYTE 288 #define tok_CALL 289 #define tok_CASE 290 #define tok_CASEDEFAULT 291 #define tok_CHARACTER 292 #define tok_CLOSE 293 #define tok_COMMON 294 #define tok_COMPLEX 295 #define tok_CONTINUE 296 #define tok_CYCLE 297 #define tok_DATA 298 #define tok_DEALLOCATE 299 #define tok_DIMENSION 300 #define tok_DO 301 #define tok_DOUBLECOMPLEX 302 #define tok_DOUBLEPRECISION 303 #define tok_DOWHILE 304 #define tok_ELSE 305 #define tok_END 306 #define tok_ENDBLOCKDATA 307 #define tok_ENDDO 308 #define tok_ENDFILE 309 #define tok_ENDFUNCTION 310 #define tok_ENDIF 311 #define tok_ENDPROGRAM 312 #define tok_ENDSELECT 313 #define tok_ENDSUBROUTINE 314 #define tok_ENTRY 315 #define tok_EQUIVALENCE 316 #define tok_EXTERNAL 317 #define tok_EXIT 318 #define tok_FORMAT 319 #define tok_FUNCTION 320 #define tok_GOTO 321 #define tok_IF 322 #define tok_IMPLICIT 323 #define tok_INCLUDE 324 #define tok_INQUIRE 325 #define tok_INTEGER 326 #define tok_INTRINSIC 327 #define tok_LOGICAL 328 #define tok_NAMELIST 329 #define tok_NONE 330 #define tok_NULLIFY 331 #define tok_OPEN 332 #define tok_PARAMETER 333 #define tok_PAUSE 334 #define tok_POINTER 335 #define tok_PRINT 336 #define tok_PROGRAM 337 #define tok_READ 338 #define tok_REAL 339 #define tok_RETURN 340 #define tok_REWIND 341 #define tok_SAVE 342 #define tok_SELECTCASE 343 #define tok_STOP 344 #define tok_SUBROUTINE 345 #define tok_TARGET 346 #define tok_THEN 347 #define tok_TO 348 #define tok_TYPE 349 #define tok_WHILE 350 #define tok_WRITE 351 #define tok_illegal 352 #define tok_empty 353 #define EOS 127 #define REDUCE 354 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) typedef int YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; ftnchek-3.3.1/utils.h0000644000031000002260000000122307636426710015100 0ustar moniotstaff00000000000000#ifndef UTILS_H #define UTILS_H #if ! HAVE_STRCASECMP # if HAVE_STRICMP # define strcasecmp(A,B) stricmp(A,B) # define strncasecmp(A,B,C) strnicmp(A,B,C) # elif HAVE_STRCMPI # define strcasecmp(A,B) strcmpi(A,B) # define strncasecmp(A,B,C) strncmpi(A,B,C) # else /* neither STRICMP nor STRCMPI: roll our own */ # define USE_OUR_CASECMP # define strcasecmp(A,B) our_strcasecmp(A,B) # define strncasecmp(A,B,C) our_strncasecmp(A,B,C) # endif #endif #ifdef USE_OUR_CASECMP int our_strcasecmp(register const char *s1, register const char *s2); int our_strncasecmp(const char *s1, const char *s2, size_t n); #endif #endif /* UTILS_H */ ftnchek-3.3.1/utils.c0000644000031000002260000000460607636427223015103 0ustar moniotstaff00000000000000#include #include #include #include "config.h" #include "utils.h" #ifdef USE_OUR_CASECMP /* Code contributed by Nelson Beebe */ /**********************************************************************/ /****************************** strcasecmp ****************************/ /**********************************************************************/ /*********************************************************************** Compare strings (ignoring case), and return: s1>s2: >0 s1==s2: 0 s1 0) && *s1 && *s2; ++s1, ++s2, --n) { c1 = 0xff & (islower((int)(*s1)) ? (int)*s1 : tolower((int)(*s1))); c2 = 0xff & (islower((int)(*s2)) ? (int)*s2 : tolower((int)(*s2))); if (c1 < c2) return (-1); else if (c1 > c2) return (1); } if (n <= 0) /* first n characters match */ result = 0; else if (*s1 == '\0') result = ((*s2 == '\0') ? 0 : -1); else /* (*s2 == '\0') */ result = 1; return (result); } #endif /* end USE_OUR_CASECMP */ ftnchek-3.3.1/dcl2inc0000755000031000002260000000221010202535157015015 0ustar moniotstaff00000000000000#!/bin/sh # ======================================================================== # Extract COMMON block declarations from .dcl files output by ftnchek # 2.8.2 (or later), and provided that they are unique, output *.inc include # files, and modified .dcl files with extension .dcn containing INCLUDE # statements in place of COMMON block declarations. In addition, write # a sorted list of include file dependencies on stdout for adding to a # Makefile. # # Usage: # ftnchek -makedcls=1 *.f # dcl2inc *.dcl # # You can then manually replace the old declarations in the *.f files # with the contents of each corresponding *.dcn file. Any COMMON # blocks that are not identical to their first occurrence will be left # intact, instead of being replaced by INCLUDE statements, and a # warning will be issued for each of them. # # [11-Mar-1995] # ======================================================================== # # To change, edit dcl2inc.in and rerun configure. # The following lines are edited by configure when it builds dcl2inc. prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib/ftnchek exec gawk -f ${libdir}/dcl2inc.awk "$@" ftnchek-3.3.1/dcl2inc.in0000755000031000002260000000220107007700210015413 0ustar moniotstaff00000000000000#!/bin/sh # ======================================================================== # Extract COMMON block declarations from .dcl files output by ftnchek # 2.8.2 (or later), and provided that they are unique, output *.inc include # files, and modified .dcl files with extension .dcn containing INCLUDE # statements in place of COMMON block declarations. In addition, write # a sorted list of include file dependencies on stdout for adding to a # Makefile. # # Usage: # ftnchek -makedcls=1 *.f # dcl2inc *.dcl # # You can then manually replace the old declarations in the *.f files # with the contents of each corresponding *.dcn file. Any COMMON # blocks that are not identical to their first occurrence will be left # intact, instead of being replaced by INCLUDE statements, and a # warning will be issued for each of them. # # [11-Mar-1995] # ======================================================================== # # To change, edit dcl2inc.in and rerun configure. # The following lines are edited by configure when it builds dcl2inc. prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@/ftnchek exec @AWK@ -f ${libdir}/dcl2inc.awk "$@" ftnchek-3.3.1/dcl2inc.awk0000644000031000002260000001627710202535157015615 0ustar moniotstaff00000000000000### ==================================================================== ### @Awk-file{ ### author = "Nelson H. F. Beebe", ### version = "1.1", ### date = "13 March 1995", ### revision = "10 March 2000", ### time = "17:20:54 MST", ### filename = "dcl2inc.awk", ### address = "Center for Scientific Computing ### Department of Mathematics ### University of Utah ### Salt Lake City, UT 84112 ### USA", ### telephone = "+1 801 581 5254", ### FAX = "+1 801 581 4148", ### checksum = "3212047631 4467", ### email = "beebe@math.utah.edu (Internet)", ### codetable = "ISO/ASCII", ### keywords = "Fortran, type declarations", ### supported = "yes", ### docstring = "Extract COMMON block declarations from .dcl ### files output by ftnchek 2.8.2 (or later), and ### provided that they are unique, output *.inc ### include files, and modified .dcl files with ### extension .dcn containing INCLUDE statements ### in place of COMMON block declarations. In ### addition, write a sorted list of include file ### dependencies on stdout, suitable for use in a ### Makefile. ### ### Usage: ### ftnchek -makedcls=1 *.f ### nawk -f dcl2inc.awk *.dcl >tempfile ### ### You can then manually replace the old ### declarations in the *.f files with the ### contents of each corresponding *.dcn file. ### Any COMMON blocks that are not identical to ### their first occurrence will be left intact, ### instead of being replaced by INCLUDE ### statements, and a warning will be issued for ### each of them. ### ### The checksum field above contains a CRC-32 ### checksum as the first value, followed by ### the byte count, both computed on the ### content beginning with the BEGIN line. ### This checksum is produced by the GNU cksum ### utility. To reproduce it, use ### sed -n '/^BEGIN/,$p' dcl2inc.awk.in | cksum ### ### Modified warning function to be configurable ### for gawk or nawk: R. Moniot March 2000", ### } ### ==================================================================== BEGIN { dcn_file_name = "" } /^[cC*!]====>Begin Module/ { begin_module() } /^[cC*!]====>End Module/ { end_module() } /^[cC*!] Common variables/ { begin_common() } /^[cC*!] Equivalenced common/ { equivalenced_common() } /^ [ ]*COMMON / { get_common_name() } in_common == 1 { add_common() } /./ { output_dcn_line($0) } END { output_declarations() } function add_common() { common_block = common_block "\n" $0 } function begin_common() { end_module() in_common = 1 common_block = substr($0,1,1) # start with empty comment line common_name = "" common_fnr = FNR basename = FILENAME sub(/[.].*$/,"",basename) } function begin_module() { end_module() # Typical line: # c====>Begin Module PROB5_4DIM File dp5_4dim.f All variables last_dcn_file_name = dcn_file_name dcn_file_name = $5 sub(/[.].*$/,".dcn",dcn_file_name) if ((last_dcn_file_name != "") && (last_dcn_file_name != dcn_file_name)) close(last_dcn_file_name) if (last_dcn_file_name != dcn_file_name) output_dependency_list() if (last_dcn_file_name == "") output_dcn_line(substr($0,1,1)) } function clear_array(array, key) { for (key in array) delete array[key] } function end_common( name) { in_common = 0 if (common_name == "") return if ((common_name in include_file_contents) && (include_file_contents[common_name] != common_block)) { warning("Common block /" common_name "/ mismatch with definition at " \ include_file_common_filename[common_name] ":" \ include_file_common_position[common_name]) output_dcn_line(common_block) common_name = "" return } output_dcn_line(" INCLUDE '" common_name ".inc'") name = common_name ".inc" dependency_list[name] = name include_file_contents[common_name] = common_block include_file_common_position[common_name] = common_fnr "--" FNR include_file_common_filename[common_name] = FILENAME common_name = "" } function end_module() { end_common() } function equivalenced_common() { end_common() output_dcn_line(substr($0,1,1)) } function get_common_name( words) { split($0, words, "/") common_name = Tolower(trim(words[2])) } function output_declarations( common_file,name) { output_dependency_list() close(dcn_file_name) for (name in include_file_contents) { common_file = name ".inc" print include_file_contents[name] > common_file close (common_file) } } function output_dependency_list( k,line,prefix) { sort_array(dependency_list) prefix = " " for (k = 1; k in dependency_list; ++k) { if (k == 1) { line = basename ".o:" line = line substr(prefix,1,16-length(line)) basename ".f" } if ((length(line) + 1 + length(dependency_list[k])) > 77) { print line " \\" line = substr(prefix,1,15) } line = line " " dependency_list[k] } if (k > 1) print line clear_array(dependency_list) } function output_dcn_line(s) { if ((!in_common) && (dcn_file_name != "")) print s > dcn_file_name } function sort_array(array, k,key,m,n,sorted_copy) { n = 0 for (key in array) { n++ sorted_copy[n] = array[key] } for (k = 1; k < n; ++k) { for (m = k + 1; m <= n; ++m) { if (sorted_copy[k] > sorted_copy[m]) { key = sorted_copy[m] sorted_copy[m] = sorted_copy[k] sorted_copy[k] = key } } } clear_array(array) for (k = 1; k <= n; ++k) array[k] = sorted_copy[k] } function Tolower(s, k,n,t) { t = "" for (k = 1; k <= length(s); ++k) { n = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", substr(s,k,1)) if (n > 0) t = t substr("abcdefghijklmnopqrstuvwxyz", n, 1) else t = t substr(s,k,1) } return (t) } function trim(s) { gsub(/^ */,"",s) gsub(/ *$/,"",s) return (s) } function warning(message) { # Although gawk provides "/dev/stderr" for writing to stderr, nawk # requires a subterfuge: see Aho, Kernighan, and Weinberger, ``The # AWK Programming Language'', Addison-Wesley (1986), ISBN # 0-201-07981-X, LCCN QA76.73.A95 A35 1988, p. 59. We need to be # able to output to the true stderr unit in order for the ftnchek # validation suite to check these warnings. The configure script # puts in appropriate redirect for nawk or gawk, depending on which # one your system has. print FILENAME ":" FNR ":\t" message > "/dev/stderr" } ftnchek-3.3.1/dcl2inc.awk.in0000644000031000002260000001630207237055240016213 0ustar moniotstaff00000000000000### ==================================================================== ### @Awk-file{ ### author = "Nelson H. F. Beebe", ### version = "1.1", ### date = "13 March 1995", ### revision = "10 March 2000", ### time = "17:20:54 MST", ### filename = "dcl2inc.awk", ### address = "Center for Scientific Computing ### Department of Mathematics ### University of Utah ### Salt Lake City, UT 84112 ### USA", ### telephone = "+1 801 581 5254", ### FAX = "+1 801 581 4148", ### checksum = "3212047631 4467", ### email = "beebe@math.utah.edu (Internet)", ### codetable = "ISO/ASCII", ### keywords = "Fortran, type declarations", ### supported = "yes", ### docstring = "Extract COMMON block declarations from .dcl ### files output by ftnchek 2.8.2 (or later), and ### provided that they are unique, output *.inc ### include files, and modified .dcl files with ### extension .dcn containing INCLUDE statements ### in place of COMMON block declarations. In ### addition, write a sorted list of include file ### dependencies on stdout, suitable for use in a ### Makefile. ### ### Usage: ### ftnchek -makedcls=1 *.f ### nawk -f dcl2inc.awk *.dcl >tempfile ### ### You can then manually replace the old ### declarations in the *.f files with the ### contents of each corresponding *.dcn file. ### Any COMMON blocks that are not identical to ### their first occurrence will be left intact, ### instead of being replaced by INCLUDE ### statements, and a warning will be issued for ### each of them. ### ### The checksum field above contains a CRC-32 ### checksum as the first value, followed by ### the byte count, both computed on the ### content beginning with the BEGIN line. ### This checksum is produced by the GNU cksum ### utility. To reproduce it, use ### sed -n '/^BEGIN/,$p' dcl2inc.awk.in | cksum ### ### Modified warning function to be configurable ### for gawk or nawk: R. Moniot March 2000", ### } ### ==================================================================== BEGIN { dcn_file_name = "" } /^[cC*!]====>Begin Module/ { begin_module() } /^[cC*!]====>End Module/ { end_module() } /^[cC*!] Common variables/ { begin_common() } /^[cC*!] Equivalenced common/ { equivalenced_common() } /^ [ ]*COMMON / { get_common_name() } in_common == 1 { add_common() } /./ { output_dcn_line($0) } END { output_declarations() } function add_common() { common_block = common_block "\n" $0 } function begin_common() { end_module() in_common = 1 common_block = substr($0,1,1) # start with empty comment line common_name = "" common_fnr = FNR basename = FILENAME sub(/[.].*$/,"",basename) } function begin_module() { end_module() # Typical line: # c====>Begin Module PROB5_4DIM File dp5_4dim.f All variables last_dcn_file_name = dcn_file_name dcn_file_name = $5 sub(/[.].*$/,".dcn",dcn_file_name) if ((last_dcn_file_name != "") && (last_dcn_file_name != dcn_file_name)) close(last_dcn_file_name) if (last_dcn_file_name != dcn_file_name) output_dependency_list() if (last_dcn_file_name == "") output_dcn_line(substr($0,1,1)) } function clear_array(array, key) { for (key in array) delete array[key] } function end_common( name) { in_common = 0 if (common_name == "") return if ((common_name in include_file_contents) && (include_file_contents[common_name] != common_block)) { warning("Common block /" common_name "/ mismatch with definition at " \ include_file_common_filename[common_name] ":" \ include_file_common_position[common_name]) output_dcn_line(common_block) common_name = "" return } output_dcn_line(" INCLUDE '" common_name ".inc'") name = common_name ".inc" dependency_list[name] = name include_file_contents[common_name] = common_block include_file_common_position[common_name] = common_fnr "--" FNR include_file_common_filename[common_name] = FILENAME common_name = "" } function end_module() { end_common() } function equivalenced_common() { end_common() output_dcn_line(substr($0,1,1)) } function get_common_name( words) { split($0, words, "/") common_name = Tolower(trim(words[2])) } function output_declarations( common_file,name) { output_dependency_list() close(dcn_file_name) for (name in include_file_contents) { common_file = name ".inc" print include_file_contents[name] > common_file close (common_file) } } function output_dependency_list( k,line,prefix) { sort_array(dependency_list) prefix = " " for (k = 1; k in dependency_list; ++k) { if (k == 1) { line = basename ".o:" line = line substr(prefix,1,16-length(line)) basename ".f" } if ((length(line) + 1 + length(dependency_list[k])) > 77) { print line " \\" line = substr(prefix,1,15) } line = line " " dependency_list[k] } if (k > 1) print line clear_array(dependency_list) } function output_dcn_line(s) { if ((!in_common) && (dcn_file_name != "")) print s > dcn_file_name } function sort_array(array, k,key,m,n,sorted_copy) { n = 0 for (key in array) { n++ sorted_copy[n] = array[key] } for (k = 1; k < n; ++k) { for (m = k + 1; m <= n; ++m) { if (sorted_copy[k] > sorted_copy[m]) { key = sorted_copy[m] sorted_copy[m] = sorted_copy[k] sorted_copy[k] = key } } } clear_array(array) for (k = 1; k <= n; ++k) array[k] = sorted_copy[k] } function Tolower(s, k,n,t) { t = "" for (k = 1; k <= length(s); ++k) { n = index("ABCDEFGHIJKLMNOPQRSTUVWXYZ", substr(s,k,1)) if (n > 0) t = t substr("abcdefghijklmnopqrstuvwxyz", n, 1) else t = t substr(s,k,1) } return (t) } function trim(s) { gsub(/^ */,"",s) gsub(/ *$/,"",s) return (s) } function warning(message) { # Although gawk provides "/dev/stderr" for writing to stderr, nawk # requires a subterfuge: see Aho, Kernighan, and Weinberger, ``The # AWK Programming Language'', Addison-Wesley (1986), ISBN # 0-201-07981-X, LCCN QA76.73.A95 A35 1988, p. 59. We need to be # able to output to the true stderr unit in order for the ftnchek # validation suite to check these warnings. The configure script # puts in appropriate redirect for nawk or gawk, depending on which # one your system has. print FILENAME ":" FNR ":\t" message @DCL2INC_REDIRECT@ } ftnchek-3.3.1/man2ps0000755000031000002260000000234207617175043014717 0ustar moniotstaff00000000000000#!/bin/sh # Filter for converting "troff -mxx" to PostScript. This script is # normally linked to the names man2ps, ms2ps, me2ps, and mm2ps. # # Usage: # man2ps [<] cc.1 >cc.ps # me2ps [<] foo.me >foo.ps # mm2ps [<] foo.mm >foo.ps # ms2ps [<] foo.ms >foo.ps # # [08-May-1993] # Choose a troff format according to the scrip name. case `basename $0` in man*) FORMAT=-man ;; me*) FORMAT=-me ;; mm*) FORMAT=-mm ;; ms*) FORMAT=-ms ;; *) echo "Unknown troff format:" ; exit 1 ;; esac # We can use either GNU groff or Sun Solaris troff + dpost # or IBM-AIX psroff if [ -x /usr/local/bin/groff ] then # GNU groff TROFF="/usr/local/bin/groff $FORMAT" TROFF2PS="cat" elif [ -x /usr/local/gnu/bin/groff ] then # GNU groff TROFF="/usr/local/gnu/bin/groff $FORMAT" TROFF2PS="cat" elif [ -x /usr/bin/groff ] then # GNU groff TROFF="/usr/bin/groff $FORMAT" TROFF2PS="cat" elif [ -x /usr/lib/lp/postscript/dpost ] then # Solaris 2.1 TROFF="troff $FORMAT" TROFF2PS="/usr/lib/lp/postscript/dpost" elif [ -x /bin/psroff -o -x /usr/bin/psroff -o -x /usr/local/bin/psroff ] then # IBM-AIX or local psroff TROFF="psroff -t $FORMAT" TROFF2PS="cat" else echo "Cannot find troff-to-PostScript filter" >&2 exit 1 fi tbl $* | eqn | $TROFF | $TROFF2PS ftnchek-3.3.1/ftnchek.el0000644000031000002260000004067707617175043015552 0ustar moniotstaff00000000000000;;; ftnchek.el --- ftnchek support for fortran mode. ;; ;; Author: Judah Milgram (defvar ftnchek-mode-version "0.9") (defvar ftnchek-mode-date "12/16/2002") ;; Keywords: fortran syntax semantic ;; Current version at: http://www.glue.umd.edu/~milgram/ftnchekel.html ;; ;; Copyright 1998-2002 Judah Milgram ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;; ;; ================================================================== ;; ;;; FTNCHEK: Ftnchek is a fortran 77 syntax and semantics checker ;; by Dr. Robert Moniot, . Get it at ;; http://www.dsm.fordham.edu/~ftnchek/ ;; ;;====================================================================== ;; ;; INSTALLATION: ;; ;; Install ftnchek.el somewhere in your lisp load path. Maybe add ;; lines in your ~/.emacs along the lines of: ;; ;; (setq my-path (concat (getenv "HOME") "/local/share/emacs/site-lisp" ;; (setq load-path (cons my-path load-path)) ;; (add-hook 'fortran-mode-hook (require 'ftnchek-mode "ftnchek")) ;; ;; Byte-compile ftnchek.el, if you want. ;; ;; To Do: ;; ;; How do we handle case were comments precede first subroutine in ;; library file? ftnchek-mode thinks it's an unnamed main. ;; Soup up regexps to tolerate embedded blanks. ;; Documentation! Info file, etc. (for ftnchek too!) ;; Splash-blurb if ftnchek not found; message where to get ;; Make ftnchek-flags easier for user to customize (one for buffer, ;; one for subprogram) ;; ;; ==================================================================== ;; ;; Acknowledgements: ;; Bruce Ravel, Jinwei Shen, Richard Stallman, and many others for advice, ;; suggestions and testing. ;; Also: Michael D. Prange and Dave Love for fortran mode ;; And especially: Bob Moniot for ftnchek! ;; ;; ==================================================================== ;; History: ;; v 0.9 12/16/02 update Bob Moniot contact info ;; update acks ;; fix message bug in ftnchek-check-subprogram ;; clean up some comments ;; improved ftnchek-error-first-line ;; many setq's changed to defvar ;; simplified ftnchek-current-subprogram ;; consolidated dangling parentheses :) ;; miscellaneous cleanup to permit byte-compile w/o warnings ;; v 0.8 12/10/02 oops, regexp-opt causes problems, switch to regexp-or ;; v 0.7 12/4/02 Tested with emacs 21 ;; Menu-bar renamed "Ftnchek" and simplified ;; much internal cleanup and re-write ;; "next-error" in compile mode works much better now ;; removed some functions that are now in Fortran-mode ;; re-did menu with "easy-menu" ;; pipe ftnchek through sed to make file name look right ;; v 0.6 6/17/98 placed completion-ignore-case in a let ;; defvar ftnchek-mode ;; defun ftnchek-mode ;; V 0.5 6/14/98 implemented "ftnchek-next-error" ;; played with ftnchek-flags (array=2) ;; V 0.4 6/12/98 added require to "compile" ;; got "fortran-goto-subprogram" working ;; V 0.3 6/11/98 first public release (require 'fortran) (require 'compile) (defvar ftnchek-maintainer "") (defvar ftnchek-flags nil) (defvar ftnchek-startup-message) ; maybe do this with "let"? (defvar ftnchek-mode nil "Mode variable for ftnchek minor mode") (make-variable-buffer-local 'ftnchek-mode) (defcustom ftnchek-buffer-flags "-arguments -noextern -declare -library -noarray -portability -usage=no-com-var-uninitialized -include=." "Ftnchek options to use when checking an entire buffer") (defcustom ftnchek-subprogram-flags "-arguments -noextern -declare -library -noarray -portability -usage=no-com-var-uninitialized -include=." "Ftnchek options to use when checking an individual subprogram") (defcustom ftnchek-f77-flags nil "F77 strictness flags that get toggled in pull-down menu") (defun ftnchek-mode(&optional arg) "Ftnchek minor mode." (interactive "P") (setq ftnchek-mode (if (null arg) (not ftnchek-mode) (> (prefix-numeric-value arg) 0)))) ; (if ftnchek-mode ... etc. (defun ftnchek-temp-file(s) "Generate a temp file with .f suffix" (concat (make-temp-name (expand-file-name s temporary-file-directory)) ".f")) (defun ftnchek-delete-lines-forward() "Delete all lines starting with current line" (save-excursion (let ((begin (point)) (end (point-max))) (delete-region begin end)))) (defun ftnchek-mask-lines-before-here() "Replace all lines preceding point with blank lines" (save-excursion (while (= (forward-line -1) 0) (beginning-of-line) (let ((beg (point))) (end-of-line) (delete-region beg (point)))))) (defvar ftnchek-error-regexp-alist (list ;; line 1 col 2 file foo.f (list ".*line \\([0-9]+\\)\\( col \\([0-9]+\\)\\)? file \\([^ ;$|:\n\t]+\\)" 4 1 3) ;; "foo.f", line 14 col 19: (list "\"\\([^\"]+\\)\", \\(near \\)?line \\([0-9]+\\)\\( col \\([0-9]+\\)\\)?" 1 3 5))) (defun ftnchek-region(ftnchek-flags) "Run ftnchek on a region using compile()" ;; first, last are character positions. Convert to line positions. (let ((temp-file (ftnchek-temp-file "ftnchek" )) (first (point)) (last (mark)) ) (copy-region-as-kill (point-min) (point-max)) (with-temp-file temp-file (yank) (goto-char last) (ftnchek-delete-lines-forward) (goto-char first) (ftnchek-mask-lines-before-here) ) (compile-internal (ftnchek-command temp-file ftnchek-flags (buffer-name)) "No more errors" nil nil ftnchek-error-regexp-alist nil nil nil nil ))) (defun ftnchek-command(file-name &optional flags real-name) "Form the command to run ftnchek" ;; begin and end are line numbers, not char numbers. ;; Start by sending file-name to stdout, possibly (let ((rval "ftnchek ")) (if (not (eq flags nil)) (setq rval (concat rval flags " ")) ) (if (not (eq ftnchek-f77-flags nil)) (setq rval (concat rval ftnchek-f77-flags " ")) ) (setq rval (concat rval "-quiet " file-name)) (if (not (eq real-name nil)) ;; a bit dangerous - ;; we assume this means file-name is a temp file ;; maybe not always the case ! (setq rval (concat rval " | sed 's|" file-name "|" real-name "|g' && rm -f " file-name))) rval)) (defun ftnchek-buffer() "Run ftnchek on current buffer." (interactive) (save-excursion (mark-whole-buffer) (ftnchek-region ftnchek-buffer-flags) (message "Checking entire buffer %s" (buffer-name)))) (defun ftnchek-subprogram() "Run ftnchek on suprogram the cursor is in. You can run fortran-what-subprogram to find out what subprogram that is." (interactive) (save-excursion ;; Use this for older versions of fortran-mode: ;; (mark-fortran-subprogram) ;; As of fortran mode v 21.2 or maybe even earlier: (mark-defun) (ftnchek-region ftnchek-subprogram-flags)) (message "Checking %s" (ftnchek-current-subprogram))) (defun ftnchek-strict-f77() "Toggle on strict Fortran 77 compliance checking" (interactive) (if (equal ftnchek-f77-flags "-f77") (setq ftnchek-f77-flags nil) (setq ftnchek-f77-flags "-f77"))) ; I'm not sure I like these but nobody's complaining. (define-key fortran-mode-map "\C-x`" 'ftnchek-next-error) (define-key fortran-mode-map "\M-s" 'ftnchek-subprogram) (define-key fortran-mode-map "\M-b" 'ftnchek-buffer) (define-key fortran-mode-map "\M-p" 'ftnchek-previous-subprogram) (define-key fortran-mode-map "\M-n" 'ftnchek-next-subprogram) (define-key fortran-mode-map "\M-f" 'ftnchek-first-executable) (define-key fortran-mode-map "\M-h" 'ftnchek-what-subprogram) ;; Menu ;; Fortran-mode does this, but is it important for us too? ;;(unless (boundp 'ftnchek-mode-menu) (easy-menu-define ftnchek-mode-menu fortran-mode-map "Ftnchek menu" '("Ftnchek" ["Check buffer " ftnchek-buffer t] ["Check subprogram " ftnchek-subprogram t] ["Next error " ftnchek-next-error t] ["Ftnchek version " ftnchek-version-display t] ["Strict F77 " ftnchek-strict-f77 :style toggle :selected (equal ftnchek-f77-flags "-f77") ] "----" ;;; These items really belong in the fortran mode menu: ["What subprogram? " ftnchek-what-subprogram t] ["First executable " ftnchek-first-executable t] ["Prev subprogram " ftnchek-previous-subprogram t] ["Next subprogram " ftnchek-next-subprogram t] )) ;; ) ; Startup message. Possibly useless. (setq ftnchek-startup-message (concat "ftnchek.el " " Version " ftnchek-mode-version " " ftnchek-mode-date " bugs to " ftnchek-maintainer)) (message ftnchek-startup-message) (sleep-for 0.5) (defun ftnchek-version-display() "Print the ftnchek version and patch level." (interactive) (message (concat (ftnchek-version) "; ftnchek.el v. " ftnchek-mode-version))) ;; This should probably be done with a pipe and sed. (defun ftnchek-version() "Return ftnchek version as a string." (let (first last outbuf) (setq outbuf (get-buffer-create "*Ftnchek*")) (set-buffer outbuf) (goto-char (point-min)) (setq first (point)) (goto-char (point-max)) (setq last (point)) (if (> last first) (kill-region first last)) (call-process "ftnchek" nil outbuf nil "-help") (set-buffer outbuf) (goto-char (point-min)) (if (null (search-forward "FTNCHEK")) nil (beginning-of-line) (setq first (point)) (end-of-line) (setq last (point)) (buffer-substring first last)))) (defun ftnchek-error-first-line() "set first line of multiline ftnchek error message to top of window" (let (( here (point))) (beginning-of-line) (if (not (looking-at "^.*\\(Warning\\|Error\\)")) (re-search-backward "^.*\\(Warning\\|Error\\)" nil t) (forward-line -1) (if (not (looking-at "^ *\\^")) (goto-char here) (forward-line -1) (if (not (looking-at "^ *[0-9]+")) (forward-line 2)) ))) (recenter 0)) (defun ftnchek-next-error() "ftnchek mode wrapper for next-error" (interactive) (next-error) (other-window 1) (ftnchek-error-first-line) (other-window -1)) ;; I hope this is a good idea (setq compilation-error-regexp-alist (append ftnchek-error-regexp-alist compilation-error-regexp-alist)) (provide 'ftnchek-mode) ;;; *********************************************************************** ; ; Extra navigation stuff - maybe this functionality will be added to ; Fortran mode, in which case we can drop it from here. ; ; Note ftnchek-mode's idea of where a program unit begins or ends may ; not agree with fortran-mode. ;; some useful regexps: (defun identity(x) x) (defun regexp-or(s &optional parens) "OR together a bunch of regexp's. Optional argument if t adds outer parens" (let ((rval (mapconcat 'identity s "\\|"))) (if (eq parens nil) rval (concat "\\(" rval "\\)")))) ;; What about embedded spaces? (defvar ftnchek-first-six-regexp "^[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ] +") (defvar ftnchek-blank-line-regexp "^[ \t]*$") (defvar ftnchek-continuation-line-regexp "^[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][^ ] *") (defvar ftnchek-comment-regexp "^[Cc]" ) (defvar ftnchek-symbolic-name-regexp "\\([a-zA-Z][a-zA-Z0-9]*\\)") (defvar ftnchek-type-regexp-list (list "integer" "real" "double *precision" "complex" "double *complex" ; not standard "logical" "\\(character\\( *\\* *[0-9]+\\)?\\)" )) (defvar ftnchek-type-regexp (regexp-or ftnchek-type-regexp-list t)) (defvar ftnchek-subprogram-end-regexp (concat ftnchek-first-six-regexp "end *$")) (defvar ftnchek-program-unit-begin-regexp (concat ftnchek-first-six-regexp (regexp-or (list (concat ftnchek-type-regexp "? *function") "subroutine" "program" "block *data") t) " *" ftnchek-symbolic-name-regexp "?" )) ;; See F77 standard, section 7. Note this regexp can't pick up ;; statement functions, which F77 also classes as non-executable. ; The items commented out are covered in ftnchek-type-regexp (defvar ftnchek-non-executable-keyword-regexp-list (list "block *data" "character" "common" "complex" "data" "dimension" "function" "double *complex" ; not strict f77 "double *precision" "entry" "equivalence" "external" "format" "implicit" "include" ; not strict f77 "integer" "intrinsic" "logical" "parameter" "program" "real" "save" "subroutine")) (defvar ftnchek-non-executable-statement-regexp (concat ftnchek-first-six-regexp (regexp-or ftnchek-non-executable-keyword-regexp-list t))) (defun ftnchek-program-unit-title() "Return descriptive string for program unit, or nil" (interactive) (save-excursion (beginning-of-line) (if (not (looking-at ftnchek-program-unit-begin-regexp)) nil ;; Guess how I got those match-field numbers. (let (( title (match-string 1) ) ( name (match-string 5) )) (if (not (eq name nil)) (concat title " " name) name))))) (defun ftnchek-end-of-subprogram() "Move point to first character of end statement (or EOF)." (let (( here (point) )) (if (re-search-forward ftnchek-subprogram-end-regexp nil 1 ) (beginning-of-line) (if (re-search-backward ftnchek-subprogram-end-regexp nil t) (beginning-of-line) (message "No end statement found beyond this point."))) (goto-char here))) (defun ftnchek-find-program-unit-statement( N ) "Move point either forwards or backwards to program unit start statement, and return the title, or nil. N is either 1 (forward) or -1 (backward)" (interactive "p") (beginning-of-line) (let ((name nil)) (while (and (not (setq name (ftnchek-program-unit-title))) (eq (forward-line N) 0))) (if (and (eq name nil) (eq N -1)) (setq name "unnamed main program") ) name )) (defun ftnchek-beginning-of-subprogram() "Move point to start of a program unit. Could be beginning of file. Returns title of program unit." (interactive) (beginning-of-line) ;; interstitial comments belong to following subprogram (ftnchek-end-of-subprogram) (ftnchek-find-program-unit-statement -1) ) (defun ftnchek-current-subprogram() "Return name of current subprogram without actually moving point" (save-excursion (ftnchek-beginning-of-subprogram))) (defun ftnchek-what-subprogram() "Display the title of current Fortran subprogram" (interactive) (message (ftnchek-current-subprogram))) (defun ftnchek-next-subprogram() "Move point to next subprogram" (interactive) (let (( here (point)) ) (forward-line 1) (if (ftnchek-find-program-unit-statement 1) (message (ftnchek-current-subprogram)) (message "Don't seem to be any more" ) (goto-char here)))) (defun ftnchek-previous-subprogram() "Move point to previous subprogram" (interactive) ;; moving backwards, we always get a program unit name even if "unnamed main" (if (not (re-search-backward ftnchek-subprogram-end-regexp nil t)) (message "Already seem to be in first one") (ftnchek-beginning-of-subprogram) (message (ftnchek-current-subprogram)))) (defun ftnchek-nonexecutable-statement() "t if current line is nonexecutable" ;; let's give it an optional arg so we can look at strings (or (looking-at ftnchek-non-executable-statement-regexp) (looking-at ftnchek-comment-regexp) (looking-at ftnchek-continuation-line-regexp) (looking-at ftnchek-blank-line-regexp))) (defun ftnchek-next-executable-statement() "Skip to next executable statement" (while (ftnchek-nonexecutable-statement) (forward-line))) (defun ftnchek-first-executable() "Move cursor to first executable statement in current subprogram" (interactive) (ftnchek-beginning-of-subprogram) (ftnchek-next-executable-statement) (message "First executable statement in %s" (ftnchek-current-subprogram))) ftnchek-3.3.1/test/0000755000031000002260000000000010202535144014531 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/CVS/0000755000031000002260000000000007756547310015206 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/CVS/Root0000644000031000002260000000003607623227203016040 0ustar moniotstaff00000000000000pascal:/usr/local/src/cvsroot ftnchek-3.3.1/test/CVS/Repository0000644000031000002260000000001507623227203017271 0ustar moniotstaff00000000000000ftnchek/test ftnchek-3.3.1/test/CVS/Entries0000644000031000002260000001302707756547310016545 0ustar moniotstaff00000000000000/Compare.sh.in/1.2/Sat Jul 22 19:53:36 2000// /allkeywords.f/1.1/Mon Feb 3 20:31:05 2003// /animated_pendulum_cls.f/1.1/Mon Feb 3 20:31:05 2003// /animated_pendulum_entergr.f/1.1/Mon Feb 3 20:31:05 2003// /animated_pendulum_exitgr.f/1.1/Mon Feb 3 20:31:05 2003// /animated_pendulum_main.f/1.1/Mon Feb 3 20:31:05 2003// /animated_pendulum_plotball.f/1.1/Mon Feb 3 20:31:05 2003// /arg-alias.f/1.1/Mon Feb 3 20:31:05 2003// /args01.f/1.1/Mon Feb 3 20:31:05 2003// /args02.f/1.1/Mon Feb 3 20:31:05 2003// /args03.f/1.1/Mon Feb 3 20:31:05 2003// /args04.f/1.1/Mon Feb 3 20:31:05 2003// /args05.f/1.1/Mon Feb 3 20:31:05 2003// /args06.f/1.1/Mon Feb 3 20:31:05 2003// /args07.f/1.1/Mon Feb 3 20:31:05 2003// /args08.f/1.1/Mon Feb 3 20:31:05 2003// /args09.f/1.1/Mon Feb 3 20:31:05 2003// /args10.f/1.1/Mon Feb 3 20:31:05 2003// /args11.f/1.1/Mon Feb 3 20:31:05 2003// /args12.f/1.1/Mon Feb 3 20:31:05 2003// /args13.f/1.1/Mon Feb 3 20:31:05 2003// /args14.f/1.1/Mon Feb 3 20:31:05 2003// /args15.f/1.1/Mon Feb 3 20:31:05 2003// /arrayclash.f/1.1/Mon Feb 3 20:31:05 2003// /assign.f/1.1/Mon Feb 3 20:31:05 2003// /autoarray.f/1.1/Mon Feb 3 20:31:05 2003// /average.f/1.1/Mon Feb 3 20:31:05 2003// /backslash.f/1.1/Mon Feb 3 20:31:05 2003// /backslash.opt/1.1/Mon Feb 3 20:31:05 2003// /block2.i/1.1/Mon Feb 3 20:31:05 2003// /blockcheck.f90/1.1/Mon Feb 3 20:31:05 2003// /blockerrors.f/1.1/Mon Feb 3 20:31:05 2003// /blockerrors.opt/1.1/Mon Feb 3 20:31:05 2003// /builtin.f/1.1/Mon Feb 3 20:31:05 2003// /case.f/1.1/Mon Feb 3 20:31:05 2003// /chestnuts.f/1.1/Mon Feb 3 20:31:05 2003// /chestnuts.opt/1.1/Mon Feb 3 20:31:05 2003// /comclash.f/1.1/Mon Feb 3 20:31:05 2003// /comcmp.f/1.1/Mon Feb 3 20:31:05 2003// /comcmp.opt/1.1/Mon Feb 3 20:31:05 2003// /common-alias.f/1.1/Mon Feb 3 20:31:05 2003// /complex.f/1.1/Mon Feb 3 20:31:05 2003// /complex.opt/1.1/Mon Feb 3 20:31:05 2003// /comtest.f/1.1/Mon Feb 3 20:31:05 2003// /comusage.f/1.1/Mon Feb 3 20:31:05 2003// /comusage.opt/1.1/Mon Feb 3 20:31:05 2003// /correct.f/1.1/Mon Feb 3 20:31:05 2003// /cycle-exit.f/1.1/Mon Feb 3 20:31:05 2003// /dcltest.f/1.1/Mon Feb 3 20:31:05 2003// /dec-parameter.f/1.1/Mon Feb 3 20:31:05 2003// /dectab.f/1.1/Mon Feb 3 20:31:05 2003// /dectab.opt/1.1/Mon Feb 3 20:31:05 2003// /dims.f/1.1/Mon Feb 3 20:31:05 2003// /dims.opt/1.1/Mon Feb 3 20:31:05 2003// /do_enddo.f/1.1/Mon Feb 3 20:31:05 2003// /do_enddo.opt/1.1/Mon Feb 3 20:31:05 2003// /embedded-space.f/1.1/Mon Feb 3 20:31:05 2003// /f95deleted.f/1.1/Mon Feb 3 20:31:05 2003// /help.f/1.1/Mon Feb 3 20:31:05 2003// /help.opt/1.1/Mon Feb 3 20:31:05 2003// /iffy.f/1.1/Mon Feb 3 20:31:05 2003// /include.f/1.1/Mon Feb 3 20:31:05 2003// /include.opt/1.1/Mon Feb 3 20:31:05 2003// /initializers.f/1.1/Mon Feb 3 20:31:05 2003// /intrinstest.f/1.1/Mon Feb 3 20:31:05 2003// /iokeywords.f/1.1/Mon Feb 3 20:31:05 2003// /labeltest.f/1.1/Mon Feb 3 20:31:05 2003// /lotsalabels.f/1.1/Mon Feb 3 20:31:05 2003// /lotsalabels.opt/1.1/Mon Feb 3 20:31:05 2003// /mixed-equiv.f/1.1/Mon Feb 3 20:31:05 2003// /model.f90/1.1/Mon Feb 3 20:31:05 2003// /namelist.f/1.1/Mon Feb 3 20:31:05 2003// /namelist.opt/1.1/Mon Feb 3 20:31:05 2003// /noblanks.f/1.1/Mon Feb 3 20:31:05 2003// /noblanks.opt/1.1/Mon Feb 3 20:31:05 2003// /params.f/1.1/Mon Feb 3 20:31:05 2003// /primes.f/1.1/Mon Feb 3 20:31:05 2003// /pure-function.f/1.1/Mon Feb 3 20:31:05 2003// /quad.f/1.1/Mon Feb 3 20:31:05 2003// /relops.f/1.1/Mon Feb 3 20:31:05 2003// /sequence.f/1.1/Mon Feb 3 20:31:05 2003// /strings.f/1.1/Mon Feb 3 20:31:05 2003// /strings.opt/1.1/Mon Feb 3 20:31:05 2003// /substr.f/1.1/Mon Feb 3 20:31:05 2003// /t208a.f/1.1/Mon Feb 3 20:31:05 2003// /t208b.f/1.1/Mon Feb 3 20:31:05 2003// /t208c.f/1.1/Mon Feb 3 20:31:05 2003// /t208d.f/1.1/Mon Feb 3 20:31:05 2003// /t208e.f/1.1/Mon Feb 3 20:31:05 2003// /t208f.f/1.1/Mon Feb 3 20:31:05 2003// /t208f.opt/1.1/Mon Feb 3 20:31:05 2003// /t208g.f/1.1/Mon Feb 3 20:31:05 2003// /t208h.f/1.1/Mon Feb 3 20:31:05 2003// /t208i.f/1.1/Mon Feb 3 20:31:05 2003// /t208j.f/1.1/Mon Feb 3 20:31:05 2003// /t208k.f/1.1/Mon Feb 3 20:31:05 2003// /t208l.f/1.1/Mon Feb 3 20:31:05 2003// /t208m.f/1.1/Mon Feb 3 20:31:05 2003// /t208n.f/1.1/Mon Feb 3 20:31:05 2003// /t208o.f/1.1/Mon Feb 3 20:31:05 2003// /t208p.f/1.1/Mon Feb 3 20:31:05 2003// /t208q.f/1.1/Mon Feb 3 20:31:05 2003// /t208r.f/1.1/Mon Feb 3 20:31:05 2003// /t208s.f/1.1/Mon Feb 3 20:31:05 2003// /t208t.f/1.1/Mon Feb 3 20:31:05 2003// /t208u.f/1.1/Mon Feb 3 20:31:05 2003// /t208v.f/1.1/Mon Feb 3 20:31:05 2003// /t208w.f/1.1/Mon Feb 3 20:31:05 2003// /t208x.f/1.1/Mon Feb 3 20:31:05 2003// /unixincluded.f/1.1/Mon Feb 3 20:31:05 2003// /unixincluded.opt/1.1/Mon Feb 3 20:31:05 2003// /usage.f/1.1/Mon Feb 3 20:31:05 2003// /wordsize.f/1.1/Mon Feb 3 20:31:05 2003// D/Include//// D/Okay//// /array.bat/1.1/Wed Mar 29 03:55:12 2000// /checkargs.bat/1.1/Wed Mar 29 03:10:22 2000// /checkexpr.bat/1.1/Wed Mar 29 03:16:56 2000// /checkf90.bat/1.1/Wed Mar 29 03:15:32 2000// /common.bat/1.1/Wed Mar 29 03:52:24 2000// /listout.bat/1.1/Sat May 12 23:43:36 2001// /listout2.bat/1.1/Fri Mar 31 02:43:16 2000// /makedcls.bat/1.1/Mon Jan 6 02:37:36 2003// /precheck.bat/1.1/Sun Sep 24 20:04:30 2000// /vcg.bat/1.1/Wed Mar 29 03:52:02 2000// /cray-pointers.f/1.1/Fri Apr 4 16:37:10 2003// /keyvars.f/1.2/Thu Apr 17 16:46:22 2003// /empty.f/1.1/Sun Jul 27 20:30:10 2003// /pointer_alloc.f90/1.2/Sun Aug 3 17:14:44 2003// /check.bat/1.2/Sun Nov 16 22:50:06 2003// /compare.bat/1.2/Sun Nov 16 22:49:28 2003// /Makefile.in/1.38/Wed Nov 19 02:00:31 2003// ftnchek-3.3.1/test/Include/0000755000031000002260000000000007623227204016124 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/Include/CVS/0000755000031000002260000000000007623227204016557 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/Include/CVS/Root0000644000031000002260000000003607623227204017424 0ustar moniotstaff00000000000000pascal:/usr/local/src/cvsroot ftnchek-3.3.1/test/Include/CVS/Repository0000644000031000002260000000002507623227204020656 0ustar moniotstaff00000000000000ftnchek/test/Include ftnchek-3.3.1/test/Include/CVS/Entries0000644000031000002260000000005207623227204020110 0ustar moniotstaff00000000000000/stats.h/1.1/Mon Feb 10 19:00:47 2003// D ftnchek-3.3.1/test/Include/stats.h0000644000031000002260000000006307621773337017445 0ustar moniotstaff00000000000000 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) ftnchek-3.3.1/test/Compare.sh.in0000644000031000002260000000215607136375700017100 0ustar moniotstaff00000000000000#!/bin/sh # # $Id: Compare.sh.in,v 1.2 2000/07/22 19:53:36 moniot Rel $ # # Bourne shell script to compare File in directory ./Vary with # original in directory ./Okay and print a message if they differ. # If no differences it echoes a dot to show progress. # If differences, touches file CHECK_FAILED # # Usage: Compare.sh Okay Vary File OKAY=$1 VARY=$2 FILE=$3 if [ ! -d ${OKAY} ] then echo "Creating directory ${OKAY}" @MKDIR@ ${OKAY}; fi if [ ! -f ${OKAY}/${FILE} ] then echo "${FILE} is new" @CP@ ${FILE} ${OKAY}/${FILE} fi if @CMP@ ${OKAY}/${FILE} ${FILE} > /dev/null then @RM@ -f ${FILE} echo '.' | @AWK@ '{printf("%s",$1);}' else touch CHECK_FAILED echo "" echo "--------------------------------------------------" echo "====> Differences found in ${FILE} test <====" echo "Master: ${OKAY}/${FILE}" echo "Test: ${VARY}/${FILE}" if [ ! -d ${VARY} ] then echo "Creating directory ${VARY}" @MKDIR@ ${VARY} fi @MV@ ${FILE} ${VARY}/${FILE} # To show diffs uncomment next line # @DIFF@ ${OKAY}/${FILE} ${VARY}/${FILE} fi exit 0 ftnchek-3.3.1/test/Makefile.in0000644000031000002260000005266007756547277016645 0ustar moniotstaff00000000000000# $Id: Makefile.in,v 1.38 2003/11/19 02:00:31 moniot Exp $ # Makefile for smoke-testing ftnchek. Say ``make'' to make all checks. # # EXE = @EXE@ CMD = @CMD@ # gawk/nawk specially needed for dcl2inc.awk NAWK = @AWK@ # ordinary awk used to print some messages AWK = @AWK@ # This defn uses version of dcl2inc.awk in the parent directory. DCL2INC = $(NAWK) -f ../dcl2inc.awk # This defn uses version of ftnchek in the parent directory. FTNCHEK = ../ftnchek$(EXE) # Since ftnpp is not included with ftnchek package, it is searched # for by configure. If it does not exist, checkftnpp will be skipped. FTNPP = @FTNPP@$(EXE) FTNPPFLAGS = # OKAY subdirectory is where the correct output files are stored. OKAY = Okay # VARY subdirectory is where the varying output files are stored. VARY = Vary # Directory containing MS-DOS variants of output files. DOSOKAY= Okay.dos # COMPARE invokes the comparison script to check new vs archive. COMPARE = ./Compare.sh $(OKAY) $(VARY) # RCFILE is the name of the startup file for checkrc RCFILE= ftnchek.ini # DEFAULT_FLAGS is the set of Ftnchek flags used by the default rule. # Note: The default rule also sets -f77 via the environment mechanism # in order to check that mechanism. DEFAULT_FLAGS = -list -symt -port MAKE = @MAKE@ FTNCHEK=$(FTNCHEK) OKAY=$(OKAY) VARY=$(VARY) CP = @CP@ GREP = @GREP@ MV = @MV@ PRINTENV = @PRINTENV@ RM = @RM@ SED = @SED@ SHELL = @SH@ .SUFFIXES: .chk .f .f90 .prj .fcl .fc1 .fc2 .fc3 .fc4 .fc5 .fc6 .fc7 .fc8 \ .fc9 .fcA .fcB .fcC .fcD .fcE .fcF .fcx #======================================================================= # # Definitions of File Groups # # # LISTOUT programs are simple, and all use the default options or else # the options given in their .opt file. These produce listing files # *.fcl (or *.fcx in -nonovice, i.e. expert mode). Note: Those with # .opt files may have associated routines in other files that do not # appear here. LISTOUT= average.f backslash.f chestnuts.f comclash.f comcmp.f\ complex.f comtest.f comusage.f correct.f dims.f do_enddo.f\ help.f include.f namelist.f noblanks.f strings.f unixincluded.f\ dectab.f quad.f sequence.f substr.f autoarray.f cycle-exit.f\ relops.f embedded-space.f arg-alias.f common-alias.f dec-parameter.f\ iffy.f pure-function.f primes.f labeltest.f case.f allkeywords.f\ blockerrors.f t208f.f lotsalabels.f initializers.f cray-pointers.f\ keyvars.f empty.f FREEFORM=model.f90 blockcheck.f90 pointer_alloc.f90 # set of files for testing f77/f90/f95 options F90= iokeywords.f f95deleted.f # set of files for testing -arguments setting ARGS= args01.f args02.f args03.f args04.f args05.f args06.f\ args07.f args08.f args09.f args10.f args11.f args12.f\ args13.f args14.f args15.f # set of files for testing -array setting ARRAY= arrayclash.f # Set of files for testing -trun -port -f77 options and -word setting EXPR= assign.f wordsize.f mixed-equiv.f # set of files for testing -common setting COMMON= comcmp.f comusage.f # set of files for testing -intrinsic options INTRINSIC= intrinstest.f # set of files for testing dcl2inc processing DCL2INCFILES= t208x.f # set of files for testing -makedcls setting MAKEDCLS= builtin.f dcltest.f dims.f model.f90 namelist.f params.f\ t208a.f t208b.f t208c.f t208d.f t208e.f t208f.f t208g.f t208h.f \ t208i.f t208j.f t208k.f t208l.f t208m.f t208n.f t208o.f t208p.f \ t208q.f t208r.f t208s.f t208t.f t208u.f t208v.f t208w.f t208x.f # set of files for testing -mkhtml option (also uses MAKEDCLS) MKHTML= animated_pendulum_main.f animated_pendulum_cls.f \ animated_pendulum_entergr.f animated_pendulum_plotball.f \ animated_pendulum_exitgr.f # set of files for testing -usage options USAGE= usage.f # set of files for testing -vcg switch (use target checkvcg) VCGLIST= comcmp.f comusage.f #======================================================================= # # Default Rules # # Rule for creating source code listing file, suffix .fcl. Stdout and # stderr are merged and environment mechanism for setting command # options is tested. .f.fcl: @if [ -f $*.opt ] ; then \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for expert-mode listings. Same as above except for -nonovice flag. .f.fcx: @if [ -f $*.opt ] ; then \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) -nonovice `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) -nonovice $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for creating free-form source code listing file, suffix .fcl. # Same as for .f except F90 flag is set instead of F77. .f90.fcl: @if [ -f $*.opt ] ; then \ FTNCHEK_F90=1; export FTNCHEK_F90; \ $(FTNCHEK) `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F90=1; export FTNCHEK_F90; \ $(FTNCHEK) $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for creating project file. The .fcl file is made as a side-effect. .f.prj: if [ -f $*.opt ] ; then \ $(FTNCHEK) -project `cat $*.opt` > $*.fcl 2>&1 ; \ else \ $(FTNCHEK) -project $(DEFAULT_FLAGS) $< > $*.fcl 2>&1 ; \ fi # Rule for running checks on source code listing. If OKAY directory does # not exist, it is created. If OKAY code listing does not exist, it # is created and moved into OKAY. Note: In this case, you must examine # the results to see if it is really OK! .f.chk: @-$(RM) $*.fcl @$(MAKE) FTNCHEK='$(FTNCHEK)' $*.fcl "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" @$(COMPARE) $*.fcl .f90.chk: @-$(RM) $*.fcl @$(MAKE) FTNCHEK='$(FTNCHEK)' $*.fcl "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" @$(COMPARE) $*.fcl #======================================================================= # # Targets. # # all: check check: announce clearfail checkall checkfail announce: @echo "============================================================" @echo "There should be no file differences reported by these tests." @echo "Output files matching master output files will be removed," @echo "leaving any erroneous output files in directory $(VARY)" @echo "for manual examination. If you built ftnchek with non-" @echo "standard compilation options, there may be some differences." @echo "============================================================" # Remove signal file created by Compare.sh clearfail: @-$(RM) CHECK_FAILED CHECK_FAILED.save # Look for CHECK_FAILED file -- if found, then Compare.sh found diffs. checkfail: @if [ -f CHECK_FAILED ] ; \ then \ echo "===============================================" ; \ echo "===> There were differences. Check failed. <==" ; \ echo "===============================================" ; \ $(RM) CHECK_FAILED CHECK_FAILED.save ; \ else \ echo "No differences found. Check successful." ; \ fi checkall: checksyntax checksettings checkother checksyntax: checklistings checkexpert checkf90 checkexpr checksettings: checkargs checkarray checkcommon checkintrinsic checkoutput checkusage checkother: checkproject checkrc checkwildcard checkmakedcls \ checkmkhtml checkvcg checkdcl2inc checkftnpp # User should make precheck before running checks. It looks out for # situations that will cause the check to fail: ftnchek not built, # user has an rc file in home directory, or FTNCHEK_* environment # variables are set. precheck: @-$(RM) $(RCFILE) @errorcode=0 ; \ if [ ! -f "$(FTNCHEK)" ] ; then \ echo "ERROR ===> Cannot run checks: no ftnchek found <==="; \ errorcode=1 ; \ fi ; \ if [ -f "$$HOME/.ftnchekrc" ] ; then \ echo "WARNING ===> $$HOME/.ftnchekrc exists <==="; \ echo "delete or rename it before running check" ; \ errorcode=1 ; \ fi ; \ if [ -f "$$HOME/ftnchek.ini" ] ; then \ echo "WARNING ===> $$HOME/ftnchek.ini exists <==="; \ echo "delete or rename it before running check" ; \ errorcode=1 ; \ fi ; \ if $(PRINTENV) | $(GREP) '^FTNCHEK_' >/dev/null 2>&1 ; then \ echo "WARNING ===> environment variables set:"; \ $(PRINTENV) | $(GREP) '^FTNCHEK_' ; \ echo "unset them before running check" ; \ errorcode=1 ; \ fi ; \ if [ "$$errorcode" = 0 ] ; then \ true ; \ else \ false ; \ fi clean mostlyclean clobber distclean realclean spotless: clearfail -$(RM) *.dc[ln0-9a] *.fc[lx0-9A-F] *.htm[l0-0a] -$(RM) *.pcl *.prj *.inc *.vcg *.err *.mak -$(RM) $(RCFILE) -$(RM) *.o -$(RM) *~ \#* -$(RM) a.out core -$(RM) $(VARY)/* # checklistings checks listing output on programs in LISTOUT and FREEFORM checklistings: announcelistings $(LISTOUT:.f=.chk) $(FREEFORM:.f90=.chk) @-echo "done" # Some systems do not have echo -n option, so to suppress newline # in a portable way, we use this `awk'ward kluge. announcelistings: @-echo|$(AWK) '{printf("%s","checking listing output:");}' # checkexpert is like checklistings but uses -nonovice mode to get # the expert style of warning messages. checkexpert: @-echo|$(AWK) '{printf("%s","checking expert-mode output:");}' @for f in $(LISTOUT:.f=) ; \ do \ $(RM) $$f.fcx ; \ $(MAKE) FTNCHEK='$(FTNCHEK)' $$f.fcx "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" ; \ $(COMPARE) $$f.fcx ; \ done @-echo "done" # Next series of targets checks variations of output as options change. # The output files are named *.fc[1-9A-F] for different cases. Note that # in some instances the same source file is also in a set that is used # to check source listing as usual, with output file named *.fcl # checkf90 checks the -f77, -f90, and -f95 flag behavior. checkf90: @-echo |$(AWK) '{printf("%s","checking standard-compliance warnings:");}' @for f in $(F90:.f=) ; \ do \ $(FTNCHEK) -nof77 -nof90 -nof95 $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -f77 -nof90 -nof95 $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -nof77 -f90 -nof95 $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -nof77 -nof90 -f95 $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ done @-echo "done" # checkexpr checks listing output for various size & type clashes in # expressions and assignment stmts checkexpr: @-echo |$(AWK) '{printf("%s","checking size and type mismatch:");}' @for f in $(EXPR:.f=) ; \ do \ $(FTNCHEK) -notrun -noport -nof77 -lis $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -notrun -noport -f77 $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -notrun -port -nof77 $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ $(FTNCHEK) -notrun -port -f77 $$f.f > $$f.fc4 ; \ $(COMPARE) $$f.fc4 ; \ $(FTNCHEK) -trun -noport -nof77 $$f.f > $$f.fc5 ; \ $(COMPARE) $$f.fc5 ; \ $(FTNCHEK) -trun -noport -f77 $$f.f > $$f.fc6 ; \ $(COMPARE) $$f.fc6 ; \ $(FTNCHEK) -trun -port -nof77 $$f.f > $$f.fc7 ; \ $(COMPARE) $$f.fc7 ; \ $(FTNCHEK) -trun -port -f77 $$f.f > $$f.fc8 ; \ $(COMPARE) $$f.fc8 ; \ $(FTNCHEK) -trun -port -nof77 -word=2 $$f.f > $$f.fcA ; \ $(COMPARE) $$f.fcA ; \ $(FTNCHEK) -trun -port -nof77 -word=4 $$f.f > $$f.fcB ; \ $(COMPARE) $$f.fcB ; \ $(FTNCHEK) -trun -port -nof77 -word=8 $$f.f > $$f.fcC ; \ $(COMPARE) $$f.fcC ; \ $(FTNCHEK) -trun -noport -nof77 -word=2 $$f.f > $$f.fcD ; \ $(COMPARE) $$f.fcD ; \ $(FTNCHEK) -trun -noport -nof77 -word=4 $$f.f > $$f.fcE ; \ $(COMPARE) $$f.fcE ; \ $(FTNCHEK) -trun -noport -nof77 -word=8 $$f.f > $$f.fcF ; \ $(COMPARE) $$f.fcF ; \ done @-echo "done" # checkargs checks the -args=n setting checkargs: @-echo |$(AWK) '{printf("%s","checking -args setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-args" "RANGE=0 1 2 3" \ "FLIST=$(ARGS)" "FLAGS=" @-echo "done" # checkarray checks the -array=n setting checkarray: @-echo |$(AWK) '{printf("%s","checking -array setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-array" "RANGE=0 1 2 3" \ "FLIST=$(ARRAY)" "FLAGS=-port" @-echo "done" #checkcommon checks the -common=n setting checkcommon: @-echo |$(AWK) '{printf("%s","checking -common setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-common" "RANGE=0 1 2 3" \ "FLIST=$(COMMON)" "FLAGS=-nof77" @-echo "done" checkdcl2inc: @-echo |$(AWK) '{printf("%s","checking dcl2inc processing:");}' @for f in $(DCL2INCFILES) ; \ do \ b=`basename $$f .f` ; \ $(RM) $$b.dcl $$b.dcn $$b.err $$b.mak ; \ $(RM) *.inc ; \ $(FTNCHEK) -nocheck -makedcls=1 $$f 1>/dev/null 2>/dev/null ; \ $(DCL2INC) $$b.dcl >$$b.mak 2>$$b.err ; \ for g in $$b.dcl $$b.dcn $$b.mak $$b.err *.inc ; \ do \ $(COMPARE) $$g ; \ done ; \ done @-echo "done" # checkftnpp tests the ftnpp filter program if it was built. The fiddling # with CHECK_FAILED is to avoid giving the special message if the test # failure occured elsewhere. checkftnpp: @if [ -x "$(FTNPP)" ] ; \ then \ if [ -f CHECK_FAILED ] ; \ then \ mv CHECK_FAILED CHECK_FAILED.save ; \ fi ; \ echo |$(AWK) '{printf("%s","checking ftnpp:");}' ; \ $(FTNPP) $(FTNPPFLAGS) -DNEC=IBM -IInclude include.f | $(FTNCHEK) > filter.fcl ; \ $(COMPARE) filter.fcl ; \ echo "done" ; \ if [ -f CHECK_FAILED ] ; \ then \ echo "" ; \ echo "--> Some systems are known to fail the ftnpp test. Check the ftnchek web" ; \ echo "--> site, Latest Information (http://www.dsm.fordham.edu/~ftnchek/Plan)," ; \ echo "--> to see if your system is listed, before reporting such error." ; \ fi ; \ if [ -f CHECK_FAILED.save ] ; \ then \ mv CHECK_FAILED.save CHECK_FAILED ; \ fi ; \ fi # checkintrinsic checks the -intrinsic=optionlist setting checkintrinsic: @-echo |$(AWK) '{printf("%s","checking -intrinsic setting:");}' @for f in $(INTRINSIC:.f=) ; \ do \ $(FTNCHEK) -intrinsic=none $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -intrinsic=none,extra $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -intrinsic=none,unix $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -intrinsic=none,vms $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-rand-no-arg $$f.f > $$f.fc4 ; \ $(COMPARE) $$f.fc4 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-rand-one-arg $$f.f > $$f.fc5 ; \ $(COMPARE) $$f.fc5 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-iargc-no-arg $$f.f > $$f.fc6 ; \ $(COMPARE) $$f.fc6 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-iargc-one-arg $$f.f > $$f.fc7 ; \ $(COMPARE) $$f.fc7 ; \ $(FTNCHEK) -intrinsic=all $$f.f > $$f.fc8 ; \ $(COMPARE) $$f.fc8 ; \ done @-echo "done" # checkoutput checks the -output=file string setting checkoutput: @-echo |$(AWK) '{printf("%s","checking -output setting:");}' @$(FTNCHEK) -novice -symt -list -port -out=average.out average.f 2> average.fc2 @-$(COMPARE) average.out @-$(COMPARE) average.fc2 @-echo "done" # checkusage checks the -usage=options setting USAGE_UNUSED=com-block-unused,com-var-set-unused,com-var-unused,ext-unused,var-set-unused,var-unused USAGE_UNINIT=com-var-uninitialized,var-uninitialized checkusage: @-echo |$(AWK) '{printf("%s","checking -usage setting:");}' @for f in $(USAGE:.f=) ; \ do \ $(FTNCHEK) -usage=none $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -usage=none,$(USAGE_UNINIT) $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -usage=none,$(USAGE_UNUSED) $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -usage=all $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ done @-echo "done" # checkproject checks creation and use of project files # Note that correct.f is used in LISTOUT also, but with default # compilation options. So we make listing file suffix .fc1 here checkproject: @-echo |$(AWK) '{printf("%s","checking project files:");}' @$(RM) correct.prj correct.fc1 correct.pcl @$(MAKE) FTNCHEK='$(FTNCHEK)' correct.prj @$(MAKE) FTNCHEK='$(FTNCHEK)' correct.pcl @-for f in correct.fc1 correct.prj correct.pcl ; \ do \ $(COMPARE) $$f ; \ done @-echo "done" # Need explicit rule since the default rule is used by listing-file check correct.prj: correct.f @$(FTNCHEK) -project correct.f > correct.fc1 2>&1 # This target creates output listing file from project file input correct.pcl: correct.f @$(FTNCHEK) correct.prj > correct.pcl 2>&1 # Check the reading of startup file checkrc: @-echo |$(AWK) '{printf("%s","checking reading rc file:");}' @-echo "f77=all" > $(RCFILE) @-echo "symtab" >> $(RCFILE) @$(FTNCHEK) -f77=no-long-name,no-name-underscore do_enddo.f > rc.fcl 2>&1 @$(COMPARE) rc.fcl @$(RM) $(RCFILE) @-echo "done" # Check the interpretation of wildcards in warn-option lists checkwildcard: @-echo |$(AWK) '{printf("%s","checking interpreting wildcards:");}' @$(FTNCHEK) '-port=mixed*' -port=help > wildcard.fc1 2>&1 @$(COMPARE) wildcard.fc1 @$(RM) wildcard.fc1 @$(FTNCHEK) '-usage=no-*var*' -usage=help > wildcard.fc2 2>&1 @$(COMPARE) wildcard.fc2 @$(RM) wildcard.fc2 @$(FTNCHEK) '-usage=no-var*' -usage=help > wildcard.fc3 2>&1 @$(COMPARE) wildcard.fc3 @$(RM) wildcard.fc3 @$(FTNCHEK) '-f77=*array*,format*' -f77=help > wildcard.fc4 2>&1 @$(COMPARE) wildcard.fc4 @$(RM) wildcard.fc4 @$(FTNCHEK) '-pretty=*ugly*' -pretty=help > wildcard.fc5 2>&1 @$(COMPARE) wildcard.fc5 @$(RM) wildcard.fc5 @-echo "done" # Check the generation of declarations files. Listing goes to /dev/null. # The values in MAKEDCLS_VALS are used as 3rd char in .fc? suffix. They # are converted to -makedcls=num values by raising 2 to the power. Thus # file.dc0 contains -makedcls=1, ... file.dca contains -makedcls=1024. # There is also a test to be sure that empty .dcl files are removed # automatically as they should be. MAKEDCLS_VALS = 0 1 2 3 4 5 6 7 8 9 a checkmakedcls: @-echo |$(AWK) '{printf("%s","checking -makedcls setting:");}' @-for n in $(MAKEDCLS_VALS) ; \ do \ dcl=dc$$n ;\ val=`echo $$n|$(SED) -e 's/a/10/'|\ $(AWK) '{x=$$1;p=1;while(x>0){x--;p*=2;}print p;}'` ;\ for f in $(MAKEDCLS) ;\ do \ stem=`echo $$f|$(SED) 's/[.][^.]*//'` ;\ $(FTNCHEK) -nocheck -makedcls=$$val $$f 1>/dev/null 2>/dev/null ; \ if [ -f $$stem.dcl ] ; \ then \ if [ `wc -c $$stem.dcl | $(AWK) '{printf("%s",$$1);}'` -eq 0 ] ; \ then \ $(CP) $$stem.dcl $(VARY)/$$stem.$$dcl ; \ echo ; echo "Empty declarations file" \ $(VARY)/$$stem.$$dcl "should have been deleted" ; \ fi ; \ else \ touch $$stem.dcl ; \ fi ; \ $(MV) $$stem.dcl $$stem.$$dcl ; \ $(COMPARE) $$stem.$$dcl ; \ done ; \ done @echo "done" # The first part of this target tests -mkhtml on a multi-file program, # generating the CallTree.html file as well as a separate .html file # for each component of the program. # The next part of the target tests the various sub-options, and treats # each input file separately, generating only its .html file. It is # similar to checkmakedcls, using the same set of source files, but # not all powers of two are meaningful for -mkhtml. MKHTML_VALS = 0 2 3 4 5 6 9 a checkmkhtml: @-echo |$(AWK) '{printf("%s","checking -mkhtml setting:");}' @$(FTNCHEK) -mkhtml -call=tree $(MKHTML) > mkhtml.fcl 2>&1 @$(COMPARE) mkhtml.fcl @$(COMPARE) CallTree.html @-for f in $(MKHTML:.f=.html) ; \ do \ $(COMPARE) $$f ; \ done @-for n in $(MKHTML_VALS) ; \ do \ html=htm$$n ;\ val=`echo $$n|$(SED) -e 's/a/10/'|\ $(AWK) '{x=$$1;p=1;while(x>0){x--;p*=2;}print p;}'` ;\ for f in $(MAKEDCLS:.f=) ;\ do \ stem=`echo $$f|$(SED) 's/[.][^.]*//'` ;\ $(FTNCHEK) -nocheck -mkhtml=$$val $$f 1>/dev/null 2>/dev/null ; \ $(MV) $$stem.html $$stem.$$html ; \ $(COMPARE) $$stem.$$html ; \ done ; \ done @echo "done" checkvcg: @-echo |$(AWK) '{printf("%s","checking -vcg setting:");}' @-for f in $(VCGLIST:.f=) ; \ do \ $(FTNCHEK) -vcg $$f.f 1>/dev/null 2>/dev/null ; \ $(COMPARE) $$f.vcg ; \ done @echo "done" # CheckSetting is a "subroutine" with parameters SETTING=name of setting, # RANGE=list of setting values, FLIST=list of files to check, and # FLAGS=set of ftnchek flags to use for each case. "Call" this routine # by invoking make with appropriate macro definitions on command line. CheckSetting: @for val in $(RANGE) ; \ do \ for f in $(FLIST:.f=) ; \ do \ $(FTNCHEK) $(SETTING)=$$val $(FLAGS) $$f.f > $$f.fc$$val ; \ $(COMPARE) $$f.fc$$val ; \ done ; \ done # The following targets produce the variant Okay files needed for checking on # MS-DOS systems. dosokay: doshelp dosinclude doswildcard doshelp: $(DOSOKAY)/help.fcl $(DOSOKAY)/help.fcx HELPSUB= -e 's,^ -, /,' -e 's,^ Use -, Use /,' \ -e 's/intrinsic=str \[unix\]/intrinsic=str [common]/' $(DOSOKAY)/help.fcl: $(OKAY)/help.fcl $(SED) $(HELPSUB) $(OKAY)/help.fcl > $(DOSOKAY)/help.fcl $(DOSOKAY)/help.fcx: $(OKAY)/help.fcx $(SED) $(HELPSUB) $(OKAY)/help.fcx > $(DOSOKAY)/help.fcx dosinclude: $(DOSOKAY)/include.fcl $(DOSOKAY)/include.fcx INCLUDESUB= -e 's,/Include/,\\Include\\,' $(DOSOKAY)/include.fcl: $(OKAY)/include.fcl $(SED) $(INCLUDESUB) $(OKAY)/include.fcl > $(DOSOKAY)/include.fcl $(DOSOKAY)/include.fcx: $(OKAY)/include.fcx $(SED) $(INCLUDESUB) $(OKAY)/include.fcx > $(DOSOKAY)/include.fcx doswildcard: $(DOSOKAY)/wildcard.fc1 $(DOSOKAY)/wildcard.fc2 \ $(DOSOKAY)/wildcard.fc3 $(DOSOKAY)/wildcard.fc4 WILDCARDSUB= -e 's,equivalent to -,equivalent to /,' $(DOSOKAY)/wildcard.fc1: $(OKAY)/wildcard.fc1 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc1 > $(DOSOKAY)/wildcard.fc1 $(DOSOKAY)/wildcard.fc2: $(OKAY)/wildcard.fc2 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc2 > $(DOSOKAY)/wildcard.fc2 $(DOSOKAY)/wildcard.fc3: $(OKAY)/wildcard.fc3 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc3 > $(DOSOKAY)/wildcard.fc3 $(DOSOKAY)/wildcard.fc4: $(OKAY)/wildcard.fc4 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc4 > $(DOSOKAY)/wildcard.fc4 ftnchek-3.3.1/test/allkeywords.f0000644000031000002260000000465007617550611017261 0ustar moniotstaff00000000000000! All the keywords recognized by ftnchek as of 21 July 2000 PROGRAM allkeys IMPLICIT NONE BYTE b(100) CHARACTER *100 c DOUBLE COMPLEX a COMPLEX z DOUBLEPRECISION d DOUBLE PRECISION f EXTERNAL f, foo, iftn_calloc INTEGER i, l, u, iftn_calloc LOGICAL bool POINTER (ptr, ptee) INTEGER ptee(*) REAL pi EQUIVALENCE (b(1), i) NAMELIST /n1/ a,b,c PARAMETER (pi = 3.1415926) INCLUDE 'block2.i' ACCEPT *, c OPEN(unit=10, file=c) u = 10 ASSIGN 100 TO l 100 CONTINUE READ(10,*) a, x, i, z, d BACKSPACE 10 BACKSPACE u BACKSPACE (unit=10) ptr = iftn_calloc (1000, 4) CALL foo SELECTCASE (i) CASE (1) ptee(i) = 2 CASEDEFAULT ptee(i) = ptee(1) ENDSELECT SELECT CASE (i) CASE (2) i = 3 CASE DEFAULT i = 4 END SELECT DO 200 i=1,10 200 PRINT *, i IF( x .eq. i ) GOTO l INQUIRE(UNIT=u, IOSTAT=i) ENDFILE 10 END FILE u ENDFILE (unit=10,err=100) REWIND 10 REWIND u REWIND (unit=10) CLOSE (UNIT=10) bool = .TRUE. IF( bool ) THEN WRITE(10,*) a, y, z ELSEIF( .NOT. .FALSE. ) THEN WRITE(UNIT=10,FMT=900) 'Testing 1, 2, 3' 900 FORMAT(1x,a20) ELSE CALL bar STOP ENDIF DOWHILE( i .lt. 100 ) IF( f(d) .gt. 3.14) THEN CYCLE ELSE EXIT END IF ENDDO i = 1 DO WHILE( i .lt. 100 ) i = i*2 END DO DO 300 WHILE( x .gt. 0.0 ) TYPE *, pi, 'Over and over' 300 CONTINUE DO 4321, WHILE( x .gt. 0.0 ) TYPE *, pi, 'Over and over' 4321 CONTINUE GO TO 100 END DOUBLEPRECISION FUNCTION f(x) DOUBLE PRECISION x REAL y1, y2 DOUBLECOMPLEX a SAVE a DIMENSION a(2) INTRINSIC sqrt COMMON /block1/ y1, y2 a(1) = (1.0d1, 2.0d2) a(2) = a(1) f = x*dble(y1*y2)* sqrt(real(a(1))) RETURN END SUBROUTINE foo IMPLICIT INTEGER (A-Z) WRITE(10,*) 'foo' RETURN ENTRY bar WRITE(10,*) 'bar' PAUSE RETURN END BLOCKDATA bdat1 COMMON /block1/ a, b DATA a, b /1.0, 2.0/ END BLOCK DATA bdat2 IMPLICITNONE INCLUDE 'block2.i' DATA x, y /1.0, 2.0/ END ftnchek-3.3.1/test/animated_pendulum_cls.f0000644000031000002260000000061107617550611021246 0ustar moniotstaff00000000000000 SubRoutine CLS * * Clears the screen. * Put machine dependent code here. * Character Esc,Clear_String*6 Esc=CHAR(27) Clear_String(1:1)=Esc Clear_String(2:2)='[' Clear_String(3:3)='H' Clear_String(4:4)=Esc Clear_String(5:5)='[' Clear_String(6:6)='J' Write(5,10)Clear_String 10 Format(1x,6a) End ftnchek-3.3.1/test/animated_pendulum_entergr.f0000644000031000002260000000025707617550611022141 0ustar moniotstaff00000000000000 SubRoutine EnterGraphicsMode ! ! Enter ReGIS, clear screen ! character*1 esc esc=char(27) write(*,*)esc,'P0ps(e)' Return End ftnchek-3.3.1/test/animated_pendulum_exitgr.f0000644000031000002260000000030007617550611021762 0ustar moniotstaff00000000000000 SubRoutine ExitGraphicsMode C Go out of graphics mode back to C text mode. character*1 esc esc=char(27) write(*,*)esc,'\',esc,'[15H' Return End ftnchek-3.3.1/test/animated_pendulum_main.f0000644000031000002260000000343007617550611021413 0ustar moniotstaff00000000000000 program AnimatedPendulum ********************************************** * Program: Simple_Pendulum_Solver * * Written_By: Brian Downing * * Fordham University * * Date: October 23rd, 1990 * ********************************************** Implicit None * * Declare double precision variables. * double precision a,g,l,t,dt,w,Pi,Theta,ThetaM * * Initialize some constant values. * Pi = 4.0*ATAN(1.0) * * Clear screen and then prompt for real numbers for variables. * Call CLS write(5,100) read*,dt write(5,200) read*,Theta write(5,300) read*,l * * Initialize other variables. * g = 9.81 ThetaM = Theta*Pi/180.0 Theta = ThetaM t = 0.0 w = 0.0 a = (-g/l)*DSIN(Theta) * * Loop until finished (angle.eq.-Theta_naught .or. omega = 0)? * Call EnterGraphicsMode do while (.true.) a = (-g/l)*DSIN(Theta) w = w + a*dt Theta = Theta + w*dt t = t + dt Call PlotBall(Theta) if (Theta.le.(-ThetaM)) goto 10 enddo 10 continue * * Print out final results. * print*,'Finished calculations.' write(5,20)a,w,Theta,t * * Program format statements. * 20 format(1x,'Acceleration',T15,'= ',D12.4/ 1 1x,'Omega',T15,'= ',D12.4/ 2 1x,'Theta',T15,'= ',D12.4/ 3 1x,'Time',T15,'= ',D12.4/) 100 format(1x,'Enter real number for delta time in seconds: ',$) 200 format(1x,'Enter real number for Theta in degrees: ',$) 300 format(1x,'Enter real number for Length in meters: ',$) Call ExitGraphicsMode End ftnchek-3.3.1/test/animated_pendulum_plotball.f0000644000031000002260000000043007617550611022275 0ustar moniotstaff00000000000000 SubRoutine PlotBall (Theta) c Clear the screen and draw/redraw the ball circle. Double Precision Theta Integer Row,Col Row=Int(300.0*DSIN(Theta)) Col=Int(300.0*DCOS(Theta)) Write(*,*)'S(E)P[Col,Row]C[+20]' Return End ftnchek-3.3.1/test/arg-alias.f0000644000031000002260000000110507617550611016551 0ustar moniotstaff00000000000000 INTEGER LIST(100) EQUIVALENCE (E,B) EQUIVALENCE (E,C) EQUIVALENCE (A,C) A = 1.0 CALL FOO(A,D,B,C) CALL FOO(A,B,C,A) CALL FOO(W,X,Y,Z) DO 10 I = 1,100 LIST(I) = I 10 CONTINUE DO 30 I = 1,100 DO 20 J = 1,I CALL SWAP(LIST(I),LIST(J)) 20 CONTINUE 30 CONTINUE END SUBROUTINE FOO(A,B,C,D) CALL SWAP(A,B) B = C C = D D = A END SUBROUTINE SWAP(X,Y) INTEGER X,Y INTEGER TEMP TEMP = X X = Y Y = TEMP END ftnchek-3.3.1/test/args01.f0000644000031000002260000000020407617550611016005 0ustar moniotstaff00000000000000 integer c(100) c(1) = 1 call suba(c) end subroutine suba(c) integer c print *,c end ftnchek-3.3.1/test/args02.f0000644000031000002260000000021007617550611016003 0ustar moniotstaff00000000000000 integer c(100) c(1) = 1 call suba(c) end subroutine suba(c) integer c(10) print *,c end ftnchek-3.3.1/test/args03.f0000644000031000002260000000021507617550611016011 0ustar moniotstaff00000000000000 integer c(10,10) data c /1/ call suba(c) end subroutine suba(c) integer c(100) print *,c end ftnchek-3.3.1/test/args04.f0000644000031000002260000000021507617550611016012 0ustar moniotstaff00000000000000 integer c(20,10) data c /1/ call suba(c) end subroutine suba(c) integer c(100) print *,c end ftnchek-3.3.1/test/args05.f0000644000031000002260000000022307617550611016012 0ustar moniotstaff00000000000000 character c(20,10) data c /'1'/ call suba(c) end subroutine suba(c) character c(100) print *,c end ftnchek-3.3.1/test/args06.f0000644000031000002260000000022307617550611016013 0ustar moniotstaff00000000000000 character c(10,10) data c /'1'/ call suba(c) end subroutine suba(c) character c(100) print *,c end ftnchek-3.3.1/test/args07.f0000644000031000002260000000022507617550611016016 0ustar moniotstaff00000000000000 character*2 c(10,10) data c /'1'/ call suba(c) end subroutine suba(c) character c(100) print *,c end ftnchek-3.3.1/test/args08.f0000644000031000002260000000022507617550611016017 0ustar moniotstaff00000000000000 character c(10,10) data c /'1'/ call suba(c) end subroutine suba(c) character*2 c(100) print *,c end ftnchek-3.3.1/test/args09.f0000644000031000002260000000022407617550611016017 0ustar moniotstaff00000000000000 character c(10,10) data c /'1'/ call suba(c) end subroutine suba(c) character*2 c(50) print *,c end ftnchek-3.3.1/test/args10.f0000644000031000002260000000023007617550611016004 0ustar moniotstaff00000000000000 character c(10,10) data c /'1'/ call suba(c) end subroutine suba(c) character*(*) c(2000) print *,c end ftnchek-3.3.1/test/args11.f0000644000031000002260000000017607617550611016016 0ustar moniotstaff00000000000000 character c(50) call suba(c(1)) end subroutine suba(c) character c(50) read *,c end ftnchek-3.3.1/test/args12.f0000644000031000002260000000017207617550611016013 0ustar moniotstaff00000000000000 character c(50) call suba(c(1)) end subroutine suba(c) character c read *,c end ftnchek-3.3.1/test/args13.f0000644000031000002260000000017407617550611016016 0ustar moniotstaff00000000000000 character c(50) call suba(c(1)) end subroutine suba(c) character*2 c read *,c end ftnchek-3.3.1/test/args14.f0000644000031000002260000000013407617550611016013 0ustar moniotstaff00000000000000 call suba(4hjunk) end subroutine suba(i) write(*,'(a)') i end ftnchek-3.3.1/test/args15.f0000644000031000002260000000013507617550611016015 0ustar moniotstaff00000000000000 call suba(5hjunky) end subroutine suba(i) write(*,'(a)') i end ftnchek-3.3.1/test/arrayclash.f0000644000031000002260000000023707617550611017047 0ustar moniotstaff00000000000000 real a(3,7),x,y(21), b(20) call suba(a,x) call suba(x,a) call suba(y,1.0) call suba(y(1),x) call suba(b,x) end subroutine suba(w,z) real w(21),z end ftnchek-3.3.1/test/assign.f0000644000031000002260000000174107617550611016203 0ustar moniotstaff00000000000000c for testing propagation of type sizes subroutine sizeprop(cadj,i,x) character cadj*(*) character c1, c5*5, c10*10 c1 = c5 c5 = c1 c5 = cadj cadj = c5 c5 = 'hello' c5 = 5Hhello c5 = 11Hhello there end integer i,j,n integer*4 m parameter (n=6) parameter (m=7) real x,y integer*2 i2 integer*4 i4 logical L logical*2 L2 logical*4 L4 double precision d real*4 r4 real*8 r8 complex c real*16 r16 double complex z complex*16 c16 complex*32 c32 i = m i = n i = 1 i = i2 i = i4 i4 = i i4 = i2 i2 = i4 i = 4habcd i = 8habcdefgh x = r4 x = r8 x = c d = x x = d z = d d = z r16 = d r16 = r8 d = r4 d = r8 d = r16 c = x c = z i = L4 call sizeprop('hello',i2,r16) end ftnchek-3.3.1/test/autoarray.f0000644000031000002260000000034107617550611016721 0ustar moniotstaff00000000000000 program main call test(100) end subroutine test(n) integer n C the following local array cannot have variable bounds. integer auto(n) auto(1) = 5 auto(2) = auto(1)*2 end ftnchek-3.3.1/test/average.f0000644000031000002260000000226107617550611016327 0ustar moniotstaff00000000000000C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,J,SCORE(5) DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = SUM/COUNT END PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C PARAMETER(MAXNOS=5) INTEGER I, COUNT REAL NUMS(MAXNOS), AVG COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) END ftnchek-3.3.1/test/backslash.f0000644000031000002260000000051007617550611016643 0ustar moniotstaff00000000000000 character*100 c c = 'line\ break' c = 'LINE\ $ BREAK' c = '\142\040\40\132_\x5ag' c = 'abcdefg' c = "abcdefg" c = c// "don't" c = 'He said "yes," I think' c = "\n, \\" c = "\"" c = '\' !' C the next one tests unix_backslash c = '\'!' end ftnchek-3.3.1/test/backslash.opt0000644000031000002260000000005207617550611017221 0ustar moniotstaff00000000000000--no-f77 --source=4 --wrap=65 backslash.f ftnchek-3.3.1/test/block2.i0000644000031000002260000000015307617550611016072 0ustar moniotstaff00000000000000! Include file with common block definition for allkeywords.f REAL x, y COMMON /block2/ x, y ftnchek-3.3.1/test/blockcheck.f900000644000031000002260000000336507617550611017164 0ustar moniotstaff00000000000000program blocks ! program to check parsing of block structures real x integer n x = bar(1.0) if( x .gt. 0 ) then call baz(x) n = int(x) select case (n) case(1) call baz(2.0) case(2:10) call baz(3.0) case(-1,11:100,300) call baz(4.0) case default call baz(5.0) end select else k = 0 loop1: do i=1,100 loop2: do j=1,10 write(*,*) i,j,i*j if( i .eq. 50 ) exit loop1 k = k + j if( k .eq. 50) cycle loop2 end do loop2 write(*,*) k*i**2 enddo loop1 case2: select case (n) case(1) case2 call baz(2.0) case(2:10) case2 call baz(3.0) case(-1,11:100,300) case2 call baz(4.0) case default case2 do i=1,10 if( i == 7 ) goto 200 call baz(5.0) 200 end do end select case2 end if end program blocks function bar(c) real a, b, c ,d read *, a ! This block is from section 8.1.2.3 of the F90 standard, except for ! removing space between some keywords if ( a .gt. 0 ) then b = c/a if (b .gt. 0) then d = 1.0 endif elseif (c .gt. 0) then b = a/c d = -1.0 else b = abs (max (a, c)) d = 0 endif bar = d*b end function bar subroutine baz(c) real a, b, c ,d read *, a ! Same as above but with spaces restored and construct names added first_if: if ( a .gt. 0 ) then b = c/a second_if: if (b .gt. 0) then d = 1.0 end if second_if else if (c .gt. 0) then first_if b = a/c d = -1.0 else first_if b = abs (max (a, c)) d = 0 end if first_if print *, a, b, c, d end subroutine baz ftnchek-3.3.1/test/blockerrors.f0000644000031000002260000000530307617550611017244 0ustar moniotstaff00000000000000 program blocks ! program with various errors in balancing block structures real x integer n x = bar(1.0) if( x .gt. 0 ) then call baz(x) n = int(x) select case (n) case(1) call baz(2.0) case(2:10) call baz(3.0) case(-1,11:100,300) call baz(4.0) case default call baz(5.0) end select else k = 0 loop1: do i=1,100 loop2: do j=1,10 write(*,*) i,j,i*j if( i .eq. 50 ) exit loopdedo ! wrong construct name k = k + j if( k .eq. 50) cycle loop2 end do loop2 write(*,*) k*i**2 enddo foop1 case2: select case (n) case(1) case2 call baz(2.0) case(2:10) caseZ call baz(3.0) case(-1,11:100,300) case2 call baz(4.0) case default case2 ! do-loops with shared terminator do 100 i=1,10 do 100 j=1,10 print *, i, j, i*j 100 continue do 200 i=1,10 do 250 j=1,10 print *, i, j, i*j 200 continue ! terminators out of order 250 end do end select case2 end if if( x .eq. 0) exit ! no enclosing DO else if( x .lt. 0 ) then ! else has no matching then print *, 'Hello' end select ! should be end if end program blocks function bar(c) real a, b, c ,d read *, a ! This block is from section 8.1.2.3 of the F90 standard, except for ! removing space between some keywords if ( a .gt. 0 ) then b = c/a if (b .gt. 0) then d = 1.0 endif elseif (c .gt. 0) then b = a/c d = -1.0 else b = abs (max (a, c)) d = 0 endif bar = d*b end subroutine subroutine baz(c) real a, b, c ,d read *, a ! Same as above but with spaces restored and construct names added first_if: if ( a .gt. 0 ) then b = c/a second_if: if (b .gt. 0) then d = 1.0 end if second_if else if (c .gt. 0) then firstif b = a/c d = -1.0 else first_if b = abs (max (a, c)) d = 0 end if print *, a, b, c, d end subroutine bazz ftnchek-3.3.1/test/blockerrors.opt0000644000031000002260000000004207617550611017614 0ustar moniotstaff00000000000000-list -nof77 -style blockerrors.f ftnchek-3.3.1/test/builtin.f0000644000031000002260000000027007617550611016361 0ustar moniotstaff00000000000000C checks makedcl generation of "Built-in" section double precision dsqrt, x intrinsic sqrt, dsqrt x = dsqrt(2.0d0) y = sqrt(2.0) print *, x, y end ftnchek-3.3.1/test/case.f0000644000031000002260000000153107617550611015627 0ustar moniotstaff00000000000000 program testcase integer ivar1 character*8 cvar1 character*1 cvar2 logical lvar1 real rvar1 ivar1 = 3 lvar1 = .true. select case (ivar1) cvar1 = 'no path!' case (:-1) cvar1 = 'path' case (10/5 - 2) case (1) case (2:3, 5:7, 9) case (10:) case default cvar2 = 'd' end select select case (lvar1) case (.false.) case (.true.:) case (:.false.) case (1.eq.0) end select cvar1 = 'hamster' select case (cvar1) case (:'cat') case ('dog':'fer' // 'ret') case ('gerbil') case ('horse':) case default end select select case (rvar1) case (-1.0) case (2:5.0) case (ivar1) case (:.false.) end select stop end ftnchek-3.3.1/test/chestnuts.f0000644000031000002260000000057507617550611016743 0ustar moniotstaff00000000000000C Famous difficult cases in Fortran syntax INTEGER FORMAT(10),H3 DO10I=1,10 DO10I=1.10 10 CONTINUE DOUBLE PRECISION I=1,10 DOUBLE PRECISION I=1.10 END DO 1 format(3H)=(I9/I10) 2 format(H3)=(I9/I10) end REALFUNCTIONF(M,N) REALFUNCTIONF(M,N) REALFUNCTIONF(M,N)=M+N FUNCTIONF(M,N)=M+N F=M+N END ftnchek-3.3.1/test/chestnuts.opt0000644000031000002260000000002707617550611017310 0ustar moniotstaff00000000000000--nopretty chestnuts.f ftnchek-3.3.1/test/comclash.f0000644000031000002260000000035407617550611016507 0ustar moniotstaff00000000000000 common /abc/ x,y,z abc = 5 x = abc end subroutine sub1 common /abc/ x,y,z real abc(5) x = abc(1) call sub2(x,y) call sub2(1.0,2) end subroutine sub2(a,b) common /abc/ x,i,z x = abc(1) end function abc(n) abc = n*n end ftnchek-3.3.1/test/comcmp.f0000644000031000002260000000140407617550611016171 0ustar moniotstaff00000000000000 character *8 c8,c7*7 character c1 common /chars/ c1,c8,c7 integer iplain integer *4 ifour integer*2 itwo common /ints/ iplain,ifour,itwo common /bk1/ a,b,c,d,e,f,g c1 = 'A' call foo end subroutine foo character *8 c8,c7*7 character c1 common /chars/ c7,c8,c1 integer iplain integer *4 ifour integer*2 itwo common /ints/ iplain,itwo,ifour common /bk1/ i,j,k,l,m,n,o c1 = 'A' call bar end subroutine bar character *8 c8,c7*7 character c1 common /chars/ c7,c8 integer iplain integer *4 ifour common /ints/ ifour,iplain common /bk1/ a(3),j,x,y,z c1 = 'A' c7 = c1//c8 end ftnchek-3.3.1/test/comcmp.opt0000644000031000002260000000005507617550611016547 0ustar moniotstaff00000000000000-common:3 -no-f77 -port -quiet comcmp.f -ref ftnchek-3.3.1/test/common-alias.f0000644000031000002260000000107307617550611017274 0ustar moniotstaff00000000000000C Test program for checking aliasing of arguments to common variables C COMMON Q,F,X COMMON /BLK1/ DAT(100) W = 1.0 X = 2.0 Z = 4.0 CALL FOO(W,X,Y,Z) CALL FOO(F,W,Y,Z) CALL FOO(W,Y,Q,Z) PRINT *, W,X,Y,Z CALL BAR(DAT,100) STOP END SUBROUTINE FOO(A,B,C,D) COMMON T,U,V B = A+C+D T = B + 1.0 RETURN END SUBROUTINE BAR(D,N) COMMON /BLK1/ TAD(100) REAL D(N) DO 10 I=1,N-1 TAD(I) = I D(I) = TAD(I)*2.0 10 CONTINUE END ftnchek-3.3.1/test/complex.f0000644000031000002260000000057107617550611016366 0ustar moniotstaff00000000000000 complex cc,cd parameter (cc=(1.2,3.4)) data cd,de / ( +23e5 , 0 ), (-5 , +77)/ a = (12,32) a = (5,-3e5) write(11,7) a 7 format(1x,2f10.2) print 22, (1,2) ,a,(1,2,i=1,2) 22 format(1x,2e10.3,2f10.2,4i4) call abc(123,(456,789)) end subroutine abc(x,z) integer x complex z print *,z+x end ftnchek-3.3.1/test/complex.opt0000644000031000002260000000001707617550611016736 0ustar moniotstaff00000000000000-sym complex.f ftnchek-3.3.1/test/comtest.f0000644000031000002260000000017207617550611016372 0ustar moniotstaff00000000000000 COMMON A,B,C/ABC/M,N COMMON X,I,J COMMON /ABC/Q,R,S END subroutine noname common x,y,i,a,b,n common /abc/ m,n end ftnchek-3.3.1/test/comusage.f0000644000031000002260000000111607617550611016516 0ustar moniotstaff00000000000000 Program Main common a,b,c print *,a,b,c Call Input Call Comp Call Output End Subroutine Input Common /INP/ x1,x2,x3,x4 Real x1,x2,x3 Common/LAST/ y1,y2,y3 Write(*,*) 'Enter 3 Values' Read (*,*) x1,x2,x3 y2 = y3 Return End Subroutine Comp Common /INP/ A,B,C Common /ZAP/ t1,t2,t3 Real A,B,C Common /OUTP/ AVG Real AVG Avg = (A+B+C)/3 Return End Subroutine Output Common /OUTP/ Averag Real Averag Common /LAST/ n1,n2,n3 Write (*,*) 'Average =',Averag n1 = 8 Return End ftnchek-3.3.1/test/comusage.opt0000644000031000002260000000003407617550611017071 0ustar moniotstaff00000000000000-common=volatile comusage.f ftnchek-3.3.1/test/correct.f0000644000031000002260000000177507617550611016367 0ustar moniotstaff00000000000000C AUTHORS: MIKE MYERS & LUCIA SPAGNUOLO C DATE: MAY 8, 1989 C Variables: C SCORE -> an array of test scores C SUM -> sum of the test scores C COUNT -> counter of scores read in C I -> loop counter REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,I,SCORE(5) SUM = 0 DO 30 I = 1,COUNT SUM = SUM + SCORE(I) 30 CONTINUE COMPAV = FLOAT(SUM)/FLOAT(COUNT) END PROGRAM AVENUM C C MAIN PROGRAM C C AUTHOR: LOIS BIGBIE C DATE: MAY 15, 1990 C C Variables: C MAXNOS -> maximum number of input values C NUMS -> an array of numbers C COUNT -> exact number of input values C AVG -> average returned by COMPAV C I -> loop counter C INTEGER MAXNOS PARAMETER(MAXNOS=5) INTEGER I, NUMS(MAXNOS), COUNT REAL AVG COUNT = 0 DO 80 I = 1,MAXNOS READ (5,*,END=100) NUMS(I) COUNT = COUNT + 1 80 CONTINUE 100 AVG = COMPAV(NUMS, COUNT) WRITE(6,*) 'AVERAGE =',AVG END ftnchek-3.3.1/test/cycle-exit.f0000644000031000002260000000057407617550611016770 0ustar moniotstaff00000000000000C Testing of recognition of CYCLE and EXIT statements. C Also tests that no-path warning is generated. do i=1,100 if( mod(i,2) .eq. 0 ) then print *, i cycle print *, i*i ! no path to this statement endif if( i .gt. 10 ) exit print *, i*i ! there is a path to this statement end do end ftnchek-3.3.1/test/dcltest.f0000644000031000002260000000031207617550611016352 0ustar moniotstaff00000000000000 program test1 c character STRING1*6 parameter( STRING1 = 'abc123' ) character STRING2*(6) parameter( STRING2 = 'xyz789' ) c write(*,*) STRING1,STRING2 c end ftnchek-3.3.1/test/dec-parameter.f0000644000031000002260000000070107617550611017423 0ustar moniotstaff00000000000000C IMPLICIT INTEGER(a-z) PARAMETER shipmoves=3 PARAMETER fightermoves=8 PARAMETER (stdparam = 7) INTEGER g2(100) INTEGER hits(15),tipe(15),crahit(15),craloc(15) BYTE specal,pass BYTE ab,ac,ad,ao,e,own1,own2,own !AVOID WORD REFERENCES TO THESE INTEGER rlmap(3000) LOGICAL automv,autosave,savedone COMMON/AB9/ab9,prior,nshprf COMMON/ARMTOT/armtot end ftnchek-3.3.1/test/dectab.f0000644000031000002260000000015507617550611016137 0ustar moniotstaff00000000000000 subroutine abc common a,b 1 ,c a = 1 b = a 2 / c if(a .ge.b)a=1 3 +2 c = 2/3 print*,a,b,c end ftnchek-3.3.1/test/dectab.opt0000644000031000002260000000004307617550611016510 0ustar moniotstaff00000000000000-source=dec-tab -sym -div dectab.f ftnchek-3.3.1/test/dims.f0000644000031000002260000000067207617550611015655 0ustar moniotstaff00000000000000 subroutine foo(d) parameter (n=1,m=2,k=3) character *17 xx integer a(1:m*n,-n+2), b(n*(m+k)*2,k+1) integer d(*,*) common /xx/ xx(101) character*1 str, str2*(n), str3*(*), str4*(m+n*k) external str dimension str2(k*m) character *10 c(len('won''t')) a(n,1) = a(1,m) c(2)(a(ichar('A'//'hello'), ichar(char(40))+3) $ :ichar(str("won""t",40) (1:1))) = 'x' end ftnchek-3.3.1/test/dims.opt0000644000031000002260000000002007617550611016215 0ustar moniotstaff00000000000000nosuch.f dims.f ftnchek-3.3.1/test/do_enddo.f0000644000031000002260000000115207617550611016466 0ustar moniotstaff00000000000000c VAX-compatible fortran: underscores & do-enddo subroutine abc sum = 0.0 do i=1,100 sum = sum + i enddo print *,sum !@#$*& # ,i other_sum = 1.0 do while(other_sum .lt. 2000) other_sum = other_sum * 2.0 end do ! here we have a nonstandard comment print *,other_sum dowhile ( x .ne. (1,2)) x = 3.0 end do do 100 while (.true.) read(*,*) sum if( sum .eq. 0.0 ) exit 100 continue do 200, while (.false.) write(*,*) 'Cannot happen' 200 end do end include 'average.f' ftnchek-3.3.1/test/do_enddo.opt0000644000031000002260000000002107617550611017035 0ustar moniotstaff00000000000000-port do_enddo.f ftnchek-3.3.1/test/embedded-space.f0000644000031000002260000000053407617550611017540 0ustar moniotstaff00000000000000 p r o g r a m t e s t realxray,zebra read(*,*) x ray,zebra i f ( xray . eq . zebra ) w r i t e(*,*) xray * $* zebra if( xray .e q. zebra) write(*,*) 'h e l l o ' / / ' t h e r e' if( xray / = zebra ) write(* , *) xray + zebra if( xray < zebra ) write(* , *) xray - zebra end ftnchek-3.3.1/test/f95deleted.f0000644000031000002260000000066707617550611016657 0ustar moniotstaff00000000000000C Tests flagging of deleted features in Fortran 95 integer i,j,label,format real x assign 5 to label assign 90 to format j = 1 5 continue do 10 x=1,5 print format,x,j*x**2 10 continue j = j+1 if( j .eq. 2 ) goto label i = j*2 assign 91 to format write(*,format) i,j write(*,91) i,j 90 format(1x,2f6.0) 91 format(1x,2hi=,i5,3h j=,i5) end ftnchek-3.3.1/test/help.f0000644000031000002260000000000007617550611015632 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/help.opt0000644000031000002260000000000607617550611016215 0ustar moniotstaff00000000000000-help ftnchek-3.3.1/test/iffy.f0000644000031000002260000000154307617550611015654 0ustar moniotstaff00000000000000 SUBROUTINE IFFY ( USE1, USE2, L ) * Tests parsing & type-checking of various IF forms. * LOGICAL USE1, USE2 INTEGER L INTEGER M REAL X * this block-if statement is OK IF ( USE1 ) THEN M = 1 * else-if statement is OK ELSE IF ( USE2 ) THEN M = 2 ELSE M = 3 END IF * this logical if is OK IF( M .eq. 3 ) L = L+1 * this arithmetic if is OK IF( L ) 100, 100, 100 100 X = L * this arithmetic if is OK IF( X ) 150, 150, 150 150 CONTINUE * violate a block if statement IF ( L ) THEN M = M+1 * violate an elseif statement ELSE IF ( M ) THEN M = M+2 ELSE M = M+3 END IF * violate a logical if statement IF( M ) L = L+1 * violate an arithmetic if statement IF( L .EQ. 3 ) 200, 200, 200 200 CONTINUE END ftnchek-3.3.1/test/include.f0000644000031000002260000000732407617550611016345 0ustar moniotstaff00000000000000C Derived from Brian Downing's WC program, replacing common decls by INCLUDEs C C main(){ Get a file, open it, read and determine semi-useful C statistics, print them to screen, and exit quietly. C }; C C This program is an example word counter that makes use of several C Fortran intrinsic functions and data structures, such as; C common, sub-routines, functions, inplied do loops, and much, much more. C Program WC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Program: Word_Count_And_Other_Stuff C C Written_By: Brian Downing C C Fordham University C C Date: October 1st-16th, 1990 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Character Fname*80 Call Initialize Call GetFileName(Fname) Call GetStats(Fname) Call PrintStats End C C SubRoutine to get all kinds of neat statistics. C SubRoutine GetStats(Fname) Include 'stats.h' Character Inline*82, Fname*80, Ch Open (Unit=8,File=Fname,Err=999) Do While (.TRUE.) Read(8,10,End=888)InLine NL = NL + 1 LastPos = INDEX(InLine,' ') Do J = 1,LastPos Ch = InLine(J:J) L = IntUpCase(ICHAR(Ch)) NEC(L) = NEC(L) + 1 If ((Ch.NE.' ').AND.(Ch.NE.'.')) Then NC = NC + 1 ElseIf (Ch.EQ.'.') Then NP = NP + 1 Else NW = NW + 1 EndIf EndDo EndDo 888 Continue ACPW = REAL(NC)/REAL(NW) AWPS = REAL(NW)/REAL(NP) Return 10 Format(a) 999 Print*,'Error opening file, please verify filename and try again.' C C In the event of improper filename exit abruptly. C STOP End C C SubRoutine to print to terminal all of these neat statistics. C SubRoutine PrintStats Include 'stats.h' Write(5,10)ACPW,AWPS,NW,NP,NL,NC Write(5,20) Do J = 65,90 Write(5,40)(CHAR(J),NEC(J),('@',K=1,(NEC(J)/10)), 1 ('*',K=1,MOD(NEC(J),10))) EndDo Write(5,50) 10 Format('1'30X'Word Statistics'/1x,80('*')/ 1 1X'Average characters per word = 'F6.2/ 2 1X'Average words per sentence = 'F6.2/ 3 1X'Total number of words = 'I5/ 4 1X'Total number of sentences = 'I5/ 5 1X'Total number of lines = 'I5/ 6 1X'Total number of characters = 'I5/) 20 Format(29x'Character Statistics'/1x,80('*')/) 30 Format(1X,A) 40 Format(1X,A','I3,1x,125(A)) 50 Format(1X'Legend:'/9x'@ equals ten characters', 1 ', * equals one character.') Return End C C SubRoutine to prompt for and return a filename. C SubRoutine GetFileName(Fname) Character Fname*80, Prompt*7 Prompt = '_File: ' Write(5,10)Prompt Read(5,20)Fname 10 Format(1XA$) 20 Format(A) Return End C C SubRoutine to initailize globally used variables. C SubRoutine Initialize Common /Stats/A,B,J,K,L,M,N(26) Do O = 1,26 N(O) = 0 EndDo A = 0.0 B = 0.0 J = 0 K = 0 L = 0 M = 0 Return End C C Function to return integer value of a character in range of uppercase. C Function IntUpCase (I) If ((I.LE.ICHAR('z')).AND.(I.GE.ICHAR('a'))) Then IntUpCase = I - ICHAR(' ') Else IntUpCase = I EndIf Return End ftnchek-3.3.1/test/include.opt0000644000031000002260000000005707617550611016716 0ustar moniotstaff00000000000000-list -symt -port -include=./Include include.f ftnchek-3.3.1/test/initializers.f0000644000031000002260000000276107617550611017430 0ustar moniotstaff00000000000000C Testing syntax recognition and assignment type checking of C standard and non-standard initializing declarations. C Here we use modern standard F90 initializers subroutine f90 integer :: m, n = 100 C ftnchek does not recognize the following one yet integer, dimension(5) :: a = (/ 1, 2, 3, 4, 5 /) real :: pi = 3.14159265358979d0 character :: c = 32 ! type mismatch integer :: q = 'hello' ! type mismatch print *, 'F90 initializers:' print *, m, n, a ! m used before set print *, pi, c, q end C Here we use archaic but standard F77 separate type decls and data stmts subroutine f77 integer m, n, a(5) real pi character c integer q data n / 100 / data a / 1, 2, 3, 4, 5 / data pi / 3.14159265358979d0 / data c / 32 / ! type mismatch data q / 'hello' / ! type mismatch print *, 'F77 initializers:' print *, m, n, a ! m used before set print *, pi, c, q end C This one uses "bastard" initializer form. subroutine bastard integer m, n / 100 /, a(5) / 1, 2, 3, 4, 5 / real pi / 3.14159265358979d0 / character c / 32 / ! type mismatch integer q / 'hello' / ! type mismatch print *, 'bastard initializers:' print *, m, n, a ! m used before set print *, pi, c, q end C Main program just suppresses "never invoked" warnings. program main call f90 call f77 call bastard end ftnchek-3.3.1/test/intrinstest.f0000644000031000002260000000076407617550611017311 0ustar moniotstaff00000000000000 character *80 argmt C Test recognition of standard intrinsic x = sqrt(y) C Test mismatch of argument types z = sqrt(i) i = max(x,i) C Test recognition of extra intrinsics i = ior(i,8) i = not(i) C Test recognition of unix intrinsics call getarg(1,argmt) C Test the different forms of rand and iargc: zero and one arg i = iargc() i = iargc(0) x = rand() x = rand(0) C Test recognition of vms intrinsics x = ran(0) end ftnchek-3.3.1/test/iokeywords.f0000644000031000002260000000342307617550611017115 0ustar moniotstaff00000000000000C Exerciser for recognition and flagging of various I/O keywords. program iokeywds call vms_isms call direct_access call f90_stuff end subroutine vms_isms character*512 line(4) C This one uses some VMS-isms open(unit=1,carriagecontrol='none',recordtype='fixed', $ recl=2048,status='new',name='file1') open(unit=2,carriagecontrol='none',recl=512,status='old',err=1) goto 2 1 stop 'Please $ASSIGN/USER output FOR001' 2 do i=1,4 read(2,'(a)',err=3) line(i) end do write(1,'(a)') line(1)//line(2)//line(3)//line(4) goto 2 3 continue close(unit=1) close(unit=2) end subroutine direct_access character inline*79 open(unit=1,file='test',access='direct',form='formatted', 1 status='new', recl=80,err=909) * * Read a line from standard input, write it to the new file, * and echo it to standard output. * do j = 1,100 read(5,10,end=910)inline write(1,20,rec=j)inline write(5,20)inline enddo 10 format(79a) 20 format(1x79a) GoTo 910 909 print*,'Error opening file.' 910 continue close(unit=1) close(unit=5) end subroutine f90_stuff integer unit,inputsize,val,i1 character *20 c1,c2 unit = 3 open(unit=unit,file='data.dat',status='old',action='read', $ access='sequential',form='formatted',err=910) read(unit=unit,fmt='(i10)',advance='no',size=inputsize, $ err=920) val inquire(unit=unit,recl=i1,access=c1,position=c2) write(unit=*,fmt='(1x,a7)',advance='yes') 'Success' close(unit) return 910 print *,'Error opening file.' return 920 print *,'Error reading file.' return end ftnchek-3.3.1/test/labeltest.f0000644000031000002260000000071407617550611016675 0ustar moniotstaff00000000000000 read(unit=5,fmt=1900) x 1900 format(f10.0) if(x) 100,250,89 89 assign 100 to icky goto icky 100 write(6,*) 'hello' do 123 i=1,123 read(fmt=1900,unit=5,end=200,err=909) x 123 continue 302 write(*,909) x 909 format(1x,f10.3) 200 continue print 9, x 9 format(' Just checking') read 10, x type 11, sqrt(2.0) 11 format(' The sqrt of 2 is ', f15.5) write(*,*) 'I''m outta here' end ftnchek-3.3.1/test/lotsalabels.f0000644000031000002260000014303307617550611017225 0ustar moniotstaff00000000000000 program tst 1 goto 2 2 goto 3 3 goto 4 4 goto 5 5 goto 6 6 goto 7 7 goto 8 8 goto 9 9 goto 10 10 goto 11 11 goto 12 12 goto 13 13 goto 14 14 goto 15 15 goto 16 16 goto 17 17 goto 18 18 goto 19 19 goto 20 20 goto 21 21 goto 22 22 goto 23 23 goto 24 24 goto 25 25 goto 26 26 goto 27 27 goto 28 28 goto 29 29 goto 30 30 goto 31 31 goto 32 32 goto 33 33 goto 34 34 goto 35 35 goto 36 36 goto 37 37 goto 38 38 goto 39 39 goto 40 40 goto 41 41 goto 42 42 goto 43 43 goto 44 44 goto 45 45 goto 46 46 goto 47 47 goto 48 48 goto 49 49 goto 50 50 goto 51 51 goto 52 52 goto 53 53 goto 54 54 goto 55 55 goto 56 56 goto 57 57 goto 58 58 goto 59 59 goto 60 60 goto 61 61 goto 62 62 goto 63 63 goto 64 64 goto 65 65 goto 66 66 goto 67 67 goto 68 68 goto 69 69 goto 70 70 goto 71 71 goto 72 72 goto 73 73 goto 74 74 goto 75 75 goto 76 76 goto 77 77 goto 78 78 goto 79 79 goto 80 80 goto 81 81 goto 82 82 goto 83 83 goto 84 84 goto 85 85 goto 86 86 goto 87 87 goto 88 88 goto 89 89 goto 90 90 goto 91 91 goto 92 92 goto 93 93 goto 94 94 goto 95 95 goto 96 96 goto 97 97 goto 98 98 goto 99 99 goto 100 100 goto 101 101 goto 102 102 goto 103 103 goto 104 104 goto 105 105 goto 106 106 goto 107 107 goto 108 108 goto 109 109 goto 110 110 goto 111 111 goto 112 112 goto 113 113 goto 114 114 goto 115 115 goto 116 116 goto 117 117 goto 118 118 goto 119 119 goto 120 120 goto 121 121 goto 122 122 goto 123 123 goto 124 124 goto 125 125 goto 126 126 goto 127 127 goto 128 128 goto 129 129 goto 130 130 goto 131 131 goto 132 132 goto 133 133 goto 134 134 goto 135 135 goto 136 136 goto 137 137 goto 138 138 goto 139 139 goto 140 140 goto 141 141 goto 142 142 goto 143 143 goto 144 144 goto 145 145 goto 146 146 goto 147 147 goto 148 148 goto 149 149 goto 150 150 goto 151 151 goto 152 152 goto 153 153 goto 154 154 goto 155 155 goto 156 156 goto 157 157 goto 158 158 goto 159 159 goto 160 160 goto 161 161 goto 162 162 goto 163 163 goto 164 164 goto 165 165 goto 166 166 goto 167 167 goto 168 168 goto 169 169 goto 170 170 goto 171 171 goto 172 172 goto 173 173 goto 174 174 goto 175 175 goto 176 176 goto 177 177 goto 178 178 goto 179 179 goto 180 180 goto 181 181 goto 182 182 goto 183 183 goto 184 184 goto 185 185 goto 186 186 goto 187 187 goto 188 188 goto 189 189 goto 190 190 goto 191 191 goto 192 192 goto 193 193 goto 194 194 goto 195 195 goto 196 196 goto 197 197 goto 198 198 goto 199 199 goto 200 200 goto 201 201 goto 202 202 goto 203 203 goto 204 204 goto 205 205 goto 206 206 goto 207 207 goto 208 208 goto 209 209 goto 210 210 goto 211 211 goto 212 212 goto 213 213 goto 214 214 goto 215 215 goto 216 216 goto 217 217 goto 218 218 goto 219 219 goto 220 220 goto 221 221 goto 222 222 goto 223 223 goto 224 224 goto 225 225 goto 226 226 goto 227 227 goto 228 228 goto 229 229 goto 230 230 goto 231 231 goto 232 232 goto 233 233 goto 234 234 goto 235 235 goto 236 236 goto 237 237 goto 238 238 goto 239 239 goto 240 240 goto 241 241 goto 242 242 goto 243 243 goto 244 244 goto 245 245 goto 246 246 goto 247 247 goto 248 248 goto 249 249 goto 250 250 goto 251 251 goto 252 252 goto 253 253 goto 254 254 goto 255 255 goto 256 256 goto 257 257 goto 258 258 goto 259 259 goto 260 260 goto 261 261 goto 262 262 goto 263 263 goto 264 264 goto 265 265 goto 266 266 goto 267 267 goto 268 268 goto 269 269 goto 270 270 goto 271 271 goto 272 272 goto 273 273 goto 274 274 goto 275 275 goto 276 276 goto 277 277 goto 278 278 goto 279 279 goto 280 280 goto 281 281 goto 282 282 goto 283 283 goto 284 284 goto 285 285 goto 286 286 goto 287 287 goto 288 288 goto 289 289 goto 290 290 goto 291 291 goto 292 292 goto 293 293 goto 294 294 goto 295 295 goto 296 296 goto 297 297 goto 298 298 goto 299 299 goto 300 300 goto 301 301 goto 302 302 goto 303 303 goto 304 304 goto 305 305 goto 306 306 goto 307 307 goto 308 308 goto 309 309 goto 310 310 goto 311 311 goto 312 312 goto 313 313 goto 314 314 goto 315 315 goto 316 316 goto 317 317 goto 318 318 goto 319 319 goto 320 320 goto 321 321 goto 322 322 goto 323 323 goto 324 324 goto 325 325 goto 326 326 goto 327 327 goto 328 328 goto 329 329 goto 330 330 goto 331 331 goto 332 332 goto 333 333 goto 334 334 goto 335 335 goto 336 336 goto 337 337 goto 338 338 goto 339 339 goto 340 340 goto 341 341 goto 342 342 goto 343 343 goto 344 344 goto 345 345 goto 346 346 goto 347 347 goto 348 348 goto 349 349 goto 350 350 goto 351 351 goto 352 352 goto 353 353 goto 354 354 goto 355 355 goto 356 356 goto 357 357 goto 358 358 goto 359 359 goto 360 360 goto 361 361 goto 362 362 goto 363 363 goto 364 364 goto 365 365 goto 366 366 goto 367 367 goto 368 368 goto 369 369 goto 370 370 goto 371 371 goto 372 372 goto 373 373 goto 374 374 goto 375 375 goto 376 376 goto 377 377 goto 378 378 goto 379 379 goto 380 380 goto 381 381 goto 382 382 goto 383 383 goto 384 384 goto 385 385 goto 386 386 goto 387 387 goto 388 388 goto 389 389 goto 390 390 goto 391 391 goto 392 392 goto 393 393 goto 394 394 goto 395 395 goto 396 396 goto 397 397 goto 398 398 goto 399 399 goto 400 400 goto 401 401 goto 402 402 goto 403 403 goto 404 404 goto 405 405 goto 406 406 goto 407 407 goto 408 408 goto 409 409 goto 410 410 goto 411 411 goto 412 412 goto 413 413 goto 414 414 goto 415 415 goto 416 416 goto 417 417 goto 418 418 goto 419 419 goto 420 420 goto 421 421 goto 422 422 goto 423 423 goto 424 424 goto 425 425 goto 426 426 goto 427 427 goto 428 428 goto 429 429 goto 430 430 goto 431 431 goto 432 432 goto 433 433 goto 434 434 goto 435 435 goto 436 436 goto 437 437 goto 438 438 goto 439 439 goto 440 440 goto 441 441 goto 442 442 goto 443 443 goto 444 444 goto 445 445 goto 446 446 goto 447 447 goto 448 448 goto 449 449 goto 450 450 goto 451 451 goto 452 452 goto 453 453 goto 454 454 goto 455 455 goto 456 456 goto 457 457 goto 458 458 goto 459 459 goto 460 460 goto 461 461 goto 462 462 goto 463 463 goto 464 464 goto 465 465 goto 466 466 goto 467 467 goto 468 468 goto 469 469 goto 470 470 goto 471 471 goto 472 472 goto 473 473 goto 474 474 goto 475 475 goto 476 476 goto 477 477 goto 478 478 goto 479 479 goto 480 480 goto 481 481 goto 482 482 goto 483 483 goto 484 484 goto 485 485 goto 486 486 goto 487 487 goto 488 488 goto 489 489 goto 490 490 goto 491 491 goto 492 492 goto 493 493 goto 494 494 goto 495 495 goto 496 496 goto 497 497 goto 498 498 goto 499 499 goto 500 500 goto 501 501 goto 502 502 goto 503 503 goto 504 504 goto 505 505 goto 506 506 goto 507 507 goto 508 508 goto 509 509 goto 510 510 goto 511 511 goto 512 512 goto 513 513 goto 514 514 goto 515 515 goto 516 516 goto 517 517 goto 518 518 goto 519 519 goto 520 520 goto 521 521 goto 522 522 goto 523 523 goto 524 524 goto 525 525 goto 526 526 goto 527 527 goto 528 528 goto 529 529 goto 530 530 goto 531 531 goto 532 532 goto 533 533 goto 534 534 goto 535 535 goto 536 536 goto 537 537 goto 538 538 goto 539 539 goto 540 540 goto 541 541 goto 542 542 goto 543 543 goto 544 544 goto 545 545 goto 546 546 goto 547 547 goto 548 548 goto 549 549 goto 550 550 goto 551 551 goto 552 552 goto 553 553 goto 554 554 goto 555 555 goto 556 556 goto 557 557 goto 558 558 goto 559 559 goto 560 560 goto 561 561 goto 562 562 goto 563 563 goto 564 564 goto 565 565 goto 566 566 goto 567 567 goto 568 568 goto 569 569 goto 570 570 goto 571 571 goto 572 572 goto 573 573 goto 574 574 goto 575 575 goto 576 576 goto 577 577 goto 578 578 goto 579 579 goto 580 580 goto 581 581 goto 582 582 goto 583 583 goto 584 584 goto 585 585 goto 586 586 goto 587 587 goto 588 588 goto 589 589 goto 590 590 goto 591 591 goto 592 592 goto 593 593 goto 594 594 goto 595 595 goto 596 596 goto 597 597 goto 598 598 goto 599 599 goto 600 600 goto 601 601 goto 602 602 goto 603 603 goto 604 604 goto 605 605 goto 606 606 goto 607 607 goto 608 608 goto 609 609 goto 610 610 goto 611 611 goto 612 612 goto 613 613 goto 614 614 goto 615 615 goto 616 616 goto 617 617 goto 618 618 goto 619 619 goto 620 620 goto 621 621 goto 622 622 goto 623 623 goto 624 624 goto 625 625 goto 626 626 goto 627 627 goto 628 628 goto 629 629 goto 630 630 goto 631 631 goto 632 632 goto 633 633 goto 634 634 goto 635 635 goto 636 636 goto 637 637 goto 638 638 goto 639 639 goto 640 640 goto 641 641 goto 642 642 goto 643 643 goto 644 644 goto 645 645 goto 646 646 goto 647 647 goto 648 648 goto 649 649 goto 650 650 goto 651 651 goto 652 652 goto 653 653 goto 654 654 goto 655 655 goto 656 656 goto 657 657 goto 658 658 goto 659 659 goto 660 660 goto 661 661 goto 662 662 goto 663 663 goto 664 664 goto 665 665 goto 666 666 goto 667 667 goto 668 668 goto 669 669 goto 670 670 goto 671 671 goto 672 672 goto 673 673 goto 674 674 goto 675 675 goto 676 676 goto 677 677 goto 678 678 goto 679 679 goto 680 680 goto 681 681 goto 682 682 goto 683 683 goto 684 684 goto 685 685 goto 686 686 goto 687 687 goto 688 688 goto 689 689 goto 690 690 goto 691 691 goto 692 692 goto 693 693 goto 694 694 goto 695 695 goto 696 696 goto 697 697 goto 698 698 goto 699 699 goto 700 700 goto 701 701 goto 702 702 goto 703 703 goto 704 704 goto 705 705 goto 706 706 goto 707 707 goto 708 708 goto 709 709 goto 710 710 goto 711 711 goto 712 712 goto 713 713 goto 714 714 goto 715 715 goto 716 716 goto 717 717 goto 718 718 goto 719 719 goto 720 720 goto 721 721 goto 722 722 goto 723 723 goto 724 724 goto 725 725 goto 726 726 goto 727 727 goto 728 728 goto 729 729 goto 730 730 goto 731 731 goto 732 732 goto 733 733 goto 734 734 goto 735 735 goto 736 736 goto 737 737 goto 738 738 goto 739 739 goto 740 740 goto 741 741 goto 742 742 goto 743 743 goto 744 744 goto 745 745 goto 746 746 goto 747 747 goto 748 748 goto 749 749 goto 750 750 goto 751 751 goto 752 752 goto 753 753 goto 754 754 goto 755 755 goto 756 756 goto 757 757 goto 758 758 goto 759 759 goto 760 760 goto 761 761 goto 762 762 goto 763 763 goto 764 764 goto 765 765 goto 766 766 goto 767 767 goto 768 768 goto 769 769 goto 770 770 goto 771 771 goto 772 772 goto 773 773 goto 774 774 goto 775 775 goto 776 776 goto 777 777 goto 778 778 goto 779 779 goto 780 780 goto 781 781 goto 782 782 goto 783 783 goto 784 784 goto 785 785 goto 786 786 goto 787 787 goto 788 788 goto 789 789 goto 790 790 goto 791 791 goto 792 792 goto 793 793 goto 794 794 goto 795 795 goto 796 796 goto 797 797 goto 798 798 goto 799 799 goto 800 800 goto 801 801 goto 802 802 goto 803 803 goto 804 804 goto 805 805 goto 806 806 goto 807 807 goto 808 808 goto 809 809 goto 810 810 goto 811 811 goto 812 812 goto 813 813 goto 814 814 goto 815 815 goto 816 816 goto 817 817 goto 818 818 goto 819 819 goto 820 820 goto 821 821 goto 822 822 goto 823 823 goto 824 824 goto 825 825 goto 826 826 goto 827 827 goto 828 828 goto 829 829 goto 830 830 goto 831 831 goto 832 832 goto 833 833 goto 834 834 goto 835 835 goto 836 836 goto 837 837 goto 838 838 goto 839 839 goto 840 840 goto 841 841 goto 842 842 goto 843 843 goto 844 844 goto 845 845 goto 846 846 goto 847 847 goto 848 848 goto 849 849 goto 850 850 goto 851 851 goto 852 852 goto 853 853 goto 854 854 goto 855 855 goto 856 856 goto 857 857 goto 858 858 goto 859 859 goto 860 860 goto 861 861 goto 862 862 goto 863 863 goto 864 864 goto 865 865 goto 866 866 goto 867 867 goto 868 868 goto 869 869 goto 870 870 goto 871 871 goto 872 872 goto 873 873 goto 874 874 goto 875 875 goto 876 876 goto 877 877 goto 878 878 goto 879 879 goto 880 880 goto 881 881 goto 882 882 goto 883 883 goto 884 884 goto 885 885 goto 886 886 goto 887 887 goto 888 888 goto 889 889 goto 890 890 goto 891 891 goto 892 892 goto 893 893 goto 894 894 goto 895 895 goto 896 896 goto 897 897 goto 898 898 goto 899 899 goto 900 900 goto 901 901 goto 902 902 goto 903 903 goto 904 904 goto 905 905 goto 906 906 goto 907 907 goto 908 908 goto 909 909 goto 910 910 goto 911 911 goto 912 912 goto 913 913 goto 914 914 goto 915 915 goto 916 916 goto 917 917 goto 918 918 goto 919 919 goto 920 920 goto 921 921 goto 922 922 goto 923 923 goto 924 924 goto 925 925 goto 926 926 goto 927 927 goto 928 928 goto 929 929 goto 930 930 goto 931 931 goto 932 932 goto 933 933 goto 934 934 goto 935 935 goto 936 936 goto 937 937 goto 938 938 goto 939 939 goto 940 940 goto 941 941 goto 942 942 goto 943 943 goto 944 944 goto 945 945 goto 946 946 goto 947 947 goto 948 948 goto 949 949 goto 950 950 goto 951 951 goto 952 952 goto 953 953 goto 954 954 goto 955 955 goto 956 956 goto 957 957 goto 958 958 goto 959 959 goto 960 960 goto 961 961 goto 962 962 goto 963 963 goto 964 964 goto 965 965 goto 966 966 goto 967 967 goto 968 968 goto 969 969 goto 970 970 goto 971 971 goto 972 972 goto 973 973 goto 974 974 goto 975 975 goto 976 976 goto 977 977 goto 978 978 goto 979 979 goto 980 980 goto 981 981 goto 982 982 goto 983 983 goto 984 984 goto 985 985 goto 986 986 goto 987 987 goto 988 988 goto 989 989 goto 990 990 goto 991 991 goto 992 992 goto 993 993 goto 994 994 goto 995 995 goto 996 996 goto 997 997 goto 998 998 goto 999 999 goto 1000 1000 goto 1001 1001 goto 1002 1002 goto 1003 1003 goto 1004 1004 goto 1005 1005 goto 1006 1006 goto 1007 1007 goto 1008 1008 goto 1009 1009 goto 1010 1010 goto 1011 1011 goto 1012 1012 goto 1013 1013 goto 1014 1014 goto 1015 1015 goto 1016 1016 goto 1017 1017 goto 1018 1018 goto 1019 1019 goto 1020 1020 goto 1021 1021 goto 1022 1022 goto 1023 1023 goto 1024 1024 goto 1025 1025 goto 1026 1026 goto 1027 1027 goto 1028 1028 goto 1029 1029 goto 1030 1030 goto 1031 1031 goto 1032 1032 goto 1033 1033 goto 1034 1034 goto 1035 1035 goto 1036 1036 goto 1037 1037 goto 1038 1038 goto 1039 1039 goto 1040 1040 goto 1041 1041 goto 1042 1042 goto 1043 1043 goto 1044 1044 goto 1045 1045 goto 1046 1046 goto 1047 1047 goto 1048 1048 goto 1049 1049 goto 1050 1050 goto 1051 1051 goto 1052 1052 goto 1053 1053 goto 1054 1054 goto 1055 1055 goto 1056 1056 goto 1057 1057 goto 1058 1058 goto 1059 1059 goto 1060 1060 goto 1061 1061 goto 1062 1062 goto 1063 1063 goto 1064 1064 goto 1065 1065 goto 1066 1066 goto 1067 1067 goto 1068 1068 goto 1069 1069 goto 1070 1070 goto 1071 1071 goto 1072 1072 goto 1073 1073 goto 1074 1074 goto 1075 1075 goto 1076 1076 goto 1077 1077 goto 1078 1078 goto 1079 1079 goto 1080 1080 goto 1081 1081 goto 1082 1082 goto 1083 1083 goto 1084 1084 goto 1085 1085 goto 1086 1086 goto 1087 1087 goto 1088 1088 goto 1089 1089 goto 1090 1090 goto 1091 1091 goto 1092 1092 goto 1093 1093 goto 1094 1094 goto 1095 1095 goto 1096 1096 goto 1097 1097 goto 1098 1098 goto 1099 1099 goto 1100 1100 goto 1101 1101 goto 1102 1102 goto 1103 1103 goto 1104 1104 goto 1105 1105 goto 1106 1106 goto 1107 1107 goto 1108 1108 goto 1109 1109 goto 1110 1110 goto 1111 1111 goto 1112 1112 goto 1113 1113 goto 1115 1114 goto 1115 1115 goto 1116 1116 goto 1117 1117 goto 1118 1118 goto 1119 1119 goto 1120 1120 goto 1121 1121 goto 1122 1122 goto 1123 1123 goto 1124 1124 goto 1125 1125 goto 1126 1126 goto 1127 1127 goto 1128 1128 goto 1129 1129 goto 1130 1130 goto 1131 1131 goto 1132 1132 goto 1133 1133 goto 1134 1134 goto 1135 1135 goto 1136 1136 goto 1137 1137 goto 1138 1138 goto 1139 1139 goto 1140 1140 goto 1141 1141 goto 1142 1142 goto 1143 1143 goto 1144 1144 goto 1145 1145 goto 1146 1146 goto 1147 1147 goto 1148 1148 goto 1149 1149 goto 1150 1150 goto 1151 1151 goto 1152 1152 goto 1153 1153 goto 1154 1154 goto 1155 1155 goto 1156 1156 goto 1157 1157 goto 1158 1158 goto 1159 1159 goto 1160 1160 goto 1161 1161 goto 1162 1162 goto 1163 1163 goto 1164 1164 goto 1165 1165 goto 1166 1166 goto 1167 1167 goto 1168 1168 goto 1169 1169 goto 1170 1170 goto 1171 1171 goto 1172 1172 goto 1173 1173 goto 1174 1174 goto 1175 1175 goto 1176 1176 goto 1177 1177 goto 1178 1178 goto 1179 1179 goto 1180 1180 goto 1181 1181 goto 1182 1182 goto 1183 1183 goto 1184 1184 goto 1185 1185 goto 1186 1186 goto 1187 1187 goto 1188 1188 goto 1189 1189 goto 1190 1190 goto 1191 1191 goto 1192 1192 goto 1193 1193 goto 1194 1194 goto 1195 1195 goto 1196 1196 goto 1197 1197 goto 1198 1198 goto 1199 1199 goto 1200 1200 goto 1201 1201 goto 1202 1202 goto 1203 1203 goto 1204 1204 goto 1205 1205 goto 1206 1206 goto 1207 1207 goto 1208 1208 goto 1209 1209 goto 1210 1210 goto 1211 1211 goto 1212 1212 goto 1213 1213 goto 1214 1214 goto 1215 1215 goto 1216 1216 goto 1217 1217 goto 1218 1218 goto 1219 1219 goto 1220 1220 goto 1221 1221 goto 1222 1222 goto 1223 1223 goto 1224 1224 goto 1225 1225 goto 1226 1226 goto 1227 1227 goto 1228 1228 goto 1229 1229 goto 1230 1230 goto 1231 1231 goto 1232 1232 goto 1233 1233 goto 1234 1234 goto 1235 1235 goto 1236 1236 goto 1237 1237 goto 1238 1238 goto 1239 1239 goto 1240 1240 goto 1241 1241 goto 1242 1242 goto 1243 1243 goto 1244 1244 goto 1245 1245 goto 1246 1246 goto 1247 1247 goto 1248 1248 goto 1249 1249 goto 1250 1250 goto 1251 1251 goto 1252 1252 goto 1253 1253 goto 1254 1254 goto 1255 1255 goto 1256 1256 goto 1257 1257 goto 1258 1258 goto 1259 1259 goto 1260 1260 goto 1261 1261 goto 1262 1262 goto 1263 1263 goto 1264 1264 goto 1265 1265 goto 1266 1266 goto 1267 1267 goto 1268 1268 goto 1269 1269 goto 1270 1270 goto 1271 1271 goto 1272 1272 goto 1273 1273 goto 1274 1274 goto 1275 1275 goto 1276 1276 goto 1277 1277 goto 1278 1278 goto 1279 1279 goto 1280 1280 goto 1281 1281 goto 1282 1282 goto 1283 1283 goto 1284 1284 goto 1285 1285 goto 1286 1286 goto 1287 1287 goto 1288 1288 goto 1289 1289 goto 1290 1290 goto 1291 1291 goto 1292 1292 goto 1293 1293 goto 1294 1294 goto 1295 1295 goto 1296 1296 goto 1297 1297 goto 1298 1298 goto 1299 1299 goto 1300 1300 goto 1301 1301 goto 1302 1302 goto 1303 1303 goto 1304 1304 goto 1305 1305 goto 1306 1306 goto 1307 1307 goto 1308 1308 goto 1309 1309 goto 1310 1310 goto 1311 1311 goto 1312 1312 goto 1313 1313 goto 1314 1314 goto 1315 1315 goto 1316 1316 goto 1317 1317 goto 1318 1318 goto 1319 1319 goto 1320 1320 goto 1321 1321 goto 1322 1322 goto 1323 1323 goto 1324 1324 goto 1325 1325 goto 1326 1326 goto 1327 1327 goto 1328 1328 goto 1329 1329 goto 1330 1330 goto 1331 1331 goto 1332 1332 goto 1333 1333 goto 1334 1334 goto 1335 1335 goto 1336 1336 goto 1337 1337 goto 1338 1338 goto 1339 1339 goto 1340 1340 goto 1341 1341 goto 1342 1342 goto 1343 1343 goto 1344 1344 goto 1345 1345 goto 1346 1346 goto 1347 1347 goto 1348 1348 goto 1349 1349 goto 1350 1350 goto 1351 1351 goto 1352 1352 goto 1353 1353 goto 1354 1354 goto 1355 1355 goto 1356 1356 goto 1357 1357 goto 1358 1358 goto 1359 1359 goto 1360 1360 goto 1361 1361 goto 1362 1362 goto 1363 1363 goto 1364 1364 goto 1365 1365 goto 1366 1366 goto 1367 1367 goto 1368 1368 goto 1369 1369 goto 1370 1370 goto 1371 1371 goto 1372 1372 goto 1373 1373 goto 1374 1374 goto 1375 1375 goto 1376 1376 goto 1377 1377 goto 1378 1378 goto 1379 1379 goto 1380 1380 goto 1381 1381 goto 1382 1382 goto 1383 1383 goto 1384 1384 goto 1385 1385 goto 1386 1386 goto 1387 1387 goto 1388 1388 goto 1389 1389 goto 1390 1390 goto 1391 1391 goto 1392 1392 goto 1393 1393 goto 1394 1394 goto 1395 1395 goto 1396 1396 goto 1397 1397 goto 1398 1398 goto 1399 1399 goto 1400 1400 goto 1401 1401 goto 1402 1402 goto 1403 1403 goto 1404 1404 goto 1405 1405 goto 1406 1406 goto 1407 1407 goto 1408 1408 goto 1409 1409 goto 1410 1410 goto 1411 1411 goto 1412 1412 goto 1413 1413 goto 1414 1414 goto 1415 1415 goto 1416 1416 goto 1417 1417 goto 1418 1418 goto 1419 1419 goto 1420 1420 goto 1421 1421 goto 1422 1422 goto 1423 1423 goto 1424 1424 goto 1425 1425 goto 1426 1426 goto 1427 1427 goto 1428 1428 goto 1429 1429 goto 1430 1430 goto 1431 1431 goto 1432 1432 goto 1433 1433 goto 1434 1434 goto 1435 1435 goto 1436 1436 goto 1437 1437 goto 1438 1438 goto 1439 1439 goto 1440 1440 goto 1441 1441 goto 1442 1442 goto 1443 1443 goto 1444 1444 goto 1445 1445 goto 1446 1446 goto 1447 1447 goto 1448 1448 goto 1449 1449 goto 1450 1450 goto 1451 1451 goto 1452 1452 goto 1453 1453 goto 1454 1454 goto 1455 1455 goto 1456 1456 goto 1457 1457 goto 1458 1458 goto 1459 1459 goto 1460 1460 goto 1461 1461 goto 1462 1462 goto 1463 1463 goto 1464 1464 goto 1465 1465 goto 1466 1466 goto 1467 1467 goto 1468 1468 goto 1469 1469 goto 1470 1470 goto 1471 1471 goto 1472 1472 goto 1473 1473 goto 1474 1474 goto 1475 1475 goto 1476 1476 goto 1477 1477 goto 1478 1478 goto 1479 1479 goto 1480 1480 goto 1481 1481 goto 1482 1482 goto 1483 1483 goto 1484 1484 goto 1485 1485 goto 1486 1486 goto 1487 1487 goto 1488 1488 goto 1489 1489 goto 1490 1490 goto 1491 1491 goto 1492 1492 goto 1493 1493 goto 1494 1494 goto 1495 1495 goto 1496 1496 goto 1497 1497 goto 1498 1498 goto 1499 1499 goto 1500 1500 goto 1501 1501 goto 1502 1502 goto 1503 1503 goto 1504 1504 goto 1505 1505 goto 1506 1506 goto 1507 1507 goto 1508 1508 goto 1509 1509 goto 1510 1510 goto 1511 1511 goto 1512 1512 goto 1513 1513 goto 1514 1514 goto 1515 1515 goto 1516 1516 goto 1517 1517 goto 1518 1518 goto 1519 1519 goto 1520 1520 goto 1521 1521 goto 1522 1522 goto 1523 1523 goto 1524 1524 goto 1525 1525 goto 1526 1526 goto 1527 1527 goto 1528 1528 goto 1529 1529 goto 1530 1530 goto 1531 1531 goto 1532 1532 goto 1533 1533 goto 1534 1534 goto 1535 1535 goto 1536 1536 goto 1537 1537 goto 1538 1538 goto 1539 1539 goto 1540 1540 goto 1541 1541 goto 1542 1542 goto 1543 1543 goto 1544 1544 goto 1545 1545 goto 1546 1546 goto 1547 1547 goto 2400 1548 goto 1549 1549 goto 1550 1550 goto 1551 1551 goto 1552 1552 goto 1553 1553 goto 1554 1554 goto 1555 1555 goto 1556 1556 goto 1557 1557 goto 1558 1558 goto 1559 1559 goto 1560 1560 goto 1561 1561 goto 1562 1562 goto 1563 1563 goto 1564 1564 goto 1565 1565 goto 1566 1566 goto 1567 1567 goto 1568 1568 goto 1569 1569 goto 1570 1570 goto 1571 1571 goto 1572 1572 goto 1573 1573 goto 1574 1574 goto 1575 1575 goto 1576 1576 goto 1577 1577 goto 1578 1578 goto 1579 1579 goto 1580 1580 goto 1581 1581 goto 1582 1582 goto 1583 1583 goto 1584 1584 goto 1585 1585 goto 1586 1586 goto 1587 1587 goto 1588 1588 goto 1589 1589 goto 1590 1590 goto 1591 1591 goto 1592 1592 goto 1593 1593 goto 1594 1594 goto 1595 1595 goto 1596 1596 goto 1597 1597 goto 1598 1598 goto 1599 1599 goto 1600 1600 goto 1601 1601 goto 1602 1602 goto 1603 1603 goto 1604 1604 goto 1605 1605 goto 1606 1606 goto 1607 1607 goto 1608 1608 goto 1609 1609 goto 1610 1610 goto 1611 1611 goto 1612 1612 goto 1613 1613 goto 1614 1614 goto 1615 1615 goto 1616 1616 goto 1617 1617 goto 1618 1618 goto 1619 1619 goto 1620 1620 goto 1621 1621 goto 1622 1622 goto 1623 1623 goto 1624 1624 goto 1625 1625 goto 1626 1626 goto 1627 1627 goto 1628 1628 goto 1629 1629 goto 1630 1630 goto 1631 1631 goto 1632 1632 goto 1633 1633 goto 1634 1634 goto 1635 1635 goto 1636 1636 goto 1637 1637 goto 1638 1638 goto 1639 1639 goto 1640 1640 goto 1641 1641 goto 1642 1642 goto 1643 1643 goto 1644 1644 goto 1645 1645 goto 1646 1646 goto 1647 1647 goto 1648 1648 goto 1649 1649 goto 1650 1650 goto 1651 1651 goto 1652 1652 goto 1653 1653 goto 1654 1654 goto 1655 1655 goto 1656 1656 goto 1657 1657 goto 1658 1658 goto 1659 1659 goto 1660 1660 goto 1661 1661 goto 1662 1662 goto 1663 1663 goto 1664 1664 goto 1665 1665 goto 1666 1666 goto 1667 1667 goto 1668 1668 goto 1669 1669 goto 1670 1670 goto 1671 1671 goto 1672 1672 goto 1673 1673 goto 1674 1674 goto 1675 1675 goto 1676 1676 goto 1677 1677 goto 1678 1678 goto 1679 1679 goto 1680 1680 goto 1681 1681 goto 1682 1682 goto 1683 1683 goto 1684 1684 goto 1685 1685 goto 1686 1686 goto 1687 1687 goto 1688 1688 goto 1689 1689 goto 1690 1690 goto 1691 1691 goto 1692 1692 goto 1693 1693 goto 1694 1694 goto 1695 1695 goto 1696 1696 goto 1697 1697 goto 1698 1698 goto 1699 1699 goto 1700 1700 goto 1701 1701 goto 1702 1702 goto 1703 1703 goto 1704 1704 goto 1705 1705 goto 1706 1706 goto 1707 1707 goto 1708 1708 goto 1709 1709 goto 1710 1710 goto 1711 1711 goto 1712 1712 goto 1713 1713 goto 1714 1714 goto 1715 1715 goto 1716 1716 goto 1717 1717 goto 1718 1718 goto 1719 1719 goto 1720 1720 goto 1721 1721 goto 1722 1722 goto 1723 1723 goto 1724 1724 goto 1725 1725 goto 1726 1726 goto 1727 1727 goto 1728 1728 goto 1729 1729 goto 1730 1730 goto 1731 1731 goto 1732 1732 goto 1733 1733 goto 1734 1734 goto 1735 1735 goto 1736 1736 goto 1737 1737 goto 1738 1738 goto 1739 1739 goto 1740 1740 goto 1741 1741 goto 1742 1742 goto 1743 1743 goto 1744 1744 goto 1745 1745 goto 1746 1746 goto 1747 1747 goto 1748 1748 goto 1749 1749 goto 1750 1750 goto 1751 1751 goto 1752 1752 goto 1753 1753 goto 1754 1754 goto 1755 1755 goto 1756 1756 goto 1757 1757 goto 1758 1758 goto 1759 1759 goto 1760 1760 goto 1761 1761 goto 1762 1762 goto 1763 1763 goto 1764 1764 goto 1765 1765 goto 1766 1766 goto 1767 1767 goto 1768 1768 goto 1769 1769 goto 1770 1770 goto 1771 1771 goto 1772 1772 goto 1773 1773 goto 1774 1774 goto 1775 1775 goto 1776 1776 goto 1777 1777 goto 1778 1778 goto 1779 1779 goto 1780 1780 goto 1781 1781 goto 1782 1782 goto 1783 1783 goto 1784 1784 goto 1785 1785 goto 1786 1786 goto 1787 1787 goto 1788 1788 goto 1789 1789 goto 1790 1790 goto 1791 1791 goto 1792 1792 goto 1793 1793 goto 1794 1794 goto 1795 1795 goto 1796 1796 goto 1797 1797 goto 1798 1798 goto 1799 1799 goto 1800 1800 goto 1801 1801 goto 1802 1802 goto 1803 1803 goto 1804 1804 goto 1805 1805 goto 1806 1806 goto 1807 1807 goto 1808 1808 goto 1809 1809 goto 1810 1810 goto 1811 1811 goto 1812 1812 goto 1813 1813 goto 1814 1814 goto 1815 1815 goto 1816 1816 goto 1817 1817 goto 1818 1818 goto 1819 1819 goto 1820 1820 goto 1821 1821 goto 1822 1822 goto 1823 1823 goto 1824 1824 goto 1825 1825 goto 1826 1826 goto 1827 1827 goto 1828 1828 goto 1829 1829 goto 1830 1830 goto 1831 1831 goto 1832 1832 goto 1833 1833 goto 1834 1834 goto 1835 1835 goto 1836 1836 goto 1837 1837 goto 1838 1838 goto 1839 1839 goto 1840 1840 goto 1841 1841 goto 1842 1842 goto 1843 1843 goto 1844 1844 goto 1845 1845 goto 1846 1846 goto 1847 1847 goto 1848 1848 goto 1849 1849 goto 1850 1850 goto 1851 1851 goto 1852 1852 goto 1853 1853 goto 1854 1854 goto 1855 1855 goto 1856 1856 goto 1857 1857 goto 1858 1858 goto 1859 1859 goto 1860 1860 goto 1861 1861 goto 1862 1862 goto 1863 1863 goto 1864 1864 goto 1865 1865 goto 1866 1866 goto 1867 1867 goto 1868 1868 goto 1869 1869 goto 1870 1870 goto 1871 1871 goto 1872 1872 goto 1873 1873 goto 1874 1874 goto 1875 1875 goto 1876 1876 goto 1877 1877 goto 1878 1878 goto 1879 1879 goto 1880 1880 goto 1881 1881 goto 1882 1882 goto 1883 1883 goto 1884 1884 goto 1885 1885 goto 1886 1886 goto 1887 1887 goto 1888 1888 goto 1889 1889 goto 1890 1890 goto 1891 1891 goto 1892 1892 goto 1893 1893 goto 1894 1894 goto 1895 1895 goto 1896 1896 goto 1897 1897 goto 1898 1898 goto 1899 1899 goto 1900 1900 goto 1901 1901 goto 1902 1902 goto 1903 1903 goto 1904 1904 goto 1905 1905 goto 1906 1906 goto 1907 1907 goto 1908 1908 goto 1909 1909 goto 1910 1910 goto 1911 1911 goto 1912 1912 goto 1913 1913 goto 1914 1914 goto 1915 1915 goto 1916 1916 goto 1917 1917 goto 1918 1918 goto 1919 1919 goto 1920 1920 goto 1921 1921 goto 1922 1922 goto 1923 1923 goto 1924 1924 goto 1925 1925 goto 1926 1926 goto 1927 1927 goto 1928 1928 goto 1929 1929 goto 1930 1930 goto 1931 1931 goto 1932 1932 goto 1933 1933 goto 1934 1934 goto 1935 1935 goto 1936 1936 goto 1937 1937 goto 1938 1938 goto 1939 1939 goto 1940 1940 goto 1941 1941 goto 1942 1942 goto 1943 1943 goto 1944 1944 goto 1945 1945 goto 1946 1946 goto 1947 1947 goto 1948 1948 goto 1949 1949 goto 1950 1950 goto 1951 1951 goto 1952 1952 goto 1953 1953 goto 1954 1954 goto 1955 1955 goto 1956 1956 goto 1957 1957 goto 1958 1958 goto 1959 1959 goto 1960 1960 goto 1961 1961 goto 1962 1962 goto 1963 1963 goto 1964 1964 goto 1965 1965 goto 1966 1966 goto 1967 1967 goto 1968 1968 goto 1969 1969 goto 1970 1970 goto 1971 1971 goto 1972 1972 goto 1973 1973 goto 1974 1974 goto 1975 1975 goto 1976 1976 goto 1977 1977 goto 1978 1978 goto 1979 1979 goto 1980 1980 goto 1981 1981 goto 1982 1982 goto 1983 1983 goto 1984 1984 goto 1985 1985 goto 1986 1986 goto 1987 1987 goto 1988 1988 goto 1989 1989 goto 1990 1990 goto 1991 1991 goto 1992 1992 goto 1993 1993 goto 1994 1994 goto 1995 1995 goto 1996 1996 goto 1997 1997 goto 1998 1998 goto 1999 1999 goto 2000 2000 goto 2001 2001 goto 2002 2002 goto 2003 2003 goto 2004 2004 goto 2005 2005 goto 2006 2006 goto 2007 2007 goto 2008 2008 goto 2009 2009 goto 2010 2010 goto 2011 2011 goto 2012 2012 goto 2013 2013 goto 2014 2014 goto 2015 2015 goto 2016 2016 goto 2017 2017 goto 2018 2018 goto 2019 2019 goto 2020 2020 goto 2021 2021 goto 2022 2022 goto 2023 2023 goto 2024 2024 goto 2025 2025 goto 2026 2026 goto 2027 2027 goto 2028 2028 goto 2029 2029 goto 2030 2030 goto 2031 2031 goto 2032 2032 goto 2033 2033 goto 2034 2034 goto 2035 2035 goto 2036 2036 goto 2037 2037 goto 2038 2038 goto 2039 2039 goto 2040 2040 goto 2041 2041 goto 2042 2042 goto 2043 2043 goto 2044 2044 goto 2045 2045 goto 2046 2046 goto 2047 2047 goto 2048 2048 goto 2049 2049 goto 2050 2050 goto 2051 2051 goto 2052 2052 goto 2053 2053 goto 2054 2054 goto 2055 2055 goto 2056 2056 goto 2057 2057 goto 2058 2058 goto 2059 2059 goto 2060 2060 goto 2061 2061 goto 2062 2062 goto 2063 2063 goto 2064 2064 goto 2065 2065 goto 2066 2066 goto 2067 2067 goto 2068 2068 goto 2069 2069 goto 2070 2070 goto 2071 2071 goto 2072 2072 goto 2073 2073 goto 2074 2074 goto 2075 2075 goto 2076 2076 goto 2077 2077 goto 2078 2078 goto 2079 2079 goto 2080 2080 goto 2081 2081 goto 2082 2082 goto 2083 2083 goto 2084 2084 goto 2085 2085 goto 2086 2086 goto 2087 2087 goto 2088 2088 goto 2089 2089 goto 2090 2090 goto 2091 2091 goto 2092 2092 goto 2093 2093 goto 2094 2094 goto 2095 2095 goto 2096 2096 goto 2097 2097 goto 2098 2098 goto 2099 2099 goto 2100 2100 goto 2101 2101 goto 2102 2102 goto 2103 2103 goto 2104 2104 goto 2105 2105 goto 2106 2106 goto 2107 2107 goto 2108 2108 goto 2109 2109 goto 2110 2110 goto 2111 2111 goto 2112 2112 goto 2113 2113 goto 2114 2114 goto 2115 2115 goto 2116 2116 goto 2117 2117 goto 2118 2118 goto 2119 2119 goto 2120 2120 goto 2121 2121 goto 2122 2122 goto 2123 2123 goto 2124 2124 goto 2125 2125 goto 2126 2126 goto 2127 2127 goto 2128 2128 goto 2129 2129 goto 2130 2130 goto 2131 2131 goto 2132 2132 goto 2133 2133 goto 2134 2134 goto 2135 2135 goto 2136 2136 goto 2137 2137 goto 2138 2138 goto 2139 2139 goto 2140 2140 goto 2141 2141 goto 2142 2142 goto 2143 2143 goto 2144 2144 goto 2145 2145 goto 2146 2146 goto 2147 2147 goto 2148 2148 goto 2149 2149 goto 2150 2150 goto 2151 2151 goto 2152 2152 goto 2153 2153 goto 2154 2154 goto 2155 2155 goto 2156 2156 goto 2157 2157 goto 2158 2158 goto 2159 2159 goto 2160 2160 goto 2161 2161 goto 2162 2162 goto 2163 2163 goto 2164 2164 goto 2165 2165 goto 2166 2166 goto 2167 2167 goto 2168 2168 goto 2169 2169 goto 2170 2170 goto 2171 2171 goto 2172 2172 goto 2173 2173 goto 2174 2174 goto 2175 2175 goto 2176 2176 goto 2177 2177 goto 2178 2178 goto 2179 2179 goto 2180 2180 goto 2181 2181 goto 2182 2182 goto 2183 2183 goto 2184 2184 goto 2185 2185 goto 2186 2186 goto 2187 2187 goto 2188 2188 goto 2189 2189 goto 2190 2190 goto 2191 2191 goto 2192 2192 goto 2193 2193 goto 2194 2194 goto 2195 2195 goto 2196 2196 goto 2197 2197 goto 2198 2198 goto 2199 2199 goto 2200 2200 goto 2201 2201 goto 2202 2202 goto 2203 2203 goto 2204 2204 goto 2205 2205 goto 2206 2206 goto 2207 2207 goto 2208 2208 goto 2209 2209 goto 2210 2210 goto 2211 2211 goto 2212 2212 goto 2213 2213 goto 2214 2214 goto 2215 2215 goto 2216 2216 goto 2217 2217 goto 2218 2218 goto 2219 2219 goto 2220 2220 goto 2221 2221 goto 2222 2222 goto 2223 2223 goto 2224 2224 goto 2225 2225 goto 2226 2226 goto 2227 2227 goto 2228 2228 goto 2229 2229 goto 2230 2230 goto 2231 2231 goto 2232 2232 goto 2233 2233 goto 2234 2234 goto 2235 2235 goto 2236 2236 goto 2237 2237 goto 2238 2238 goto 2239 2239 goto 2240 2240 goto 2241 2241 goto 2242 2242 goto 2243 2243 goto 2244 2244 goto 2245 2245 goto 2246 2246 goto 2247 2247 goto 2248 2248 goto 2249 2249 goto 2250 2250 goto 2251 2251 goto 2252 2252 goto 2253 2253 goto 2254 2254 goto 2255 2255 goto 2256 2256 goto 2257 2257 goto 2258 2258 goto 2259 2259 goto 2260 2260 goto 2261 2261 goto 2262 2262 goto 2263 2263 goto 2264 2264 goto 2265 2265 goto 2266 2266 goto 2267 2267 goto 2268 2268 goto 2269 2269 goto 2270 2270 goto 2271 2271 goto 2272 2272 goto 2273 2273 goto 2274 2274 goto 2275 2275 goto 2276 2276 goto 2277 2277 goto 2278 2278 goto 2279 2279 goto 2280 2280 goto 2281 2281 goto 2282 2282 goto 2283 2283 goto 2284 2284 goto 2285 2285 goto 2286 2286 goto 2287 2287 goto 2288 2288 goto 2289 2289 goto 2290 2290 goto 2291 2291 goto 2292 2292 goto 2293 2293 goto 2294 2294 goto 2295 2295 goto 2296 2296 goto 2297 2297 goto 2298 2298 goto 2299 2299 goto 2300 2300 goto 1 end ftnchek-3.3.1/test/lotsalabels.opt0000644000031000002260000000003507617550611017574 0ustar moniotstaff00000000000000-nolist -nosym lotsalabels.f ftnchek-3.3.1/test/mixed-equiv.f0000644000031000002260000000026207617550611017151 0ustar moniotstaff00000000000000 real *8 x double precision y equivalence( x,y) real r equivalence (i,r) x = 1.0 write(*,*) y r = 0.0 write(*,*) i end ftnchek-3.3.1/test/model.f900000644000031000002260000000202707617550611016166 0ustar moniotstaff00000000000000! AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO ! DATE: MAY 8, 1989 ! Variables: ! SCORE -> an array of test scores ! SUM -> sum of the test scores ! COUNT -> counter of scores read in ! I -> loop counter REAL FUNCTION COMPAV(SCORE,COUNT) INTEGER SUM,COUNT,J,SCORE(5) DO I = 1,COUNT SUM = SUM + SCORE(I) END DO COMPAV = SUM/COUNT END FUNCTION COMPAV PROGRAM AVENUM ! ! MAIN PROGRAM ! ! AUTHOR: LOIS BIGBIE ! DATE: MAY 15, 1990 ! ! Variables: ! MAXNOS -> maximum number of input values ! NUMS -> an array of numbers ! COUNT -> exact number of input values ! AVG -> average returned by COMPAV ! I -> loop counter ! PARAMETER(MAXNOS=5) INTEGER I, COUNT REAL NUMS(MAXNOS), AVG COUNT = 0 DO I = 1,MAXNOS READ (5,*,END=100) NUMS(I) ; COUNT = COUNT + 1 END DO 100 AVG = COMPAV(NUMS, COUNT) END PROGRAM AVENUM ftnchek-3.3.1/test/namelist.f0000644000031000002260000001643407617550611016540 0ustar moniotstaff00000000000000c----------------------------------------------------------------------- c ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995 c----------------------------------------------------------------------- common b,e,f namelist /n1/ a,b,c namelist /n2/ x,y,z /n3/ l,m, namelist /n4/ x1,y2 z3, /n5/ l6 read(*,n1) write(*,n2) read(1,nml=n3) write(1,nml=n4) end subroutine grfgg3 C$ (grfgg3) C$ This is a substantial portion of the declaration section from C$ the PLOT79 grfgg3.sf3 file. The formatting was done by the C$ Extended PFORT Verifier, and the extensive NAMELIST block serves C$ as a test for ftnchek. C$ (13-Mar-1995) C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ EXTERNAL FUNCTIONS AND SUBROUTINES C$ INTEGER I1MACH, NINT, UTISL REAL ALOG10, R1MACH, UTRE3 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ INTRINSIC FUNCTIONS C$ INTEGER IABS, MAX0, MIN0 REAL ABS, AMAX1, AMIN1, FLOAT REAL SIGN C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ STATEMENT FUNCTIONS C$ LOGICAL IN REAL CMTOIN, CMTOUN, FRAC, INTOCM REAL INTOUN, MMTOCM, UNTOCM, UNTOIN C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ HOLLERITH STRING VARIABLES C$ INTEGER BLANK, GREEK, QUOTE, ROMAN C$ C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ NON-COMMON VARIABLES C$ INTEGER BIGINT, CARD(500), CURCOL, CURROW INTEGER FSTYLE, I, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAXCRD INTEGER MAXCRV, MAXVAL, MODEU, MODEV INTEGER MODEX, MODEY, MODEZ, N(06) INTEGER NC, NCELLX, NCELLY, NCINIT INTEGER NCISAV, NCSTEP, NCTERM, NCU INTEGER NCV, NCX, NCY, NCZ INTEGER NIN, NJ, NOUT, NRINIT INTEGER NRISAV, NRSTEP, NRTERM, NSUM INTEGER NU(06), NUJ, NUMINT(06), NUSUB INTEGER NVSUB, NXSUB, NYSUB, NZSUB INTEGER PEN(06), TITLE(500), UTITLE(500) INTEGER VTITLE(500), XTITLE(500), YTITLE(500) INTEGER ZTITLE(500) LOGICAL AUTOX, AUTOY, AUTOZ LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06) LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE LOGICAL FCLIP, INTGRT(06), LOGX, LOGY LOGICAL LOGZ, LSTXYZ, PARLEL, PLOPEN LOGICAL PLOTID, RESET, RIGHT, UAXIS LOGICAL UVAXES, VARPEN, VAXIS, WCLIP LOGICAL XAXIS, XFALLS, YAXIS, YFALLS LOGICAL ZAXIS, ZFALLS REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CPX REAL CPY, DEFHT, DEFMAR, DT REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL LWIDTH(06), MARGIN(4), MSCALE, NINETY REAL ONE, PAGESQ, PAGEX, PAGEY REAL PENDIA, PERDST, PICTHX, PICTHY REAL PICTX, PICTY, PPXYZ(3) REAL RPXYZ(3), SIGMA(06), SWAP, T(4,4) REAL TICDEF, TICKU, TICKV, TICKX REAL TICKY, TICKZ, TIMAGE(4,4) REAL TMODEL(4,4), TOPMAR, TT, TTLHEI REAL TTLLEN, TTOTAL(4,4), TWO, U1 REAL U2, UDIST, UMAX, UMAXP REAL UMAXRC, UMIN, UMINP, UMINRC REAL UNITS, UNSPEC, UPXYZ(3), V1 REAL V2, VDIST, VIEWD, VMAX REAL VMAXP, VMAXRC, VMIN, VMINP REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN REAL VPVMAX, VPVMIN, VSCALE, WMAX REAL WMAXP, WMIN, WMINP REAL WORK(1600,5),X(1600,06), X0, XDIST REAL XFACT(06), XINT, XMAX, XMAXJ REAL XMAXP, XMIN, XMINJ, XMINP REAL XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY REAL Z(1600,06), Z0, ZDIST, ZERO REAL ZFACT(06), ZINT, ZMAX, ZMAXJ REAL ZMAXP, ZMIN, ZMINJ, ZMINP REAL ZORG, ZSHIFT(06), ZZ C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C$ C$ NAMELIST BLOCKS C$ NAMELIST / DATA / X AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, X DERIV, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB, X FCLIP, FSCALE, FSTYLE, GSCALE, HSCALE, IDFONT, X INTGRT, KX, KY, KZ, LOGX, LOGY, X LOGZ, LSTXYZ, LSTYLE, LWIDTH, MARGIN, MARK, X MODEU, MODEV, MODEX, MODEY, MODEZ, MSCALE, X N, NCINIT, NCSTEP, NCTERM, NRINIT, NRSTEP, X NRTERM, NU, NUMINT, NUSUB, NVSUB, NXSUB, X NYSUB, NZSUB, PARLEL, PEN, PENDIA, PERDST, X PLOTID, PPXYZ, RESET, RIGHT, RPXYZ, SIGMA, X TICKU, TICKV, TICKX, TICKY, TICKZ, TIMAGE, X TMODEL, UAXIS, UMAX, UMIN, UPXYZ, UVAXES, X VAXIS, VIEWD, VMAX, VMIN, VNXYZ, VSCALE, X WCLIP, WMAX, WMIN, X, XAXIS, XFACT, X XFALLS, XMAX, XMIN, XSHIFT, Y, YAXIS, X YFACT, YFALLS, YMAX, YMIN, YSHIFT, Z, X ZAXIS, ZFACT, ZFALLS, ZMAX, ZMIN, ZSHIFT END ftnchek-3.3.1/test/namelist.opt0000644000031000002260000000002507617550611017102 0ustar moniotstaff00000000000000-sym -lis namelist.f ftnchek-3.3.1/test/noblanks.f0000644000031000002260000000556307617550611016534 0ustar moniotstaff00000000000000 doubleprecisionfunctiondnrm2(n,dx,incx) integernext doubleprecisiondx(1),cutlo,cuthi,hitest,sum,xmax,zero,one datazero,one/0.0d0,1.0d0/ c c euclideannormofthen-vectorstoredindx()withstorage c incrementincx. c ifn.le.0returnwithresult=0. c ifn.ge.1thenincxmustbe.ge.1 c c c.l.lawson,1978jan08 c c fourphasemethodusingtwobuilt-inconstantsthatare c hopefullyapplicabletoallmachines. c cutlo=maximumofdsqrt(u/eps)overallknownmachines. c cuthi=minimumofdsqrt(v)overallknownmachines. c where c eps=smallestno.suchthateps+1..gt.1. c u=smallestpositiveno.(underflowlimit) c v=largestno.(overflowlimit) c c briefoutlineofalgorithm.. c c phase1scanszerocomponents. c movetophase2whenacomponentisnonzeroand.le.cutlo c movetophase3whenacomponentis.gt.cutlo c movetophase4whenacomponentis.ge.cuthi/m c wherem=nforx()realandm=2*nforcomplex. c c valuesforcutloandcuthi.. c fromtheenvironmentalparameterslistedintheimslconverter c documentthelimitingvaluesareasfollows.. c cutlo,s.p.u/eps=2**(-102)forhoneywell.closesecondsare c univacanddecat2**(-103) c thuscutlo=2**(-51)=4.44089e-16 c cuthi,s.p.v=2**127forunivac,honeywell,anddec. c thuscuthi=2**(63.5)=1.30438e19 c cutlo,d.p.u/eps=2**(-67)forhoneywellanddec. c thuscutlo=2**(-33.5)=8.23181d-11 c cuthi,d.p.sameass.p.cuthi=1.30438d19 c datacutlo,cuthi/8.232d-11,1.304d19/ c datacutlo,cuthi/4.441e-16,1.304e19/ datacutlo,cuthi/8.232d-11,1.304d19/ c if(n.gt.0)goto10 dnrm2=zero goto300 c 10 assign30tonext sum=zero nn=n*incx c beginmainloop i=1 20 gotonext,(30,50,70,110) 30 if(dabs(dx(i)).gt.cutlo)goto85 assign50tonext xmax=zero c c phase1.sumiszero c 50 if(dx(i).eq.zero)goto200 if(dabs(dx(i)).gt.cutlo)goto85 c c prepareforphase2. assign70tonext goto105 c c prepareforphase4. c 100 i=j assign110tonext sum=(sum/dx(i))/dx(i) 105 xmax=dabs(dx(i)) goto115 c c phase2.sumissmall. c scaletoavoiddestructiveunderflow. c 70 if(dabs(dx(i)).gt.cutlo)goto75 c c commoncodeforphases2and4. c inphase4sumislarge.scaletoavoidoverflow. c 110 if(dabs(dx(i)).le.xmax)goto115 sum=one+sum*(xmax/dx(i))**2 xmax=dabs(dx(i)) goto200 c 115 sum=sum+(dx(i)/xmax)**2 goto200 c c c prepareforphase3. c 75 sum=(sum*xmax)*xmax c c c forrealord.p.sethitest=cuthi/n c forcomplexsethitest=cuthi/(2*n) c 85 hitest=cuthi/float(n) c c phase3.sumismid-range.noscaling. c do95j=i,nn,incx if(dabs(dx(j)).ge.hitest)goto100 95 sum=sum+dx(j)**2 dnrm2=dsqrt(sum) goto300 c 200 continue i=i+incx if(i.le.nn)goto20 c c endofmainloop. c c computesquarerootandadjustforscaling. c dnrm2=xmax*dsqrt(sum) 300 continue return end ftnchek-3.3.1/test/noblanks.opt0000644000031000002260000000002507617550611017075 0ustar moniotstaff00000000000000-nopretty noblanks.f ftnchek-3.3.1/test/params.f0000644000031000002260000000031407617550611016175 0ustar moniotstaff00000000000000 implicit real*8 (a-h, l, m, o-z) parameter (pi = .31415926535897932D+01) parameter (minus1 = -.01D2) parameter (half = 5.D-1) write(*,*) minus1*pi,half stop end ftnchek-3.3.1/test/primes.f0000644000031000002260000000321707617550611016216 0ustar moniotstaff00000000000000 implicit none integer M, numprimes integer MAXPRIMES parameter (MAXPRIMES=10000) integer primes(MAXPRIMES) integer makeprimes write(*,*) 'Enter ceiling on primes' read(*,*) M C Get list of primes up to M numprimes = makeprimes(primes,M,MAXPRIMES) C Print the primes call printarray('Primes',primes,numprimes) end subroutine printarray(heading,a,n) implicit none character *(*) heading integer i, n, a(1) write(*,*) heading do i=1,n write(*,'(1x,i4,1x,i5)') i, a(i) end do end integer function makeprimes(p,n,max) C computes array of primes less than or equal to n. C note: max = limit of number of primes, must be at least 1. implicit none integer n, max, p(max) integer i, numprimes logical divisible C put the even prime into the list numprimes = 1 p(numprimes) = 2 C loop thru odd integers, testing if divisible do i=3,n,2 if( .not. divisible(i,p,numprimes) ) then numprimes = numprimes+1 if( numprimes .gt. max ) then write(*,*) 'Ran out of space at p=',i stop else p(numprimes) = i end if end if end do C return number of primes found makeprimes = numprimes return end logical function divisible(n,p,nump) implicit none integer n, nump, p(1) integer i do i=1,nump if( mod(n,p(i)) .eq. 0 ) then divisible = .true. return end if end do divisible = .false. return end ftnchek-3.3.1/test/pure-function.f0000644000031000002260000000024207617550611017510 0ustar moniotstaff00000000000000 real function notpure(a,b,c) real a,b,c common /shared/ x,y,z b = a + c z = x + y notpure = a*x + b*y + c*z end ftnchek-3.3.1/test/quad.f0000644000031000002260000000106707617550611015652 0ustar moniotstaff00000000000000C Test of parsing and checking quad precision variables & constants. C No intrinsic functions at this time. real r double precision d real*8 r8 real*16 q complex*32 cq q = 1.234Q5 q = 1.234Q+05 q = 1.234Q+345 q = 1.234Q-345 d = 1.234Q+05 r = 1.234Q+05 d = q q = d r = q q = r cq = q q = qsqrt(q) cq = cqsqrt(cq) r = qsqrt(q) q = qsqrt(r) q = qsqrt(d) r8 = qsqrt(q) q = qprod(d,r8) q = qmax1(1.234Q5,q,1.234Q-5) end ftnchek-3.3.1/test/relops.f0000644000031000002260000000125207617550611016220 0ustar moniotstaff00000000000000C Test program for acceptance of new style relational operators. These C are F90 standard, not F77. real x, y write(*,*) 'Enter two numbers' read(*,*) x,y if( x > y ) then write(*,*) x,' is greater than',y endif if( x == y ) then write(*,*) x, ' is equal to ',y endif if( x /= y ) then write(*,*) x, ' is not equal to',y endif if( x >= y ) then write(*,*) x,' is greater or equal to than',y endif if( x < y ) then write(*,*) x, ' is less than ',y endif if( x <= y ) then write(*,*) x, ' is less than or equal to ',y endif end ftnchek-3.3.1/test/sequence.f0000644000031000002260000000032407617550611016523 0ustar moniotstaff00000000000000C tests message about statement out of order. data x /1.0/ integer a,b,c common a,b,c sqr(y)=y*y double precision d read(*,*) a,b,c,d write(*,*) a,b,c,d,sqr(x) end ftnchek-3.3.1/test/strings.f0000644000031000002260000000170307617550611016406 0ustar moniotstaff00000000000000C To see if handling of strings that are split across lines is done right C23456789012345678901234567890123456789012345678901234567890123456789012 character*255 S,T,U,V S = '12345678901234567890123456789012345678901234567890123456789012 $ 12345678901234567890123456789012345678901234567890123456789012' write(*,*) S T = '12345678901234567890123456789012345678901234567890123456789012 $ $x12345678901234567890123456789012345678901234567890123456789012' write(*,*) T U = '123456789012345678901234567890123456789012345678901234567890' $'12345678901234567890123456789012345678901234567890123456789012' write(*,*) U U = '123456789012345678901234567890123456789012345678901234567890' $ $'12345678901234567890123456789012345678901234567890123456789012' write(*,*) U V = '123456789012345678901234567890123456789012345678901234567890' $// 'hello' write(*,*) V end ftnchek-3.3.1/test/strings.opt0000644000031000002260000000002007617550611016752 0ustar moniotstaff00000000000000-port strings.f ftnchek-3.3.1/test/substr.f0000644000031000002260000000046007617550611016236 0ustar moniotstaff00000000000000C This program tickled a bug in gcc under DEC Unix for Alpha PROGRAM X CHARACTER*80 LINE INTEGER LSTART, LEND PARAMETER (LSTART=2,LEND=11) READ (5,'(A)') LINE(1:9) PRINT *,LINE(9:10) READ (5,'(A)') LINE(LSTART:LEND) PRINT *,LINE(2:LEND) END ftnchek-3.3.1/test/t208a.f0000644000031000002260000001054707617550611015561 0ustar moniotstaff00000000000000 SUBROUTINE DDIAPA (IX,IY) C (Add to Path) C Add the point (IX,IY) to the current path, which is assumed C to have already been started by a call to DDIBPA. The C current point and visibility are updated in COMMON. C (27-May-1991) C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) C C EXTERNAL REFS TKIOLL, TKIOWB, TKIOWH, TKIOWN C INTEGER TKIOLL C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C NON-COMMON VARIABLES C C SETS BLANK C INTEGER BLANK, DUMMY, IX, IY C C----------------------------------------------------------------------- C P o s t S c r i p t C D i s p l a y D e v i c e I n t e r f a c e C C O M M O N B l o c k C C DSSIZE display surface size in cm C IMAGE image transformation in effect C (LASTX,LASTY,VILAST) last position and visibility of pen C LINEIN line intensity (0..1 scale) C LINEWT line weight (1..25 scale) C MAGFAC resolution magnification factor C (MOVEX,MOVEY) position of first point in path C NPATH number of line segments in current page C PLSTEP plotter step size in cm C (PSXOFF,PSYOFF) image offset in PostScript units (bp) C ROTATE plot frame is rotated C (SX,SY) scale factors (unit square to plot steps) C TIMAGE(*,*) image transformation matrix C (XMAX,YMAX,ZMAX) normalized device space extents C (MAXX,MAXY,MINX,MINY) actual coordinate limits reached C C----------------------------------------------------------------------- INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE, XMAX, YMAX REAL ZMAX C COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE(4,4), XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST C C DATA BLANK / 32 / C C We can generate an entry of size "-ddddd -ddddd R "; try to C keep line lengths under 80 characters. C IF (TKIOLL(DUMMY) .GT. 64) CALL TKIOWH (2H$N,2) C C Use relative coordinates for lines to reduce the number of C bytes in the verbose PostScript command language. This C shortens the plot file by 5 to 10 percent. C C We optimize output into 3 different forms: C C # # R (relative lineto) C # X (relative lineto with delta-y = 0) C # Y (relative lineto with delta-x = 0) C C The latter two cases occur frequently enough to be worth C taking advantage of to compress the output and reduce the C parsing time. We cannot discard zero length segments, C however, because that would discard single points from a C point plot. C IF (IX .EQ. LASTX) GO TO 10 IF (IY .EQ. LASTY) GO TO 20 CALL TKIOWN (IX-LASTX) CALL TKIOWB (BLANK) CALL TKIOWN (IY-LASTY) CALL TKIOWH (3H R ,3) GO TO 30 10 CALL TKIOWN (IY-LASTY) CALL TKIOWH (3H Y ,3) GO TO 30 20 CALL TKIOWN (IX-LASTX) CALL TKIOWH (3H X ,3) 30 NPATH = NPATH + 1 LASTX = IX LASTY = IY VILAST = .TRUE. MAXX = MAX0(MAXX,IX) MINX = MIN0(MINX,IX) MAXY = MAX0(MAXY,IY) MINY = MIN0(MINY,IY) C C Insert a line break periodically to prevent excessively C long lines. C C IF (MOD(NPATH,10) .EQ. 0) CALL TKIOWH (2H$N,2) C 40 RETURN END ftnchek-3.3.1/test/t208b.f0000644000031000002260000000016207617550611015552 0ustar moniotstaff00000000000000 PARAMETER (NPI = 9) INTRINSIC SQRT, SIN, COS EXTERNAL MYSQRT, MYSUB REAL MYSQRT END ftnchek-3.3.1/test/t208c.f0000644000031000002260000000051207617550611015552 0ustar moniotstaff00000000000000 character*144 s,t,t1,t2,t3,t4,t5,t6,t7 character*72 u character*1 c character cnl real*16 x16 real*8 x8 real*6 x6 real xnl complex*12 y complex ynl logical*1 logvar logical*2 logvar2 logical lognl integer*2 short integer shortnl end ftnchek-3.3.1/test/t208d.f0000644000031000002260000014625407617550611015571 0ustar moniotstaff00000000000000 SUBROUTINE SYMSF (FONT,SWCHAR) C (Select Font) C Select one of the Hershey fonts for subsequent text C plotting. Up to five fonts may be in effect at one time. C The last selected is the default one. If more than five C fonts are requested, the sixth will replace the first, the C seventh the second, and so on in a cyclic fashion. This C restriction is purely dimensional, and may easily be C changed if required. The case switch characters are C initialized to "<" and ">" for to-upper and to-lower C respectively. The backspace character switch is C initialized to 0, suppressing the backspace facility. The C arguments are: C C FONT(*).....5-character string selecting font (see below). C SWCHAR(*)...Single character (e.g. 1H=) used as a switch C character to return to this font from another. C It will be interpreted as a switch character if C it occurs only once. However, two successive C switch characters for a single font will be C collapsed to a single character and will not be C interpreted as a font switch. A blank or zero C value indicates that no switch character is C selected. C C The fonts are selected by a five-character string made up C of a 2-character case specification, a 2-character type C specification, and a 1-character variant specification, as C follows: C C Case: UC - Upper Case C LC - Lower Case C C Type: KR - Cartographic Roman (9) C KG - Cartographic Greek (9) C IR - Indexical Roman (13) C II - Indexical Roman Italic (13) C IG - Indexical Greek (13) C SA - Simplex ASCII (15) C BA - Block ASCII (15) C SR - Simplex Roman (21) C SS - Simplex Roman Script (21) C SG - Simplex Greek (21) C CR - Complex Normal Roman (21) C CI - Complex Normal Roman Italic (21) C CG - Complex Normal Greek (21) C CS - Complex Script (21) C DR - Duplex Roman (21) C TR - Triplex Roman (21) C GE - Gothic English (21) C GI - Gothic Italian (21) C GG - Gothic German (21) C CC - Complex Cyrillic (21) C C Variant: 1 - Principal C 2 - Secondary C 3 - Tertiary C 4 - Quaternary C C Selector letters may be either upper- or lower-case. The C case specification is arranged such that if upper-case is C requested, upper-case text will be mapped into upper-case, C and lower-case into lower-case. If lower-case is C requested, both upper- and lower-case letters are mapped C into lower case. The four variants are provided to allow C representation of special characters within the limited C FORTRAN set. The Gothic and Cyrillic fonts have only two C variants available. Requests for variants 3 or 4 will be C reduced to variant 2. The ASCII fonts have only one C variant, and requests for variants 2, 3, or 4 will be C reduced to variant 1. C C The numbers (9), (13), (15), and (21) following the type C indicate the height of the characters in raster units. The C spacing between lines of text is conventionally measured by C the printer's unit "em", giving the distance from the C bottom of one line of type to the bottom of the next line. C It should be 21 raster units for indexical size, and 32 C raster units for normal size. C C If any of the three parts of the font specification is in C error, a message will be issued, and a default for that C part will be assumed. The default corresponds to "UCTR1". C (01-APR-83) C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) C C EXTERNAL REFS ERRAT, ERRCK, ERRMS, KARASC C EXTERNAL REFS KARCM2, KARUC, KARUPK, MIN0 C EXTERNAL REFS MOD C C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C EXTERNAL FUNCTIONS AND SUBROUTINES C INTEGER KARASC, KARCM2, KARUC C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C INTRINSIC FUNCTIONS C INTEGER MIN0, MOD C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C C Working variables C INTEGER FCASE, FONT(1), FTYPE, FVAR INTEGER I, IDIG, ILC, IUC INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER NOCHAR, NUL, SWCHAR(1) LOGICAL ERROR C C Font type case selectors C INTEGER BA INTEGER CC, CG, CI, CR INTEGER CS, DR, GE, GG INTEGER GI, IG, II, IR INTEGER KG, KR, SA, SG INTEGER SR, SS, TR C C Roman alphabet symbols in upper-case ASCII. C INTEGER UCA, UCB, UCC, UCD INTEGER UCE, UCF, UCG, UCH INTEGER UCI, UCJ, UCK, UCL INTEGER UCM, UCN, UCO, UCP INTEGER UCQ, UCR, UCS, UCT INTEGER UCU, UCV, UCW, UCX INTEGER UCY, UCZ C C Roman alphabet symbols in lower-case ASCII. C INTEGER LCA, LCB, LCC, LCD INTEGER LCE, LCF, LCG, LCH INTEGER LCI, LCJ, LCK, LCL INTEGER LCM, LCN, LCO, LCP INTEGER LCQ, LCR, LCS, LCT INTEGER LCU, LCV, LCW, LCX INTEGER LCY, LCZ C C Greek alphabet symbols ordered relative to first letter. C INTEGER ALPHA, BETA, CHI, DELTA INTEGER EPSLON, ETA, GAMMA, IOTA INTEGER KAPPA, LAMBDA, MU, NU INTEGER OMCRON, OMEGA, PHI, PI INTEGER PSI, RHO, SIGMA, TAU INTEGER THETA, UPSLON, XI, ZETA C C Cyrillic alphabet ordered relative to first letter. C INTEGER CYA, CYB, CYCHE, CYD INTEGER CYE, CYEE, CYEEK, CYF INTEGER CYG, CYK, CYKHA, CYL INTEGER CYM, CYMZNK, CYN, CYO INTEGER CYOO, CYP, CYR, CYS INTEGER CYSH, CYSHCH, CYT, CYTSE INTEGER CYTZNK, CYV, CYYA, CYYE INTEGER CYYIRI, CYYOO, CYZ, CYZHE C C ASCII special characters C INTEGER ACCENT, AMPSND, AT, CARET INTEGER COLON, COMMA, DEL, DOLLAR INTEGER DQUOTE, EQUALS, EXCLPT, LANGLE INTEGER LBRACE, LBRAKT, LPAREN, MINUS INTEGER NUMBER, PERCNT, PERIOD, PLUS INTEGER QUERY, RANGLE, RBRACE, RBRAKT INTEGER RPAREN, RSLANT, SCOLON, SLASH INTEGER SPACE, SQUOTE, STAR, TILDE INTEGER USCORE, VBAR C C COMMON declarations C C ---------------------------------------------------------------------- C C O R E G R A P H I C S S Y S T E M T E X T C C U R R E N T F O N T P A R A M E T E R S C C O M M O N B L O C K C C CASESW: Current temporary font case (1=UC, 2=LC) C KFONT: Current font table index C MAXFNT: Maximum font index C NFONT: Index of most recent font table established C NFUSED: Maximum number of font tables in use C INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED COMMON /SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON /SYM02 / NFUSED C ---------------------------------------------------------------------- C C O R E G R A P H I C S S Y S T E M T E X T C F O N T D A T A C C O M M O N B L O C K C C ASCII(*,*): Table of Hershey characters assigned to C ASCII values C BSWTCH(*): Backspace switch ASCII character numbers for C each font C FONTID(*): Packed integer font identification for each font C FONTNM(*,*): Unpacked Hollerith font name for each font C FSWTCH(*): Font switch ASCII character numbers for each C font C LSWTCH(*): Lower-case switch ASCII character numbers C for each font C USWTCH(*): Upper-case switch ASCII character numbers C for each font C INTEGER ASCII, BSWTCH, FONTID, FONTNM INTEGER FSWTCH, LSWTCH, USWTCH COMMON /SYM03 / ASCII(96,5), BSWTCH(5), FONTID(5) COMMON /SYM03 / FONTNM(5,5), FSWTCH(5), LSWTCH(5), USWTCH(5) C C Roman alphabet symbols in upper-case ASCII. C DATA UCA,UCB,UCC,UCD,UCE,UCF,UCG,UCH,UCI,UCJ,UCK,UCL,UCM,UCN, XUCO,UCP,UCQ,UCR,UCS,UCT,UCU,UCV,UCW,UCX,UCY,UCZ/ X65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, X79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90/ C C Roman alphabet symbols in lower-case ASCII. C DATA LCA,LCB,LCC,LCD,LCE,LCF,LCG,LCH,LCI,LCJ,LCK,LCL,LCM,LCN, XLCO,LCP,LCQ,LCR,LCS,LCT,LCU,LCV,LCW,LCX,LCY,LCZ/ X97, 98, 99,100,101,102,103,104,105,106,107,108,109,110, 1 X11,112,113,114,115,116,117,118,119,120,121,122/ C C Greek alphabet symbols ordered relative to first letter. C DATA ALPHA,BETA,GAMMA,DELTA,EPSLON,ZETA,ETA,THETA,IOTA,KAPPA, XLAMBDA,MU,NU,XI,OMCRON,PI,RHO,SIGMA,TAU,UPSLON,PHI,CHI,PSI, XOMEGA/ X0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, X23/ C C Cyrillic alphabet symbols ordered relative to first letter. C DATA CYA,CYB,CYV,CYG,CYD,CYYE,CYZHE,CYZ,CYEE,CYEEK,CYK, XCYL,CYM,CYN,CYO,CYP,CYR,CYS,CYT,CYOO,CYF,CYKHA, XCYTSE,CYCHE,CYSH,CYSHCH,CYTZNK,CYYIRI,CYMZNK,CYE,CYYOO,CYYA/ X0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, X23,24,25,26,27,28,29,30,31/ C C ASCII special characters C DATA SPACE,EXCLPT,DQUOTE,NUMBER,DOLLAR,PERCNT,AMPSND, XSQUOTE,LPAREN,RPAREN,STAR,PLUS,COMMA,MINUS,PERIOD, XSLASH,COLON,SCOLON,LANGLE,EQUALS,RANGLE,QUERY,AT, XLBRAKT,RSLANT,RBRAKT,CARET,USCORE,ACCENT,LBRACE, XVBAR,RBRACE,TILDE,DEL/ X32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, X58,59,60,61,62,63,64, X91,92,93,94,95, X96,123,124,125,126,127/ DATA NUL/0/ C C Font type case switch values. C DATA KR/1/, KG/2/, IR/3/, II/4/, IG/5/, SR/6/, SS/7/, SG/8/ DATA CR/9/, CI/10/, CG/11/, CS/12/, DR/13/, TR/14/, GE/15/ DATA GI/16/, GG/17/, CC/18/, SA/19/, BA/20/ C ASSIGN 20001 TO NPR001 GO TO 30001 20001 ASSIGN 20002 TO NPR002 GO TO 30002 20002 ASSIGN 20003 TO NPR003 GO TO 30003 20003 ASSIGN 20004 TO NPR004 GO TO 30004 20004 IF (.NOT.(ERROR)) GO TO 20005 ASSIGN 20005 TO NPR005 GO TO 30005 20005 ASSIGN 20006 TO NPR006 GO TO 30006 C 20006 RETURN C C----------------------------------------------------------------------- C---- PROCEDURE (Alphanumerics) 30007 IF (FCASE .EQ. 2) LOCUC = LOCLC I =1 GO TO 20008 20007 I =I +1 20008 IF ((26-I ).LT.0) GO TO 20009 IUC = I + 64 - 31 ASCII(IUC,NFONT) = LOCUC + I - 1 ILC = I + 96 - 31 ASCII(ILC,NFONT) = LOCLC + I - 1 GO TO 20007 20009 ASSIGN 20011 TO NPR008 GO TO 30008 20011 GO TO NPR007, (20039,20055,20058,20077,20085,20088,20094,20131,201 X53,20168,20249,20252,20255) C C----------------------------------------------------------------------- C---- PROCEDURE (BA - Block ASCII) 30009 LOCUC = 1765 LOCLC = 1797 I =32 GO TO 20013 20012 I =I +1 20013 IF ((127-I ).LT.0) GO TO 20014 ASCII(I-31,NFONT) = 1700 + I GO TO 20012 20014 IF (.NOT.(FCASE .EQ. 2)) GO TO 20016 I =65 GO TO 20020 20019 I =I +1 20020 IF ((90-I ).LT.0) GO TO 20021 ASCII(I-31,NFONT) = 1700 + I + 32 GO TO 20019 20021 CONTINUE 20016 GO TO 20225 C C----------------------------------------------------------------------- C---- PROCEDURE (Cartographic Special Characters) 30010 NOCHAR = LOC0 - 1 ASSIGN 20023 TO NPR011 GO TO 30011 20023 ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 17 ASCII(NUMBER-31,NFONT) = LOC0 + 33 ASCII(AMPSND-31,NFONT) = LOC0 + 34 ASCII(SQUOTE-31,NFONT) = LOC0 + 16 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(QUERY -31,NFONT) = LOC0 + 15 ASCII(VBAR -31,NFONT) = LOC0 + 23 GO TO NPR010, (20163,20166,20239) C C----------------------------------------------------------------------- C---- PROCEDURE (Cartographic Standard Signs) 30012 NX0028=FVAR IF (NX0028.LT.1.OR.NX0028.GT.4) GO TO 20028 GO TO (20024,20025,20026,20027), NX0028 20024 ASCII(COMMA -31,NFONT) = 211 ASCII(PERIOD-31,NFONT) = 210 ASCII(LPAREN-31,NFONT) = 221 ASCII(RPAREN-31,NFONT) = 222 ASCII(MINUS -31,NFONT) = 224 ASCII(PLUS -31,NFONT) = 225 ASCII(STAR -31,NFONT) = 228 ASCII(SLASH -31,NFONT) = 220 ASCII(EQUALS-31,NFONT) = 226 ASCII(DOLLAR-31,NFONT) = 219 ASCII(AT -31,NFONT) = 1273 GO TO 20029 20025 ASCII(COMMA -31,NFONT) = 213 ASCII(PERIOD-31,NFONT) = 215 ASCII(LPAREN-31,NFONT) = 221 ASCII(RPAREN-31,NFONT) = 222 ASCII(MINUS -31,NFONT) = 224 ASCII(PLUS -31,NFONT) = 225 ASCII(STAR -31,NFONT) = 229 ASCII(SLASH -31,NFONT) = 220 ASCII(EQUALS-31,NFONT) = 226 ASCII(DOLLAR-31,NFONT) = 233 ASCII(AT -31,NFONT) = 232 GO TO 20029 20026 ASCII(COMMA -31,NFONT) = 212 ASCII(PERIOD-31,NFONT) = 214 ASCII(LPAREN-31,NFONT) = 221 ASCII(RPAREN-31,NFONT) = 222 ASCII(MINUS -31,NFONT) = 224 ASCII(PLUS -31,NFONT) = 225 ASCII(STAR -31,NFONT) = 227 ASCII(SLASH -31,NFONT) = 220 ASCII(EQUALS-31,NFONT) = 226 ASCII(DOLLAR-31,NFONT) = 223 ASCII(AT -31,NFONT) = 230 GO TO 20029 20027 ASCII(COMMA -31,NFONT) = 216 ASCII(PERIOD-31,NFONT) = 217 ASCII(LPAREN-31,NFONT) = 221 ASCII(RPAREN-31,NFONT) = 222 ASCII(MINUS -31,NFONT) = 224 ASCII(PLUS -31,NFONT) = 225 ASCII(STAR -31,NFONT) = 218 ASCII(SLASH -31,NFONT) = 220 ASCII(EQUALS-31,NFONT) = 226 ASCII(DOLLAR-31,NFONT) = 235 ASCII(AT -31,NFONT) = 231 GO TO 20029 20028 ASSIGN 20030 TO NPR013 GO TO 30013 20030 CONTINUE 20029 GO TO NPR012, (20164,20167) C C----------------------------------------------------------------------- C---- PROCEDURE (CC - Complex Cyrillic) 30014 FVAR = MIN0(FVAR,2) LOCUC = 2801 LOCLC = 2901 LOC0 = 2200 ASSIGN 20031 TO NPR015 GO TO 30015 20031 ASSIGN 20032 TO NPR016 GO TO 30016 20032 ASSIGN 20033 TO NPR017 GO TO 30017 20033 GO TO 20223 C C----------------------------------------------------------------------- C---- PROCEDURE (CG - Complex Greek) 30018 LOCUC = 2027 LOCLC = 2127 LOC0 = 2200 ASSIGN 20034 TO NPR015 GO TO 30015 20034 ASSIGN 20035 TO NPR016 GO TO 30016 20035 ASSIGN 20036 TO NPR019 GO TO 30019 20036 GO TO 20216 C C----------------------------------------------------------------------- C---- PROCEDURE (CI - Complex Italic) 30020 LOCUC = 2051 LOCLC = 2151 LOC0 = 2750 ASSIGN 20037 TO NPR015 GO TO 30015 20037 ASSIGN 20038 TO NPR016 GO TO 30016 20038 ASSIGN 20039 TO NPR007 GO TO 30007 20039 GO TO 20215 C C----------------------------------------------------------------------- C---- PROCEDURE (Complex Script Special Characters) 30021 LOC0SV = LOC0 LOC0 = 2200 ASSIGN 20040 TO NPR015 GO TO 30015 20040 LOC0 = LOC0SV ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 28 ASCII(AMPSND-31,NFONT) = LOC0 + 18 ASCII(SQUOTE-31,NFONT) = LOC0 + 27 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(QUERY -31,NFONT) = LOC0 + 15 GO TO 20056 C C----------------------------------------------------------------------- C---- PROCEDURE (Complex Special Characters) 30015 NOCHAR = LOC0 - 1 ASSIGN 20041 TO NPR011 GO TO 30011 20041 ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 17 ASCII(NUMBER-31,NFONT) = LOC0 + 75 ASCII(PERCNT-31,NFONT) = LOC0 + 71 ASCII(AMPSND-31,NFONT) = LOC0 + 72 ASCII(SQUOTE-31,NFONT) = LOC0 + 16 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(LANGLE-31,NFONT) = LOC0 + 41 ASCII(RANGLE-31,NFONT) = LOC0 + 42 ASCII(QUERY -31,NFONT) = LOC0 + 15 ASCII(LBRAKT-31,NFONT) = LOC0 + 23 ASCII(RBRAKT-31,NFONT) = LOC0 + 24 ASCII(CARET -31,NFONT) = LOC0 + 47 ASCII(ACCENT-31,NFONT) = LOC0 + 49 ASCII(LBRACE-31,NFONT) = LOC0 + 25 ASCII(VBAR -31,NFONT) = LOC0 + 29 ASCII(RBRACE-31,NFONT) = LOC0 + 26 ASCII(TILDE -31,NFONT) = LOC0 + 46 GO TO NPR015, (20031,20034,20037,20040,20053,20078,20095,20132,202 X56) C C----------------------------------------------------------------------- C---- PROCEDURE (Complex Standard Signs) 30016 I = (FVAR-1)*2 + FCASE NX0050=I IF (NX0050.LT.1.OR.NX0050.GT.8) GO TO 20050 GO TO (20042,20043,20044,20045,20046,20047,20048,20049), NX0050 20042 ASCII(COMMA -31,NFONT) = 2211 ASCII(PERIOD-31,NFONT) = 2210 ASCII(LPAREN-31,NFONT) = 2221 ASCII(RPAREN-31,NFONT) = 2222 ASCII(MINUS -31,NFONT) = 2231 ASCII(PLUS -31,NFONT) = 2232 ASCII(STAR -31,NFONT) = 2219 ASCII(SLASH -31,NFONT) = 2220 ASCII(EQUALS-31,NFONT) = 2238 ASCII(DOLLAR-31,NFONT) = 2274 ASCII(AT -31,NFONT) = 2273 GO TO 20051 20043 ASCII(COMMA -31,NFONT) = 2211 ASCII(PERIOD-31,NFONT) = 2210 ASCII(LPAREN-31,NFONT) = 2221 ASCII(RPAREN-31,NFONT) = 2222 ASCII(MINUS -31,NFONT) = 2231 ASCII(PLUS -31,NFONT) = 2232 ASCII(STAR -31,NFONT) = 2219 ASCII(SLASH -31,NFONT) = 2220 ASCII(EQUALS-31,NFONT) = 2238 ASCII(DOLLAR-31,NFONT) = 2274 ASCII(AT -31,NFONT) = 2273 GO TO 20051 20044 ASCII(COMMA -31,NFONT) = 2213 ASCII(PERIOD-31,NFONT) = 2215 ASCII(LPAREN-31,NFONT) = 2405 ASCII(RPAREN-31,NFONT) = 2406 ASCII(MINUS -31,NFONT) = 2256 ASCII(PLUS -31,NFONT) = 2257 ASCII(STAR -31,NFONT) = 2259 ASCII(SLASH -31,NFONT) = 2258 ASCII(EQUALS-31,NFONT) = 2260 ASCII(DOLLAR-31,NFONT) = 2279 ASCII(AT -31,NFONT) = 2276 GO TO 20051 20045 ASCII(COMMA -31,NFONT) = 2213 ASCII(PERIOD-31,NFONT) = 2215 ASCII(LPAREN-31,NFONT) = 2223 ASCII(RPAREN-31,NFONT) = 2224 ASCII(MINUS -31,NFONT) = 2246 ASCII(PLUS -31,NFONT) = 2272 ASCII(STAR -31,NFONT) = 2245 ASCII(SLASH -31,NFONT) = 2271 ASCII(EQUALS-31,NFONT) = 2239 ASCII(DOLLAR-31,NFONT) = 2275 ASCII(AT -31,NFONT) = 2216 GO TO 20051 20046 ASCII(COMMA -31,NFONT) = 2212 ASCII(PERIOD-31,NFONT) = 2214 ASCII(LPAREN-31,NFONT) = 2403 ASCII(RPAREN-31,NFONT) = 2404 ASCII(MINUS -31,NFONT) = 2231 ASCII(PLUS -31,NFONT) = 2232 ASCII(STAR -31,NFONT) = 2235 ASCII(SLASH -31,NFONT) = 2230 ASCII(EQUALS-31,NFONT) = 2238 ASCII(DOLLAR-31,NFONT) = 2411 ASCII(AT -31,NFONT) = 2277 GO TO 20051 20047 ASCII(COMMA -31,NFONT) = 2212 ASCII(PERIOD-31,NFONT) = 2214 ASCII(LPAREN-31,NFONT) = 2221 ASCII(RPAREN-31,NFONT) = 2222 ASCII(MINUS -31,NFONT) = 2231 ASCII(PLUS -31,NFONT) = 2232 ASCII(STAR -31,NFONT) = 2236 ASCII(SLASH -31,NFONT) = 2229 ASCII(EQUALS-31,NFONT) = 2238 ASCII(DOLLAR-31,NFONT) = 2267 ASCII(AT -31,NFONT) = 2217 GO TO 20051 20048 ASCII(COMMA -31,NFONT) = 2251 ASCII(PERIOD-31,NFONT) = 2252 ASCII(LPAREN-31,NFONT) = 2407 ASCII(RPAREN-31,NFONT) = 2408 ASCII(MINUS -31,NFONT) = 2261 ASCII(PLUS -31,NFONT) = 2233 ASCII(STAR -31,NFONT) = 2242 ASCII(SLASH -31,NFONT) = 2228 ASCII(EQUALS-31,NFONT) = 2244 ASCII(DOLLAR-31,NFONT) = 2412 ASCII(AT -31,NFONT) = 2270 GO TO 20051 20049 ASCII(COMMA -31,NFONT) = 2251 ASCII(PERIOD-31,NFONT) = 2252 ASCII(LPAREN-31,NFONT) = 2225 ASCII(RPAREN-31,NFONT) = 2226 ASCII(MINUS -31,NFONT) = 2263 ASCII(PLUS -31,NFONT) = 2234 ASCII(STAR -31,NFONT) = 2241 ASCII(SLASH -31,NFONT) = 2227 ASCII(EQUALS-31,NFONT) = 2243 ASCII(DOLLAR-31,NFONT) = 2268 ASCII(AT -31,NFONT) = 2218 GO TO 20051 20050 ASSIGN 20052 TO NPR013 GO TO 30013 20052 CONTINUE 20051 GO TO NPR016, (20032,20035,20038,20054,20057,20076,20254) C C----------------------------------------------------------------------- C---- PROCEDURE (CR - Complex Roman) 30022 LOCUC = 2001 LOCLC = 2101 LOC0 = 2200 ASSIGN 20053 TO NPR015 GO TO 30015 20053 ASSIGN 20054 TO NPR016 GO TO 30016 20054 ASSIGN 20055 TO NPR007 GO TO 30007 20055 GO TO 20214 C C----------------------------------------------------------------------- C---- PROCEDURE (CS - Complex Script) 30023 LOCUC = 2551 LOCLC = 2651 LOC0 = 2750 ASSIGN 20056 TO NPR021 GO TO 30021 20056 ASSIGN 20057 TO NPR016 GO TO 30016 20057 ASSIGN 20058 TO NPR007 GO TO 30007 20058 GO TO 20217 C C----------------------------------------------------------------------- C---- PROCEDURE (Cyrillic Alphanumerics) 30017 IF (FCASE .EQ. 2) LOCUC = LOCLC NX0061=FVAR IF (NX0061.LT.1.OR.NX0061.GT.2) GO TO 20061 GO TO (20059,20060), NX0061 20059 ASCII(UCA-31,NFONT) = LOCUC + CYA ASCII(UCB-31,NFONT) = LOCUC + CYB ASCII(UCV-31,NFONT) = LOCUC + CYV ASCII(UCG-31,NFONT) = LOCUC + CYG ASCII(UCD-31,NFONT) = LOCUC + CYD ASCII(UCE-31,NFONT) = LOCUC + CYYE ASCII(UCC-31,NFONT) = LOCUC + CYZHE ASCII(UCZ-31,NFONT) = LOCUC + CYZ ASCII(UCI-31,NFONT) = LOCUC + CYEE ASCII(UCK-31,NFONT) = LOCUC + CYK ASCII(UCL-31,NFONT) = LOCUC + CYL ASCII(UCM-31,NFONT) = LOCUC + CYM ASCII(UCN-31,NFONT) = LOCUC + CYN ASCII(UCO-31,NFONT) = LOCUC + CYO ASCII(UCP-31,NFONT) = LOCUC + CYP ASCII(UCR-31,NFONT) = LOCUC + CYR ASCII(UCS-31,NFONT) = LOCUC + CYS ASCII(UCT-31,NFONT) = LOCUC + CYT ASCII(UCU-31,NFONT) = LOCUC + CYOO ASCII(UCF-31,NFONT) = LOCUC + CYF ASCII(UCX-31,NFONT) = LOCUC + CYKHA ASCII(UCH-31,NFONT) = LOCUC + CYTSE ASCII(UCJ-31,NFONT) = LOCUC + CYCHE ASCII(UCQ-31,NFONT) = LOCUC + CYSH ASCII(UCW-31,NFONT) = LOCUC + CYSHCH ASCII(UCY-31,NFONT) = LOCUC + CYYIRI ASCII(LBRAKT-31,NFONT) = LOCUC + CYYOO ASCII(RSLANT-31,NFONT) = LOCUC + CYYA ASCII(RBRAKT-31,NFONT) = LOCUC + CYMZNK ASCII(STAR -31,NFONT) = LOCUC + CYMZNK GO TO 20062 20060 ASCII(UCA-31,NFONT) = LOCUC + CYA ASCII(UCB-31,NFONT) = LOCUC + CYB ASCII(UCV-31,NFONT) = LOCUC + CYV ASCII(UCG-31,NFONT) = LOCUC + CYG ASCII(UCD-31,NFONT) = LOCUC + CYD ASCII(UCE-31,NFONT) = LOCUC + CYE ASCII(UCC-31,NFONT) = LOCUC + CYZ ASCII(UCZ-31,NFONT) = LOCUC + CYZ ASCII(UCI-31,NFONT) = LOCUC + CYEEK ASCII(UCK-31,NFONT) = LOCUC + CYK ASCII(UCL-31,NFONT) = LOCUC + CYL ASCII(UCM-31,NFONT) = LOCUC + CYM ASCII(UCN-31,NFONT) = LOCUC + CYN ASCII(UCO-31,NFONT) = LOCUC + CYO ASCII(UCP-31,NFONT) = LOCUC + CYP ASCII(UCR-31,NFONT) = LOCUC + CYR ASCII(UCS-31,NFONT) = LOCUC + CYS ASCII(UCT-31,NFONT) = LOCUC + CYT ASCII(UCU-31,NFONT) = LOCUC + CYOO ASCII(UCF-31,NFONT) = LOCUC + CYF ASCII(UCX-31,NFONT) = LOCUC + CYK ASCII(UCH-31,NFONT) = NOCHAR ASCII(UCJ-31,NFONT) = LOCUC + CYCHE ASCII(UCQ-31,NFONT) = LOCUC + CYSH ASCII(UCW-31,NFONT) = NOCHAR ASCII(UCY-31,NFONT) = LOCUC + CYYIRI ASCII(LBRAKT-31,NFONT) = NOCHAR ASCII(RSLANT-31,NFONT) = NOCHAR ASCII(RBRAKT-31,NFONT) = LOCUC + CYTZNK ASCII(STAR -31,NFONT) = LOCUC + CYTZNK 20061 CONTINUE 20062 I =1 GO TO 20064 20063 I =I +1 20064 IF ((29-I ).LT.0) GO TO 20065 IUC = I + 64 - 31 ILC = IUC + 32 IF (.NOT.(ASCII(IUC,NFONT) .NE. NOCHAR)) GO TO 20067 ASCII(ILC,NFONT) = ASCII(IUC,NFONT) + LOCLC - LOCUC GO TO 20068 20067 ASCII(ILC,NFONT) = NOCHAR 20068 GO TO 20063 20065 ASSIGN 20070 TO NPR008 GO TO 30008 20070 GO TO 20033 C C----------------------------------------------------------------------- C---- PROCEDURE (Digits) 30008 I =0 GO TO 20072 20071 I =I +1 20072 IF ((9-I ).LT.0) GO TO 20073 IDIG = I + 48 - 31 ASCII(IDIG,NFONT) = LOC0 + I GO TO 20071 20073 GO TO NPR008, (20011,20070,20109) C C----------------------------------------------------------------------- C---- PROCEDURE (DR - Duplex Roman) 30024 LOCUC = 2501 LOCLC = 2601 LOC0 = 2700 ASSIGN 20075 TO NPR025 GO TO 30025 20075 ASSIGN 20076 TO NPR016 GO TO 30016 20076 ASSIGN 20077 TO NPR007 GO TO 30007 20077 GO TO 20218 C C----------------------------------------------------------------------- C---- PROCEDURE (Duplex Special Characters) 30025 LOC0SV = LOC0 LOC0 = 2200 ASSIGN 20078 TO NPR015 GO TO 30015 20078 LOC0 = LOC0SV ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 28 ASCII(AMPSND-31,NFONT) = LOC0 + 18 ASCII(SQUOTE-31,NFONT) = LOC0 + 27 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(QUERY -31,NFONT) = LOC0 + 15 GO TO 20075 C C----------------------------------------------------------------------- C---- PROCEDURE (Fill Font with Symbol for Unsupported Character) 30011 I =32 GO TO 20080 20079 I =I +1 20080 IF ((127-I ).LT.0) GO TO 20081 ASCII(I-31,NFONT) = NOCHAR GO TO 20079 20081 GO TO NPR011, (20023,20041) C C----------------------------------------------------------------------- C---- PROCEDURE (GE - Gothic English) 30026 FVAR = MIN0(FVAR,2) LOCUC = 3501 LOCLC = 3601 LOC0 = 3700 ASSIGN 20083 TO NPR027 GO TO 30027 20083 ASSIGN 20084 TO NPR028 GO TO 30028 20084 ASSIGN 20085 TO NPR007 GO TO 30007 20085 GO TO 20220 C C----------------------------------------------------------------------- C---- PROCEDURE (GG - Gothic German) 30029 FVAR = MIN0(FVAR,2) LOCUC = 3301 LOCLC = 3401 LOC0 = 3700 ASSIGN 20086 TO NPR027 GO TO 30027 20086 ASSIGN 20087 TO NPR028 GO TO 30028 20087 ASSIGN 20088 TO NPR007 GO TO 30007 20088 IF (.NOT.(FVAR .EQ. 2)) GO TO 20089 I = UCS + 32 ASCII(I-31,NFONT) = LOCLC + 26 20089 ASCII(LBRAKT-31,NFONT) = LOCUC + 29 ASCII(RSLANT-31,NFONT) = LOCUC + 30 ASCII(RBRAKT-31,NFONT) = LOCUC + 31 ASCII(LBRACE-31,NFONT) = LOCLC + 29 ASCII(VBAR -31,NFONT) = LOCLC + 30 ASCII(RBRACE-31,NFONT) = LOCLC + 31 GO TO 20222 C C----------------------------------------------------------------------- C---- PROCEDURE (GI - Gothic Italian) 30030 FVAR = MIN0(FVAR,2) LOCUC = 3801 LOCLC = 3901 LOC0 = 3700 ASSIGN 20092 TO NPR027 GO TO 30027 20092 ASSIGN 20093 TO NPR028 GO TO 30028 20093 ASSIGN 20094 TO NPR007 GO TO 30007 20094 GO TO 20221 C C----------------------------------------------------------------------- C---- PROCEDURE (Gothic Special Characters) 30027 LOC0SV = LOC0 LOC0 = 2200 ASSIGN 20095 TO NPR015 GO TO 30015 20095 LOC0 = LOC0SV ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 28 ASCII(AMPSND-31,NFONT) = LOC0 + 18 ASCII(SQUOTE-31,NFONT) = LOC0 + 27 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(QUERY -31,NFONT) = LOC0 + 15 GO TO NPR027, (20083,20086,20092) C C----------------------------------------------------------------------- C---- PROCEDURE (Gothic Standard Signs) 30028 ASCII(COMMA -31,NFONT) = 3711 ASCII(PERIOD-31,NFONT) = 3710 ASCII(LPAREN-31,NFONT) = 3721 ASCII(RPAREN-31,NFONT) = 3722 ASCII(MINUS -31,NFONT) = 3724 ASCII(PLUS -31,NFONT) = 3725 ASCII(STAR -31,NFONT) = 3723 ASCII(SLASH -31,NFONT) = 3720 ASCII(EQUALS-31,NFONT) = 3726 ASCII(DOLLAR-31,NFONT) = 3719 ASCII(AT -31,NFONT) = 2273 GO TO NPR028, (20084,20087,20093) C C----------------------------------------------------------------------- C---- PROCEDURE (Greek Alphanumerics) 30019 IF (FCASE .EQ. 2) LOCUC = LOCLC NX0100=FVAR IF (NX0100.LT.1.OR.NX0100.GT.4) GO TO 20100 GO TO (20096,20097,20098,20099), NX0100 20096 ASCII(UCA-31,NFONT) = LOCUC + ALPHA ASCII(UCB-31,NFONT) = LOCUC + BETA ASCII(UCG-31,NFONT) = LOCUC + GAMMA ASCII(UCD-31,NFONT) = LOCUC + DELTA ASCII(UCE-31,NFONT) = LOCUC + EPSLON ASCII(UCZ-31,NFONT) = LOCUC + ZETA ASCII(UCQ-31,NFONT) = LOCUC + THETA ASCII(UCI-31,NFONT) = LOCUC + IOTA ASCII(UCK-31,NFONT) = LOCUC + KAPPA ASCII(UCL-31,NFONT) = LOCUC + LAMBDA ASCII(UCM-31,NFONT) = LOCUC + MU ASCII(UCN-31,NFONT) = LOCUC + NU ASCII(UCX-31,NFONT) = LOCUC + XI ASCII(UCO-31,NFONT) = LOCUC + OMCRON ASCII(UCP-31,NFONT) = LOCUC + PI ASCII(UCR-31,NFONT) = LOCUC + RHO ASCII(UCS-31,NFONT) = LOCUC + SIGMA ASCII(UCT-31,NFONT) = LOCUC + TAU ASCII(UCU-31,NFONT) = LOCUC + UPSLON ASCII(UCY-31,NFONT) = LOCUC + UPSLON ASCII(UCF-31,NFONT) = LOCUC + PHI ASCII(UCC-31,NFONT) = LOCUC + CHI ASCII(UCW-31,NFONT) = LOCUC + PSI ASCII(UCH-31,NFONT) = NOCHAR ASCII(UCJ-31,NFONT) = NOCHAR ASCII(UCV-31,NFONT) = NOCHAR GO TO 20101 20097 ASCII(UCA-31,NFONT) = LOCUC + ALPHA ASCII(UCB-31,NFONT) = LOCUC + BETA ASCII(UCG-31,NFONT) = LOCUC + GAMMA ASCII(UCD-31,NFONT) = LOCUC + DELTA ASCII(UCE-31,NFONT) = LOCUC + ETA ASCII(UCZ-31,NFONT) = LOCUC + ZETA ASCII(UCQ-31,NFONT) = LOCUC + TAU ASCII(UCI-31,NFONT) = LOCUC + IOTA ASCII(UCK-31,NFONT) = LOCUC + KAPPA ASCII(UCL-31,NFONT) = LOCUC + LAMBDA ASCII(UCM-31,NFONT) = LOCUC + MU ASCII(UCN-31,NFONT) = LOCUC + NU ASCII(UCX-31,NFONT) = LOCUC + XI ASCII(UCO-31,NFONT) = LOCUC + OMEGA ASCII(UCP-31,NFONT) = LOCUC + PI ASCII(UCR-31,NFONT) = LOCUC + RHO ASCII(UCS-31,NFONT) = LOCUC + SIGMA ASCII(UCT-31,NFONT) = LOCUC + TAU ASCII(UCU-31,NFONT) = LOCUC + UPSLON ASCII(UCY-31,NFONT) = LOCUC + UPSLON ASCII(UCF-31,NFONT) = LOCUC + PI ASCII(UCC-31,NFONT) = LOCUC + CHI ASCII(UCW-31,NFONT) = NOCHAR ASCII(UCH-31,NFONT) = NOCHAR ASCII(UCJ-31,NFONT) = NOCHAR ASCII(UCV-31,NFONT) = NOCHAR GO TO 20101 20098 ASCII(UCA-31,NFONT) = LOCUC + ALPHA ASCII(UCB-31,NFONT) = LOCUC + BETA ASCII(UCG-31,NFONT) = LOCUC + GAMMA ASCII(UCD-31,NFONT) = LOCUC + DELTA ASCII(UCE-31,NFONT) = LOCUC + EPSLON ASCII(UCZ-31,NFONT) = LOCUC + ZETA ASCII(UCH-31,NFONT) = LOCUC + ETA ASCII(UCQ-31,NFONT) = LOCUC + THETA ASCII(UCI-31,NFONT) = LOCUC + IOTA ASCII(UCK-31,NFONT) = LOCUC + KAPPA ASCII(UCL-31,NFONT) = LOCUC + LAMBDA ASCII(UCM-31,NFONT) = LOCUC + MU ASCII(UCN-31,NFONT) = LOCUC + NU ASCII(UCX-31,NFONT) = LOCUC + XI ASCII(UCO-31,NFONT) = LOCUC + OMCRON ASCII(UCP-31,NFONT) = LOCUC + PI ASCII(UCR-31,NFONT) = LOCUC + RHO ASCII(UCS-31,NFONT) = LOCUC + SIGMA ASCII(UCT-31,NFONT) = LOCUC + TAU ASCII(UCU-31,NFONT) = LOCUC + UPSLON ASCII(UCF-31,NFONT) = LOCUC + PHI ASCII(UCC-31,NFONT) = LOCUC + CHI ASCII(UCY-31,NFONT) = LOCUC + PSI ASCII(UCW-31,NFONT) = LOCUC + OMEGA ASCII(UCJ-31,NFONT) = NOCHAR ASCII(UCV-31,NFONT) = NOCHAR GO TO 20101 20099 ASCII(UCA-31,NFONT) = LOCUC + ALPHA ASCII(UCB-31,NFONT) = LOCUC + BETA ASCII(UCG-31,NFONT) = LOCUC + GAMMA ASCII(UCD-31,NFONT) = LOCUC + DELTA ASCII(UCE-31,NFONT) = LOCUC + EPSLON ASCII(UCZ-31,NFONT) = LOCUC + ZETA ASCII(UCH-31,NFONT) = LOCUC + ETA ASCII(UCQ-31,NFONT) = LOCUC + THETA ASCII(UCI-31,NFONT) = LOCUC + IOTA ASCII(UCK-31,NFONT) = LOCUC + KAPPA ASCII(UCL-31,NFONT) = LOCUC + LAMBDA ASCII(UCM-31,NFONT) = LOCUC + MU ASCII(UCN-31,NFONT) = LOCUC + NU ASCII(UCX-31,NFONT) = LOCUC + XI ASCII(UCO-31,NFONT) = LOCUC + OMCRON ASCII(UCP-31,NFONT) = LOCUC + PI ASCII(UCR-31,NFONT) = LOCUC + RHO ASCII(UCS-31,NFONT) = LOCUC + SIGMA ASCII(UCT-31,NFONT) = LOCUC + TAU ASCII(UCU-31,NFONT) = LOCUC + UPSLON ASCII(UCF-31,NFONT) = LOCUC + PHI ASCII(UCC-31,NFONT) = LOCUC + CHI ASCII(UCY-31,NFONT) = LOCUC + PSI ASCII(UCW-31,NFONT) = LOCUC + OMEGA ASCII(UCJ-31,NFONT) = NOCHAR ASCII(UCV-31,NFONT) = NOCHAR 20100 CONTINUE 20101 I =1 GO TO 20103 20102 I =I +1 20103 IF ((26-I ).LT.0) GO TO 20104 IUC = I + 64 - 31 ILC = IUC + 32 IF (.NOT.(ASCII(IUC,NFONT) .NE. NOCHAR)) GO TO 20106 ASCII(ILC,NFONT) = ASCII(IUC,NFONT) + LOCLC - LOCUC GO TO 20107 20106 ASCII(ILC,NFONT) = NOCHAR 20107 GO TO 20102 20104 ASSIGN 20109 TO NPR008 GO TO 30008 20109 NX0114=FVAR IF (NX0114.LT.1.OR.NX0114.GT.4) GO TO 20114 GO TO (20110,20111,20112,20113), NX0114 20110 GO TO 20115 20111 IF (.NOT.(FTYPE .NE. KG)) GO TO 20116 ASCII(LCS-31,NFONT) = LOCLC + 60 20116 GO TO 20115 20112 GO TO 20115 20113 IF (.NOT.(FTYPE .NE. KG)) GO TO 20119 ASCII(LCE-31,NFONT) = LOCLC + 57 ASCII(LCQ-31,NFONT) = LOCLC + 58 ASCII(LCF-31,NFONT) = LOCLC + 59 IF (.NOT.(FTYPE .EQ. SG)) GO TO 20122 ASCII(LCD-31,NFONT) = LOCLC + 56 GO TO 20123 20122 ASCII(LCD-31,NFONT) = LOCLC + 138 20123 CONTINUE 20119 GO TO 20115 20114 ASSIGN 20125 TO NPR013 GO TO 30013 20125 CONTINUE 20115 GO TO NPR019, (20036,20128,20165,20238) C C----------------------------------------------------------------------- C---- PROCEDURE (IG - Indexical Greek) 30031 LOCUC = 1027 LOCLC = 1127 LOC0 = 1200 ASSIGN 20126 TO NPR032 GO TO 30032 20126 ASSIGN 20127 TO NPR033 GO TO 30033 20127 ASSIGN 20128 TO NPR019 GO TO 30019 20128 GO TO 20210 C C----------------------------------------------------------------------- C---- PROCEDURE (II - Indexical Italic) 30034 LOCUC = 1051 LOCLC = 1151 LOC0 = 2750 ASSIGN 20129 TO NPR032 GO TO 30032 20129 ASSIGN 20130 TO NPR033 GO TO 30033 20130 ASSIGN 20131 TO NPR007 GO TO 30007 20131 GO TO 20209 C C----------------------------------------------------------------------- C---- PROCEDURE (Indexical Special Characters) 30032 ASSIGN 20132 TO NPR015 GO TO 30015 20132 GO TO NPR032, (20126,20129,20151) C C----------------------------------------------------------------------- C---- PROCEDURE (Indexical Standard Signs) 30033 I = (FVAR-1)*2 + FCASE NX0141=I IF (NX0141.LT.1.OR.NX0141.GT.8) GO TO 20141 GO TO (20133,20134,20135,20136,20137,20138,20139,20140), NX0141 20133 ASCII(COMMA -31,NFONT) = 1211 ASCII(PERIOD-31,NFONT) = 1210 ASCII(LPAREN-31,NFONT) = 1221 ASCII(RPAREN-31,NFONT) = 1222 ASCII(MINUS -31,NFONT) = 1231 ASCII(PLUS -31,NFONT) = 1232 ASCII(STAR -31,NFONT) = 1219 ASCII(SLASH -31,NFONT) = 1220 ASCII(EQUALS-31,NFONT) = 1238 ASCII(DOLLAR-31,NFONT) = 1274 ASCII(AT -31,NFONT) = 1273 GO TO 20142 20134 ASCII(COMMA -31,NFONT) = 1211 ASCII(PERIOD-31,NFONT) = 1210 ASCII(LPAREN-31,NFONT) = 1221 ASCII(RPAREN-31,NFONT) = 1222 ASCII(MINUS -31,NFONT) = 1231 ASCII(PLUS -31,NFONT) = 1232 ASCII(STAR -31,NFONT) = 1219 ASCII(SLASH -31,NFONT) = 1220 ASCII(EQUALS-31,NFONT) = 1238 ASCII(DOLLAR-31,NFONT) = 1274 ASCII(AT -31,NFONT) = 1273 GO TO 20142 20135 ASCII(COMMA -31,NFONT) = 1213 ASCII(PERIOD-31,NFONT) = 1215 ASCII(LPAREN-31,NFONT) = 1405 ASCII(RPAREN-31,NFONT) = 1406 ASCII(MINUS -31,NFONT) = 1256 ASCII(PLUS -31,NFONT) = 1257 ASCII(STAR -31,NFONT) = 1259 ASCII(SLASH -31,NFONT) = 1258 ASCII(EQUALS-31,NFONT) = 1260 ASCII(DOLLAR-31,NFONT) = 1279 ASCII(AT -31,NFONT) = 1276 GO TO 20142 20136 ASCII(COMMA -31,NFONT) = 1213 ASCII(PERIOD-31,NFONT) = 1215 ASCII(LPAREN-31,NFONT) = 1223 ASCII(RPAREN-31,NFONT) = 1224 ASCII(MINUS -31,NFONT) = 1246 ASCII(PLUS -31,NFONT) = 1272 ASCII(STAR -31,NFONT) = 1245 ASCII(SLASH -31,NFONT) = 1271 ASCII(EQUALS-31,NFONT) = 1239 ASCII(DOLLAR-31,NFONT) = 1275 ASCII(AT -31,NFONT) = 1216 GO TO 20142 20137 ASCII(COMMA -31,NFONT) = 1212 ASCII(PERIOD-31,NFONT) = 1214 ASCII(LPAREN-31,NFONT) = 1403 ASCII(RPAREN-31,NFONT) = 1404 ASCII(MINUS -31,NFONT) = 1231 ASCII(PLUS -31,NFONT) = 1232 ASCII(STAR -31,NFONT) = 1235 ASCII(SLASH -31,NFONT) = 1230 ASCII(EQUALS-31,NFONT) = 1238 ASCII(DOLLAR-31,NFONT) = 1411 ASCII(AT -31,NFONT) = 1277 GO TO 20142 20138 ASCII(COMMA -31,NFONT) = 1212 ASCII(PERIOD-31,NFONT) = 1214 ASCII(LPAREN-31,NFONT) = 1221 ASCII(RPAREN-31,NFONT) = 1222 ASCII(MINUS -31,NFONT) = 1231 ASCII(PLUS -31,NFONT) = 1232 ASCII(STAR -31,NFONT) = 1236 ASCII(SLASH -31,NFONT) = 1229 ASCII(EQUALS-31,NFONT) = 1238 ASCII(DOLLAR-31,NFONT) = 1267 ASCII(AT -31,NFONT) = 1217 GO TO 20142 20139 ASCII(COMMA -31,NFONT) = 1251 ASCII(PERIOD-31,NFONT) = 1252 ASCII(LPAREN-31,NFONT) = 1407 ASCII(RPAREN-31,NFONT) = 1408 ASCII(MINUS -31,NFONT) = 1261 ASCII(PLUS -31,NFONT) = 1233 ASCII(STAR -31,NFONT) = 1242 ASCII(SLASH -31,NFONT) = 1228 ASCII(EQUALS-31,NFONT) = 1244 ASCII(DOLLAR-31,NFONT) = 1412 ASCII(AT -31,NFONT) = 1270 GO TO 20142 20140 ASCII(COMMA -31,NFONT) = 1251 ASCII(PERIOD-31,NFONT) = 1252 ASCII(LPAREN-31,NFONT) = 1225 ASCII(RPAREN-31,NFONT) = 1226 ASCII(MINUS -31,NFONT) = 1263 ASCII(PLUS -31,NFONT) = 1234 ASCII(STAR -31,NFONT) = 1241 ASCII(SLASH -31,NFONT) = 1227 ASCII(EQUALS-31,NFONT) = 1243 ASCII(DOLLAR-31,NFONT) = 1268 ASCII(AT -31,NFONT) = 1218 GO TO 20142 20141 ASSIGN 20143 TO NPR013 GO TO 30013 20143 CONTINUE 20142 GO TO NPR033, (20127,20130,20152) C C----------------------------------------------------------------------- C---- PROCEDURE (Initialize for New Font) 30001 IF (.NOT.(NFUSED .LE. 0)) GO TO 20144 I =1 N20147=MAXFNT GO TO 20148 20147 I =I +1 20148 IF ((N20147-I ).LT.0) GO TO 20149 FSWTCH(I) = NUL USWTCH(I) = NUL LSWTCH(I) = NUL GO TO 20147 20149 NFUSED = 0 20144 ERROR = .FALSE. NFONT = MOD(NFONT,MAXFNT) + 1 KFONT = NFONT NFUSED = MIN0(NFUSED+1,MAXFNT) FSWTCH(NFONT) = KARASC(SWCHAR(1)) IF (KARCM2(SWCHAR,1,1H ,1,1) .EQ. 0) FSWTCH(NFONT) = NUL USWTCH(NFONT) = LANGLE LSWTCH(NFONT) = RANGLE BSWTCH(NFONT) = NUL GO TO 20001 C C----------------------------------------------------------------------- C---- PROCEDURE (Internal Error) 30013 CALL ERRMS (6HSYMSF ,12,14HInternal error,14) CALL ERRCK ERROR = .TRUE. IF (ERROR) STOP GO TO NPR013, (20030,20052,20125,20143,20226,20246) C C----------------------------------------------------------------------- C---- PROCEDURE (IR - Indexical Roman) 30035 LOCUC = 1001 LOCLC = 1101 LOC0 = 1200 ASSIGN 20151 TO NPR032 GO TO 30032 20151 ASSIGN 20152 TO NPR033 GO TO 30033 20152 ASSIGN 20153 TO NPR007 GO TO 30007 20153 GO TO 20208 C C----------------------------------------------------------------------- C---- PROCEDURE (Issue Error Messages and Supply Defaults) 30005 IF (.NOT.(FCASE .EQ. 0)) GO TO 20154 CALL ERRMS (6HSYMSF ,8, X38HInvalid font case - Upper-Case assumed,38) CALL ERRAT (6HFONT ,1,FONT,5) FCASE = 1 20154 IF (.NOT.(FTYPE .EQ. 0)) GO TO 20157 CALL ERRMS (6HSYMSF ,8, X41HInvalid font type - Triplex Roman assumed,41) CALL ERRAT (6HFONT ,1,FONT,5) FCASE = TR 20157 IF (.NOT.(FVAR .EQ. 0)) GO TO 20160 CALL ERRMS (6HSYMSF ,8, X32HInvalid font variant - 1 assumed,32) CALL ERRAT (6HFONT ,1,FONT,5) FVAR = 1 20160 CALL ERRCK GO TO 20005 C C----------------------------------------------------------------------- C---- PROCEDURE (KG - Cartographic Greek) 30036 LOCUC = 27 LOCLC = 27 LOC0 = 200 ASSIGN 20163 TO NPR010 GO TO 30010 20163 ASSIGN 20164 TO NPR012 GO TO 30012 20164 ASSIGN 20165 TO NPR019 GO TO 30019 20165 GO TO 20207 C C----------------------------------------------------------------------- C---- PROCEDURE (KR - Cartographic Roman) 30037 LOCUC = 1 LOCLC = 1 LOC0 = 200 ASSIGN 20166 TO NPR010 GO TO 30010 20166 ASSIGN 20167 TO NPR012 GO TO 30012 20167 ASSIGN 20168 TO NPR007 GO TO 30007 20168 GO TO 20206 C C----------------------------------------------------------------------- C---- PROCEDURE (SA - Simplex ASCII) 30038 LOCUC = 1565 LOCLC = 1597 I =32 GO TO 20170 20169 I =I +1 20170 IF ((127-I ).LT.0) GO TO 20171 ASCII(I-31,NFONT) = 1500 + I GO TO 20169 20171 IF (.NOT.(FCASE .EQ. 2)) GO TO 20173 I =65 GO TO 20177 20176 I =I +1 20177 IF ((90-I ).LT.0) GO TO 20178 ASCII(I-31,NFONT) = 1500 + I + 32 GO TO 20176 20178 CONTINUE 20173 GO TO 20224 C C----------------------------------------------------------------------- C---- PROCEDURE (Set Complete Font Specifications) 30006 FONTID(NFONT) = (FCASE-1)*256 + (FTYPE-1)*8 + FVAR - 1 CALL KARUPK (FONTNM(1,NFONT),FONT,1,5) I =1 GO TO 20181 20180 I =I +1 20181 IF ((5-I ).LT.0) GO TO 20182 FONTNM(I,NFONT) = KARUC(FONTNM(I,NFONT)) GO TO 20180 20182 NX0204=FTYPE IF (NX0204.LT.1.OR.NX0204.GT.20) GO TO 20204 GO TO (20184,20185,20186,20187,20188,20189,20190,20191,20192,20193 X,20194,20195,20196,20197,20198,20199,20200,20201,20202,20203), NX0 X204 20184 ASSIGN 20206 TO NPR037 GO TO 30037 20206 GO TO 20205 20185 ASSIGN 20207 TO NPR036 GO TO 30036 20207 GO TO 20205 20186 ASSIGN 20208 TO NPR035 GO TO 30035 20208 GO TO 20205 20187 ASSIGN 20209 TO NPR034 GO TO 30034 20209 GO TO 20205 20188 ASSIGN 20210 TO NPR031 GO TO 30031 20210 GO TO 20205 20189 ASSIGN 20211 TO NPR039 GO TO 30039 20211 GO TO 20205 20190 ASSIGN 20212 TO NPR040 GO TO 30040 20212 GO TO 20205 20191 ASSIGN 20213 TO NPR041 GO TO 30041 20213 GO TO 20205 20192 ASSIGN 20214 TO NPR022 GO TO 30022 20214 GO TO 20205 20193 ASSIGN 20215 TO NPR020 GO TO 30020 20215 GO TO 20205 20194 ASSIGN 20216 TO NPR018 GO TO 30018 20216 GO TO 20205 20195 ASSIGN 20217 TO NPR023 GO TO 30023 20217 GO TO 20205 20196 ASSIGN 20218 TO NPR024 GO TO 30024 20218 GO TO 20205 20197 ASSIGN 20219 TO NPR042 GO TO 30042 20219 GO TO 20205 20198 ASSIGN 20220 TO NPR026 GO TO 30026 20220 GO TO 20205 20199 ASSIGN 20221 TO NPR030 GO TO 30030 20221 GO TO 20205 20200 ASSIGN 20222 TO NPR029 GO TO 30029 20222 GO TO 20205 20201 ASSIGN 20223 TO NPR014 GO TO 30014 20223 GO TO 20205 20202 ASSIGN 20224 TO NPR038 GO TO 30038 20224 GO TO 20205 20203 ASSIGN 20225 TO NPR009 GO TO 30009 20225 GO TO 20205 20204 ASSIGN 20226 TO NPR013 GO TO 30013 20226 CONTINUE 20205 GO TO 20006 C C----------------------------------------------------------------------- C---- PROCEDURE (Set Font Case) 30002 IF (.NOT.(KARCM2(FONT,1,2HUC,1,2) .EQ. 0)) GO TO 20227 FCASE = 1 GO TO 20228 20227 IF (.NOT.(KARCM2(FONT,1,2HLC,1,2) .EQ. 0)) GO TO 10001 FCASE = 2 GO TO 20228 10001 FCASE = 0 ERROR = .TRUE. 20228 GO TO 20002 C C----------------------------------------------------------------------- C---- PROCEDURE (Set Font Type) 30003 IF (.NOT.(KARCM2(FONT,3,2HKR,1,2) .EQ. 0)) GO TO 20230 FTYPE = KR GO TO 20231 20230 IF (.NOT.(KARCM2(FONT,3,2HKG,1,2) .EQ. 0)) GO TO 10002 FTYPE = KG GO TO 20231 10002 IF (.NOT.(KARCM2(FONT,3,2HIR,1,2) .EQ. 0)) GO TO 10003 FTYPE = IR GO TO 20231 10003 IF (.NOT.(KARCM2(FONT,3,2HII,1,2) .EQ. 0)) GO TO 10004 FTYPE = II GO TO 20231 10004 IF (.NOT.(KARCM2(FONT,3,2HIG,1,2) .EQ. 0)) GO TO 10005 FTYPE = IG GO TO 20231 10005 IF (.NOT.(KARCM2(FONT,3,2HSR,1,2) .EQ. 0)) GO TO 10006 FTYPE = SR GO TO 20231 10006 IF (.NOT.(KARCM2(FONT,3,2HSS,1,2) .EQ. 0)) GO TO 10007 FTYPE = SS GO TO 20231 10007 IF (.NOT.(KARCM2(FONT,3,2HSG,1,2) .EQ. 0)) GO TO 10008 FTYPE = SG GO TO 20231 10008 IF (.NOT.(KARCM2(FONT,3,2HCR,1,2) .EQ. 0)) GO TO 10009 FTYPE = CR GO TO 20231 10009 IF (.NOT.(KARCM2(FONT,3,2HCI,1,2) .EQ. 0)) GO TO 10010 FTYPE = CI GO TO 20231 10010 IF (.NOT.(KARCM2(FONT,3,2HCG,1,2) .EQ. 0)) GO TO 10011 FTYPE = CG GO TO 20231 10011 IF (.NOT.(KARCM2(FONT,3,2HCS,1,2) .EQ. 0)) GO TO 10012 FTYPE = CS GO TO 20231 10012 IF (.NOT.(KARCM2(FONT,3,2HDR,1,2) .EQ. 0)) GO TO 10013 FTYPE = DR GO TO 20231 10013 IF (.NOT.(KARCM2(FONT,3,2HTR,1,2) .EQ. 0)) GO TO 10014 FTYPE = TR GO TO 20231 10014 IF (.NOT.(KARCM2(FONT,3,2HGE,1,2) .EQ. 0)) GO TO 10015 FTYPE = GE GO TO 20231 10015 IF (.NOT.(KARCM2(FONT,3,2HGI,1,2) .EQ. 0)) GO TO 10016 FTYPE = GI GO TO 20231 10016 IF (.NOT.(KARCM2(FONT,3,2HGG,1,2) .EQ. 0)) GO TO 10017 FTYPE = GG GO TO 20231 10017 IF (.NOT.(KARCM2(FONT,3,2HCC,1,2) .EQ. 0)) GO TO 10018 FTYPE = CC GO TO 20231 10018 IF (.NOT.(KARCM2(FONT,3,2HSA,1,2) .EQ. 0)) GO TO 10019 FTYPE = SA GO TO 20231 10019 IF (.NOT.(KARCM2(FONT,3,2HBA,1,2) .EQ. 0)) GO TO 10020 FTYPE = BA GO TO 20231 10020 FTYPE = 0 ERROR = .TRUE. 20231 GO TO 20003 C C----------------------------------------------------------------------- C---- PROCEDURE (Set Font Variant) 30004 IF (.NOT.(KARCM2(FONT,5,1H1,1,1) .EQ. 0)) GO TO 20233 FVAR = 1 GO TO 20234 20233 IF (.NOT.(KARCM2(FONT,5,1H2,1,1) .EQ. 0)) GO TO 10021 FVAR = 2 GO TO 20234 10021 IF (.NOT.(KARCM2(FONT,5,1H3,1,1) .EQ. 0)) GO TO 10022 FVAR = 3 GO TO 20234 10022 IF (.NOT.(KARCM2(FONT,5,1H4,1,1) .EQ. 0)) GO TO 10023 FVAR = 4 GO TO 20234 10023 FVAR = 0 ERROR = .TRUE. 20234 GO TO 20004 C C----------------------------------------------------------------------- C---- PROCEDURE (SG - Simplex Greek) 30041 LOCUC = 527 LOCLC = 627 LOC0 = 700 ASSIGN 20236 TO NPR043 GO TO 30043 20236 ASSIGN 20237 TO NPR044 GO TO 30044 20237 ASSIGN 20238 TO NPR019 GO TO 30019 20238 GO TO 20213 C C----------------------------------------------------------------------- C---- PROCEDURE (Simplex Special Characters) 30043 ASSIGN 20239 TO NPR010 GO TO 30010 20239 GO TO NPR043, (20236,20247,20250) C C----------------------------------------------------------------------- C---- PROCEDURE (Simplex Standard Signs) 30044 NX0244=FVAR IF (NX0244.LT.1.OR.NX0244.GT.4) GO TO 20244 GO TO (20240,20241,20242,20243), NX0244 20240 ASCII(COMMA -31,NFONT) = 711 ASCII(PERIOD-31,NFONT) = 710 ASCII(LPAREN-31,NFONT) = 721 ASCII(RPAREN-31,NFONT) = 722 ASCII(MINUS -31,NFONT) = 724 ASCII(PLUS -31,NFONT) = 725 ASCII(STAR -31,NFONT) = 728 ASCII(SLASH -31,NFONT) = 720 ASCII(EQUALS-31,NFONT) = 726 ASCII(DOLLAR-31,NFONT) = 719 ASCII(AT -31,NFONT) = 1273 GO TO 20245 20241 ASCII(COMMA -31,NFONT) = 713 ASCII(PERIOD-31,NFONT) = 715 ASCII(LPAREN-31,NFONT) = 721 ASCII(RPAREN-31,NFONT) = 722 ASCII(MINUS -31,NFONT) = 724 ASCII(PLUS -31,NFONT) = 725 ASCII(STAR -31,NFONT) = 729 ASCII(SLASH -31,NFONT) = 720 ASCII(EQUALS-31,NFONT) = 726 ASCII(DOLLAR-31,NFONT) = 733 ASCII(AT -31,NFONT) = 732 GO TO 20245 20242 ASCII(COMMA -31,NFONT) = 712 ASCII(PERIOD-31,NFONT) = 714 ASCII(LPAREN-31,NFONT) = 721 ASCII(RPAREN-31,NFONT) = 722 ASCII(MINUS -31,NFONT) = 724 ASCII(PLUS -31,NFONT) = 725 ASCII(STAR -31,NFONT) = 727 ASCII(SLASH -31,NFONT) = 720 ASCII(EQUALS-31,NFONT) = 726 ASCII(DOLLAR-31,NFONT) = 723 ASCII(AT -31,NFONT) = 730 GO TO 20245 20243 ASCII(COMMA -31,NFONT) = 716 ASCII(PERIOD-31,NFONT) = 717 ASCII(LPAREN-31,NFONT) = 721 ASCII(RPAREN-31,NFONT) = 722 ASCII(MINUS -31,NFONT) = 724 ASCII(PLUS -31,NFONT) = 725 ASCII(STAR -31,NFONT) = 718 ASCII(SLASH -31,NFONT) = 720 ASCII(EQUALS-31,NFONT) = 726 ASCII(DOLLAR-31,NFONT) = 735 ASCII(AT -31,NFONT) = 731 GO TO 20245 20244 ASSIGN 20246 TO NPR013 GO TO 30013 20246 CONTINUE 20245 GO TO NPR044, (20237,20248,20251) C C----------------------------------------------------------------------- C---- PROCEDURE (SR - Simplex Roman) 30039 LOCUC = 501 LOCLC = 601 LOC0 = 700 ASSIGN 20247 TO NPR043 GO TO 30043 20247 ASSIGN 20248 TO NPR044 GO TO 30044 20248 ASSIGN 20249 TO NPR007 GO TO 30007 20249 GO TO 20211 C C----------------------------------------------------------------------- C---- PROCEDURE (SS - Simplex Script) 30040 LOCUC = 551 LOCLC = 651 LOC0 = 700 ASSIGN 20250 TO NPR043 GO TO 30043 20250 ASSIGN 20251 TO NPR044 GO TO 30044 20251 ASSIGN 20252 TO NPR007 GO TO 30007 20252 GO TO 20212 C C----------------------------------------------------------------------- C---- PROCEDURE (TR - Triplex Roman) 30042 LOCUC = 3001 LOCLC = 3101 LOC0 = 3200 ASSIGN 20253 TO NPR045 GO TO 30045 20253 ASSIGN 20254 TO NPR016 GO TO 30016 20254 ASSIGN 20255 TO NPR007 GO TO 30007 20255 GO TO 20219 C C----------------------------------------------------------------------- C---- PROCEDURE (Triplex Special Characters) 30045 LOC0SV = LOC0 LOC0 = 2200 ASSIGN 20256 TO NPR015 GO TO 30015 20256 LOC0 = LOC0SV ASCII(SPACE -31,NFONT) = LOC0 - 1 ASCII(EXCLPT-31,NFONT) = LOC0 + 14 ASCII(DQUOTE-31,NFONT) = LOC0 + 28 ASCII(AMPSND-31,NFONT) = LOC0 + 18 ASCII(SQUOTE-31,NFONT) = LOC0 + 27 ASCII(COLON -31,NFONT) = LOC0 + 12 ASCII(SCOLON-31,NFONT) = LOC0 + 13 ASCII(QUERY -31,NFONT) = LOC0 + 15 GO TO 20253 C END ftnchek-3.3.1/test/t208e.f0000644000031000002260000000126107617550611015556 0ustar moniotstaff00000000000000 DOUBLE PRECISION D(10,20,30), E(40,50), F(60) REAL R, S(70,80) CHARACTER C CHARACTER*81 LINE LOGICAL LOGVAR COMPLEX Z, ZZ DOUBLE COMPLEX ZZZ, ZZZZ INTEGER I, J, K J = M END SUBROUTINE SUB REAL X, Y, Z COMMON /SHARE/ A, B, C END REAL FUNCTION FUN REAL X, Y, Z COMMON /SHARE/ A, B, C FUN = 0.0 END SUBROUTINE BAR REAL PI PARAMETER (PI = 3.14159265) INTEGER NPI PARAMETER (NPI = 9) INTRINSIC SQRT, SIN, COS EXTERNAL MYSQRT, MYSUB REAL MYSQRT END ftnchek-3.3.1/test/t208f.f0000644000031000002260000000043607617550611015562 0ustar moniotstaff00000000000000 integer m n = m end subroutine big integer a_very_long_variable_name, another_very_long_variable_name integer a_long_variable_name, another_long_variable_name integer a_variable_name, another_variable_name real u, v, w, x, y, z end ftnchek-3.3.1/test/t208f.opt0000644000031000002260000000003507617550611016132 0ustar moniotstaff00000000000000-list -symt -sixchar t208f.f ftnchek-3.3.1/test/t208g.f0000644000031000002260000000010307617550611015552 0ustar moniotstaff00000000000000 subroutine foo integer n n = i1mach(3) end ftnchek-3.3.1/test/t208h.f0000644000031000002260000000031507617550611015560 0ustar moniotstaff00000000000000 subroutine foo(x) real r1mach * ftnchek types sqrt() as generic here; I think it should be REAL. * This results in loss of a declaration "REAL SQRT" x = sqrt(r1mach(3)) end ftnchek-3.3.1/test/t208i.f0000644000031000002260000000013207617550611015556 0ustar moniotstaff00000000000000 subroutine foo(x) double precision r1mach x = sqrt(r1mach(3)) end ftnchek-3.3.1/test/t208j.f0000644000031000002260000000007107617550611015561 0ustar moniotstaff00000000000000 intrinsic sqrt a = sqrt(cos(0.35)) end ftnchek-3.3.1/test/t208k.f0000644000031000002260000000012507617550611015562 0ustar moniotstaff00000000000000 character*3 function foo(s) character*(*) s foo = s(1:3) end ftnchek-3.3.1/test/t208l.f0000644000031000002260000000013307617550611015562 0ustar moniotstaff00000000000000 subroutine foo(a,m,n) integer m,n real a(m,n),b(1,2,3,4,5,6,7) end ftnchek-3.3.1/test/t208m.f0000644000031000002260000000016407617550611015567 0ustar moniotstaff00000000000000 integer maxdim, maxarr parameter (maxdim = 100 + 200, x maxarr = maxdim + 100) end ftnchek-3.3.1/test/t208n.f0000644000031000002260000000051507617550611015570 0ustar moniotstaff00000000000000 subroutine foo (a,b,c,d) real a(1), b(*), c(21,*), d(2) parameter (s = ichar(')')) parameter (t = * comment ( ( ( * more comments x ichar(')')) parameter (u = ! this is a comment x 25.0) parameter (v = * comment ( ( ( * more comments x 2.18281828D+00) end ftnchek-3.3.1/test/t208o.f0000644000031000002260000000276607617550611015603 0ustar moniotstaff00000000000000* Parameters for which statement order must be preserved real a, b, c parameter (c = 1.23) parameter (b = 2.0*c) parameter (a = (b + c)) * Parameter with continuation lines real d parameter (d x x = x x 4.0) * Parameter with continuation lines separated by comment lines parameter (e * comment line * another comment line x = * yet another comment line * still another comment line x 5 x . x 4 x x ) * Parameter with embedded comment real t parameter (t = ! this is a comment x 25.0) * Parameters with quoted strings. integer u parameter (u = b'0110011010011001') integer v parameter (v = z'ffff') integer w parameter (w = 'ffff'x) integer x parameter (x = x'ffff') character*(*) y parameter (y = 'yes, isn''t this nice') character*(*) z parameter (z = 'O''Neil''s brother''s pub') * Parameters with long text past column 72 character*(*) s parameter (s = '123456789.123456789.123456789.123456789.123456789.SEQ#0001 x123456789.123456789.123456789.123456789.123456789.123456789.123456SEQ#0002 x789.123456789.123456789.123456789.123456789.123456789.123456789.12SEQ#0003 x3456789.123456789.123456789.123456789.123456789.123456789.12345678SEQ#0004 x9.123456789.123456789.123456789.123456789.123456789.') SEQ#0005 end ftnchek-3.3.1/test/t208p.f0000644000031000002260000000021707617550611015571 0ustar moniotstaff00000000000000 external ex real ex integer in, iarg in(iarg) = iabs(iarg) write (6,*) in(-3) write (6,*) ex(-3) end ftnchek-3.3.1/test/t208q.f0000644000031000002260000000022507617550611015571 0ustar moniotstaff00000000000000 INTEGER MAXTOK PARAMETER (MAXTOK = 10) CHARACTER*(MAXTOK) TOKLMX CHARACTER*10 TOKL10 END ftnchek-3.3.1/test/t208r.f0000644000031000002260000000063307617550611015575 0ustar moniotstaff00000000000000 subroutine foo (argchr,maxrow,maxcol) character*(*) argchr(maxrow,maxcol,*) character one, two*2, three*3, twob*2, oneagain parameter (maxy = x 54321) parameter (maxz = x 12345 + maxy) character*(*) s parameter (s = 'hello') integer MAXTOK parameter (MAXTOK = 10) character*(MAXTOK) toklst end ftnchek-3.3.1/test/t208s.f0000644000031000002260000000007607617550611015577 0ustar moniotstaff00000000000000 character*(*) s parameter (s = 'hello') end ftnchek-3.3.1/test/t208t.f0000644000031000002260000000020007617550611015565 0ustar moniotstaff00000000000000 subroutine foo(d,e,f) character*3 a, b*4, c*5 character*(*) d, e*127 character*255 f*(*), g end ftnchek-3.3.1/test/t208u.f0000644000031000002260000000146207617550611015601 0ustar moniotstaff00000000000000 integer MAXTOK parameter (MAXTOK = 10) character*(MAXTOK) toklst, tokls2*(2*MAXTOK), tokls3*(MAXTOK**2) character*(MAXTOK) tokarr(100), tokar2(200)*(2*MAXTOK), x tokar3(300)*(MAXTOK**2) integer MAXTK1 parameter (MAXTK1 = 10) * Test with comment lines between continuation lines character*(MAXTK1) * intervening comment x tk1lst, * intervening comment x tk1ls2*(2*MAXTK1), * intervening comment x tk1ls3*(MAXTK1**2) * Test with blank lines between continuation lines integer MAXTK2 parameter (MAXTK2 = 10) character*(MAXTK2) x tk2arr(100), x tk2ar2(200)*(2*MAXTK2), x tk2ar3(300)*(MAXTK2**2) end ftnchek-3.3.1/test/t208v.f0000644000031000002260000000026207617550611015577 0ustar moniotstaff00000000000000 integer MAXTOK parameter (MAXTOK = 10) character*(MAXTOK) * intervening comment * intervening comment x toklst end ftnchek-3.3.1/test/t208w.f0000644000031000002260000000264407617550611015606 0ustar moniotstaff00000000000000c----------------------------------------------------------------------- c ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995 c----------------------------------------------------------------------- double precision function s(x) intrinsic dsin external extsub double precision x, y integer a, b, c common /one/ a, b, c integer d, e, f common /two/ d, e, f integer g, h, i real u, v, w common /three/ g, h, i, u, v, w call subext(extsub, x) y = dfloat(a + b + c + d + e + f) s = dsqrt(x + y) end c----------------------------------------------------------------------- parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(nbp1=nb+1) c double precision f, p, d, w1, w2 common/force /f(0:nbp1,0:nbp1,2) common/pres /p(0:nbp1,0:nbp1) c dimension d (0:nbp1,0:nbp1) dimension w1(0:nbp1,0:nbp1,1:2) dimension w2(0:nbp1,0:nbp1,1:2) c equivalence(f,w1,w2) equivalence(d,p) c call foo(f,p) end c----------------------------------------------------------------------- double precision x, y common /one/ x(10) equivalence (x,y) end c----------------------------------------------------------------------- double precision x, y(1), z(2) common /one/ x(10) equivalence (x(3), y(1), z(2)) call subrtn (x, y, z) end ftnchek-3.3.1/test/t208x.f0000644000031000002260000004144607617550611015612 0ustar moniotstaff00000000000000c----------------------------------------------------------------------- c ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 c Adapted from a benchmark program at the University of Utah, with c code bodies and most comments eliminated. ftnchek's -makedcls c option and the dcl2inc program have been subsequently used on c the original copy of this program to replace all in-line COMMON c blocks with INCLUDE statements and separate include files. c c Modified Sat Feb 3 10:07:52 EST 2001 by R. Moniot to include a c NAMELIST declaration to improve it as a test of ftnchek. The c declarations were excerpted from the PLOT79 grfgg3.sf3 file. c----------------------------------------------------------------------- program prob5_4dim parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(nr=32, nt=16, nr2=nr+2, nt1=nt+1) parameter(nw=2*nt+15) parameter(mmax=200) c c common block variables c double precision u,f,fb,elf,elfn double precision phin,phinn,phia,phian double precision c,cn double precision xm double precision h,dlt double precision zag,zagn double precision k0 double precision uy,vy,ux,vx double precision wsave,dr,r c c other variables c character*15 rname character*18 ufile,ffile,pafile,zfile character*18 pnfile,efile character*18 cfile,mfile,parfile,fmfile character*18 mmfile,maifile,symfile character*18 e1file,e2file,e3file,e4file,e5file character*18 e6file,e7file,e8file,e9file,e10file character*18 e11file,e12file,e13file,e14file,e15file character*18 e16file,e17file,e18file,e19file,e20file character*18 e21file,e22file,e23file,e24file integer rlen double precision uold(0:nbp1,0:nbp1,2) double precision zagi(0:nbp1,0:nbp1) LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) REAL DUSUB, DVSUB, DXSUB, DYSUB c c namelists c NAMELIST / DATA / X AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, X DERIV, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/force /f(0:nbp1,0:nbp1,2) common/link /elf (0:nbp1,0:nbp1,0:nr2,nt1) common/link /elfn(0:nbp1,0:nbp1,0:nr2,nt1) common/phi /phin (0:nbp1,0:nbp1) common/phi /phinn(0:nbp1,0:nbp1) common/phi /phia (0:nbp1,0:nbp1) common/phi /phian(0:nbp1,0:nbp1) common/adp /c (0:nbp1,0:nbp1) common/adp /cn (0:nbp1,0:nbp1) common/agg /zag (0:nbp1,0:nbp1) common/agg /zagn (0:nbp1,0:nbp1) common/forceb/fb(0:nbp1,0:nbp1,2) common/stiff /k0 common/steps /h,dlt common/rsize /dr(nr2),r(0:nr2),nk common/wave /wsave(nw) common/mth /method,mthlim common/efnum /nfil c common/fmarkers/xm(mmax,2) c double precision cmax,cmin,phiamax,phiamin double precision phinmax,phinmin,zagmax,zagmin c double precision umax,usmax,fbmax,flmax,q double precision tcoef,time,tfreq,tpi,f0 c c.... code body eliminated .... c end c c------------------------------------------------- c subroutine uinit c c parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(nr=32, nt=16, nr2=nr+2, nt1=nt+1) parameter(mmax=200) c c common block variables c double precision u,fb double precision elf,elfn double precision phin,phinn,phia,phian double precision c,cn double precision zag,zagn,xm double precision h,dlt,s1,s2,s3,a double precision re,pen,pec,cnd1,cnd2,cnd3,cnd4,cnd5 double precision uy,vy,ux,vx,x,y double precision theta,dr,r double precision k0,alpha0,beta0 c c c other variables c double precision ro,mu,achem,ct,r0,a2,a0 double precision c0,c1,c2,d,pi,tpi,u0,b0 double precision s0,phi0,z0,elf0,adp0,xlow,ylow,wl double precision xchar,uchar,tchar,pchar,fchar double precision elfchar,phichar,zchar,cchar double precision ang,ax,ay,co,cx,cxh,cy,cyh double precision dc,dn,si,sx,sxh,sy,syh,th,xh,yh double precision cmax,cmin c common/vel /u (0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/forceb/fb(0:nbp1,0:nbp1,2) common/link /elf (0:nbp1,0:nbp1,0:nr2,nt1) common/link /elfn (0:nbp1,0:nbp1,0:nr2,nt1) common/phi /phin (0:nbp1,0:nbp1) common/phi /phinn(0:nbp1,0:nbp1) common/phi /phia (0:nbp1,0:nbp1) common/phi /phian(0:nbp1,0:nbp1) common/adp /c (0:nbp1,0:nbp1) common/adp /cn (0:nbp1,0:nbp1) common/agg /zag (0:nbp1,0:nbp1) common/agg /zagn (0:nbp1,0:nbp1) common/coefs /s1,s2,s3,re,a common/cnd /cnd1,cnd2,cnd3,cnd4,cnd5 common/steps /h,dlt common/psteps /theta common/rsize /dr(nr2),r(0:nr2),nk common/grid /x(0:nbp1),y(0:nbp1) common/diffn /pen common/diffc /pec c common/stiff /k0 common/linkf /alpha0 common/linkb /beta0 common/char /fchar,zchar,phichar c common/fmarkers/xm(mmax,2) c c.... code body eliminated .... c end c c-------------------------------------------------------------- c subroutine xinit c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(nbp1=nb+1) c double precision sinsq,bzero,z double precision h,dlt double precision re,s1,s2,s3,a double precision pi,tpon,si,sj c common/fft /sinsq(0:nbp1,0:nbp1) common/fft /bzero(0:nbp1,0:nbp1) common/ptds /z(0:nbp1,0:nbp1) common/steps /h,dlt common/coefs /s1,s2,s3,re,a c c.... code body eliminated .... c end c c------------------------------------------------- c subroutine navs2d c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(nbp1=nb+1) c double precision u,f,sinsq,bzero,z double precision h,dlt,re,s1,s2,s3,a double precision uy,vy,ux,vx c double precision w1,w2,b,r,yp,c,lam,yh,p,d double precision pro,xl,yl c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/force /f(0:nbp1,0:nbp1,2) common/pres /p(0:nbp1,0:nbp1) common/fft /sinsq(0:nbp1,0:nbp1) common/fft /bzero(0:nbp1,0:nbp1) common/ptds /z(0:nbp1,0:nbp1) common/steps /h,dlt common/coefs /s1,s2,s3,re,a c dimension w1(0:nbp1,0:nbp1,1:2) dimension w2(0:nbp1,0:nbp1,1:2) c dimension b (0:nbp1,0:nbp1) dimension r (0:nbp1,0:nbp1) dimension yp(0:nbp1,0:nbp1) dimension c (0:nbp1,0:nbp1) dimension yh(0:nbp1,0:nbp1) dimension d (0:nbp1,0:nbp1) dimension lam(ng) c equivalence(f,w1,w2) equivalence(d,p) c c.... code body eliminated .... c end c c--------------------------------------------------------------- c subroutine tridgx(a,b,c,w,y) c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(n=ng-1,np1=n+1,nm1=n-1) parameter(nbp1=nb+1) c double precision a,b,c,w,y c double precision x,l,r,d c common/tdspace/x(0:nbp1,0:nbp1) common/tdspace/l(0:nbp1,0:nbp1) common/tdspace/r(0:nbp1,0:nbp1) common/tdspace/d(0:nbp1,0:nbp1) c dimension y(0:nbp1,0:nbp1) dimension b(0:nbp1,0:nbp1) dimension c(0:nbp1,0:nbp1) dimension w(0:nbp1,0:nbp1) c c.... code body eliminated .... c end c c--------------------------------------------------------------- c subroutine tridgy(a,b,c,w,y) c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(n=ng-1,np1=n+1,nm1=n-1) parameter(nbp1=nb+1) c double precision a,b,c,w,y c double precision x,l,r,d c common/tdspace/x(0:nbp1,0:nbp1) common/tdspace/l(0:nbp1,0:nbp1) common/tdspace/r(0:nbp1,0:nbp1) common/tdspace/d(0:nbp1,0:nbp1) c dimension y(0:nbp1,0:nbp1) dimension b(0:nbp1,0:nbp1) dimension c(0:nbp1,0:nbp1) dimension w(0:nbp1,0:nbp1) c c.... code body eliminated .... c end c c------------------------------------------------------------ c subroutine newu(w2,p) c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(nbp1=nb+1) c double precision u,uy,vy,ux,vx double precision h,k common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/steps /h,k c double precision p (0:nbp1,0:nbp1) double precision w2(0:nbp1,0:nbp1,2),s c c.... code body eliminated .... c end c c------------------------------------------------------------ c subroutine div(s3,w2,d) c parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(nbp1=nb+1) c double precision w2(0:nbp1,0:nbp1,2) double precision d (0:nbp1,0:nbp1) double precision s3 c c.... code body eliminated .... c end c c------------------------------------------------------------------ c subroutine fft2d(a,b,isign) parameter(l2ng=6,ng=2**l2ng,nb =ng+2,ngm1=ng-1) parameter(n=ng,m=l2ng) parameter(nbp1=nb+1) c double precision a(0:nbp1,0:nbp1) double precision b(0:nbp1,0:nbp1) double precision t1(n),t2(n),t3(n),t4(n) double precision pi,ang,ssign,tu1,u1,u2,w1,w2 c c.... code body eliminated .... c end c c----------------------------------------------------- c subroutine phia2d(n) parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) c c common block variables c double precision k,h double precision u,phin,phinn,phia,phian double precision uy,vy,ux,vx c c other variables c c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) c common/phi /phin (0:nbp1,0:nbp1) common/phi /phinn(0:nbp1,0:nbp1) common/phi /phia (0:nbp1,0:nbp1) common/phi /phian(0:nbp1,0:nbp1) c common/steps /h,k c c.... code body eliminated .... c end c c---------------------------------------------------------------- c subroutine zag2d(n) parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) c c common block variables c double precision k,h double precision u,zag,zagn double precision uy,vy,ux,vx c c other variables c c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/agg /zag (0:nbp1,0:nbp1) common/agg /zagn (0:nbp1,0:nbp1) c common/steps /h,k c c.... code body eliminated .... c end c c-------------------------------------------------------------------- c subroutine plot(time,n,u,f,phia,phin,c,zag,xm,elf,nk) c c prints out data(0:ng,0:ng) for subsequent plotting c parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(nr=32, nt=16, nr2=nr+2, nt1=nt+1) parameter(mmax=200) c c argument list variables c double precision u,f,elf double precision phin,phia double precision c double precision zag double precision xm double precision time integer n,nk c dimension u(0:nbp1,0:nbp1,2) dimension f(0:nbp1,0:nbp1,2) dimension phia (0:nbp1,0:nbp1) dimension zag (0:nbp1,0:nbp1) c dimension xm(mmax,2) c dimension elf (0:nbp1,0:nbp1,0:nr2,nt1) dimension phin (0:nbp1,0:nbp1) dimension c (0:nbp1,0:nbp1) common/efnum/nfil c c.... code body eliminated .... c end c c--------------------------------------------------------------------- c subroutine markers parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(mmax=200) c c common block variables c double precision u double precision h,dlt double precision uy,vy,ux,vx,xm c c argument list variables c double precision ax,ay,um,umn,vm,vmn,x,xn,y,yn c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) c common/steps /h,dlt common/fmarkers/xm(mmax,2) c c.... code body eliminated .... c end c c------------------------------------------------------------- c subroutine phin2d(n) parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(mmax=200) c c common block variables c double precision k,h double precision u,phin,phinn,phia,phian double precision pen double precision uy,vy,ux,vx c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/phi /phin (0:nbp1,0:nbp1) common/phi /phinn(0:nbp1,0:nbp1) common/phi /phia (0:nbp1,0:nbp1) common/phi /phian(0:nbp1,0:nbp1) c common/diffn /pen c common/steps /h,k c c.... code body eliminated .... c end c c------------------------------------------------------------- c subroutine chem2d(n) parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(mmax=200) c c common block variables c double precision k,h double precision u,c,cn double precision pec double precision uy,vy,ux,vx c common/vel /u(0:nbp1,0:nbp1,2) common/vel /uy(0:nbp1,0:nbp1),vy(0:nbp1,0:nbp1) common/vel /ux(0:nbp1,0:nbp1),vx(0:nbp1,0:nbp1) common/adp /c (0:nbp1,0:nbp1) common/adp /cn (0:nbp1,0:nbp1) c common/steps /h,k common/diffc /pec c c.... code body eliminated .... c end c c------------------------------------------------- c subroutine chlfac(diag,subd,nn) double precision diag(nn),subd(nn) c c.... code body eliminated .... c end c c------------------------------------------------- c subroutine chlslv(diag,sub,nm1,b,x) parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter (max = nbp1) c double precision diag(nm1), sub(nm1), b(nm1+1), x(nm1), y(max) c c.... code body eliminated .... c end c c------------------------------------------------- c subroutine period(ph) c c extend ph periodically c parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) double precision ph dimension ph(0:nbp1,0:nbp1) c c.... code body eliminated .... c end c c------------------------------------------------- c function sol(v,l,r) double precision v,l,r,sol c c.... code body eliminated .... c end c c----------------------------------------------------------------------- c subroutine diffu(ph,phn,k1,alpha) parameter (l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter (ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) c c common block variables c double precision h,k c c other variables c double precision k1,alpha,ph,phn double precision gdiag,gsub,b,z,y,lam,eta c dimension gdiag(nb-1),gsub(nb-1),b(nb) dimension z(nb-1),y(nb-1) dimension ph (0:nbp1,0:nbp1) dimension phn(0:nbp1,0:nbp1) c common/steps /h,k c c.... code body eliminated .... c end c c----------------------------------------------------------------------- c subroutine react parameter(l2ng=6,ng=2**l2ng,nb=ng+2,ngm1=ng-1) parameter(ngp1=ng+1,ngp2=ng+2,nbp1=nb+1) parameter(nr=32, nt=16, nr2=nr+2, nt1=nt+1) c c common block variables c double precision k,h,cnd1,cnd2,cnd3,cnd4,cnd5 double precision elf,elfn,phin,phinn,phia,phian,c,cn,zag,zagn double precision dr,r c c other variables c double precision rc,y,yn,temp1,temp2,temp3,temp4,c4,alpha c common/link /elf (0:nbp1,0:nbp1,0:nr2,nt1) common/link /elfn(0:nbp1,0:nbp1,0:nr2,nt1) common/phi /phin (0:nbp1,0:nbp1) common/phi /phinn(0:nbp1,0:nbp1) common/phi /phia (0:nbp1,0:nbp1) common/phi /phian(0:nbp1,0:nbp1) common/adp /c (0:nbp1,0:nbp1) common/adp /cn (0:nbp1,0:nbp1) common/agg /zag(0:nbp1,0:nbp1) common/agg /zagn(0:nbp1,0:nbp1) common/cnd /cnd1,cnd2,cnd3,cnd4,cnd5 common/steps /h,k common/rsize/dr(nr2),r(0:nr2),nk c dimension rc (0:nbp1) dimension y (0:nbp1,4), yn(0:nbp1,4) c c.... code body eliminated .... c end ftnchek-3.3.1/test/unixincluded.f0000644000031000002260000000036307617550611017411 0ustar moniotstaff00000000000000# 1 "unixinclude.f" integer n # 1 "./unixdefs.h" integer x logical a common n # 3 "unixinclude.f" call foo(x) a = x .eq. n end subroutine foo(m) common n n = 1 m = 2 end ftnchek-3.3.1/test/unixincluded.opt0000644000031000002260000000001707617550611017762 0ustar moniotstaff00000000000000unixincluded.f ftnchek-3.3.1/test/usage.f0000644000031000002260000000376007617550611016026 0ustar moniotstaff00000000000000 program yacctest c c Tests the Yacc fortran parser. * Should pass the current version. C It is also a legal, though not especially meaningful, program * implicit integer (u-z) dimension xyz(3),abc c The next line has some whitespace, but nothing else. Note continuation!! $ (9,9,100) 22 equivalence (a,b) , (xyz,abc,def) intrinsic sqrt,log c common com1,com2 /blk1/ com3,com4(5),com6, /blk2/ w123x common comm1,comm2 /blk3/ comm3,comm4(5),comm6 /blk4/ cc1 implicit double precision (d), real(r) integer program(3,3), pause(20) character *8 bb,bb13*3 character *4, cc(9),cc1 parameter (Pi = 3.14159265358979D0) logical stop, save equivalence (xyz(1),qq), (bb(1:3),bb13) x , (cc1,bb) real a123(9,9), ifa integer xray external xray double precision dbl1,dbl2(3) logical test complex compl1,compl2 test = .true. data ( (a123(i,j),i=1,9),j=1,9) ,ifa / 82*0.0 / data cc / 9*'help' /, bb /'wouldn''t'/ com4 / -1e7,+5.2 $, 4habcd, .1, 1. / if(dbl1) 10,34567,5432 34567 stop 10 stop 123 5432 pause end = 123 + pause(1) read(iunit,*) (((abc(i,j,k),k=1,100),j=1,9),i=1,9),xyz(2) read iunit , a,b,xyz(1) write(iunit,*) 'hello there',a print *, cc(1),a+b*Pi print 5, (cc(i),i=1,4) if( stop .and. save ) then cc(2) = 'abcd' www = 4.7 + (Pi * 2)**8 else if(abc(1,1,1) .eq. xyz(2)) then open(unit=4,file='foo.bar',err=5432,status='old') rewind 1+3 close(4) open(3,file='buzzsaw',form='unformatted',status='new') backspace (unit=3) close(unit=3) endif test = .false. dbl1 = 1.2345 write (6,900) dbl1 900 format(f10.2) if(test) goto 10 pause 456 goto 34567 end c comments in here don't hurt a bit integer function xray(beta,gamma) character *(*) gamma * logical beta if( beta ) xray = 1.0D0 end subroutine home(x,*) common /blk1/ com3,com4(5),com6 save /blk1/,xray if((x-1.0)**(sqrt(2.0))/(5/4+com6) .gt. com3) then xray = 1.234 return else xray = -1.234 ** (+1.7e10) endif com4(com2+com6) = com4(xray) return 1 end ftnchek-3.3.1/test/wordsize.f0000644000031000002260000000033307617550611016561 0ustar moniotstaff00000000000000 double precision function f(a,b) double precision a,b f = a+b return end program main real*8 f real*8 x,y x = 1.0 y = 2.0d0 write(*,*) f(x,y) end ftnchek-3.3.1/test/Okay/0000755000031000002260000000000010145015312015430 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/adp.inc0000644000031000002260000000021707621405725016707 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C ftnchek-3.3.1/test/Okay/agg.inc0000644000031000002260000000022307621405725016676 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C ftnchek-3.3.1/test/Okay/animated_pendulum_cls.html0000644000031000002260000000205607621405725022675 0ustar moniotstaff00000000000000 Source animated_pendulum_cls.f

SUBROUTINE CLS ( )

Description
Clears the screen. 
Put machine dependent code here.
Source file:animated_pendulum_cls.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
CHARACTER          CHAR
Local Variables (+ indicates altered content)
CHARACTER*6       +CLEAR_STRING
CHARACTER         +ESC

ftnchek-3.3.1/test/Okay/animated_pendulum_entergr.html0000644000031000002260000000202707621405725023560 0ustar moniotstaff00000000000000 Source animated_pendulum_entergr.f

SUBROUTINE ENTERGRAPHICSMODE ( )

Description
Enter ReGIS, clear screen
Source file:animated_pendulum_entergr.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
CHARACTER          CHAR
Local Variables (+ indicates altered content)
CHARACTER         +ESC

ftnchek-3.3.1/test/Okay/animated_pendulum_exitgr.html0000644000031000002260000000204507621405725023414 0ustar moniotstaff00000000000000 Source animated_pendulum_exitgr.f

SUBROUTINE EXITGRAPHICSMODE ( )

Description
Go out of graphics mode back to 
text mode.
Source file:animated_pendulum_exitgr.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
CHARACTER          CHAR
Local Variables (+ indicates altered content)
CHARACTER         +ESC

ftnchek-3.3.1/test/Okay/animated_pendulum_main.html0000644000031000002260000000306607621405725023042 0ustar moniotstaff00000000000000 Source animated_pendulum_main.f

PROGRAM ANIMATEDPENDULUM ( )

Description
Program:    Simple_Pendulum_Solver   * 
Written_By: Brian Downing            * 
            Fordham University       * 
Date:       October 23rd, 1990       *
Source file:animated_pendulum_main.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD           W  
      *                   SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSIN
GENERIC            ATAN
External Functions and Subroutines Called
SUBROUTINE         CLS,        ENTERGRAPHICSMODE
SUBROUTINE         EXITGRAPHICSMODE,       PLOTBALL
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +A,         +DT,        +G,         +L
DOUBLE PRECISION  +PI,        +T,         +THETA,     +THETAM
DOUBLE PRECISION  +W

ftnchek-3.3.1/test/Okay/animated_pendulum_plotball.html0000644000031000002260000000241507621405725023724 0ustar moniotstaff00000000000000 Source animated_pendulum_plotball.f

SUBROUTINE PLOTBALL ( THETA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   THETA
Description
Clear the screen and draw/redraw the ball circle.
Source file:animated_pendulum_plotball.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DCOS,       DSIN
INTEGER            INT
Local Variables (+ indicates altered content)
INTEGER           +COL,       +ROW

ftnchek-3.3.1/test/Okay/average.fc20000644000031000002260000000004107621405725017451 0ustar moniotstaff00000000000000 Output sent to file average.out ftnchek-3.3.1/test/Okay/builtin.dc00000644000031000002260000000073207621405725017510 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSQRT, SQRT C C Built-in functions C DOUBLE PRECISION DSQRT C DOUBLE PRECISION DSQRT C C Local variables C DOUBLE PRECISION X C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc10000644000031000002260000000042307621405725017506 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: Undeclared variables C C Local variables C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc20000644000031000002260000000066207621405725017514 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSQRT, SQRT C C Built-in functions C DOUBLE PRECISION DSQRT C DOUBLE PRECISION DSQRT C C Local variables C DOUBLE PRECISION X C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc30000644000031000002260000000073207621405725017513 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSQRT, SQRT C C Built-in functions C DOUBLE PRECISION DSQRT C DOUBLE PRECISION DSQRT C C Local variables C DOUBLE PRECISION X C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc40000644000031000002260000000073207621405725017514 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C intrinsic DSQRT, SQRT C C Built-in functions C double precision DSQRT C double precision DSQRT C C Local variables C double precision X C real Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc50000644000031000002260000000073207621405725017515 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC dsqrt, sqrt C C Built-in functions C DOUBLE PRECISION dsqrt C DOUBLE PRECISION dsqrt C C Local variables C DOUBLE PRECISION x C REAL y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc60000644000031000002260000000073207621405725017516 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Intrinsic functions C INTRINSIC DSQRT, SQRT C C Built-in functions C DOUBLE PRECISION DSQRT C DOUBLE PRECISION DSQRT C C Local variables C DOUBLE PRECISION X C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc70000644000031000002260000000073207621405725017517 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File builtin.f *---->Makedcls Options: All variables * * Intrinsic functions * INTRINSIC DSQRT, SQRT * * Built-in functions * DOUBLE PRECISION DSQRT * DOUBLE PRECISION DSQRT * * Local variables * DOUBLE PRECISION X * REAL Y * *====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc80000644000031000002260000000073207621405725017520 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File builtin.f c---->Makedcls Options: All variables c c Intrinsic functions c INTRINSIC DSQRT, SQRT c c Built-in functions c DOUBLE PRECISION DSQRT c DOUBLE PRECISION DSQRT c c Local variables c DOUBLE PRECISION X c REAL Y c c====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dc90000644000031000002260000000073207621405725017521 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File builtin.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSQRT, SQRT C C Built-in functions C DOUBLE PRECISION DSQRT C DOUBLE PRECISION DSQRT C C Local variables C DOUBLE PRECISION X C REAL Y C C====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.dca0000644000031000002260000000070607621405725017572 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File builtin.f !---->Makedcls Options: All variables ! ! Intrinsic functions ! INTRINSIC DSQRT, SQRT ! ! Built-in functions ! DOUBLE PRECISION DSQRT ! DOUBLE PRECISION DSQRT ! ! Local variables ! DOUBLE PRECISION X ! REAL Y ! !====>End Module %MAIN File builtin.f ftnchek-3.3.1/test/Okay/builtin.htm00000644000031000002260000000203207712503115017676 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSQRT
GENERIC            SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +X
REAL              +Y

ftnchek-3.3.1/test/Okay/builtin.htm20000644000031000002260000000200107712503115017674 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION  DSQRT
GENERIC  SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION +X
REAL +Y

ftnchek-3.3.1/test/Okay/builtin.htm30000644000031000002260000000203207712503116017702 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSQRT
GENERIC            SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +X
REAL              +Y

ftnchek-3.3.1/test/Okay/builtin.htm40000644000031000002260000000203207712503117017704 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
double precision   DSQRT
generic            SQRT
Local Variables (+ indicates altered content)
double precision  +X
real              +Y

ftnchek-3.3.1/test/Okay/builtin.htm50000644000031000002260000000203207712503117017705 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   dsqrt
GENERIC            sqrt
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +x
REAL              +y

ftnchek-3.3.1/test/Okay/builtin.htm60000644000031000002260000000203207712503120017700 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSQRT
GENERIC            SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +X
REAL              +Y

ftnchek-3.3.1/test/Okay/builtin.htm90000644000031000002260000000203207712503120017703 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSQRT
GENERIC            SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +X
REAL              +Y

ftnchek-3.3.1/test/Okay/builtin.htma0000644000031000002260000000203207712503121017754 0ustar moniotstaff00000000000000 Source builtin.f

PROGRAM %MAIN ( )

Description
checks makedcl generation of "Built-in" section
Source file:builtin.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DSQRT
GENERIC            SQRT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +X
REAL              +Y

ftnchek-3.3.1/test/Okay/CallTree.html0000644000031000002260000000070407621405725020032 0ustar moniotstaff00000000000000 Program Call Tree
ANIMATEDPENDULUM
    CLS
    ENTERGRAPHICSMODE
    EXITGRAPHICSMODE
    PLOTBALL
ftnchek-3.3.1/test/Okay/char.inc0000644000031000002260000000022507621405725017057 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C ftnchek-3.3.1/test/Okay/cnd.inc0000644000031000002260000000035107621405725016706 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C ftnchek-3.3.1/test/Okay/coefs.inc0000644000031000002260000000034007621405725017237 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C ftnchek-3.3.1/test/Okay/comcmp.vcg0000644000031000002260000000064407621405725017433 0ustar moniotstaff00000000000000graph: { title: "comcmp.f" color: lightgray graph: { title:"[%MAIN]" node: { title: "%MAIN" label: "%MAIN \n (comcmp.f)" info1:"1" } edge: { sourcename: "%MAIN" targetname: "FOO" class:1} graph: { title:"[FOO]" node: { title: "FOO" label: "FOO \n (comcmp.f)" info1:"2" } edge: { sourcename: "FOO" targetname: "BAR" class:2} graph: { title:"[BAR]" node: { title: "BAR" label: "BAR \n (comcmp.f)" info1:"3" } } } } } ftnchek-3.3.1/test/Okay/comusage.vcg0000644000031000002260000000112007621405725017746 0ustar moniotstaff00000000000000graph: { title: "comusage.f" color: lightgray graph: { title:"[MAIN]" node: { title: "MAIN" label: "MAIN \n (comusage.f)" info1:"1" } edge: { sourcename: "MAIN" targetname: "COMP" class:1} edge: { sourcename: "MAIN" targetname: "INPUT" class:1} edge: { sourcename: "MAIN" targetname: "OUTPUT" class:1} graph: { title:"[COMP]" node: { title: "COMP" label: "COMP \n (comusage.f)" info1:"2" } } graph: { title:"[INPUT]" node: { title: "INPUT" label: "INPUT \n (comusage.f)" info1:"2" } } graph: { title:"[OUTPUT]" node: { title: "OUTPUT" label: "OUTPUT \n (comusage.f)" info1:"2" } } } } ftnchek-3.3.1/test/Okay/correct.prj0000644000031000002260000000165107640170107017623 0ustar moniotstaff00000000000000FTNCHEK_ P3 file correct.f entries 2 entry COMPAV class 1 type 2 size 0 flags 1 1 1 0 0 0 0 0 defn module COMPAV file correct.f line 10 top 10 class 1 type 2 size 0 flags 1 0 0 0 args 2 arg 1 name SCORE class 0 type 1 size 0 dims 1 elts 5 cblk - cndx 0 same 0 flags 1 0 0 1 1 0 0 0 arg 2 name COUNT class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 1 flags 1 0 0 1 0 0 0 0 end entry AVENUM class 1 type 12 size 0 flags 0 0 0 0 0 0 0 0 defn module AVENUM file correct.f line 21 top 21 class 1 type 12 size 0 flags 1 0 0 0 args 0 end externals 1 external COMPAV class 1 type 2 size 0 flags 1 1 1 0 0 0 0 0 call module AVENUM file correct.f line 45 top 45 class 1 type 2 size 0 flags 0 1 0 0 args 2 arg 1 name NUMS class 0 type 1 size 0 dims 1 elts 5 cblk - cndx 0 same 0 flags 1 1 1 0 1 0 0 0 arg 2 name COUNT class 0 type 1 size 0 dims 0 elts 1 cblk - cndx 0 same 1 flags 1 1 1 0 0 0 0 0 end comblocks 0 ftnchek-3.3.1/test/Okay/CVS/0000755000031000002260000000000010201534426016070 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/CVS/Root0000644000031000002260000000003607623227204016744 0ustar moniotstaff00000000000000pascal:/usr/local/src/cvsroot ftnchek-3.3.1/test/Okay/CVS/Repository0000644000031000002260000000002207623227204020173 0ustar moniotstaff00000000000000ftnchek/test/Okay ftnchek-3.3.1/test/Okay/CVS/Entries0000644000031000002260000010715110201534426017431 0ustar moniotstaff00000000000000/CallTree.html/1.1/Sun Feb 9 08:05:41 2003// /adp.inc/1.1/Sun Feb 9 08:05:41 2003// /agg.inc/1.1/Sun Feb 9 08:05:41 2003// /animated_pendulum_cls.html/1.1/Sun Feb 9 08:05:41 2003// /animated_pendulum_entergr.html/1.1/Sun Feb 9 08:05:41 2003// /animated_pendulum_exitgr.html/1.1/Sun Feb 9 08:05:41 2003// /animated_pendulum_main.html/1.1/Sun Feb 9 08:05:41 2003// /animated_pendulum_plotball.html/1.1/Sun Feb 9 08:05:41 2003// /average.fc2/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc0/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc1/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc2/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc3/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc4/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc5/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc6/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc7/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc8/1.1/Sun Feb 9 08:05:41 2003// /builtin.dc9/1.1/Sun Feb 9 08:05:41 2003// /builtin.dca/1.1/Sun Feb 9 08:05:41 2003// /char.inc/1.1/Sun Feb 9 08:05:41 2003// /cnd.inc/1.1/Sun Feb 9 08:05:41 2003// /coefs.inc/1.1/Sun Feb 9 08:05:41 2003// /comcmp.vcg/1.1/Sun Feb 9 08:05:41 2003// /comusage.vcg/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc0/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc1/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc2/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc3/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc4/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc5/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc6/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc7/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc8/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dc9/1.1/Sun Feb 9 08:05:41 2003// /dcltest.dca/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm0/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm2/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm3/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm4/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm5/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm6/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htm9/1.1/Sun Feb 9 08:05:41 2003// /dcltest.htma/1.1/Sun Feb 9 08:05:41 2003// /diffc.inc/1.1/Sun Feb 9 08:05:41 2003// /diffn.inc/1.1/Sun Feb 9 08:05:41 2003// /dims.dc0/1.1/Sun Feb 9 08:05:41 2003// /dims.dc1/1.1/Sun Feb 9 08:05:41 2003// /dims.dc2/1.1/Sun Feb 9 08:05:41 2003// /dims.dc3/1.1/Sun Feb 9 08:05:41 2003// /dims.dc4/1.1/Sun Feb 9 08:05:41 2003// /dims.dc5/1.1/Sun Feb 9 08:05:41 2003// /dims.dc6/1.1/Sun Feb 9 08:05:41 2003// /dims.dc7/1.1/Sun Feb 9 08:05:41 2003// /dims.dc8/1.1/Sun Feb 9 08:05:41 2003// /dims.dc9/1.1/Sun Feb 9 08:05:41 2003// /dims.dca/1.1/Sun Feb 9 08:05:41 2003// /dims.htm0/1.1/Sun Feb 9 08:05:41 2003// /dims.htm2/1.1/Sun Feb 9 08:05:41 2003// /dims.htm3/1.1/Sun Feb 9 08:05:41 2003// /dims.htm4/1.1/Sun Feb 9 08:05:41 2003// /dims.htm5/1.1/Sun Feb 9 08:05:41 2003// /dims.htm6/1.1/Sun Feb 9 08:05:41 2003// /dims.htm9/1.1/Sun Feb 9 08:05:41 2003// /dims.htma/1.1/Sun Feb 9 08:05:41 2003// /efnum.inc/1.1/Sun Feb 9 08:05:41 2003// /fft.inc/1.1/Sun Feb 9 08:05:41 2003// /fmarkers.inc/1.1/Sun Feb 9 08:05:41 2003// /force.inc/1.1/Sun Feb 9 08:05:41 2003// /forceb.inc/1.1/Sun Feb 9 08:05:41 2003// /grid.inc/1.1/Sun Feb 9 08:05:41 2003// /link.inc/1.1/Sun Feb 9 08:05:41 2003// /linkb.inc/1.1/Sun Feb 9 08:05:41 2003// /linkf.inc/1.1/Sun Feb 9 08:05:41 2003// /model.dc0/1.1/Sun Feb 9 08:05:41 2003// /model.dc1/1.1/Sun Feb 9 08:05:41 2003// /model.dc2/1.1/Sun Feb 9 08:05:41 2003// /model.dc3/1.1/Sun Feb 9 08:05:41 2003// /model.dc4/1.1/Sun Feb 9 08:05:41 2003// /model.dc5/1.1/Sun Feb 9 08:05:41 2003// /model.dc6/1.1/Sun Feb 9 08:05:41 2003// /model.dc7/1.1/Sun Feb 9 08:05:41 2003// /model.dc8/1.1/Sun Feb 9 08:05:41 2003// /model.dc9/1.1/Sun Feb 9 08:05:41 2003// /model.dca/1.1/Sun Feb 9 08:05:41 2003// /model.htm0/1.1/Sun Feb 9 08:05:41 2003// /model.htm2/1.1/Sun Feb 9 08:05:41 2003// /model.htm3/1.1/Sun Feb 9 08:05:41 2003// /model.htm4/1.1/Sun Feb 9 08:05:41 2003// /model.htm5/1.1/Sun Feb 9 08:05:41 2003// /model.htm6/1.1/Sun Feb 9 08:05:41 2003// /model.htm9/1.1/Sun Feb 9 08:05:41 2003// /model.htma/1.1/Sun Feb 9 08:05:41 2003// /mth.inc/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc0/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc1/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc2/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc3/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc4/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc5/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc6/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc7/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc8/1.1/Sun Feb 9 08:05:41 2003// /namelist.dc9/1.1/Sun Feb 9 08:05:41 2003// /namelist.dca/1.1/Sun Feb 9 08:05:41 2003// /params.dc0/1.1/Sun Feb 9 08:05:41 2003// /params.dc1/1.1/Sun Feb 9 08:05:41 2003// /params.dc2/1.1/Sun Feb 9 08:05:41 2003// /params.dc3/1.1/Sun Feb 9 08:05:41 2003// /params.dc4/1.1/Sun Feb 9 08:05:41 2003// /params.dc5/1.1/Sun Feb 9 08:05:41 2003// /params.dc6/1.1/Sun Feb 9 08:05:41 2003// /params.dc7/1.1/Sun Feb 9 08:05:41 2003// /params.dc8/1.1/Sun Feb 9 08:05:41 2003// /params.dc9/1.1/Sun Feb 9 08:05:41 2003// /params.dca/1.1/Sun Feb 9 08:05:41 2003// /params.htm0/1.1/Sun Feb 9 08:05:41 2003// /params.htm2/1.1/Sun Feb 9 08:05:41 2003// /params.htm3/1.1/Sun Feb 9 08:05:41 2003// /params.htm4/1.1/Sun Feb 9 08:05:41 2003// /params.htm5/1.1/Sun Feb 9 08:05:41 2003// /params.htm6/1.1/Sun Feb 9 08:05:41 2003// /params.htm9/1.1/Sun Feb 9 08:05:41 2003// /params.htma/1.1/Sun Feb 9 08:05:41 2003// /phi.inc/1.1/Sun Feb 9 08:05:41 2003// /pres.inc/1.1/Sun Feb 9 08:05:41 2003// /psteps.inc/1.1/Sun Feb 9 08:05:41 2003// /ptds.inc/1.1/Sun Feb 9 08:05:41 2003// /rsize.inc/1.1/Sun Feb 9 08:05:41 2003// /steps.inc/1.1/Sun Feb 9 08:05:41 2003// /stiff.inc/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc0/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc1/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc2/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc3/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc4/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc5/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc6/1.1/Sun Feb 9 08:05:41 2003// /t208a.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208a.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208a.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208a.dca/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208a.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208a.htma/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208b.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208b.dca/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208b.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208b.htma/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208c.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208c.dca/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208c.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208c.htma/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208d.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208d.dca/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208d.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208d.htma/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208e.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208e.dca/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208e.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208e.htma/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208f.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208f.dca/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208f.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208f.htma/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208g.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208g.dca/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208g.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208g.htma/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208h.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208h.dca/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208h.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208h.htma/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208i.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208i.dca/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208i.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208i.htma/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208j.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208j.dca/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208j.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208j.htma/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208k.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208k.dca/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208k.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208k.htma/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208l.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208l.dca/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208l.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208l.htma/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208m.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208m.dca/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208m.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208m.htma/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208n.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208n.dca/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208n.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208n.htma/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208o.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208o.dca/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208p.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208p.dca/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208p.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208p.htma/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208q.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208q.dca/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208q.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208q.htma/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208r.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208r.dca/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208r.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208r.htma/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208s.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208s.dca/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm4/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm5/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm6/1.1/Sun Feb 9 08:05:42 2003// /t208s.htm9/1.1/Sun Feb 9 08:05:42 2003// /t208s.htma/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc0/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc1/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc2/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc3/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc4/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc5/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc6/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc7/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc8/1.1/Sun Feb 9 08:05:42 2003// /t208t.dc9/1.1/Sun Feb 9 08:05:42 2003// /t208t.dca/1.1/Sun Feb 9 08:05:42 2003// /t208t.htm0/1.1/Sun Feb 9 08:05:42 2003// /t208t.htm2/1.1/Sun Feb 9 08:05:42 2003// /t208t.htm3/1.1/Sun Feb 9 08:05:42 2003// /t208t.htm4/1.1/Sun Feb 9 08:05:43 2003// /t208t.htm5/1.1/Sun Feb 9 08:05:43 2003// /t208t.htm6/1.1/Sun Feb 9 08:05:43 2003// /t208t.htm9/1.1/Sun Feb 9 08:05:43 2003// /t208t.htma/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc0/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc1/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc2/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc3/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc4/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc5/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc6/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc7/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc8/1.1/Sun Feb 9 08:05:43 2003// /t208u.dc9/1.1/Sun Feb 9 08:05:43 2003// /t208u.dca/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm0/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm2/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm3/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm4/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm5/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm6/1.1/Sun Feb 9 08:05:43 2003// /t208u.htm9/1.1/Sun Feb 9 08:05:43 2003// /t208u.htma/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc0/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc1/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc2/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc3/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc4/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc5/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc6/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc7/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc8/1.1/Sun Feb 9 08:05:43 2003// /t208v.dc9/1.1/Sun Feb 9 08:05:43 2003// /t208v.dca/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm0/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm2/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm3/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm4/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm5/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm6/1.1/Sun Feb 9 08:05:43 2003// /t208v.htm9/1.1/Sun Feb 9 08:05:43 2003// /t208v.htma/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc0/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc1/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc2/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc3/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc4/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc5/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc6/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc7/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc8/1.1/Sun Feb 9 08:05:43 2003// /t208w.dc9/1.1/Sun Feb 9 08:05:43 2003// /t208w.dca/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm0/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm2/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm3/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm4/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm5/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm6/1.1/Sun Feb 9 08:05:43 2003// /t208w.htm9/1.1/Sun Feb 9 08:05:43 2003// /t208w.htma/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc0/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc1/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc2/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc3/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc4/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc5/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc6/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc7/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc8/1.1/Sun Feb 9 08:05:43 2003// /t208x.dc9/1.1/Sun Feb 9 08:05:43 2003// /t208x.dca/1.1/Sun Feb 9 08:05:43 2003// /t208x.dcl/1.1/Sun Feb 9 08:05:43 2003// /t208x.dcn/1.1/Sun Feb 9 08:05:43 2003// /t208x.err/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm0/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm2/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm3/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm4/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm5/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm6/1.1/Sun Feb 9 08:05:43 2003// /t208x.htm9/1.1/Sun Feb 9 08:05:43 2003// /t208x.htma/1.1/Sun Feb 9 08:05:43 2003// /t208x.mak/1.1/Sun Feb 9 08:05:43 2003// /tdspace.inc/1.1/Sun Feb 9 08:05:43 2003// /vel.inc/1.1/Sun Feb 9 08:05:43 2003// /wave.inc/1.1/Sun Feb 9 08:05:43 2003// /wildcard.fc1/1.1/Sun Feb 9 08:05:43 2003// /wildcard.fc2/1.1/Sun Feb 9 08:05:43 2003// /wildcard.fc3/1.1/Sun Feb 9 08:05:43 2003// /wildcard.fc5/1.1/Sun Feb 9 08:05:43 2003// /correct.prj/1.2/Wed Mar 26 00:11:51 2003// /builtin.htm0/1.2/Fri Aug 1 15:25:01 2003// /builtin.htm2/1.2/Fri Aug 1 15:25:01 2003// /builtin.htm3/1.2/Fri Aug 1 15:25:02 2003// /builtin.htm4/1.2/Fri Aug 1 15:25:03 2003// /builtin.htm5/1.2/Fri Aug 1 15:25:03 2003// /builtin.htm6/1.2/Fri Aug 1 15:25:04 2003// /builtin.htm9/1.2/Fri Aug 1 15:25:04 2003// /builtin.htma/1.2/Fri Aug 1 15:25:05 2003// /namelist.htm0/1.2/Fri Aug 1 15:25:01 2003// /namelist.htm2/1.2/Fri Aug 1 15:25:01 2003// /namelist.htm3/1.2/Fri Aug 1 15:25:02 2003// /namelist.htm4/1.2/Fri Aug 1 15:25:03 2003// /namelist.htm5/1.2/Fri Aug 1 15:25:03 2003// /namelist.htm6/1.2/Fri Aug 1 15:25:04 2003// /namelist.htm9/1.2/Fri Aug 1 15:25:04 2003// /namelist.htma/1.2/Fri Aug 1 15:25:05 2003// /t208o.htm0/1.2/Fri Aug 1 15:25:01 2003// /t208o.htm2/1.2/Fri Aug 1 15:25:02 2003// /t208o.htm3/1.2/Fri Aug 1 15:25:02 2003// /t208o.htm4/1.2/Fri Aug 1 15:25:03 2003// /t208o.htm5/1.2/Fri Aug 1 15:25:03 2003// /t208o.htm6/1.2/Fri Aug 1 15:25:04 2003// /t208o.htm9/1.2/Fri Aug 1 15:25:05 2003// /t208o.htma/1.2/Fri Aug 1 15:25:05 2003// /arg-alias.fcl/1.4/Fri Nov 12 02:07:05 2004// /arg-alias.fcx/1.4/Fri Nov 12 02:07:05 2004// /args01.fc0/1.3/Fri Nov 12 02:07:05 2004// /args01.fc1/1.3/Fri Nov 12 02:07:05 2004// /args01.fc2/1.3/Fri Nov 12 02:07:05 2004// /args01.fc3/1.3/Fri Nov 12 02:07:05 2004// /args02.fc0/1.3/Fri Nov 12 02:07:05 2004// /args02.fc1/1.3/Fri Nov 12 02:07:05 2004// /args02.fc2/1.3/Fri Nov 12 02:07:05 2004// /args02.fc3/1.3/Fri Nov 12 02:07:05 2004// /args03.fc0/1.3/Fri Nov 12 02:07:05 2004// /args03.fc1/1.3/Fri Nov 12 02:07:05 2004// /args03.fc2/1.3/Fri Nov 12 02:07:05 2004// /args03.fc3/1.3/Fri Nov 12 02:07:05 2004// /args04.fc0/1.3/Fri Nov 12 02:07:05 2004// /args04.fc1/1.3/Fri Nov 12 02:07:05 2004// /args04.fc2/1.3/Fri Nov 12 02:07:05 2004// /args04.fc3/1.3/Fri Nov 12 02:07:05 2004// /args05.fc0/1.3/Fri Nov 12 02:07:05 2004// /args05.fc1/1.3/Fri Nov 12 02:07:05 2004// /args05.fc2/1.3/Fri Nov 12 02:07:05 2004// /args05.fc3/1.3/Fri Nov 12 02:07:05 2004// /args06.fc0/1.3/Fri Nov 12 02:07:05 2004// /args06.fc1/1.3/Fri Nov 12 02:07:05 2004// /args06.fc2/1.3/Fri Nov 12 02:07:05 2004// /args06.fc3/1.3/Fri Nov 12 02:07:05 2004// /args07.fc0/1.3/Fri Nov 12 02:07:05 2004// /args07.fc1/1.3/Fri Nov 12 02:07:05 2004// /args07.fc2/1.3/Fri Nov 12 02:07:05 2004// /args07.fc3/1.3/Fri Nov 12 02:07:05 2004// /args08.fc0/1.3/Fri Nov 12 02:07:05 2004// /args08.fc1/1.3/Fri Nov 12 02:07:05 2004// /args08.fc2/1.3/Fri Nov 12 02:07:05 2004// /args08.fc3/1.3/Fri Nov 12 02:07:05 2004// /args09.fc0/1.3/Fri Nov 12 02:07:05 2004// /args09.fc1/1.3/Fri Nov 12 02:07:05 2004// /args09.fc2/1.3/Fri Nov 12 02:07:05 2004// /args09.fc3/1.3/Fri Nov 12 02:07:05 2004// /args10.fc0/1.3/Fri Nov 12 02:07:05 2004// /args10.fc1/1.3/Fri Nov 12 02:07:05 2004// /args10.fc2/1.3/Fri Nov 12 02:07:05 2004// /args10.fc3/1.3/Fri Nov 12 02:07:05 2004// /args11.fc0/1.3/Fri Nov 12 02:07:05 2004// /args11.fc1/1.3/Fri Nov 12 02:07:05 2004// /args11.fc2/1.3/Fri Nov 12 02:07:05 2004// /args11.fc3/1.3/Fri Nov 12 02:07:05 2004// /args12.fc0/1.3/Fri Nov 12 02:07:05 2004// /args12.fc1/1.3/Fri Nov 12 02:07:05 2004// /args12.fc2/1.3/Fri Nov 12 02:07:05 2004// /args12.fc3/1.3/Fri Nov 12 02:07:05 2004// /args13.fc0/1.3/Fri Nov 12 02:07:05 2004// /args13.fc1/1.3/Fri Nov 12 02:07:05 2004// /args13.fc2/1.3/Fri Nov 12 02:07:05 2004// /args13.fc3/1.3/Fri Nov 12 02:07:05 2004// /args14.fc0/1.3/Fri Nov 12 02:07:05 2004// /args14.fc1/1.3/Fri Nov 12 02:07:05 2004// /args14.fc2/1.3/Fri Nov 12 02:07:05 2004// /args14.fc3/1.3/Fri Nov 12 02:07:05 2004// /args15.fc0/1.3/Fri Nov 12 02:07:05 2004// /args15.fc1/1.3/Fri Nov 12 02:07:05 2004// /args15.fc2/1.3/Fri Nov 12 02:07:05 2004// /args15.fc3/1.3/Fri Nov 12 02:07:05 2004// /arrayclash.fc0/1.3/Fri Nov 12 02:07:05 2004// /arrayclash.fc1/1.3/Fri Nov 12 02:07:05 2004// /arrayclash.fc2/1.3/Fri Nov 12 02:07:05 2004// /arrayclash.fc3/1.3/Fri Nov 12 02:07:05 2004// /assign.fc1/1.3/Fri Nov 12 02:07:05 2004// /assign.fc2/1.3/Fri Nov 12 02:07:05 2004// /assign.fc3/1.3/Fri Nov 12 02:07:05 2004// /assign.fc4/1.3/Fri Nov 12 02:07:05 2004// /assign.fc5/1.3/Fri Nov 12 02:07:05 2004// /assign.fc6/1.3/Fri Nov 12 02:07:05 2004// /assign.fc7/1.3/Fri Nov 12 02:07:05 2004// /assign.fc8/1.3/Fri Nov 12 02:07:05 2004// /assign.fcA/1.3/Fri Nov 12 02:07:05 2004// /assign.fcB/1.3/Fri Nov 12 02:07:05 2004// /assign.fcC/1.3/Fri Nov 12 02:07:05 2004// /assign.fcD/1.3/Fri Nov 12 02:07:05 2004// /assign.fcE/1.3/Fri Nov 12 02:07:05 2004// /assign.fcF/1.3/Fri Nov 12 02:07:05 2004// /autoarray.fcl/1.4/Fri Nov 12 02:07:05 2004// /autoarray.fcx/1.4/Fri Nov 12 02:07:05 2004// /average.fcl/1.4/Fri Nov 12 02:07:05 2004// /average.fcx/1.4/Fri Nov 12 02:07:05 2004// /average.out/1.4/Fri Nov 12 02:07:05 2004// /backslash.fcl/1.3/Fri Nov 12 02:07:05 2004// /backslash.fcx/1.3/Fri Nov 12 02:07:05 2004// /blockcheck.fcl/1.4/Fri Nov 12 02:07:05 2004// /blockerrors.fcl/1.4/Fri Nov 12 02:07:05 2004// /blockerrors.fcx/1.4/Fri Nov 12 02:07:05 2004// /case.fcl/1.3/Fri Nov 12 02:07:05 2004// /case.fcx/1.3/Fri Nov 12 02:07:05 2004// /chestnuts.fcl/1.3/Fri Nov 12 02:07:05 2004// /chestnuts.fcx/1.3/Fri Nov 12 02:07:05 2004// /comclash.fcl/1.3/Fri Nov 12 02:07:05 2004// /comclash.fcx/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fc0/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fc1/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fc2/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fc3/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fcl/1.3/Fri Nov 12 02:07:05 2004// /comcmp.fcx/1.3/Fri Nov 12 02:07:05 2004// /common-alias.fcl/1.3/Fri Nov 12 02:07:05 2004// /common-alias.fcx/1.3/Fri Nov 12 02:07:05 2004// /complex.fcl/1.3/Fri Nov 12 02:07:05 2004// /complex.fcx/1.3/Fri Nov 12 02:07:05 2004// /comtest.fcl/1.3/Fri Nov 12 02:07:05 2004// /comtest.fcx/1.3/Fri Nov 12 02:07:05 2004// /comusage.fc0/1.3/Fri Nov 12 02:07:05 2004// /comusage.fc1/1.3/Fri Nov 12 02:07:05 2004// /comusage.fc2/1.3/Fri Nov 12 02:07:05 2004// /comusage.fc3/1.3/Fri Nov 12 02:07:05 2004// /comusage.fcl/1.3/Fri Nov 12 02:07:05 2004// /comusage.fcx/1.3/Fri Nov 12 02:07:05 2004// /correct.fc1/1.3/Fri Nov 12 02:07:05 2004// /correct.fcl/1.4/Fri Nov 12 02:07:05 2004// /correct.fcx/1.4/Fri Nov 12 02:07:05 2004// /correct.pcl/1.3/Fri Nov 12 02:07:05 2004// /cray-pointers.fcl/1.5/Fri Nov 12 02:07:05 2004// /cray-pointers.fcx/1.5/Fri Nov 12 02:07:05 2004// /cycle-exit.fcl/1.4/Fri Nov 12 02:07:05 2004// /cycle-exit.fcx/1.4/Fri Nov 12 02:07:05 2004// /dec-parameter.fcl/1.3/Fri Nov 12 02:07:05 2004// /dec-parameter.fcx/1.3/Fri Nov 12 02:07:05 2004// /dectab.fcl/1.3/Fri Nov 12 02:07:05 2004// /dectab.fcx/1.3/Fri Nov 12 02:07:05 2004// /dims.fcl/1.3/Fri Nov 12 02:07:05 2004// /dims.fcx/1.3/Fri Nov 12 02:07:05 2004// /do_enddo.fcl/1.3/Fri Nov 12 02:07:05 2004// /do_enddo.fcx/1.3/Fri Nov 12 02:07:05 2004// /embedded-space.fcl/1.4/Fri Nov 12 02:07:05 2004// /embedded-space.fcx/1.4/Fri Nov 12 02:07:05 2004// /empty.fcl/1.2/Fri Nov 12 02:07:05 2004// /empty.fcx/1.2/Fri Nov 12 02:07:05 2004// /f95deleted.fc0/1.3/Fri Nov 12 02:07:05 2004// /f95deleted.fc1/1.3/Fri Nov 12 02:07:05 2004// /f95deleted.fc2/1.3/Fri Nov 12 02:07:05 2004// /f95deleted.fc3/1.3/Fri Nov 12 02:07:05 2004// /iffy.fcl/1.4/Fri Nov 12 02:07:06 2004// /iffy.fcx/1.4/Fri Nov 12 02:07:06 2004// /include.fcl/1.4/Fri Nov 12 02:07:06 2004// /include.fcx/1.4/Fri Nov 12 02:07:06 2004// /initializers.fcl/1.4/Fri Nov 12 02:07:06 2004// /initializers.fcx/1.4/Fri Nov 12 02:07:06 2004// /intrinstest.fc0/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc1/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc2/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc3/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc4/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc5/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc6/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc7/1.3/Fri Nov 12 02:07:06 2004// /intrinstest.fc8/1.3/Fri Nov 12 02:07:06 2004// /iokeywords.fc0/1.3/Fri Nov 12 02:07:06 2004// /iokeywords.fc1/1.3/Fri Nov 12 02:07:06 2004// /iokeywords.fc2/1.3/Fri Nov 12 02:07:06 2004// /iokeywords.fc3/1.3/Fri Nov 12 02:07:06 2004// /keyvars.fcl/1.4/Fri Nov 12 02:07:06 2004// /keyvars.fcx/1.4/Fri Nov 12 02:07:06 2004// /labeltest.fcl/1.3/Fri Nov 12 02:07:06 2004// /labeltest.fcx/1.3/Fri Nov 12 02:07:06 2004// /lotsalabels.fcl/1.3/Fri Nov 12 02:07:06 2004// /lotsalabels.fcx/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc1/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc2/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc3/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc4/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc5/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc6/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc7/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fc8/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcA/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcB/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcC/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcD/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcE/1.3/Fri Nov 12 02:07:06 2004// /mixed-equiv.fcF/1.3/Fri Nov 12 02:07:06 2004// /mkhtml.fcl/1.3/Fri Nov 12 02:07:06 2004// /model.fcl/1.4/Fri Nov 12 02:07:06 2004// /namelist.fcl/1.4/Fri Nov 12 02:07:06 2004// /namelist.fcx/1.4/Fri Nov 12 02:07:06 2004// /noblanks.fcl/1.3/Fri Nov 12 02:07:06 2004// /noblanks.fcx/1.3/Fri Nov 12 02:07:06 2004// /pointer_alloc.fcl/1.4/Fri Nov 12 02:07:06 2004// /primes.fcl/1.3/Fri Nov 12 02:07:06 2004// /primes.fcx/1.3/Fri Nov 12 02:07:06 2004// /pure-function.fcl/1.4/Fri Nov 12 02:07:06 2004// /pure-function.fcx/1.4/Fri Nov 12 02:07:06 2004// /quad.fcl/1.3/Fri Nov 12 02:07:06 2004// /quad.fcx/1.3/Fri Nov 12 02:07:06 2004// /rc.fcl/1.3/Fri Nov 12 02:07:06 2004// /relops.fcl/1.4/Fri Nov 12 02:07:06 2004// /relops.fcx/1.4/Fri Nov 12 02:07:06 2004// /sequence.fcl/1.3/Fri Nov 12 02:07:06 2004// /sequence.fcx/1.3/Fri Nov 12 02:07:06 2004// /strings.fcl/1.4/Fri Nov 12 02:07:06 2004// /strings.fcx/1.4/Fri Nov 12 02:07:06 2004// /substr.fcl/1.3/Fri Nov 12 02:07:06 2004// /substr.fcx/1.3/Fri Nov 12 02:07:06 2004// /t208f.fcl/1.3/Fri Nov 12 02:07:06 2004// /t208f.fcx/1.3/Fri Nov 12 02:07:06 2004// /unixincluded.fcl/1.4/Fri Nov 12 02:07:06 2004// /unixincluded.fcx/1.4/Fri Nov 12 02:07:06 2004// /usage.fc0/1.3/Fri Nov 12 02:07:06 2004// /usage.fc1/1.3/Fri Nov 12 02:07:06 2004// /usage.fc2/1.3/Fri Nov 12 02:07:06 2004// /usage.fc3/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc1/1.4/Fri Nov 12 02:07:06 2004// /wordsize.fc2/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc3/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc4/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc5/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc6/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc7/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fc8/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcA/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcB/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcC/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcD/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcE/1.3/Fri Nov 12 02:07:06 2004// /wordsize.fcF/1.3/Fri Nov 12 02:07:06 2004// /wildcard.fc4/1.3/Wed Nov 17 00:47:34 2004// /filter.fcl/1.5/Fri Dec 31 17:01:51 2004// /help.fcl/1.5/Sun Feb 6 22:42:59 2005// /help.fcx/1.5/Sun Feb 6 22:43:00 2005// /allkeywords.fcl/1.4/Mon Feb 7 00:26:02 2005// /allkeywords.fcx/1.4/Mon Feb 7 00:26:03 2005// D ftnchek-3.3.1/test/Okay/dcltest.dc00000644000031000002260000000063507621405725017506 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc10000644000031000002260000000000007621405725017471 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/dcltest.dc20000644000031000002260000000057307621405725017511 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc30000644000031000002260000000063507621405725017511 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc40000644000031000002260000000063507621405725017512 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C character*6 STRING1 parameter (STRING1 = 'abc123') character*(6) STRING2 parameter (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc50000644000031000002260000000063507621405725017513 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*6 string1 PARAMETER (string1 = 'abc123') CHARACTER*(6) string2 PARAMETER (string2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc60000644000031000002260000000063507621405725017514 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc70000644000031000002260000000063507621405725017515 0ustar moniotstaff00000000000000*====>Begin Module TEST1 File dcltest.f *---->Makedcls Options: All variables * * Parameter variables * CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') * *====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc80000644000031000002260000000063507621405725017516 0ustar moniotstaff00000000000000c====>Begin Module TEST1 File dcltest.f c---->Makedcls Options: All variables c c Parameter variables c CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') c c====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dc90000644000031000002260000000063507621405725017517 0ustar moniotstaff00000000000000C====>Begin Module TEST1 File dcltest.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') C C====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.dca0000644000031000002260000000061507621405725017565 0ustar moniotstaff00000000000000!====>Begin Module TEST1 File dcltest.f !---->Makedcls Options: All variables ! ! Parameter variables ! CHARACTER*6 STRING1 PARAMETER (STRING1 = 'abc123') CHARACTER*(6) STRING2 PARAMETER (STRING2 = 'xyz789') ! !====>End Module TEST1 File dcltest.f ftnchek-3.3.1/test/Okay/dcltest.htm00000644000031000002260000000141207621405725017702 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        STRING1            (STRING1 = 'abc123')
CHARACTER*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm20000644000031000002260000000141207621405725017704 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6  STRING1                  (STRING1 = 'abc123')
CHARACTER*(6)  STRING2                (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm30000644000031000002260000000141207621405725017705 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        STRING1            (STRING1 = 'abc123')
CHARACTER*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm40000644000031000002260000000141207621405725017706 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
character*6        STRING1            (STRING1 = 'abc123')
character*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm50000644000031000002260000000141207621405725017707 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        string1            (string1 = 'abc123')
CHARACTER*(6)      string2            (string2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm60000644000031000002260000000141207621405725017710 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        STRING1            (STRING1 = 'abc123')
CHARACTER*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htm90000644000031000002260000000141207621405725017713 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        STRING1            (STRING1 = 'abc123')
CHARACTER*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/dcltest.htma0000644000031000002260000000141207621405725017763 0ustar moniotstaff00000000000000 Source dcltest.f

PROGRAM TEST1 ( )

Source file:dcltest.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
CHARACTER*6        STRING1            (STRING1 = 'abc123')
CHARACTER*(6)      STRING2            (STRING2 = 'xyz789')

ftnchek-3.3.1/test/Okay/diffc.inc0000644000031000002260000000013307621405725017213 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C ftnchek-3.3.1/test/Okay/diffn.inc0000644000031000002260000000013307621405725017226 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C ftnchek-3.3.1/test/Okay/dims.dc00000644000031000002260000000174407621405725017002 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C EXTERNAL STR C CHARACTER CHAR CHARACTER STR C INTEGER ICHAR, LEN C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C Argument variables C INTEGER D(*,*) C C Local variables C CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 C INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) C C Common variables C CHARACTER*17 XX(101) C COMMON / XX / XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc10000644000031000002260000000066507621405725017004 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc20000644000031000002260000000145207621405725017000 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C EXTERNAL STR C CHARACTER CHAR CHARACTER STR C INTEGER ICHAR, LEN C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C Argument variables C INTEGER D(*,*) C C Local variables C CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 C INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) C C Common variables C CHARACTER*17 XX(101) C COMMON /XX/ XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc30000644000031000002260000000174407621405725017005 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C EXTERNAL STR C CHARACTER CHAR CHARACTER STR C INTEGER ICHAR, LEN C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C Argument variables C INTEGER D(*,*) C C Local variables C CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 C INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) C C Common variables C CHARACTER*17 XX(101) C COMMON / XX / XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc40000644000031000002260000000174407621405725017006 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C external STR C character CHAR character STR C integer ICHAR, LEN C C Parameter variables C integer N parameter (N = 1) integer M parameter (M = 2) integer K parameter (K = 3) C C Argument variables C integer D(*,*) C C Local variables C character*10 C(LEN('won''t')) character*(N) STR2(K*M) character*(*) STR3 character*(M+N*K) STR4 C integer A(1:M*N,-N+2), B(N*(M+K)*2,K+1) C C Common variables C character*17 XX(101) C common / XX / XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc50000644000031000002260000000174407621405725017007 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C EXTERNAL str C CHARACTER char CHARACTER str C INTEGER ichar, len C C Parameter variables C INTEGER n PARAMETER (n = 1) INTEGER m PARAMETER (m = 2) INTEGER k PARAMETER (k = 3) C C Argument variables C INTEGER d(*,*) C C Local variables C CHARACTER*10 c(len('won''t')) CHARACTER*(n) str2(k*m) CHARACTER*(*) str3 CHARACTER*(m+n*k) str4 C INTEGER a(1:m*n,-n+2), b(n*(m+k)*2,k+1) C C Common variables C CHARACTER*17 xx(101) C COMMON / xx / xx C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc60000644000031000002260000000174407621405725017010 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL STR C CHARACTER CHAR CHARACTER STR C INTEGER ICHAR, LEN C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C Argument variables C INTEGER D(*,*) C C Local variables C CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 C INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) C C Common variables C CHARACTER*17 XX(101) C COMMON / XX / XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc70000644000031000002260000000174407621405725017011 0ustar moniotstaff00000000000000*====>Begin Module FOO File dims.f *---->Makedcls Options: All variables * * External functions * EXTERNAL STR * CHARACTER CHAR CHARACTER STR * INTEGER ICHAR, LEN * * Parameter variables * INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) * * Argument variables * INTEGER D(*,*) * * Local variables * CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 * INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) * * Common variables * CHARACTER*17 XX(101) * COMMON / XX / XX * *====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc80000644000031000002260000000174407621405725017012 0ustar moniotstaff00000000000000c====>Begin Module FOO File dims.f c---->Makedcls Options: All variables c c External functions c EXTERNAL STR c CHARACTER CHAR CHARACTER STR c INTEGER ICHAR, LEN c c Parameter variables c INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) c c Argument variables c INTEGER D(*,*) c c Local variables c CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 c INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) c c Common variables c CHARACTER*17 XX(101) c COMMON / XX / XX c c====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dc90000644000031000002260000000165207621405725017011 0ustar moniotstaff00000000000000C====>Begin Module FOO File dims.f C---->Makedcls Options: All variables C C External functions C EXTERNAL STR C CHARACTER CHAR CHARACTER STR C INTEGER ICHAR, LEN C C Parameter variables C INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) C C Argument variables C INTEGER D C C Local variables C CHARACTER*10 C CHARACTER*(N) STR2 CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 C INTEGER A, B C C Common variables C CHARACTER*17 XX C COMMON / XX / XX C C====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.dca0000644000031000002260000000163407621405725017061 0ustar moniotstaff00000000000000!====>Begin Module FOO File dims.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL STR ! CHARACTER CHAR CHARACTER STR ! INTEGER ICHAR, LEN ! ! Parameter variables ! INTEGER N PARAMETER (N = 1) INTEGER M PARAMETER (M = 2) INTEGER K PARAMETER (K = 3) ! ! Argument variables ! INTEGER D(*,*) ! ! Local variables ! CHARACTER*10 C(LEN('won''t')) CHARACTER*(N) STR2(K*M) CHARACTER*(*) STR3 CHARACTER*(M+N*K) STR4 ! INTEGER A(1:M*N,-N+2), B(N*(M+K)*2,K+1) ! ! Common variables ! CHARACTER*17 XX(101) ! COMMON / XX / XX ! !====>End Module FOO File dims.f ftnchek-3.3.1/test/Okay/dims.htm00000644000031000002260000000234207621405725017177 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            D(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER          CHAR
INTEGER            ICHAR,      LEN
External Functions and Subroutines Called
CHARACTER          STR
Parameter Variables Used
INTEGER            N                  (N = 1)
INTEGER            M                  (M = 2)
INTEGER            K                  (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +C(LEN('won''t'))
INTEGER           +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/dims.htm20000644000031000002260000000225307621405725017202 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER  D(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER  CHAR
INTEGER  ICHAR,  LEN
External Functions and Subroutines Called
CHARACTER  STR
Parameter Variables Used
INTEGER  N                            (N = 1)
INTEGER  M                            (M = 2)
INTEGER  K                            (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10 +C(LEN('won''t'))
INTEGER +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/dims.htm30000644000031000002260000000234207621405725017202 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            D(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER          CHAR
INTEGER            ICHAR,      LEN
External Functions and Subroutines Called
CHARACTER          STR
Parameter Variables Used
INTEGER            N                  (N = 1)
INTEGER            M                  (M = 2)
INTEGER            K                  (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +C(LEN('won''t'))
INTEGER           +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/dims.htm40000644000031000002260000000234207621405725017203 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
integer            D(*,*)
Source file:dims.f
Intrinsic Functions Called
character          CHAR
integer            ICHAR,      LEN
External Functions and Subroutines Called
character          STR
Parameter Variables Used
integer            N                  (N = 1)
integer            M                  (M = 2)
integer            K                  (K = 3)
Local Variables (+ indicates altered content)
character*10      +C(LEN('won''t'))
integer           +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/dims.htm50000644000031000002260000000234207621405725017204 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            d(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER          char
INTEGER            ichar,      len
External Functions and Subroutines Called
CHARACTER          str
Parameter Variables Used
INTEGER            n                  (n = 1)
INTEGER            m                  (m = 2)
INTEGER            k                  (k = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +c(len('won''t'))
INTEGER           +a(1:m*n,-n+2)

ftnchek-3.3.1/test/Okay/dims.htm60000644000031000002260000000234207621405725017205 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            D(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER          CHAR
INTEGER            ICHAR,      LEN
External Functions and Subroutines Called
CHARACTER          STR
Parameter Variables Used
INTEGER            N                  (N = 1)
INTEGER            M                  (M = 2)
INTEGER            K                  (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +C(LEN('won''t'))
INTEGER           +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/dims.htm90000644000031000002260000000230207621405725017204 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            D
Source file:dims.f
Intrinsic Functions Called
CHARACTER          CHAR
INTEGER            ICHAR,      LEN
External Functions and Subroutines Called
CHARACTER          STR
Parameter Variables Used
INTEGER            N                  (N = 1)
INTEGER            M                  (M = 2)
INTEGER            K                  (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +C
INTEGER           +A

ftnchek-3.3.1/test/Okay/dims.htma0000644000031000002260000000234207621405725017260 0ustar moniotstaff00000000000000 Source dims.f

SUBROUTINE FOO ( D )

Argument Definitions (+ indicates altered content)
INTEGER            D(*,*)
Source file:dims.f
Intrinsic Functions Called
CHARACTER          CHAR
INTEGER            ICHAR,      LEN
External Functions and Subroutines Called
CHARACTER          STR
Parameter Variables Used
INTEGER            N                  (N = 1)
INTEGER            M                  (M = 2)
INTEGER            K                  (K = 3)
Local Variables (+ indicates altered content)
CHARACTER*10      +C(LEN('won''t'))
INTEGER           +A(1:M*N,-N+2)

ftnchek-3.3.1/test/Okay/efnum.inc0000644000031000002260000000013507621405725017254 0ustar moniotstaff00000000000000C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C ftnchek-3.3.1/test/Okay/fft.inc0000644000031000002260000000022507621405725016721 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C ftnchek-3.3.1/test/Okay/fmarkers.inc0000644000031000002260000000014107621405725017751 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C ftnchek-3.3.1/test/Okay/forceb.inc0000644000031000002260000000015207621405725017401 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C ftnchek-3.3.1/test/Okay/force.inc0000644000031000002260000000015007621405725017235 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C ftnchek-3.3.1/test/Okay/grid.inc0000644000031000002260000000017107621405725017067 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON / GRID / X, Y C ftnchek-3.3.1/test/Okay/linkb.inc0000644000031000002260000000013707621405725017243 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C ftnchek-3.3.1/test/Okay/linkf.inc0000644000031000002260000000014107621405725017242 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C ftnchek-3.3.1/test/Okay/link.inc0000644000031000002260000000027207621405725017101 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C ftnchek-3.3.1/test/Okay/model.dc00000644000031000002260000000157107621405725017144 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc10000644000031000002260000000111207621405725017134 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: Undeclared variables ! ! Local variables ! INTEGER I ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: Undeclared variables ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc20000644000031000002260000000135607621405725017147 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc30000644000031000002260000000157107621405725017147 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc40000644000031000002260000000157107621405725017150 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! integer COUNT, SCORE(5) ! ! Local variables ! integer I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! external COMPAV ! real COMPAV ! ! Parameter variables ! integer MAXNOS parameter (MAXNOS = 5) ! ! Local variables ! integer COUNT, I ! real AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc50000644000031000002260000000157107621405725017151 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER count, score(5) ! ! Local variables ! INTEGER i, j, sum ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL compav ! REAL compav ! ! Parameter variables ! INTEGER maxnos PARAMETER (maxnos = 5) ! ! Local variables ! INTEGER count, i ! REAL avg, nums(maxnos) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc60000644000031000002260000000157107621405725017152 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables except SFTRAN3 internals ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables except SFTRAN3 internals ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc70000644000031000002260000000157107621405725017153 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc80000644000031000002260000000157107621405725017154 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dc90000644000031000002260000000155607621405725017160 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.dca0000644000031000002260000000157107621405725017225 0ustar moniotstaff00000000000000!====>Begin Module COMPAV File model.f90 !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER COUNT, SCORE(5) ! ! Local variables ! INTEGER I, J, SUM ! !====>End Module COMPAV File model.f90 !====>Begin Module AVENUM File model.f90 !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL COMPAV ! REAL COMPAV ! ! Parameter variables ! INTEGER MAXNOS PARAMETER (MAXNOS = 5) ! ! Local variables ! INTEGER COUNT, I ! REAL AVG, NUMS(MAXNOS) ! !====>End Module AVENUM File model.f90 ftnchek-3.3.1/test/Okay/model.htm00000644000031000002260000000455407621405725017352 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            COUNT,      SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               COMPAV
Parameter Variables Used
INTEGER            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER           +COUNT,     +I
REAL              +AVG,       +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/model.htm20000644000031000002260000000443607621405725017353 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER  COUNT,  SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER +I, +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL  COMPAV
Parameter Variables Used
INTEGER  MAXNOS                       (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER +COUNT, +I
REAL +AVG, +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/model.htm30000644000031000002260000000455407621405725017355 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            COUNT,      SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               COMPAV
Parameter Variables Used
INTEGER            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER           +COUNT,     +I
REAL              +AVG,       +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/model.htm40000644000031000002260000000455407621405725017356 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
integer            COUNT,      SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
integer           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
real               COMPAV
Parameter Variables Used
integer            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
integer           +COUNT,     +I
real              +AVG,       +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/model.htm50000644000031000002260000000455407621405725017357 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            count,      score(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +i,         +sum

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               compav
Parameter Variables Used
INTEGER            maxnos             (maxnos = 5)
Local Variables (+ indicates altered content)
INTEGER           +count,     +i
REAL              +avg,       +nums(maxnos)

ftnchek-3.3.1/test/Okay/model.htm60000644000031000002260000000455407621405725017360 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            COUNT,      SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               COMPAV
Parameter Variables Used
INTEGER            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER           +COUNT,     +I
REAL              +AVG,       +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/model.htm90000644000031000002260000000454107621405725017357 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            COUNT,      SCORE
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               COMPAV
Parameter Variables Used
INTEGER            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER           +COUNT,     +I
REAL              +AVG,       +NUMS

ftnchek-3.3.1/test/Okay/model.htma0000644000031000002260000000455407621405725017433 0ustar moniotstaff00000000000000 Source model.f90

REAL FUNCTION COMPAV ( SCORE, COUNT )

Argument Definitions (+ indicates altered content)
INTEGER            COUNT,      SCORE(5)
Description
AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 
DATE:    MAY 8, 1989 
Variables: 
        SCORE -> an array of test scores 
        SUM ->   sum of the test scores 
        COUNT -> counter of scores read in 
        I ->     loop counter
Source file:model.f90
Local Variables (+ indicates altered content)
INTEGER           +I,         +SUM

PROGRAM AVENUM ( )

Description
                MAIN PROGRAM 
 
AUTHOR:   LOIS BIGBIE 
DATE:     MAY 15, 1990 
 
Variables: 
        MAXNOS -> maximum number of input values 
        NUMS    -> an array of numbers 
        COUNT   -> exact number of input values 
        AVG     -> average returned by COMPAV 
        I       -> loop counter
Source file:model.f90
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               5          SEQ  FMTD          R   

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
External Functions and Subroutines Called
REAL               COMPAV
Parameter Variables Used
INTEGER            MAXNOS             (MAXNOS = 5)
Local Variables (+ indicates altered content)
INTEGER           +COUNT,     +I
REAL              +AVG,       +NUMS(MAXNOS)

ftnchek-3.3.1/test/Okay/mth.inc0000644000031000002260000000017307621405725016734 0ustar moniotstaff00000000000000C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C ftnchek-3.3.1/test/Okay/namelist.dc00000644000031000002260000001700707621405725017661 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1 REAL Y, Y2Z3, Z C C Namelists C NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 C C Common variables C REAL B, E, F C COMMON / / B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER BIGINT, BLANK, CARD(500), CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N(06), NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU(06) INTEGER NUJ, NUMINT(06), NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL INTEGER UTITLE(500), VTITLE(500), XTITLE(500) INTEGER YTITLE(500), ZTITLE(500) C LOGICAL AUTOX, AUTOY, AUTOZ LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06) LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE LOGICAL FCLIP, IN, INTGRT(06), LOGX LOGICAL LOGY, LOGZ, LSTXYZ, PARLEL LOGICAL PLOPEN, PLOTID, RESET, RIGHT LOGICAL UAXIS, UVAXES, VARPEN, VAXIS LOGICAL WCLIP, XAXIS, XFALLS, YAXIS LOGICAL YFALLS, ZAXIS, ZFALLS C REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH(06) REAL MARGIN(4), MMTOCM, MSCALE, NINETY REAL ONE, PAGESQ, PAGEX, PAGEY REAL PENDIA, PERDST, PICTHX, PICTHY REAL PICTX, PICTY, PPXYZ(3), R1MACH REAL RPXYZ(3), SIGMA(06), SIGN, SWAP REAL T(4,4), TICDEF, TICKU, TICKV REAL TICKX, TICKY, TICKZ REAL TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT REAL TTLHEI, TTLLEN, TTOTAL(4,4), TWO REAL U1, U2, UDIST, UMAX REAL UMAXP, UMAXRC, UMIN, UMINP REAL UMINRC, UNITS, UNSPEC, UNTOCM REAL UNTOIN, UPXYZ(3), UTRE3, V1 REAL V2, VDIST, VIEWD, VMAX REAL VMAXP, VMAXRC, VMIN, VMINP REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN REAL VPVMAX, VPVMIN, VSCALE, WMAX REAL WMAXP, WMIN, WMINP REAL WORK(1600,5), X(1600,06), X0 REAL XDIST, XFACT(06), XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ REAL XMINP, XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY REAL Z(1600,06), Z0, ZDIST, ZERO REAL ZFACT(06), ZINT, ZMAX, ZMAXJ REAL ZMAXP, ZMIN, ZMINJ, ZMINP REAL ZORG, ZSHIFT(06), ZZ C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc10000644000031000002260000000077207621405725017663 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: Undeclared variables C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1 REAL Y, Y2Z3, Z C C Common variables C REAL B, E, F C C====>End Module %MAIN File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc20000644000031000002260000000756507621405725017673 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1, Y, Y2Z3, Z C C Namelists C NAMELIST /N1/ A, B, C NAMELIST /N2/ X, Y, Z NAMELIST /N3/ L, M NAMELIST /N4/ X1, Y2Z3 NAMELIST /N5/ L6 C C Common variables C REAL B, E, F C COMMON // B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER BIGINT, BLANK, CARD(500), CURCOL, CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1, IARG2, IDFONT, IERVAL(1), II, J INTEGER JX, JY, JZ, K, KX, KXYZ, KY, KZ, LSTYLE(06), MARK(06) INTEGER MAX0, MAXCRD, MAXCRV, MAXVAL, MIN0, MODEU, MODEV, MODEX INTEGER MODEY, MODEZ, N(06), NC, NCELLX, NCELLY, NCINIT, NCISAV INTEGER NCSTEP, NCTERM, NCU, NCV, NCX, NCY, NCZ, NIN, NINT, NJ INTEGER NOUT, NRINIT, NRISAV, NRSTEP, NRTERM, NSUM, NU(06), NUJ INTEGER NUMINT(06), NUSUB, NVSUB, NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL, UTITLE(500), VTITLE(500) INTEGER XTITLE(500), YTITLE(500), ZTITLE(500) C LOGICAL AUTOX, AUTOY, AUTOZ, AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06), CVTY(06), CVTZ(06), DERIV(06) LOGICAL EOFILE, FCLIP, IN, INTGRT(06), LOGX, LOGY, LOGZ, LSTXYZ LOGICAL PARLEL, PLOPEN, PLOTID, RESET, RIGHT, UAXIS, UVAXES LOGICAL VARPEN, VAXIS, WCLIP, XAXIS, XFALLS, YAXIS, YFALLS, ZAXIS LOGICAL ZFALLS C REAL ABS, ALOG10, AMAX1, AMIN1, ARCLEN, ARG, ARG1, ARG2, ARX, ARY REAL CMFACT, CMTOIN, CMTOUN, CPX, CPY, DEFHT, DEFMAR, DT, DUSUB REAL DVSUB, DXSUB, DYSUB, DZSUB, FLOAT, FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF, HTFACT, HX, HY, INFITY, INTOCM, INTOUN REAL LWIDTH(06), MARGIN(4), MMTOCM, MSCALE, NINETY, ONE, PAGESQ REAL PAGEX, PAGEY, PENDIA, PERDST, PICTHX, PICTHY, PICTX, PICTY REAL PPXYZ(3), R1MACH, RPXYZ(3), SIGMA(06), SIGN, SWAP, T(4,4) REAL TICDEF, TICKU, TICKV, TICKX, TICKY, TICKZ, TIMAGE(4,4) REAL TMODEL(4,4), TOPMAR, TT, TTLHEI, TTLLEN, TTOTAL(4,4), TWO, U1 REAL U2, UDIST, UMAX, UMAXP, UMAXRC, UMIN, UMINP, UMINRC, UNITS REAL UNSPEC, UNTOCM, UNTOIN, UPXYZ(3), UTRE3, V1, V2, VDIST, VIEWD REAL VMAX, VMAXP, VMAXRC, VMIN, VMINP, VMINRC, VNXYZ(3), VPUMAX REAL VPUMIN, VPVMAX, VPVMIN, VSCALE, WMAX, WMAXP, WMIN, WMINP REAL WORK(1600,5), X(1600,06), X0, XDIST, XFACT(06), XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ, XMINP, XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST, YFACT(06), YINT, YMAX, YMAXJ, YMAXP REAL YMIN, YMINJ, YMINP, YORG, YSHIFT(06), YY, Z(1600,06), Z0 REAL ZDIST, ZERO, ZFACT(06), ZINT, ZMAX, ZMAXJ, ZMAXP, ZMIN, ZMINJ REAL ZMINP, ZORG, ZSHIFT(06), ZZ C C Namelists C NAMELIST /DATA/ AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, DERIV x, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX, KY, KZ, LOGX, LOGY, LOGZ, LSTXYZ x, LSTYLE, LWIDTH, MARGIN, MARK, MODEU, MODEV, MODEX, MODEY, MODEZ x, MSCALE, N, NCINIT, NCSTEP, NCTERM, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB, NYSUB, NZSUB, PARLEL, PEN, PENDIA x, PERDST, PLOTID, PPXYZ, RESET, RIGHT, RPXYZ, SIGMA, TICKU, TICKV x, TICKX, TICKY, TICKZ, TIMAGE, TMODEL, UAXIS, UMAX, UMIN, UPXYZ x, UVAXES, VAXIS, VIEWD, VMAX, VMIN, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT, XFALLS, XMAX, XMIN, XSHIFT, Y, YAXIS x, YFACT, YFALLS, YMAX, YMIN, YSHIFT, Z, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc30000644000031000002260000001700707621405725017664 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1 x, Y, Y2Z3, Z C C Namelists C NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 C C Common variables C REAL B, E, F C COMMON / / B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER BIGINT, BLANK, CARD(500), CURCOL x, CURROW, FSTYLE, GREEK, I x, I1MACH, IABS, IARG, IARG1 x, IARG2, IDFONT, IERVAL(1), II x, J, JX, JY, JZ x, K, KX, KXYZ, KY x, KZ, LSTYLE(06), MARK(06), MAX0 x, MAXCRD, MAXCRV, MAXVAL, MIN0 x, MODEU, MODEV, MODEX, MODEY x, MODEZ, N(06), NC, NCELLX x, NCELLY, NCINIT, NCISAV, NCSTEP x, NCTERM, NCU, NCV, NCX x, NCY, NCZ, NIN, NINT x, NJ, NOUT, NRINIT, NRISAV x, NRSTEP, NRTERM, NSUM, NU(06) x, NUJ, NUMINT(06), NUSUB, NVSUB x, NXSUB, NYSUB, NZSUB, PEN(06) x, QUOTE, ROMAN, TITLE(500), UTISL x, UTITLE(500), VTITLE(500), XTITLE(500) x, YTITLE(500), ZTITLE(500) C LOGICAL AUTOX, AUTOY, AUTOZ x, AVRAGE(06), AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, CVTX(06) x, CVTY(06), CVTZ(06), DERIV(06), EOFILE x, FCLIP, IN, INTGRT(06), LOGX x, LOGY, LOGZ, LSTXYZ, PARLEL x, PLOPEN, PLOTID, RESET, RIGHT x, UAXIS, UVAXES, VARPEN, VAXIS x, WCLIP, XAXIS, XFALLS, YAXIS x, YFALLS, ZAXIS, ZFALLS C REAL ABS, ALOG10, AMAX1, AMIN1 x, ARCLEN, ARG, ARG1, ARG2 x, ARX, ARY, CMFACT, CMTOIN x, CMTOUN, CPX, CPY, DEFHT x, DEFMAR, DT, DUSUB, DVSUB x, DXSUB, DYSUB, DZSUB, FLOAT x, FRAC, FSCALE, GSCALE, HALF x, HH, HSCALE, HT, HTDEF x, HTFACT, HX, HY, INFITY x, INTOCM, INTOUN, LWIDTH(06) x, MARGIN(4), MMTOCM, MSCALE, NINETY x, ONE, PAGESQ, PAGEX, PAGEY x, PENDIA, PERDST, PICTHX, PICTHY x, PICTX, PICTY, PPXYZ(3), R1MACH x, RPXYZ(3), SIGMA(06), SIGN, SWAP x, T(4,4), TICDEF, TICKU, TICKV x, TICKX, TICKY, TICKZ x, TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT x, TTLHEI, TTLLEN, TTOTAL(4,4), TWO x, U1, U2, UDIST, UMAX REAL UMAXP, UMAXRC, UMIN, UMINP x, UMINRC, UNITS, UNSPEC, UNTOCM x, UNTOIN, UPXYZ(3), UTRE3, V1 x, V2, VDIST, VIEWD, VMAX x, VMAXP, VMAXRC, VMIN, VMINP x, VMINRC, VNXYZ(3), VPUMAX, VPUMIN x, VPVMAX, VPVMIN, VSCALE, WMAX x, WMAXP, WMIN, WMINP x, WORK(1600,5), X(1600,06), X0 x, XDIST, XFACT(06), XINT, XMAX x, XMAXJ, XMAXP, XMIN, XMINJ x, XMINP, XORG, XSHIFT(06), XX x, Y(1600,06), Y0, YDIST x, YFACT(06), YINT, YMAX, YMAXJ x, YMAXP, YMIN, YMINJ, YMINP x, YORG, YSHIFT(06), YY x, Z(1600,06), Z0, ZDIST, ZERO x, ZFACT(06), ZINT, ZMAX, ZMAXJ x, ZMAXP, ZMIN, ZMINJ, ZMINP x, ZORG, ZSHIFT(06), ZZ C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc40000644000031000002260000001700707621405725017665 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C integer L, L6, M C real A, C, X, X1 real Y, Y2Z3, Z C C Namelists C namelist / N1 / A, B, C namelist / N2 / X, Y, Z namelist / N3 / L, M namelist / N4 / X1, Y2Z3 namelist / N5 / L6 C C Common variables C real B, E, F C common / / B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C integer BIGINT, BLANK, CARD(500), CURCOL integer CURROW, FSTYLE, GREEK, I integer I1MACH, IABS, IARG, IARG1 integer IARG2, IDFONT, IERVAL(1), II integer J, JX, JY, JZ integer K, KX, KXYZ, KY integer KZ, LSTYLE(06), MARK(06), MAX0 integer MAXCRD, MAXCRV, MAXVAL, MIN0 integer MODEU, MODEV, MODEX, MODEY integer MODEZ, N(06), NC, NCELLX integer NCELLY, NCINIT, NCISAV, NCSTEP integer NCTERM, NCU, NCV, NCX integer NCY, NCZ, NIN, NINT integer NJ, NOUT, NRINIT, NRISAV integer NRSTEP, NRTERM, NSUM, NU(06) integer NUJ, NUMINT(06), NUSUB, NVSUB integer NXSUB, NYSUB, NZSUB, PEN(06) integer QUOTE, ROMAN, TITLE(500), UTISL integer UTITLE(500), VTITLE(500), XTITLE(500) integer YTITLE(500), ZTITLE(500) C logical AUTOX, AUTOY, AUTOZ logical AVRAGE(06), AXES3D, BCLIP, BOX logical BYROWS, CHKDUP, CVTX(06) logical CVTY(06), CVTZ(06), DERIV(06), EOFILE logical FCLIP, IN, INTGRT(06), LOGX logical LOGY, LOGZ, LSTXYZ, PARLEL logical PLOPEN, PLOTID, RESET, RIGHT logical UAXIS, UVAXES, VARPEN, VAXIS logical WCLIP, XAXIS, XFALLS, YAXIS logical YFALLS, ZAXIS, ZFALLS C real ABS, ALOG10, AMAX1, AMIN1 real ARCLEN, ARG, ARG1, ARG2 real ARX, ARY, CMFACT, CMTOIN real CMTOUN, CPX, CPY, DEFHT real DEFMAR, DT, DUSUB, DVSUB real DXSUB, DYSUB, DZSUB, FLOAT real FRAC, FSCALE, GSCALE, HALF real HH, HSCALE, HT, HTDEF real HTFACT, HX, HY, INFITY real INTOCM, INTOUN, LWIDTH(06) real MARGIN(4), MMTOCM, MSCALE, NINETY real ONE, PAGESQ, PAGEX, PAGEY real PENDIA, PERDST, PICTHX, PICTHY real PICTX, PICTY, PPXYZ(3), R1MACH real RPXYZ(3), SIGMA(06), SIGN, SWAP real T(4,4), TICDEF, TICKU, TICKV real TICKX, TICKY, TICKZ real TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT real TTLHEI, TTLLEN, TTOTAL(4,4), TWO real U1, U2, UDIST, UMAX real UMAXP, UMAXRC, UMIN, UMINP real UMINRC, UNITS, UNSPEC, UNTOCM real UNTOIN, UPXYZ(3), UTRE3, V1 real V2, VDIST, VIEWD, VMAX real VMAXP, VMAXRC, VMIN, VMINP real VMINRC, VNXYZ(3), VPUMAX, VPUMIN real VPVMAX, VPVMIN, VSCALE, WMAX real WMAXP, WMIN, WMINP real WORK(1600,5), X(1600,06), X0 real XDIST, XFACT(06), XINT, XMAX real XMAXJ, XMAXP, XMIN, XMINJ real XMINP, XORG, XSHIFT(06), XX real Y(1600,06), Y0, YDIST real YFACT(06), YINT, YMAX, YMAXJ real YMAXP, YMIN, YMINJ, YMINP real YORG, YSHIFT(06), YY real Z(1600,06), Z0, ZDIST, ZERO real ZFACT(06), ZINT, ZMAX, ZMAXJ real ZMAXP, ZMIN, ZMINJ, ZMINP real ZORG, ZSHIFT(06), ZZ C C Namelists C namelist / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc50000644000031000002260000001700707621405725017666 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER l, l6, m C REAL a, c, x, x1 REAL y, y2z3, z C C Namelists C NAMELIST / n1 / a, b, c NAMELIST / n2 / x, y, z NAMELIST / n3 / l, m NAMELIST / n4 / x1, y2z3 NAMELIST / n5 / l6 C C Common variables C REAL b, e, f C COMMON / / b, e, f C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER bigint, blank, card(500), curcol INTEGER currow, fstyle, greek, i INTEGER i1mach, iabs, iarg, iarg1 INTEGER iarg2, idfont, ierval(1), ii INTEGER j, jx, jy, jz INTEGER k, kx, kxyz, ky INTEGER kz, lstyle(06), mark(06), max0 INTEGER maxcrd, maxcrv, maxval, min0 INTEGER modeu, modev, modex, modey INTEGER modez, n(06), nc, ncellx INTEGER ncelly, ncinit, ncisav, ncstep INTEGER ncterm, ncu, ncv, ncx INTEGER ncy, ncz, nin, nint INTEGER nj, nout, nrinit, nrisav INTEGER nrstep, nrterm, nsum, nu(06) INTEGER nuj, numint(06), nusub, nvsub INTEGER nxsub, nysub, nzsub, pen(06) INTEGER quote, roman, title(500), utisl INTEGER utitle(500), vtitle(500), xtitle(500) INTEGER ytitle(500), ztitle(500) C LOGICAL autox, autoy, autoz LOGICAL avrage(06), axes3d, bclip, box LOGICAL byrows, chkdup, cvtx(06) LOGICAL cvty(06), cvtz(06), deriv(06), eofile LOGICAL fclip, in, intgrt(06), logx LOGICAL logy, logz, lstxyz, parlel LOGICAL plopen, plotid, reset, right LOGICAL uaxis, uvaxes, varpen, vaxis LOGICAL wclip, xaxis, xfalls, yaxis LOGICAL yfalls, zaxis, zfalls C REAL abs, alog10, amax1, amin1 REAL arclen, arg, arg1, arg2 REAL arx, ary, cmfact, cmtoin REAL cmtoun, cpx, cpy, defht REAL defmar, dt, dusub, dvsub REAL dxsub, dysub, dzsub, float REAL frac, fscale, gscale, half REAL hh, hscale, ht, htdef REAL htfact, hx, hy, infity REAL intocm, intoun, lwidth(06) REAL margin(4), mmtocm, mscale, ninety REAL one, pagesq, pagex, pagey REAL pendia, perdst, picthx, picthy REAL pictx, picty, ppxyz(3), r1mach REAL rpxyz(3), sigma(06), sign, swap REAL t(4,4), ticdef, ticku, tickv REAL tickx, ticky, tickz REAL timage(4,4), tmodel(4,4), topmar, tt REAL ttlhei, ttllen, ttotal(4,4), two REAL u1, u2, udist, umax REAL umaxp, umaxrc, umin, uminp REAL uminrc, units, unspec, untocm REAL untoin, upxyz(3), utre3, v1 REAL v2, vdist, viewd, vmax REAL vmaxp, vmaxrc, vmin, vminp REAL vminrc, vnxyz(3), vpumax, vpumin REAL vpvmax, vpvmin, vscale, wmax REAL wmaxp, wmin, wminp REAL work(1600,5), x(1600,06), x0 REAL xdist, xfact(06), xint, xmax REAL xmaxj, xmaxp, xmin, xminj REAL xminp, xorg, xshift(06), xx REAL y(1600,06), y0, ydist REAL yfact(06), yint, ymax, ymaxj REAL ymaxp, ymin, yminj, yminp REAL yorg, yshift(06), yy REAL z(1600,06), z0, zdist, zero REAL zfact(06), zint, zmax, zmaxj REAL zmaxp, zmin, zminj, zminp REAL zorg, zshift(06), zz C C Namelists C NAMELIST / data / avrage, axes3d, bclip, box x, byrows, chkdup, deriv, dusub x, dvsub, dxsub, dysub, dzsub x, fclip, fscale, fstyle, gscale x, hscale, idfont, intgrt, kx x, ky, kz, logx, logy x, logz, lstxyz, lstyle, lwidth x, margin, mark, modeu, modev x, modex, modey, modez, mscale x, n, ncinit, ncstep, ncterm x, nrinit, nrstep, nrterm, nu x, numint, nusub, nvsub, nxsub x, nysub, nzsub, parlel, pen x, pendia, perdst, plotid, ppxyz x, reset, right, rpxyz, sigma x, ticku, tickv, tickx, ticky x, tickz, timage, tmodel, uaxis x, umax, umin, upxyz, uvaxes x, vaxis, viewd, vmax, vmin x, vnxyz, vscale, wclip, wmax x, wmin, x, xaxis, xfact x, xfalls, xmax, xmin, xshift x, y, yaxis, yfact, yfalls x, ymax, ymin, yshift, z x, zaxis, zfact, zfalls, zmax x, zmin, zshift C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc60000644000031000002260000001700707621405725017667 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1 REAL Y, Y2Z3, Z C C Namelists C NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 C C Common variables C REAL B, E, F C COMMON / / B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C INTEGER BIGINT, BLANK, CARD(500), CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N(06), NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU(06) INTEGER NUJ, NUMINT(06), NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL INTEGER UTITLE(500), VTITLE(500), XTITLE(500) INTEGER YTITLE(500), ZTITLE(500) C LOGICAL AUTOX, AUTOY, AUTOZ LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06) LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE LOGICAL FCLIP, IN, INTGRT(06), LOGX LOGICAL LOGY, LOGZ, LSTXYZ, PARLEL LOGICAL PLOPEN, PLOTID, RESET, RIGHT LOGICAL UAXIS, UVAXES, VARPEN, VAXIS LOGICAL WCLIP, XAXIS, XFALLS, YAXIS LOGICAL YFALLS, ZAXIS, ZFALLS C REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH(06) REAL MARGIN(4), MMTOCM, MSCALE, NINETY REAL ONE, PAGESQ, PAGEX, PAGEY REAL PENDIA, PERDST, PICTHX, PICTHY REAL PICTX, PICTY, PPXYZ(3), R1MACH REAL RPXYZ(3), SIGMA(06), SIGN, SWAP REAL T(4,4), TICDEF, TICKU, TICKV REAL TICKX, TICKY, TICKZ REAL TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT REAL TTLHEI, TTLLEN, TTOTAL(4,4), TWO REAL U1, U2, UDIST, UMAX REAL UMAXP, UMAXRC, UMIN, UMINP REAL UMINRC, UNITS, UNSPEC, UNTOCM REAL UNTOIN, UPXYZ(3), UTRE3, V1 REAL V2, VDIST, VIEWD, VMAX REAL VMAXP, VMAXRC, VMIN, VMINP REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN REAL VPVMAX, VPVMIN, VSCALE, WMAX REAL WMAXP, WMIN, WMINP REAL WORK(1600,5), X(1600,06), X0 REAL XDIST, XFACT(06), XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ REAL XMINP, XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY REAL Z(1600,06), Z0, ZDIST, ZERO REAL ZFACT(06), ZINT, ZMAX, ZMAXJ REAL ZMAXP, ZMIN, ZMINJ, ZMINP REAL ZORG, ZSHIFT(06), ZZ C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc70000644000031000002260000001700707621405725017670 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File namelist.f *---->Makedcls Options: All variables * * Local variables * INTEGER L, L6, M * REAL A, C, X, X1 REAL Y, Y2Z3, Z * * Namelists * NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 * * Common variables * REAL B, E, F * COMMON / / B, E, F * *====>End Module %MAIN File namelist.f *====>Begin Module GRFGG3 File namelist.f *---->Makedcls Options: All variables * * Local variables * INTEGER BIGINT, BLANK, CARD(500), CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N(06), NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU(06) INTEGER NUJ, NUMINT(06), NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL INTEGER UTITLE(500), VTITLE(500), XTITLE(500) INTEGER YTITLE(500), ZTITLE(500) * LOGICAL AUTOX, AUTOY, AUTOZ LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06) LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE LOGICAL FCLIP, IN, INTGRT(06), LOGX LOGICAL LOGY, LOGZ, LSTXYZ, PARLEL LOGICAL PLOPEN, PLOTID, RESET, RIGHT LOGICAL UAXIS, UVAXES, VARPEN, VAXIS LOGICAL WCLIP, XAXIS, XFALLS, YAXIS LOGICAL YFALLS, ZAXIS, ZFALLS * REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH(06) REAL MARGIN(4), MMTOCM, MSCALE, NINETY REAL ONE, PAGESQ, PAGEX, PAGEY REAL PENDIA, PERDST, PICTHX, PICTHY REAL PICTX, PICTY, PPXYZ(3), R1MACH REAL RPXYZ(3), SIGMA(06), SIGN, SWAP REAL T(4,4), TICDEF, TICKU, TICKV REAL TICKX, TICKY, TICKZ REAL TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT REAL TTLHEI, TTLLEN, TTOTAL(4,4), TWO REAL U1, U2, UDIST, UMAX REAL UMAXP, UMAXRC, UMIN, UMINP REAL UMINRC, UNITS, UNSPEC, UNTOCM REAL UNTOIN, UPXYZ(3), UTRE3, V1 REAL V2, VDIST, VIEWD, VMAX REAL VMAXP, VMAXRC, VMIN, VMINP REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN REAL VPVMAX, VPVMIN, VSCALE, WMAX REAL WMAXP, WMIN, WMINP REAL WORK(1600,5), X(1600,06), X0 REAL XDIST, XFACT(06), XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ REAL XMINP, XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY REAL Z(1600,06), Z0, ZDIST, ZERO REAL ZFACT(06), ZINT, ZMAX, ZMAXJ REAL ZMAXP, ZMIN, ZMINJ, ZMINP REAL ZORG, ZSHIFT(06), ZZ * * Namelists * NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT * *====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc80000644000031000002260000001700707621405725017671 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File namelist.f c---->Makedcls Options: All variables c c Local variables c INTEGER L, L6, M c REAL A, C, X, X1 REAL Y, Y2Z3, Z c c Namelists c NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 c c Common variables c REAL B, E, F c COMMON / / B, E, F c c====>End Module %MAIN File namelist.f c====>Begin Module GRFGG3 File namelist.f c---->Makedcls Options: All variables c c Local variables c INTEGER BIGINT, BLANK, CARD(500), CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N(06), NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU(06) INTEGER NUJ, NUMINT(06), NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL INTEGER UTITLE(500), VTITLE(500), XTITLE(500) INTEGER YTITLE(500), ZTITLE(500) c LOGICAL AUTOX, AUTOY, AUTOZ LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, CVTX(06) LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE LOGICAL FCLIP, IN, INTGRT(06), LOGX LOGICAL LOGY, LOGZ, LSTXYZ, PARLEL LOGICAL PLOPEN, PLOTID, RESET, RIGHT LOGICAL UAXIS, UVAXES, VARPEN, VAXIS LOGICAL WCLIP, XAXIS, XFALLS, YAXIS LOGICAL YFALLS, ZAXIS, ZFALLS c REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH(06) REAL MARGIN(4), MMTOCM, MSCALE, NINETY REAL ONE, PAGESQ, PAGEX, PAGEY REAL PENDIA, PERDST, PICTHX, PICTHY REAL PICTX, PICTY, PPXYZ(3), R1MACH REAL RPXYZ(3), SIGMA(06), SIGN, SWAP REAL T(4,4), TICDEF, TICKU, TICKV REAL TICKX, TICKY, TICKZ REAL TIMAGE(4,4), TMODEL(4,4), TOPMAR, TT REAL TTLHEI, TTLLEN, TTOTAL(4,4), TWO REAL U1, U2, UDIST, UMAX REAL UMAXP, UMAXRC, UMIN, UMINP REAL UMINRC, UNITS, UNSPEC, UNTOCM REAL UNTOIN, UPXYZ(3), UTRE3, V1 REAL V2, VDIST, VIEWD, VMAX REAL VMAXP, VMAXRC, VMIN, VMINP REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN REAL VPVMAX, VPVMIN, VSCALE, WMAX REAL WMAXP, WMIN, WMINP REAL WORK(1600,5), X(1600,06), X0 REAL XDIST, XFACT(06), XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ REAL XMINP, XORG, XSHIFT(06), XX REAL Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY REAL Z(1600,06), Z0, ZDIST, ZERO REAL ZFACT(06), ZINT, ZMAX, ZMAXJ REAL ZMAXP, ZMIN, ZMINJ, ZMINP REAL ZORG, ZSHIFT(06), ZZ c c Namelists c NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT c c====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dc90000644000031000002260000001672007621405725017673 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER L, L6, M C REAL A, C, X, X1 REAL Y, Y2Z3, Z C C Namelists C NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 C C Common variables C REAL B, E, F C COMMON / / B, E, F C C====>End Module %MAIN File namelist.f C====>Begin Module GRFGG3 File namelist.f C---->Makedcls Options: All variables C C Local variables C INTEGER BIGINT, BLANK, CARD, CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL, II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE, MARK, MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N, NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU INTEGER NUJ, NUMINT, NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN INTEGER QUOTE, ROMAN, TITLE, UTISL INTEGER UTITLE, VTITLE, XTITLE, YTITLE INTEGER ZTITLE C LOGICAL AUTOX, AUTOY, AUTOZ, AVRAGE LOGICAL AXES3D, BCLIP, BOX, BYROWS LOGICAL CHKDUP, CVTX, CVTY, CVTZ LOGICAL DERIV, EOFILE, FCLIP, IN LOGICAL INTGRT, LOGX, LOGY, LOGZ LOGICAL LSTXYZ, PARLEL, PLOPEN, PLOTID LOGICAL RESET, RIGHT, UAXIS, UVAXES LOGICAL VARPEN, VAXIS, WCLIP, XAXIS LOGICAL XFALLS, YAXIS, YFALLS, ZAXIS LOGICAL ZFALLS C REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH, MARGIN REAL MMTOCM, MSCALE, NINETY, ONE REAL PAGESQ, PAGEX, PAGEY, PENDIA REAL PERDST, PICTHX, PICTHY, PICTX REAL PICTY, PPXYZ, R1MACH, RPXYZ REAL SIGMA, SIGN, SWAP, T REAL TICDEF, TICKU, TICKV, TICKX REAL TICKY, TICKZ, TIMAGE, TMODEL REAL TOPMAR, TT, TTLHEI, TTLLEN REAL TTOTAL, TWO, U1, U2 REAL UDIST, UMAX, UMAXP, UMAXRC REAL UMIN, UMINP, UMINRC, UNITS REAL UNSPEC, UNTOCM, UNTOIN, UPXYZ REAL UTRE3, V1, V2, VDIST REAL VIEWD, VMAX, VMAXP, VMAXRC REAL VMIN, VMINP, VMINRC, VNXYZ REAL VPUMAX, VPUMIN, VPVMAX, VPVMIN REAL VSCALE, WMAX, WMAXP, WMIN REAL WMINP, WORK, X, X0 REAL XDIST, XFACT, XINT, XMAX REAL XMAXJ, XMAXP, XMIN, XMINJ REAL XMINP, XORG, XSHIFT, XX REAL Y, Y0, YDIST, YFACT REAL YINT, YMAX, YMAXJ, YMAXP REAL YMIN, YMINJ, YMINP, YORG REAL YSHIFT, YY, Z, Z0 REAL ZDIST, ZERO, ZFACT, ZINT REAL ZMAX, ZMAXJ, ZMAXP, ZMIN REAL ZMINJ, ZMINP, ZORG, ZSHIFT REAL ZZ C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB x, FCLIP, FSCALE, FSTYLE, GSCALE x, HSCALE, IDFONT, INTGRT, KX x, KY, KZ, LOGX, LOGY x, LOGZ, LSTXYZ, LSTYLE, LWIDTH x, MARGIN, MARK, MODEU, MODEV x, MODEX, MODEY, MODEZ, MSCALE x, N, NCINIT, NCSTEP, NCTERM x, NRINIT, NRSTEP, NRTERM, NU x, NUMINT, NUSUB, NVSUB, NXSUB x, NYSUB, NZSUB, PARLEL, PEN x, PENDIA, PERDST, PLOTID, PPXYZ x, RESET, RIGHT, RPXYZ, SIGMA x, TICKU, TICKV, TICKX, TICKY x, TICKZ, TIMAGE, TMODEL, UAXIS x, UMAX, UMIN, UPXYZ, UVAXES x, VAXIS, VIEWD, VMAX, VMIN x, VNXYZ, VSCALE, WCLIP, WMAX x, WMIN, X, XAXIS, XFACT x, XFALLS, XMAX, XMIN, XSHIFT x, Y, YAXIS, YFACT, YFALLS x, YMAX, YMIN, YSHIFT, Z x, ZAXIS, ZFACT, ZFALLS, ZMAX x, ZMIN, ZSHIFT C C====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.dca0000644000031000002260000001656107621405725017746 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File namelist.f !---->Makedcls Options: All variables ! ! Local variables ! INTEGER L, L6, M ! REAL A, C, X, X1 REAL Y, Y2Z3, Z ! ! Namelists ! NAMELIST / N1 / A, B, C NAMELIST / N2 / X, Y, Z NAMELIST / N3 / L, M NAMELIST / N4 / X1, Y2Z3 NAMELIST / N5 / L6 ! ! Common variables ! REAL B, E, F ! COMMON / / B, E, F ! !====>End Module %MAIN File namelist.f !====>Begin Module GRFGG3 File namelist.f !---->Makedcls Options: All variables ! ! Local variables ! INTEGER BIGINT, BLANK, CARD(500), CURCOL INTEGER CURROW, FSTYLE, GREEK, I INTEGER I1MACH, IABS, IARG, IARG1 INTEGER IARG2, IDFONT, IERVAL(1), II INTEGER J, JX, JY, JZ INTEGER K, KX, KXYZ, KY INTEGER KZ, LSTYLE(06), MARK(06), MAX0 INTEGER MAXCRD, MAXCRV, MAXVAL, MIN0 INTEGER MODEU, MODEV, MODEX, MODEY INTEGER MODEZ, N(06), NC, NCELLX INTEGER NCELLY, NCINIT, NCISAV, NCSTEP INTEGER NCTERM, NCU, NCV, NCX INTEGER NCY, NCZ, NIN, NINT INTEGER NJ, NOUT, NRINIT, NRISAV INTEGER NRSTEP, NRTERM, NSUM, NU(06) INTEGER NUJ, NUMINT(06), NUSUB, NVSUB INTEGER NXSUB, NYSUB, NZSUB, PEN(06) INTEGER QUOTE, ROMAN, TITLE(500), UTISL INTEGER UTITLE(500), VTITLE(500), XTITLE(500), YTITLE(500) INTEGER ZTITLE(500) ! LOGICAL AUTOX, AUTOY, AUTOZ, AVRAGE(06) LOGICAL AXES3D, BCLIP, BOX, BYROWS LOGICAL CHKDUP, CVTX(06), CVTY(06), CVTZ(06) LOGICAL DERIV(06), EOFILE, FCLIP, IN LOGICAL INTGRT(06), LOGX, LOGY, LOGZ LOGICAL LSTXYZ, PARLEL, PLOPEN, PLOTID LOGICAL RESET, RIGHT, UAXIS, UVAXES LOGICAL VARPEN, VAXIS, WCLIP, XAXIS LOGICAL XFALLS, YAXIS, YFALLS, ZAXIS LOGICAL ZFALLS ! REAL ABS, ALOG10, AMAX1, AMIN1 REAL ARCLEN, ARG, ARG1, ARG2 REAL ARX, ARY, CMFACT, CMTOIN REAL CMTOUN, CPX, CPY, DEFHT REAL DEFMAR, DT, DUSUB, DVSUB REAL DXSUB, DYSUB, DZSUB, FLOAT REAL FRAC, FSCALE, GSCALE, HALF REAL HH, HSCALE, HT, HTDEF REAL HTFACT, HX, HY, INFITY REAL INTOCM, INTOUN, LWIDTH(06), MARGIN(4) REAL MMTOCM, MSCALE, NINETY, ONE REAL PAGESQ, PAGEX, PAGEY, PENDIA REAL PERDST, PICTHX, PICTHY, PICTX REAL PICTY, PPXYZ(3), R1MACH, RPXYZ(3) REAL SIGMA(06), SIGN, SWAP, T(4,4) REAL TICDEF, TICKU, TICKV, TICKX REAL TICKY, TICKZ, TIMAGE(4,4), TMODEL(4,4) REAL TOPMAR, TT, TTLHEI, TTLLEN REAL TTOTAL(4,4), TWO, U1, U2 REAL UDIST, UMAX, UMAXP, UMAXRC REAL UMIN, UMINP, UMINRC, UNITS REAL UNSPEC, UNTOCM, UNTOIN, UPXYZ(3) REAL UTRE3, V1, V2, VDIST REAL VIEWD, VMAX, VMAXP, VMAXRC REAL VMIN, VMINP, VMINRC, VNXYZ(3) REAL VPUMAX, VPUMIN, VPVMAX, VPVMIN REAL VSCALE, WMAX, WMAXP, WMIN REAL WMINP, WORK(1600,5), X(1600,06) REAL X0, XDIST, XFACT(06), XINT REAL XMAX, XMAXJ, XMAXP, XMIN REAL XMINJ, XMINP, XORG, XSHIFT(06) REAL XX, Y(1600,06), Y0, YDIST REAL YFACT(06), YINT, YMAX, YMAXJ REAL YMAXP, YMIN, YMINJ, YMINP REAL YORG, YSHIFT(06), YY, Z(1600,06) REAL Z0, ZDIST, ZERO, ZFACT(06) REAL ZINT, ZMAX, ZMAXJ, ZMAXP REAL ZMIN, ZMINJ, ZMINP, ZORG REAL ZSHIFT(06), ZZ ! ! Namelists ! NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX & , BYROWS, CHKDUP, DERIV, DUSUB & , DVSUB, DXSUB, DYSUB, DZSUB & , FCLIP, FSCALE, FSTYLE, GSCALE & , HSCALE, IDFONT, INTGRT, KX & , KY, KZ, LOGX, LOGY & , LOGZ, LSTXYZ, LSTYLE, LWIDTH & , MARGIN, MARK, MODEU, MODEV & , MODEX, MODEY, MODEZ, MSCALE & , N, NCINIT, NCSTEP, NCTERM & , NRINIT, NRSTEP, NRTERM, NU & , NUMINT, NUSUB, NVSUB, NXSUB & , NYSUB, NZSUB, PARLEL, PEN & , PENDIA, PERDST, PLOTID, PPXYZ & , RESET, RIGHT, RPXYZ, SIGMA & , TICKU, TICKV, TICKX, TICKY & , TICKZ, TIMAGE, TMODEL, UAXIS & , UMAX, UMIN, UPXYZ, UVAXES & , VAXIS, VIEWD, VMAX, VMIN & , VNXYZ, VSCALE, WCLIP, WMAX & , WMIN, X, XAXIS, XFACT & , XFALLS, XMAX, XMIN, XSHIFT & , Y, YAXIS, YFACT, YFALLS & , YMAX, YMIN, YSHIFT, Z & , ZAXIS, ZFACT, ZFALLS, ZMAX & , ZMIN, ZSHIFT ! !====>End Module GRFGG3 File namelist.f ftnchek-3.3.1/test/Okay/namelist.htm00000644000031000002260000000437107712503115020054 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +L,         +M
REAL              +A,         +C,          X,          X1
REAL               Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 REAL              +A,        +B,             +C
N2                 REAL               X,         Y,              Z
N3                 INTEGER           +L,        +M
N4                 REAL               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm20000644000031000002260000000412707712503115020055 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER +L, +M
REAL +A, +C,  X,  X1,  Y,  Y2Z3,  Z
Namelists (+ indicates altered content)
N1                 REAL +A,     +B,             +C
N2                 REAL  X,      Y,              Z
N3                 INTEGER +L,  +M
N4                 REAL  X1,     Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm30000644000031000002260000000437107712503116020060 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +L,         +M
REAL              +A,         +C,          X,          X1
     x,            Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 REAL              +A,        +B,             +C
N2                 REAL               X,         Y,              Z
N3                 INTEGER           +L,        +M
N4                 REAL               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm40000644000031000002260000000437107712503117020062 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
integer           +L,         +M
real              +A,         +C,          X,          X1
real               Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 real              +A,        +B,             +C
N2                 real               X,         Y,              Z
N3                 integer           +L,        +M
N4                 real               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             real              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm50000644000031000002260000000437107712503117020063 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +l,         +m
REAL              +a,         +c,          x,          x1
REAL               y,          y2z3,       z
Namelists (+ indicates altered content)
N1                 REAL              +a,        +b,             +c
N2                 REAL               x,         y,              z
N3                 INTEGER           +l,        +m
N4                 REAL               x1,        y2z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +b

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm60000644000031000002260000000437107712503120020056 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +L,         +M
REAL              +A,         +C,          X,          X1
REAL               Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 REAL              +A,        +B,             +C
N2                 REAL               X,         Y,              Z
N3                 INTEGER           +L,        +M
N4                 REAL               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htm90000644000031000002260000000437107712503120020061 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +L,         +M
REAL              +A,         +C,          X,          X1
REAL               Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 REAL              +A,        +B,             +C
N2                 REAL               X,         Y,              Z
N3                 INTEGER           +L,        +M
N4                 REAL               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/namelist.htma0000644000031000002260000000437107712503121020132 0ustar moniotstaff00000000000000 Source namelist.f

PROGRAM %MAIN ( )

Description
ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995
Source file:namelist.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD          RW  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Local Variables (+ indicates altered content)
INTEGER           +L,         +M
REAL              +A,         +C,          X,          X1
REAL               Y,          Y2Z3,       Z
Namelists (+ indicates altered content)
N1                 REAL              +A,        +B,             +C
N2                 REAL               X,         Y,              Z
N3                 INTEGER           +L,        +M
N4                 REAL               X1,        Y2Z3
Referenced Common Block Variables (+ indicates altered content)
%BLANK             REAL              +B

SUBROUTINE GRFGG3 ( )

Description
   (grfgg3) 
   This is a substantial portion of the declaration section from 
   the PLOT79 grfgg3.sf3 file.  The formatting was done by the 
   Extended PFORT Verifier, and the extensive NAMELIST block serves 
   as a test for ftnchek. 
   (13-Mar-1995) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:namelist.f

ftnchek-3.3.1/test/Okay/params.dc00000644000031000002260000000074507621405725017331 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc10000644000031000002260000000074507621405725017332 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: Undeclared variables C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc20000644000031000002260000000064007621405725017325 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc30000644000031000002260000000074507621405725017334 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc40000644000031000002260000000074507621405725017335 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C real*8 PI parameter (PI = .31415926535897932D+01) real*8 MINUS1 parameter (MINUS1 = -.01D2) real*8 HALF parameter (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc50000644000031000002260000000074507621405725017336 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C REAL*8 pi PARAMETER (pi = .31415926535897932d+01) REAL*8 minus1 PARAMETER (minus1 = -.01d2) REAL*8 half PARAMETER (half = 5.d-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc60000644000031000002260000000074507621405725017337 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc70000644000031000002260000000074507621405725017340 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File params.f *---->Makedcls Options: All variables * * Parameter variables * REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) * *====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc80000644000031000002260000000074507621405725017341 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File params.f c---->Makedcls Options: All variables c c Parameter variables c REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) c c====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dc90000644000031000002260000000074507621405725017342 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File params.f C---->Makedcls Options: All variables C C Parameter variables C REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) C C====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.dca0000644000031000002260000000071507621405725017407 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File params.f !---->Makedcls Options: All variables ! ! Parameter variables ! REAL*8 PI PARAMETER (PI = .31415926535897932D+01) REAL*8 MINUS1 PARAMETER (MINUS1 = -.01D2) REAL*8 HALF PARAMETER (HALF = 5.D-1) ! !====>End Module %MAIN File params.f ftnchek-3.3.1/test/Okay/params.htm00000644000031000002260000000150307621405725017524 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             PI                 (PI = .31415926535897932D+01)
REAL*8             MINUS1             (MINUS1 = -.01D2)
REAL*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htm20000644000031000002260000000150307621405725017526 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8  PI                            (PI = .31415926535897932D+01)
REAL*8  MINUS1                        (MINUS1 = -.01D2)
REAL*8  HALF                          (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htm30000644000031000002260000000150307621405725017527 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             PI                 (PI = .31415926535897932D+01)
REAL*8             MINUS1             (MINUS1 = -.01D2)
REAL*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htm40000644000031000002260000000150307621405725017530 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
real*8             PI                 (PI = .31415926535897932D+01)
real*8             MINUS1             (MINUS1 = -.01D2)
real*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htm50000644000031000002260000000150307621405725017531 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             pi                 (pi = .31415926535897932d+01)
REAL*8             minus1             (minus1 = -.01d2)
REAL*8             half               (half = 5.d-1)

ftnchek-3.3.1/test/Okay/params.htm60000644000031000002260000000150307621405725017532 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             PI                 (PI = .31415926535897932D+01)
REAL*8             MINUS1             (MINUS1 = -.01D2)
REAL*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htm90000644000031000002260000000150307621405725017535 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             PI                 (PI = .31415926535897932D+01)
REAL*8             MINUS1             (MINUS1 = -.01D2)
REAL*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/params.htma0000644000031000002260000000150307621405725017605 0ustar moniotstaff00000000000000 Source params.f

PROGRAM %MAIN ( )

Source file:params.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Parameter Variables Used
REAL*8             PI                 (PI = .31415926535897932D+01)
REAL*8             MINUS1             (MINUS1 = -.01D2)
REAL*8             HALF               (HALF = 5.D-1)

ftnchek-3.3.1/test/Okay/phi.inc0000644000031000002260000000037007621405725016723 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C ftnchek-3.3.1/test/Okay/pres.inc0000644000031000002260000000014607621405725017115 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C ftnchek-3.3.1/test/Okay/psteps.inc0000644000031000002260000000013707621405725017462 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C ftnchek-3.3.1/test/Okay/ptds.inc0000644000031000002260000000014607621405725017116 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C ftnchek-3.3.1/test/Okay/rsize.inc0000644000031000002260000000024507621405725017300 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C ftnchek-3.3.1/test/Okay/steps.inc0000644000031000002260000000016307621405725017301 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C ftnchek-3.3.1/test/Okay/stiff.inc0000644000031000002260000000013107621405725017251 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C ftnchek-3.3.1/test/Okay/t208a.dc00000644000031000002260000000270307621405725016700 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C EXTERNAL TKIOLL C INTEGER MAX0, MIN0, TKIOLL C C Argument variables C INTEGER IX, IY C C Local variables C INTEGER BLANK, DUMMY C C Common variables C INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE(4,4), XMAX, YMAX REAL ZMAX C COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc10000644000031000002260000000000007621405725016665 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208a.dc20000644000031000002260000000165107621405725016703 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C EXTERNAL TKIOLL C INTEGER MAX0, MIN0, TKIOLL C C Argument variables C INTEGER IX, IY C C Local variables C INTEGER BLANK, DUMMY C C Common variables C INTEGER LASTX, LASTY, LINEWT, MAGFAC, MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF, PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX, SY, TIMAGE(4,4), XMAX, YMAX, ZMAX C COMMON /DDI01/ DSSIZE, LINEIN, PLSTEP, SX, SY, TIMAGE, XMAX, YMAX COMMON /DDI01/ ZMAX, LASTX, LASTY, LINEWT, MAGFAC, MAXX, MAXY COMMON /DDI01/ MINX, MINY, MOVEX, MOVEY, NPATH, PSXOFF, PSYOFF COMMON /DDI01/ DVINIT, IMAGE, ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc30000644000031000002260000000270307621405725016703 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C EXTERNAL TKIOLL C INTEGER MAX0, MIN0, TKIOLL C C Argument variables C INTEGER IX, IY C C Local variables C INTEGER BLANK, DUMMY C C Common variables C INTEGER LASTX, LASTY, LINEWT, MAGFAC x, MAXX, MAXY, MINX, MINY x, MOVEX, MOVEY, NPATH, PSXOFF x, PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX x, SY, TIMAGE(4,4), XMAX, YMAX x, ZMAX C COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX x, SY, TIMAGE, XMAX, YMAX x, ZMAX, LASTX, LASTY, LINEWT x, MAGFAC, MAXX, MAXY, MINX x, MINY, MOVEX, MOVEY, NPATH x, PSXOFF, PSYOFF, DVINIT, IMAGE x, ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc40000644000031000002260000000270307621405725016704 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C external TKIOLL C integer MAX0, MIN0, TKIOLL C C Argument variables C integer IX, IY C C Local variables C integer BLANK, DUMMY C C Common variables C integer LASTX, LASTY, LINEWT, MAGFAC integer MAXX, MAXY, MINX, MINY integer MOVEX, MOVEY, NPATH, PSXOFF integer PSYOFF C logical DVINIT, IMAGE, ROTATE, VILAST C real DSSIZE, LINEIN, PLSTEP, SX real SY, TIMAGE(4,4), XMAX, YMAX real ZMAX C common / DDI01 / DSSIZE, LINEIN, PLSTEP, SX common / DDI01 / SY, TIMAGE, XMAX, YMAX common / DDI01 / ZMAX, LASTX, LASTY, LINEWT common / DDI01 / MAGFAC, MAXX, MAXY, MINX common / DDI01 / MINY, MOVEX, MOVEY, NPATH common / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE common / DDI01 / ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc50000644000031000002260000000270307621405725016705 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C EXTERNAL tkioll C INTEGER max0, min0, tkioll C C Argument variables C INTEGER ix, iy C C Local variables C INTEGER blank, dummy C C Common variables C INTEGER lastx, lasty, linewt, magfac INTEGER maxx, maxy, minx, miny INTEGER movex, movey, npath, psxoff INTEGER psyoff C LOGICAL dvinit, image, rotate, vilast C REAL dssize, linein, plstep, sx REAL sy, timage(4,4), xmax, ymax REAL zmax C COMMON / ddi01 / dssize, linein, plstep, sx COMMON / ddi01 / sy, timage, xmax, ymax COMMON / ddi01 / zmax, lastx, lasty, linewt COMMON / ddi01 / magfac, maxx, maxy, minx COMMON / ddi01 / miny, movex, movey, npath COMMON / ddi01 / psxoff, psyoff, dvinit, image COMMON / ddi01 / rotate, vilast C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc60000644000031000002260000000270307621405725016706 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL TKIOLL C INTEGER MAX0, MIN0, TKIOLL C C Argument variables C INTEGER IX, IY C C Local variables C INTEGER BLANK, DUMMY C C Common variables C INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE(4,4), XMAX, YMAX REAL ZMAX C COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc70000644000031000002260000000270307621405726016710 0ustar moniotstaff00000000000000*====>Begin Module DDIAPA File t208a.f *---->Makedcls Options: All variables * * External functions * EXTERNAL TKIOLL * INTEGER MAX0, MIN0, TKIOLL * * Argument variables * INTEGER IX, IY * * Local variables * INTEGER BLANK, DUMMY * * Common variables * INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF * LOGICAL DVINIT, IMAGE, ROTATE, VILAST * REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE(4,4), XMAX, YMAX REAL ZMAX * COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST * *====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc80000644000031000002260000000270307621405726016711 0ustar moniotstaff00000000000000c====>Begin Module DDIAPA File t208a.f c---->Makedcls Options: All variables c c External functions c EXTERNAL TKIOLL c INTEGER MAX0, MIN0, TKIOLL c c Argument variables c INTEGER IX, IY c c Local variables c INTEGER BLANK, DUMMY c c Common variables c INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF c LOGICAL DVINIT, IMAGE, ROTATE, VILAST c REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE(4,4), XMAX, YMAX REAL ZMAX c COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST c c====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dc90000644000031000002260000000270307621405726016712 0ustar moniotstaff00000000000000C====>Begin Module DDIAPA File t208a.f C---->Makedcls Options: All variables C C External functions C EXTERNAL TKIOLL C INTEGER MAX0, MIN0, TKIOLL C C Argument variables C INTEGER IX, IY C C Local variables C INTEGER BLANK, DUMMY C C Common variables C INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF C LOGICAL DVINIT, IMAGE, ROTATE, VILAST C REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE, XMAX, YMAX REAL ZMAX C COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST C C====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.dca0000644000031000002260000000256707621405726016772 0ustar moniotstaff00000000000000!====>Begin Module DDIAPA File t208a.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL TKIOLL ! INTEGER MAX0, MIN0, TKIOLL ! ! Argument variables ! INTEGER IX, IY ! ! Local variables ! INTEGER BLANK, DUMMY ! ! Common variables ! INTEGER LASTX, LASTY, LINEWT, MAGFAC INTEGER MAXX, MAXY, MINX, MINY INTEGER MOVEX, MOVEY, NPATH, PSXOFF INTEGER PSYOFF ! LOGICAL DVINIT, IMAGE, ROTATE, VILAST ! REAL DSSIZE, LINEIN, PLSTEP, SX REAL SY, TIMAGE(4,4), XMAX, YMAX REAL ZMAX ! COMMON / DDI01 / DSSIZE, LINEIN, PLSTEP, SX COMMON / DDI01 / SY, TIMAGE, XMAX, YMAX COMMON / DDI01 / ZMAX, LASTX, LASTY, LINEWT COMMON / DDI01 / MAGFAC, MAXX, MAXY, MINX COMMON / DDI01 / MINY, MOVEX, MOVEY, NPATH COMMON / DDI01 / PSXOFF, PSYOFF, DVINIT, IMAGE COMMON / DDI01 / ROTATE, VILAST ! !====>End Module DDIAPA File t208a.f ftnchek-3.3.1/test/Okay/t208a.htm00000644000031000002260000000360507621405726017105 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            MAX0,       MIN0
External Functions and Subroutines Called
INTEGER            TKIOLL
SUBROUTINE         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
INTEGER           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +LASTX,    +LASTY
DDI01              INTEGER           +MAXX,     +MAXY
DDI01              INTEGER           +MINX,     +MINY
DDI01              INTEGER           +NPATH
DDI01              LOGICAL           +VILAST

ftnchek-3.3.1/test/Okay/t208a.htm20000644000031000002260000000345407621405726017111 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER  IX,  IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER  MAX0,  MIN0
External Functions and Subroutines Called
INTEGER  TKIOLL
SUBROUTINE  TKIOWB,  TKIOWH,  TKIOWN
Local Variables (+ indicates altered content)
INTEGER +BLANK,  DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER +LASTX,              +LASTY
DDI01              INTEGER +MAXX,               +MAXY
DDI01              INTEGER +MINX,               +MINY
DDI01              INTEGER +NPATH
DDI01              LOGICAL +VILAST

ftnchek-3.3.1/test/Okay/t208a.htm30000644000031000002260000000360507621405726017110 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            MAX0,       MIN0
External Functions and Subroutines Called
INTEGER            TKIOLL
SUBROUTINE         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
INTEGER           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +LASTX,    +LASTY
DDI01              INTEGER           +MAXX,     +MAXY
DDI01              INTEGER           +MINX,     +MINY
DDI01              INTEGER           +NPATH
DDI01              LOGICAL           +VILAST

ftnchek-3.3.1/test/Okay/t208a.htm40000644000031000002260000000360507621405726017111 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
integer            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
integer            MAX0,       MIN0
External Functions and Subroutines Called
integer            TKIOLL
subroutine         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
integer           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              integer           +LASTX,    +LASTY
DDI01              integer           +MAXX,     +MAXY
DDI01              integer           +MINX,     +MINY
DDI01              integer           +NPATH
DDI01              logical           +VILAST

ftnchek-3.3.1/test/Okay/t208a.htm50000644000031000002260000000360507621405726017112 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            ix,         iy
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            max0,       min0
External Functions and Subroutines Called
INTEGER            tkioll
SUBROUTINE         tkiowb,     tkiowh,     tkiown
Local Variables (+ indicates altered content)
INTEGER           +blank,      dummy
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +lastx,    +lasty
DDI01              INTEGER           +maxx,     +maxy
DDI01              INTEGER           +minx,     +miny
DDI01              INTEGER           +npath
DDI01              LOGICAL           +vilast

ftnchek-3.3.1/test/Okay/t208a.htm60000644000031000002260000000360507621405726017113 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            MAX0,       MIN0
External Functions and Subroutines Called
INTEGER            TKIOLL
SUBROUTINE         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
INTEGER           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +LASTX,    +LASTY
DDI01              INTEGER           +MAXX,     +MAXY
DDI01              INTEGER           +MINX,     +MINY
DDI01              INTEGER           +NPATH
DDI01              LOGICAL           +VILAST

ftnchek-3.3.1/test/Okay/t208a.htm90000644000031000002260000000360507621405726017116 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            MAX0,       MIN0
External Functions and Subroutines Called
INTEGER            TKIOLL
SUBROUTINE         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
INTEGER           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +LASTX,    +LASTY
DDI01              INTEGER           +MAXX,     +MAXY
DDI01              INTEGER           +MINX,     +MINY
DDI01              INTEGER           +NPATH
DDI01              LOGICAL           +VILAST

ftnchek-3.3.1/test/Okay/t208a.htma0000644000031000002260000000360507621405726017166 0ustar moniotstaff00000000000000 Source t208a.f

SUBROUTINE DDIAPA ( IX, IY )

Argument Definitions (+ indicates altered content)
INTEGER            IX,         IY
Description
   (Add to Path) 
   Add the point (IX,IY) to the current path, which is assumed 
   to have  already been  started by  a call  to DDIBPA.   The 
   current point and visibility are updated in COMMON. 
   (27-May-1991) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       TKIOLL,      TKIOWB,      TKIOWH,      TKIOWN
Source file:t208a.f
Intrinsic Functions Called
INTEGER            MAX0,       MIN0
External Functions and Subroutines Called
INTEGER            TKIOLL
SUBROUTINE         TKIOWB,     TKIOWH,     TKIOWN
Local Variables (+ indicates altered content)
INTEGER           +BLANK,      DUMMY
Referenced Common Block Variables (+ indicates altered content)
DDI01              INTEGER           +LASTX,    +LASTY
DDI01              INTEGER           +MAXX,     +MAXY
DDI01              INTEGER           +MINX,     +MINY
DDI01              INTEGER           +NPATH
DDI01              LOGICAL           +VILAST

ftnchek-3.3.1/test/Okay/t208b.dc00000644000031000002260000000100107621405726016670 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc10000644000031000002260000000047507621405726016707 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc20000644000031000002260000000066207621405726016706 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc30000644000031000002260000000100107621405726016673 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc40000644000031000002260000000100107621405726016674 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C intrinsic COS, SIN, SQRT C C External functions C external MYSQRT, MYSUB C real MYSQRT C C Parameter variables C integer NPI parameter (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc50000644000031000002260000000100107621405726016675 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC cos, sin, sqrt C C External functions C EXTERNAL mysqrt, mysub C REAL mysqrt C C Parameter variables C INTEGER npi PARAMETER (npi = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc60000644000031000002260000000100107621405726016676 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc70000644000031000002260000000100107621405726016677 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208b.f *---->Makedcls Options: All variables * * Intrinsic functions * INTRINSIC COS, SIN, SQRT * * External functions * EXTERNAL MYSQRT, MYSUB * REAL MYSQRT * * Parameter variables * INTEGER NPI PARAMETER (NPI = 9) * *====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc80000644000031000002260000000100107621405726016700 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208b.f c---->Makedcls Options: All variables c c Intrinsic functions c INTRINSIC COS, SIN, SQRT c c External functions c EXTERNAL MYSQRT, MYSUB c REAL MYSQRT c c Parameter variables c INTEGER NPI PARAMETER (NPI = 9) c c====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dc90000644000031000002260000000100107621405726016701 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208b.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C C====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.dca0000644000031000002260000000075507621405726016770 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208b.f !---->Makedcls Options: All variables ! ! Intrinsic functions ! INTRINSIC COS, SIN, SQRT ! ! External functions ! EXTERNAL MYSQRT, MYSUB ! REAL MYSQRT ! ! Parameter variables ! INTEGER NPI PARAMETER (NPI = 9) ! !====>End Module %MAIN File t208b.f ftnchek-3.3.1/test/Okay/t208b.htm00000644000031000002260000000110707621405726017101 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208b.htm20000644000031000002260000000104007621405726017077 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE  COS,  SIN,  SQRT
External Functions and Subroutines Called
REAL  MYSQRT
SUBROUTINE  MYSUB

ftnchek-3.3.1/test/Okay/t208b.htm30000644000031000002260000000110707621405726017104 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208b.htm40000644000031000002260000000110707621405726017105 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
subroutine         COS,        SIN,        SQRT
External Functions and Subroutines Called
real               MYSQRT
subroutine         MYSUB

ftnchek-3.3.1/test/Okay/t208b.htm50000644000031000002260000000110707621405726017106 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         cos,        sin,        sqrt
External Functions and Subroutines Called
REAL               mysqrt
SUBROUTINE         mysub

ftnchek-3.3.1/test/Okay/t208b.htm60000644000031000002260000000110707621405726017107 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208b.htm90000644000031000002260000000110707621405726017112 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208b.htma0000644000031000002260000000110707621405726017162 0ustar moniotstaff00000000000000 Source t208b.f

PROGRAM %MAIN ( )

Source file:t208b.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208c.dc00000644000031000002260000000150007621405726016675 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U C COMPLEX*12 Y COMPLEX YNL C INTEGER*2 SHORT INTEGER SHORTNL C LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 C REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc10000644000031000002260000000000007621405726016670 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208c.dc20000644000031000002260000000106507621405726016705 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C, CNL CHARACTER*144 S, T, T1, T2, T3, T4, T5, T6, T7 CHARACTER*72 U C COMPLEX*12 Y COMPLEX YNL C INTEGER*2 SHORT INTEGER SHORTNL C LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 C REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc30000644000031000002260000000150007621405726016700 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 x, T3, T4, T5, T6 x, T7 CHARACTER*72 U C COMPLEX*12 Y COMPLEX YNL C INTEGER*2 SHORT INTEGER SHORTNL C LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 C REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc40000644000031000002260000000150007621405726016701 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C character C, CNL character*144 S, T, T1, T2 character*144 T3, T4, T5, T6 character*144 T7 character*72 U C complex*12 Y complex YNL C integer*2 SHORT integer SHORTNL C logical LOGNL logical*1 LOGVAR logical*2 LOGVAR2 C real*16 X16 real*6 X6 real*8 X8 real XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc50000644000031000002260000000150007621405726016702 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C CHARACTER c, cnl CHARACTER*144 s, t, t1, t2 CHARACTER*144 t3, t4, t5, t6 CHARACTER*144 t7 CHARACTER*72 u C COMPLEX*12 y COMPLEX ynl C INTEGER*2 short INTEGER shortnl C LOGICAL lognl LOGICAL*1 logvar LOGICAL*2 logvar2 C REAL*16 x16 REAL*6 x6 REAL*8 x8 REAL xnl C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc60000644000031000002260000000150007621405726016703 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U C COMPLEX*12 Y COMPLEX YNL C INTEGER*2 SHORT INTEGER SHORTNL C LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 C REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc70000644000031000002260000000150007621405726016704 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208c.f *---->Makedcls Options: All variables * * Local variables * CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U * COMPLEX*12 Y COMPLEX YNL * INTEGER*2 SHORT INTEGER SHORTNL * LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 * REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL * *====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc80000644000031000002260000000150007621405726016705 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208c.f c---->Makedcls Options: All variables c c Local variables c CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U c COMPLEX*12 Y COMPLEX YNL c INTEGER*2 SHORT INTEGER SHORTNL c LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 c REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL c c====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dc90000644000031000002260000000150007621405726016706 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208c.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U C COMPLEX*12 Y COMPLEX YNL C INTEGER*2 SHORT INTEGER SHORTNL C LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 C REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL C C====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.dca0000644000031000002260000000140007621405726016755 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208c.f !---->Makedcls Options: All variables ! ! Local variables ! CHARACTER C, CNL CHARACTER*144 S, T, T1, T2 CHARACTER*144 T3, T4, T5, T6 CHARACTER*144 T7 CHARACTER*72 U ! COMPLEX*12 Y COMPLEX YNL ! INTEGER*2 SHORT INTEGER SHORTNL ! LOGICAL LOGNL LOGICAL*1 LOGVAR LOGICAL*2 LOGVAR2 ! REAL*16 X16 REAL*6 X6 REAL*8 X8 REAL XNL ! !====>End Module %MAIN File t208c.f ftnchek-3.3.1/test/Okay/t208c.htm00000644000031000002260000000036107621405726017103 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm20000644000031000002260000000036107621405726017105 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm30000644000031000002260000000036107621405726017106 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm40000644000031000002260000000036107621405726017107 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm50000644000031000002260000000036107621405726017110 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm60000644000031000002260000000036107621405726017111 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htm90000644000031000002260000000036107621405726017114 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208c.htma0000644000031000002260000000036107621405726017164 0ustar moniotstaff00000000000000 Source t208c.f

PROGRAM %MAIN ( )

Source file:t208c.f

ftnchek-3.3.1/test/Okay/t208d.dc00000644000031000002260000001202407621405726016701 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C EXTERNAL KARASC, KARCM2, KARUC C INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD C C Argument variables C INTEGER FONT(1), SWCHAR(1) C C Local variables C INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 INTEGER NX0100, NX0114, NX0141, NX0204 INTEGER NX0244, OMCRON, OMEGA, PERCNT INTEGER PERIOD, PHI, PI, PLUS INTEGER PSI, QUERY, RANGLE, RBRACE INTEGER RBRAKT, RHO, RPAREN, RSLANT INTEGER SA, SCOLON, SG, SIGMA INTEGER SLASH, SPACE, SQUOTE, SR INTEGER SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB INTEGER UCC, UCD, UCE, UCF INTEGER UCG, UCH, UCI, UCJ INTEGER UCK, UCL, UCM, UCN INTEGER UCO, UCP, UCQ, UCR INTEGER UCS, UCT, UCU, UCV INTEGER UCW, UCX, UCY, UCZ INTEGER UPSLON, USCORE, VBAR, XI INTEGER ZETA C LOGICAL ERROR C C Common variables C INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED C COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED C C Common variables C INTEGER ASCII(96,5), BSWTCH(5), FONTID(5) INTEGER FONTNM(5,5), FSWTCH(5), LSWTCH(5) INTEGER USWTCH(5) C COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc10000644000031000002260000000231507621405726016704 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: Undeclared variables C C Local variables C INTEGER N20147, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NX0028, NX0050 INTEGER NX0061, NX0100, NX0114, NX0141 INTEGER NX0204, NX0244 C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc20000644000031000002260000000502107621405726016702 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C EXTERNAL KARASC, KARCM2, KARUC C INTEGER KARASC, KARCM2, KARUC, MIN0, MOD C C Argument variables C INTEGER FONT(1), SWCHAR(1) C C Local variables C INTEGER ACCENT, ALPHA, AMPSND, AT, BA, BETA, CARET, CC, CG, CHI INTEGER CI, COLON, COMMA, CR, CS, CYA, CYB, CYCHE, CYD, CYE, CYEE INTEGER CYEEK, CYF, CYG, CYK, CYKHA, CYL, CYM, CYMZNK, CYN, CYO INTEGER CYOO, CYP, CYR, CYS, CYSH, CYSHCH, CYT, CYTSE, CYTZNK, CYV INTEGER CYYA, CYYE, CYYIRI, CYYOO, CYZ, CYZHE, DEL, DELTA, DOLLAR INTEGER DQUOTE, DR, EPSLON, EQUALS, ETA, EXCLPT, FCASE, FTYPE INTEGER FVAR, GAMMA, GE, GG, GI, I, IDIG, IG, II, ILC, IOTA, IR INTEGER IUC, KAPPA, KG, KR, LAMBDA, LANGLE, LBRACE, LBRAKT, LCA INTEGER LCB, LCC, LCD, LCE, LCF, LCG, LCH, LCI, LCJ, LCK, LCL, LCM INTEGER LCN, LCO, LCP, LCQ, LCR, LCS, LCT, LCU, LCV, LCW, LCX, LCY INTEGER LCZ, LOC0, LOC0SV, LOCLC, LOCUC, LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003, NPR004, NPR005, NPR006 INTEGER NPR007, NPR008, NPR009, NPR010, NPR011, NPR012, NPR013 INTEGER NPR014, NPR015, NPR016, NPR017, NPR018, NPR019, NPR020 INTEGER NPR021, NPR022, NPR023, NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031, NPR032, NPR033, NPR034 INTEGER NPR035, NPR036, NPR037, NPR038, NPR039, NPR040, NPR041 INTEGER NPR042, NPR043, NPR044, NPR045, NU, NUL, NUMBER, NX0028 INTEGER NX0050, NX0061, NX0100, NX0114, NX0141, NX0204, NX0244 INTEGER OMCRON, OMEGA, PERCNT, PERIOD, PHI, PI, PLUS, PSI, QUERY INTEGER RANGLE, RBRACE, RBRAKT, RHO, RPAREN, RSLANT, SA, SCOLON INTEGER SG, SIGMA, SLASH, SPACE, SQUOTE, SR, SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB, UCC, UCD, UCE, UCF, UCG, UCH, UCI INTEGER UCJ, UCK, UCL, UCM, UCN, UCO, UCP, UCQ, UCR, UCS, UCT, UCU INTEGER UCV, UCW, UCX, UCY, UCZ, UPSLON, USCORE, VBAR, XI, ZETA C LOGICAL ERROR C C Common variables C INTEGER CASESW, KFONT, MAXFNT, NFONT, NFUSED C COMMON /SYM02/ CASESW, KFONT, MAXFNT, NFONT, NFUSED C C Common variables C INTEGER ASCII(96,5), BSWTCH(5), FONTID(5), FONTNM(5,5), FSWTCH(5) INTEGER LSWTCH(5), USWTCH(5) C COMMON /SYM03/ ASCII, BSWTCH, FONTID, FONTNM, FSWTCH, LSWTCH COMMON /SYM03/ USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc30000644000031000002260000001202407621405726016704 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C EXTERNAL KARASC, KARCM2, KARUC C INTEGER KARASC, KARCM2, KARUC, MIN0 x, MOD C C Argument variables C INTEGER FONT(1), SWCHAR(1) C C Local variables C INTEGER ACCENT, ALPHA, AMPSND, AT x, BA, BETA, CARET, CC x, CG, CHI, CI, COLON x, COMMA, CR, CS, CYA x, CYB, CYCHE, CYD, CYE x, CYEE, CYEEK, CYF, CYG x, CYK, CYKHA, CYL, CYM x, CYMZNK, CYN, CYO, CYOO x, CYP, CYR, CYS, CYSH x, CYSHCH, CYT, CYTSE, CYTZNK x, CYV, CYYA, CYYE, CYYIRI x, CYYOO, CYZ, CYZHE, DEL x, DELTA, DOLLAR, DQUOTE, DR x, EPSLON, EQUALS, ETA, EXCLPT x, FCASE, FTYPE, FVAR, GAMMA x, GE, GG, GI, I x, IDIG, IG, II, ILC x, IOTA, IR, IUC, KAPPA x, KG, KR, LAMBDA, LANGLE x, LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF x, LCG, LCH, LCI, LCJ x, LCK, LCL, LCM, LCN x, LCO, LCP, LCQ, LCR x, LCS, LCT, LCU, LCV x, LCW, LCX, LCY, LCZ x, LOC0, LOC0SV, LOCLC, LOCUC x, LPAREN, MINUS, MU, N20147 x, NOCHAR, NPR001, NPR002, NPR003 x, NPR004, NPR005, NPR006, NPR007 x, NPR008, NPR009, NPR010, NPR011 x, NPR012, NPR013, NPR014, NPR015 x, NPR016, NPR017, NPR018, NPR019 x, NPR020, NPR021, NPR022, NPR023 x, NPR024, NPR025, NPR026, NPR027 x, NPR028, NPR029, NPR030, NPR031 x, NPR032, NPR033, NPR034, NPR035 x, NPR036, NPR037, NPR038, NPR039 x, NPR040, NPR041, NPR042, NPR043 x, NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 x, NX0100, NX0114, NX0141, NX0204 x, NX0244, OMCRON, OMEGA, PERCNT x, PERIOD, PHI, PI, PLUS x, PSI, QUERY, RANGLE, RBRACE x, RBRAKT, RHO, RPAREN, RSLANT x, SA, SCOLON, SG, SIGMA x, SLASH, SPACE, SQUOTE, SR x, SS, STAR, TAU, THETA x, TILDE, TR, UCA, UCB x, UCC, UCD, UCE, UCF x, UCG, UCH, UCI, UCJ x, UCK, UCL, UCM, UCN x, UCO, UCP, UCQ, UCR x, UCS, UCT, UCU, UCV x, UCW, UCX, UCY, UCZ x, UPSLON, USCORE, VBAR, XI x, ZETA C LOGICAL ERROR C C Common variables C INTEGER CASESW, KFONT, MAXFNT, NFONT x, NFUSED C COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT x, NFUSED C C Common variables C INTEGER ASCII(96,5), BSWTCH(5), FONTID(5) x, FONTNM(5,5), FSWTCH(5), LSWTCH(5) x, USWTCH(5) C COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM x, FSWTCH, LSWTCH, USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc40000644000031000002260000001202407621405726016705 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C external KARASC, KARCM2, KARUC C integer KARASC, KARCM2, KARUC, MIN0 integer MOD C C Argument variables C integer FONT(1), SWCHAR(1) C C Local variables C integer ACCENT, ALPHA, AMPSND, AT integer BA, BETA, CARET, CC integer CG, CHI, CI, COLON integer COMMA, CR, CS, CYA integer CYB, CYCHE, CYD, CYE integer CYEE, CYEEK, CYF, CYG integer CYK, CYKHA, CYL, CYM integer CYMZNK, CYN, CYO, CYOO integer CYP, CYR, CYS, CYSH integer CYSHCH, CYT, CYTSE, CYTZNK integer CYV, CYYA, CYYE, CYYIRI integer CYYOO, CYZ, CYZHE, DEL integer DELTA, DOLLAR, DQUOTE, DR integer EPSLON, EQUALS, ETA, EXCLPT integer FCASE, FTYPE, FVAR, GAMMA integer GE, GG, GI, I integer IDIG, IG, II, ILC integer IOTA, IR, IUC, KAPPA integer KG, KR, LAMBDA, LANGLE integer LBRACE, LBRAKT, LCA, LCB integer LCC, LCD, LCE, LCF integer LCG, LCH, LCI, LCJ integer LCK, LCL, LCM, LCN integer LCO, LCP, LCQ, LCR integer LCS, LCT, LCU, LCV integer LCW, LCX, LCY, LCZ integer LOC0, LOC0SV, LOCLC, LOCUC integer LPAREN, MINUS, MU, N20147 integer NOCHAR, NPR001, NPR002, NPR003 integer NPR004, NPR005, NPR006, NPR007 integer NPR008, NPR009, NPR010, NPR011 integer NPR012, NPR013, NPR014, NPR015 integer NPR016, NPR017, NPR018, NPR019 integer NPR020, NPR021, NPR022, NPR023 integer NPR024, NPR025, NPR026, NPR027 integer NPR028, NPR029, NPR030, NPR031 integer NPR032, NPR033, NPR034, NPR035 integer NPR036, NPR037, NPR038, NPR039 integer NPR040, NPR041, NPR042, NPR043 integer NPR044, NPR045, NU, NUL integer NUMBER, NX0028, NX0050, NX0061 integer NX0100, NX0114, NX0141, NX0204 integer NX0244, OMCRON, OMEGA, PERCNT integer PERIOD, PHI, PI, PLUS integer PSI, QUERY, RANGLE, RBRACE integer RBRAKT, RHO, RPAREN, RSLANT integer SA, SCOLON, SG, SIGMA integer SLASH, SPACE, SQUOTE, SR integer SS, STAR, TAU, THETA integer TILDE, TR, UCA, UCB integer UCC, UCD, UCE, UCF integer UCG, UCH, UCI, UCJ integer UCK, UCL, UCM, UCN integer UCO, UCP, UCQ, UCR integer UCS, UCT, UCU, UCV integer UCW, UCX, UCY, UCZ integer UPSLON, USCORE, VBAR, XI integer ZETA C logical ERROR C C Common variables C integer CASESW, KFONT, MAXFNT, NFONT integer NFUSED C common / SYM02 / CASESW, KFONT, MAXFNT, NFONT common / SYM02 / NFUSED C C Common variables C integer ASCII(96,5), BSWTCH(5), FONTID(5) integer FONTNM(5,5), FSWTCH(5), LSWTCH(5) integer USWTCH(5) C common / SYM03 / ASCII, BSWTCH, FONTID, FONTNM common / SYM03 / FSWTCH, LSWTCH, USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc50000644000031000002260000001202407621405726016706 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C EXTERNAL karasc, karcm2, karuc C INTEGER karasc, karcm2, karuc, min0 INTEGER mod C C Argument variables C INTEGER font(1), swchar(1) C C Local variables C INTEGER accent, alpha, ampsnd, at INTEGER ba, beta, caret, cc INTEGER cg, chi, ci, colon INTEGER comma, cr, cs, cya INTEGER cyb, cyche, cyd, cye INTEGER cyee, cyeek, cyf, cyg INTEGER cyk, cykha, cyl, cym INTEGER cymznk, cyn, cyo, cyoo INTEGER cyp, cyr, cys, cysh INTEGER cyshch, cyt, cytse, cytznk INTEGER cyv, cyya, cyye, cyyiri INTEGER cyyoo, cyz, cyzhe, del INTEGER delta, dollar, dquote, dr INTEGER epslon, equals, eta, exclpt INTEGER fcase, ftype, fvar, gamma INTEGER ge, gg, gi, i INTEGER idig, ig, ii, ilc INTEGER iota, ir, iuc, kappa INTEGER kg, kr, lambda, langle INTEGER lbrace, lbrakt, lca, lcb INTEGER lcc, lcd, lce, lcf INTEGER lcg, lch, lci, lcj INTEGER lck, lcl, lcm, lcn INTEGER lco, lcp, lcq, lcr INTEGER lcs, lct, lcu, lcv INTEGER lcw, lcx, lcy, lcz INTEGER loc0, loc0sv, loclc, locuc INTEGER lparen, minus, mu, n20147 INTEGER nochar, npr001, npr002, npr003 INTEGER npr004, npr005, npr006, npr007 INTEGER npr008, npr009, npr010, npr011 INTEGER npr012, npr013, npr014, npr015 INTEGER npr016, npr017, npr018, npr019 INTEGER npr020, npr021, npr022, npr023 INTEGER npr024, npr025, npr026, npr027 INTEGER npr028, npr029, npr030, npr031 INTEGER npr032, npr033, npr034, npr035 INTEGER npr036, npr037, npr038, npr039 INTEGER npr040, npr041, npr042, npr043 INTEGER npr044, npr045, nu, nul INTEGER number, nx0028, nx0050, nx0061 INTEGER nx0100, nx0114, nx0141, nx0204 INTEGER nx0244, omcron, omega, percnt INTEGER period, phi, pi, plus INTEGER psi, query, rangle, rbrace INTEGER rbrakt, rho, rparen, rslant INTEGER sa, scolon, sg, sigma INTEGER slash, space, squote, sr INTEGER ss, star, tau, theta INTEGER tilde, tr, uca, ucb INTEGER ucc, ucd, uce, ucf INTEGER ucg, uch, uci, ucj INTEGER uck, ucl, ucm, ucn INTEGER uco, ucp, ucq, ucr INTEGER ucs, uct, ucu, ucv INTEGER ucw, ucx, ucy, ucz INTEGER upslon, uscore, vbar, xi INTEGER zeta C LOGICAL error C C Common variables C INTEGER casesw, kfont, maxfnt, nfont INTEGER nfused C COMMON / sym02 / casesw, kfont, maxfnt, nfont COMMON / sym02 / nfused C C Common variables C INTEGER ascii(96,5), bswtch(5), fontid(5) INTEGER fontnm(5,5), fswtch(5), lswtch(5) INTEGER uswtch(5) C COMMON / sym03 / ascii, bswtch, fontid, fontnm COMMON / sym03 / fswtch, lswtch, uswtch C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc60000644000031000002260000001010207621405726016702 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL KARASC, KARCM2, KARUC C INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD C C Argument variables C INTEGER FONT(1), SWCHAR(1) C C Local variables C INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, NOCHAR INTEGER NU, NUL, NUMBER, OMCRON INTEGER OMEGA, PERCNT, PERIOD, PHI INTEGER PI, PLUS, PSI, QUERY INTEGER RANGLE, RBRACE, RBRAKT, RHO INTEGER RPAREN, RSLANT, SA, SCOLON INTEGER SG, SIGMA, SLASH, SPACE INTEGER SQUOTE, SR, SS, STAR INTEGER TAU, THETA, TILDE, TR INTEGER UCA, UCB, UCC, UCD INTEGER UCE, UCF, UCG, UCH INTEGER UCI, UCJ, UCK, UCL INTEGER UCM, UCN, UCO, UCP INTEGER UCQ, UCR, UCS, UCT INTEGER UCU, UCV, UCW, UCX INTEGER UCY, UCZ, UPSLON, USCORE INTEGER VBAR, XI, ZETA C LOGICAL ERROR C C Common variables C INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED C COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED C C Common variables C INTEGER ASCII(96,5), BSWTCH(5), FONTID(5) INTEGER FONTNM(5,5), FSWTCH(5), LSWTCH(5) INTEGER USWTCH(5) C COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc70000644000031000002260000001202407621405726016710 0ustar moniotstaff00000000000000*====>Begin Module SYMSF File t208d.f *---->Makedcls Options: All variables * * External functions * EXTERNAL KARASC, KARCM2, KARUC * INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD * * Argument variables * INTEGER FONT(1), SWCHAR(1) * * Local variables * INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 INTEGER NX0100, NX0114, NX0141, NX0204 INTEGER NX0244, OMCRON, OMEGA, PERCNT INTEGER PERIOD, PHI, PI, PLUS INTEGER PSI, QUERY, RANGLE, RBRACE INTEGER RBRAKT, RHO, RPAREN, RSLANT INTEGER SA, SCOLON, SG, SIGMA INTEGER SLASH, SPACE, SQUOTE, SR INTEGER SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB INTEGER UCC, UCD, UCE, UCF INTEGER UCG, UCH, UCI, UCJ INTEGER UCK, UCL, UCM, UCN INTEGER UCO, UCP, UCQ, UCR INTEGER UCS, UCT, UCU, UCV INTEGER UCW, UCX, UCY, UCZ INTEGER UPSLON, USCORE, VBAR, XI INTEGER ZETA * LOGICAL ERROR * * Common variables * INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED * COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED * * Common variables * INTEGER ASCII(96,5), BSWTCH(5), FONTID(5) INTEGER FONTNM(5,5), FSWTCH(5), LSWTCH(5) INTEGER USWTCH(5) * COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH * *====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc80000644000031000002260000001202407621405726016711 0ustar moniotstaff00000000000000c====>Begin Module SYMSF File t208d.f c---->Makedcls Options: All variables c c External functions c EXTERNAL KARASC, KARCM2, KARUC c INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD c c Argument variables c INTEGER FONT(1), SWCHAR(1) c c Local variables c INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 INTEGER NX0100, NX0114, NX0141, NX0204 INTEGER NX0244, OMCRON, OMEGA, PERCNT INTEGER PERIOD, PHI, PI, PLUS INTEGER PSI, QUERY, RANGLE, RBRACE INTEGER RBRAKT, RHO, RPAREN, RSLANT INTEGER SA, SCOLON, SG, SIGMA INTEGER SLASH, SPACE, SQUOTE, SR INTEGER SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB INTEGER UCC, UCD, UCE, UCF INTEGER UCG, UCH, UCI, UCJ INTEGER UCK, UCL, UCM, UCN INTEGER UCO, UCP, UCQ, UCR INTEGER UCS, UCT, UCU, UCV INTEGER UCW, UCX, UCY, UCZ INTEGER UPSLON, USCORE, VBAR, XI INTEGER ZETA c LOGICAL ERROR c c Common variables c INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED c COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED c c Common variables c INTEGER ASCII(96,5), BSWTCH(5), FONTID(5) INTEGER FONTNM(5,5), FSWTCH(5), LSWTCH(5) INTEGER USWTCH(5) c COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH c c====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dc90000644000031000002260000001176407621405726016724 0ustar moniotstaff00000000000000C====>Begin Module SYMSF File t208d.f C---->Makedcls Options: All variables C C External functions C EXTERNAL KARASC, KARCM2, KARUC C INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD C C Argument variables C INTEGER FONT, SWCHAR C C Local variables C INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 INTEGER NX0100, NX0114, NX0141, NX0204 INTEGER NX0244, OMCRON, OMEGA, PERCNT INTEGER PERIOD, PHI, PI, PLUS INTEGER PSI, QUERY, RANGLE, RBRACE INTEGER RBRAKT, RHO, RPAREN, RSLANT INTEGER SA, SCOLON, SG, SIGMA INTEGER SLASH, SPACE, SQUOTE, SR INTEGER SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB INTEGER UCC, UCD, UCE, UCF INTEGER UCG, UCH, UCI, UCJ INTEGER UCK, UCL, UCM, UCN INTEGER UCO, UCP, UCQ, UCR INTEGER UCS, UCT, UCU, UCV INTEGER UCW, UCX, UCY, UCZ INTEGER UPSLON, USCORE, VBAR, XI INTEGER ZETA C LOGICAL ERROR C C Common variables C INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED C COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED C C Common variables C INTEGER ASCII, BSWTCH, FONTID, FONTNM INTEGER FSWTCH, LSWTCH, USWTCH C COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH C C====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.dca0000644000031000002260000001134307621405726016765 0ustar moniotstaff00000000000000!====>Begin Module SYMSF File t208d.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL KARASC, KARCM2, KARUC ! INTEGER KARASC, KARCM2, KARUC, MIN0 INTEGER MOD ! ! Argument variables ! INTEGER FONT(1), SWCHAR(1) ! ! Local variables ! INTEGER ACCENT, ALPHA, AMPSND, AT INTEGER BA, BETA, CARET, CC INTEGER CG, CHI, CI, COLON INTEGER COMMA, CR, CS, CYA INTEGER CYB, CYCHE, CYD, CYE INTEGER CYEE, CYEEK, CYF, CYG INTEGER CYK, CYKHA, CYL, CYM INTEGER CYMZNK, CYN, CYO, CYOO INTEGER CYP, CYR, CYS, CYSH INTEGER CYSHCH, CYT, CYTSE, CYTZNK INTEGER CYV, CYYA, CYYE, CYYIRI INTEGER CYYOO, CYZ, CYZHE, DEL INTEGER DELTA, DOLLAR, DQUOTE, DR INTEGER EPSLON, EQUALS, ETA, EXCLPT INTEGER FCASE, FTYPE, FVAR, GAMMA INTEGER GE, GG, GI, I INTEGER IDIG, IG, II, ILC INTEGER IOTA, IR, IUC, KAPPA INTEGER KG, KR, LAMBDA, LANGLE INTEGER LBRACE, LBRAKT, LCA, LCB INTEGER LCC, LCD, LCE, LCF INTEGER LCG, LCH, LCI, LCJ INTEGER LCK, LCL, LCM, LCN INTEGER LCO, LCP, LCQ, LCR INTEGER LCS, LCT, LCU, LCV INTEGER LCW, LCX, LCY, LCZ INTEGER LOC0, LOC0SV, LOCLC, LOCUC INTEGER LPAREN, MINUS, MU, N20147 INTEGER NOCHAR, NPR001, NPR002, NPR003 INTEGER NPR004, NPR005, NPR006, NPR007 INTEGER NPR008, NPR009, NPR010, NPR011 INTEGER NPR012, NPR013, NPR014, NPR015 INTEGER NPR016, NPR017, NPR018, NPR019 INTEGER NPR020, NPR021, NPR022, NPR023 INTEGER NPR024, NPR025, NPR026, NPR027 INTEGER NPR028, NPR029, NPR030, NPR031 INTEGER NPR032, NPR033, NPR034, NPR035 INTEGER NPR036, NPR037, NPR038, NPR039 INTEGER NPR040, NPR041, NPR042, NPR043 INTEGER NPR044, NPR045, NU, NUL INTEGER NUMBER, NX0028, NX0050, NX0061 INTEGER NX0100, NX0114, NX0141, NX0204 INTEGER NX0244, OMCRON, OMEGA, PERCNT INTEGER PERIOD, PHI, PI, PLUS INTEGER PSI, QUERY, RANGLE, RBRACE INTEGER RBRAKT, RHO, RPAREN, RSLANT INTEGER SA, SCOLON, SG, SIGMA INTEGER SLASH, SPACE, SQUOTE, SR INTEGER SS, STAR, TAU, THETA INTEGER TILDE, TR, UCA, UCB INTEGER UCC, UCD, UCE, UCF INTEGER UCG, UCH, UCI, UCJ INTEGER UCK, UCL, UCM, UCN INTEGER UCO, UCP, UCQ, UCR INTEGER UCS, UCT, UCU, UCV INTEGER UCW, UCX, UCY, UCZ INTEGER UPSLON, USCORE, VBAR, XI INTEGER ZETA ! LOGICAL ERROR ! ! Common variables ! INTEGER CASESW, KFONT, MAXFNT, NFONT INTEGER NFUSED ! COMMON / SYM02 / CASESW, KFONT, MAXFNT, NFONT COMMON / SYM02 / NFUSED ! ! Common variables ! INTEGER ASCII(96,5), BSWTCH(5), FONTID(5), FONTNM(5,5) INTEGER FSWTCH(5), LSWTCH(5), USWTCH(5) ! COMMON / SYM03 / ASCII, BSWTCH, FONTID, FONTNM COMMON / SYM03 / FSWTCH, LSWTCH, USWTCH ! !====>End Module SYMSF File t208d.f ftnchek-3.3.1/test/Okay/t208d.htm00000644000031000002260000002127207621405726017110 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            FONT(1),    SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            MIN0,       MOD
External Functions and Subroutines Called
INTEGER            KARASC,     KARCM2,     KARUC
SUBROUTINE         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
INTEGER           +ACCENT,    +ALPHA,     +AMPSND,    +AT
INTEGER           +BA,        +BETA,      +CARET,     +CC
INTEGER           +CG,        +CHI,       +CI,        +COLON
INTEGER           +COMMA,     +CR,        +CS,        +CYA
INTEGER           +CYB,       +CYCHE,     +CYD,       +CYE
INTEGER           +CYEE,      +CYEEK,     +CYF,       +CYG
INTEGER           +CYK,       +CYKHA,     +CYL,       +CYM
INTEGER           +CYMZNK,    +CYN,       +CYO,       +CYOO
INTEGER           +CYP,       +CYR,       +CYS,       +CYSH
INTEGER           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
INTEGER           +CYV,       +CYYA,      +CYYE,      +CYYIRI
INTEGER           +CYYOO,     +CYZ,       +CYZHE,     +DEL
INTEGER           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
INTEGER           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
INTEGER           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
INTEGER           +GE,        +GG,        +GI,        +I
INTEGER           +IDIG,      +IG,        +II,        +ILC
INTEGER           +IOTA,      +IR,        +IUC,       +KAPPA
INTEGER           +KG,        +KR,        +LAMBDA,    +LANGLE
INTEGER           +LBRACE,    +LBRAKT,    +LCA,       +LCB
INTEGER           +LCC,       +LCD,       +LCE,       +LCF
INTEGER           +LCG,       +LCH,       +LCI,       +LCJ
INTEGER           +LCK,       +LCL,       +LCM,       +LCN
INTEGER           +LCO,       +LCP,       +LCQ,       +LCR
INTEGER           +LCS,       +LCT,       +LCU,       +LCV
INTEGER           +LCW,       +LCX,       +LCY,       +LCZ
INTEGER           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
INTEGER           +LPAREN,    +MINUS,     +MU,        +N20147
INTEGER           +NOCHAR,     NPR007,     NPR008,     NPR010
INTEGER            NPR011,     NPR012,     NPR013,     NPR015
INTEGER            NPR016,     NPR019,     NPR027,     NPR028
INTEGER            NPR032,     NPR033,     NPR043,     NPR044
INTEGER           +NU,        +NUL,       +NUMBER,    +NX0028
INTEGER           +NX0050,    +NX0061,    +NX0100,    +NX0114
INTEGER           +NX0141,    +NX0204,    +NX0244,    +OMCRON
INTEGER           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
INTEGER           +PI,        +PLUS,      +PSI,       +QUERY
INTEGER           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
INTEGER           +RPAREN,    +RSLANT,    +SA,        +SCOLON
INTEGER           +SG,        +SIGMA,     +SLASH,     +SPACE
INTEGER           +SQUOTE,    +SR,        +SS,        +STAR
INTEGER           +TAU,       +THETA,     +TILDE,     +TR
INTEGER           +UCA,       +UCB,       +UCC,       +UCD
INTEGER           +UCE,       +UCF,       +UCG,       +UCH
INTEGER           +UCI,       +UCJ,       +UCK,       +UCL
INTEGER           +UCM,       +UCN,       +UCO,       +UCP
INTEGER           +UCQ,       +UCR,       +UCS,       +UCT
INTEGER           +UCU,       +UCV,       +UCW,       +UCX
INTEGER           +UCY,       +UCZ,       +UPSLON,    +USCORE
INTEGER           +VBAR,      +XI,        +ZETA
LOGICAL           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +KFONT,     MAXFNT
SYM02              INTEGER           +NFONT,    +NFUSED
SYM03              INTEGER           +ASCII(96,5)
SYM03              INTEGER           +BSWTCH(5)
SYM03              INTEGER           +FONTID(5)
SYM03              INTEGER           +FONTNM(5,5)
SYM03              INTEGER           +FSWTCH(5)
SYM03              INTEGER           +LSWTCH(5)
SYM03              INTEGER           +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208d.htm20000644000031000002260000001615407621405726017115 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER  FONT(1),  SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER  MIN0,  MOD
External Functions and Subroutines Called
INTEGER  KARASC,  KARCM2,  KARUC
SUBROUTINE  ERRAT,  ERRCK,  ERRMS,  KARUPK
Local Variables (+ indicates altered content)
INTEGER +ACCENT, +ALPHA, +AMPSND, +AT, +BA, +BETA, +CARET, +CC
INTEGER +CG, +CHI, +CI, +COLON, +COMMA, +CR, +CS, +CYA, +CYB
INTEGER +CYCHE, +CYD, +CYE, +CYEE, +CYEEK, +CYF, +CYG, +CYK
INTEGER +CYKHA, +CYL, +CYM, +CYMZNK, +CYN, +CYO, +CYOO, +CYP, +CYR
INTEGER +CYS, +CYSH, +CYSHCH, +CYT, +CYTSE, +CYTZNK, +CYV, +CYYA
INTEGER +CYYE, +CYYIRI, +CYYOO, +CYZ, +CYZHE, +DEL, +DELTA
INTEGER +DOLLAR, +DQUOTE, +DR, +EPSLON, +EQUALS, +ETA, +EXCLPT
INTEGER +FCASE, +FTYPE, +FVAR, +GAMMA, +GE, +GG, +GI, +I, +IDIG
INTEGER +IG, +II, +ILC, +IOTA, +IR, +IUC, +KAPPA, +KG, +KR
INTEGER +LAMBDA, +LANGLE, +LBRACE, +LBRAKT, +LCA, +LCB, +LCC, +LCD
INTEGER +LCE, +LCF, +LCG, +LCH, +LCI, +LCJ, +LCK, +LCL, +LCM, +LCN
INTEGER +LCO, +LCP, +LCQ, +LCR, +LCS, +LCT, +LCU, +LCV, +LCW, +LCX
INTEGER +LCY, +LCZ, +LOC0, +LOC0SV, +LOCLC, +LOCUC, +LPAREN
INTEGER +MINUS, +MU, +N20147, +NOCHAR,  NPR007,  NPR008,  NPR010
INTEGER  NPR011,  NPR012,  NPR013,  NPR015,  NPR016,  NPR019
INTEGER  NPR027,  NPR028,  NPR032,  NPR033,  NPR043,  NPR044, +NU
INTEGER +NUL, +NUMBER, +NX0028, +NX0050, +NX0061, +NX0100, +NX0114
INTEGER +NX0141, +NX0204, +NX0244, +OMCRON, +OMEGA, +PERCNT
INTEGER +PERIOD, +PHI, +PI, +PLUS, +PSI, +QUERY, +RANGLE, +RBRACE
INTEGER +RBRAKT, +RHO, +RPAREN, +RSLANT, +SA, +SCOLON, +SG, +SIGMA
INTEGER +SLASH, +SPACE, +SQUOTE, +SR, +SS, +STAR, +TAU, +THETA
INTEGER +TILDE, +TR, +UCA, +UCB, +UCC, +UCD, +UCE, +UCF, +UCG
INTEGER +UCH, +UCI, +UCJ, +UCK, +UCL, +UCM, +UCN, +UCO, +UCP, +UCQ
INTEGER +UCR, +UCS, +UCT, +UCU, +UCV, +UCW, +UCX, +UCY, +UCZ
INTEGER +UPSLON, +USCORE, +VBAR, +XI, +ZETA
LOGICAL +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER +KFONT,               MAXFNT
SYM02              INTEGER +NFONT,              +NFUSED
SYM03              INTEGER +ASCII(96,5),        +BSWTCH(5)
SYM03              INTEGER +FONTID(5),          +FONTNM(5,5)
SYM03              INTEGER +FSWTCH(5),          +LSWTCH(5)
SYM03              INTEGER +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208d.htm30000644000031000002260000002127207621405726017113 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            FONT(1),    SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            MIN0,       MOD
External Functions and Subroutines Called
INTEGER            KARASC,     KARCM2,     KARUC
SUBROUTINE         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
INTEGER           +ACCENT,    +ALPHA,     +AMPSND,    +AT
     x,           +BA,        +BETA,      +CARET,     +CC
     x,           +CG,        +CHI,       +CI,        +COLON
     x,           +COMMA,     +CR,        +CS,        +CYA
     x,           +CYB,       +CYCHE,     +CYD,       +CYE
     x,           +CYEE,      +CYEEK,     +CYF,       +CYG
     x,           +CYK,       +CYKHA,     +CYL,       +CYM
     x,           +CYMZNK,    +CYN,       +CYO,       +CYOO
     x,           +CYP,       +CYR,       +CYS,       +CYSH
     x,           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
     x,           +CYV,       +CYYA,      +CYYE,      +CYYIRI
     x,           +CYYOO,     +CYZ,       +CYZHE,     +DEL
     x,           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
     x,           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
     x,           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
     x,           +GE,        +GG,        +GI,        +I
     x,           +IDIG,      +IG,        +II,        +ILC
     x,           +IOTA,      +IR,        +IUC,       +KAPPA
     x,           +KG,        +KR,        +LAMBDA,    +LANGLE
     x,           +LBRACE,    +LBRAKT,    +LCA,       +LCB
INTEGER           +LCC,       +LCD,       +LCE,       +LCF
     x,           +LCG,       +LCH,       +LCI,       +LCJ
     x,           +LCK,       +LCL,       +LCM,       +LCN
     x,           +LCO,       +LCP,       +LCQ,       +LCR
     x,           +LCS,       +LCT,       +LCU,       +LCV
     x,           +LCW,       +LCX,       +LCY,       +LCZ
     x,           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
     x,           +LPAREN,    +MINUS,     +MU,        +N20147
     x,           +NOCHAR,     NPR007,     NPR008,     NPR010
     x,            NPR011,     NPR012,     NPR013,     NPR015
     x,            NPR016,     NPR019,     NPR027,     NPR028
     x,            NPR032,     NPR033,     NPR043,     NPR044
     x,           +NU,        +NUL,       +NUMBER,    +NX0028
     x,           +NX0050,    +NX0061,    +NX0100,    +NX0114
     x,           +NX0141,    +NX0204,    +NX0244,    +OMCRON
     x,           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
     x,           +PI,        +PLUS,      +PSI,       +QUERY
     x,           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
     x,           +RPAREN,    +RSLANT,    +SA,        +SCOLON
     x,           +SG,        +SIGMA,     +SLASH,     +SPACE
INTEGER           +SQUOTE,    +SR,        +SS,        +STAR
     x,           +TAU,       +THETA,     +TILDE,     +TR
     x,           +UCA,       +UCB,       +UCC,       +UCD
     x,           +UCE,       +UCF,       +UCG,       +UCH
     x,           +UCI,       +UCJ,       +UCK,       +UCL
     x,           +UCM,       +UCN,       +UCO,       +UCP
     x,           +UCQ,       +UCR,       +UCS,       +UCT
     x,           +UCU,       +UCV,       +UCW,       +UCX
     x,           +UCY,       +UCZ,       +UPSLON,    +USCORE
     x,           +VBAR,      +XI,        +ZETA
LOGICAL           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +KFONT,     MAXFNT
SYM02              INTEGER           +NFONT,    +NFUSED
SYM03              INTEGER           +ASCII(96,5)
SYM03              INTEGER           +BSWTCH(5)
SYM03              INTEGER           +FONTID(5)
SYM03              INTEGER           +FONTNM(5,5)
SYM03              INTEGER           +FSWTCH(5)
SYM03              INTEGER           +LSWTCH(5)
SYM03              INTEGER           +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208d.htm40000644000031000002260000002127207621405726017114 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
integer            FONT(1),    SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
integer            MIN0,       MOD
External Functions and Subroutines Called
integer            KARASC,     KARCM2,     KARUC
subroutine         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
integer           +ACCENT,    +ALPHA,     +AMPSND,    +AT
integer           +BA,        +BETA,      +CARET,     +CC
integer           +CG,        +CHI,       +CI,        +COLON
integer           +COMMA,     +CR,        +CS,        +CYA
integer           +CYB,       +CYCHE,     +CYD,       +CYE
integer           +CYEE,      +CYEEK,     +CYF,       +CYG
integer           +CYK,       +CYKHA,     +CYL,       +CYM
integer           +CYMZNK,    +CYN,       +CYO,       +CYOO
integer           +CYP,       +CYR,       +CYS,       +CYSH
integer           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
integer           +CYV,       +CYYA,      +CYYE,      +CYYIRI
integer           +CYYOO,     +CYZ,       +CYZHE,     +DEL
integer           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
integer           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
integer           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
integer           +GE,        +GG,        +GI,        +I
integer           +IDIG,      +IG,        +II,        +ILC
integer           +IOTA,      +IR,        +IUC,       +KAPPA
integer           +KG,        +KR,        +LAMBDA,    +LANGLE
integer           +LBRACE,    +LBRAKT,    +LCA,       +LCB
integer           +LCC,       +LCD,       +LCE,       +LCF
integer           +LCG,       +LCH,       +LCI,       +LCJ
integer           +LCK,       +LCL,       +LCM,       +LCN
integer           +LCO,       +LCP,       +LCQ,       +LCR
integer           +LCS,       +LCT,       +LCU,       +LCV
integer           +LCW,       +LCX,       +LCY,       +LCZ
integer           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
integer           +LPAREN,    +MINUS,     +MU,        +N20147
integer           +NOCHAR,     NPR007,     NPR008,     NPR010
integer            NPR011,     NPR012,     NPR013,     NPR015
integer            NPR016,     NPR019,     NPR027,     NPR028
integer            NPR032,     NPR033,     NPR043,     NPR044
integer           +NU,        +NUL,       +NUMBER,    +NX0028
integer           +NX0050,    +NX0061,    +NX0100,    +NX0114
integer           +NX0141,    +NX0204,    +NX0244,    +OMCRON
integer           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
integer           +PI,        +PLUS,      +PSI,       +QUERY
integer           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
integer           +RPAREN,    +RSLANT,    +SA,        +SCOLON
integer           +SG,        +SIGMA,     +SLASH,     +SPACE
integer           +SQUOTE,    +SR,        +SS,        +STAR
integer           +TAU,       +THETA,     +TILDE,     +TR
integer           +UCA,       +UCB,       +UCC,       +UCD
integer           +UCE,       +UCF,       +UCG,       +UCH
integer           +UCI,       +UCJ,       +UCK,       +UCL
integer           +UCM,       +UCN,       +UCO,       +UCP
integer           +UCQ,       +UCR,       +UCS,       +UCT
integer           +UCU,       +UCV,       +UCW,       +UCX
integer           +UCY,       +UCZ,       +UPSLON,    +USCORE
integer           +VBAR,      +XI,        +ZETA
logical           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              integer           +KFONT,     MAXFNT
SYM02              integer           +NFONT,    +NFUSED
SYM03              integer           +ASCII(96,5)
SYM03              integer           +BSWTCH(5)
SYM03              integer           +FONTID(5)
SYM03              integer           +FONTNM(5,5)
SYM03              integer           +FSWTCH(5)
SYM03              integer           +LSWTCH(5)
SYM03              integer           +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208d.htm50000644000031000002260000002127207621405726017115 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            font(1),    swchar(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            min0,       mod
External Functions and Subroutines Called
INTEGER            karasc,     karcm2,     karuc
SUBROUTINE         errat,      errck,      errms,      karupk
Local Variables (+ indicates altered content)
INTEGER           +accent,    +alpha,     +ampsnd,    +at
INTEGER           +ba,        +beta,      +caret,     +cc
INTEGER           +cg,        +chi,       +ci,        +colon
INTEGER           +comma,     +cr,        +cs,        +cya
INTEGER           +cyb,       +cyche,     +cyd,       +cye
INTEGER           +cyee,      +cyeek,     +cyf,       +cyg
INTEGER           +cyk,       +cykha,     +cyl,       +cym
INTEGER           +cymznk,    +cyn,       +cyo,       +cyoo
INTEGER           +cyp,       +cyr,       +cys,       +cysh
INTEGER           +cyshch,    +cyt,       +cytse,     +cytznk
INTEGER           +cyv,       +cyya,      +cyye,      +cyyiri
INTEGER           +cyyoo,     +cyz,       +cyzhe,     +del
INTEGER           +delta,     +dollar,    +dquote,    +dr
INTEGER           +epslon,    +equals,    +eta,       +exclpt
INTEGER           +fcase,     +ftype,     +fvar,      +gamma
INTEGER           +ge,        +gg,        +gi,        +i
INTEGER           +idig,      +ig,        +ii,        +ilc
INTEGER           +iota,      +ir,        +iuc,       +kappa
INTEGER           +kg,        +kr,        +lambda,    +langle
INTEGER           +lbrace,    +lbrakt,    +lca,       +lcb
INTEGER           +lcc,       +lcd,       +lce,       +lcf
INTEGER           +lcg,       +lch,       +lci,       +lcj
INTEGER           +lck,       +lcl,       +lcm,       +lcn
INTEGER           +lco,       +lcp,       +lcq,       +lcr
INTEGER           +lcs,       +lct,       +lcu,       +lcv
INTEGER           +lcw,       +lcx,       +lcy,       +lcz
INTEGER           +loc0,      +loc0sv,    +loclc,     +locuc
INTEGER           +lparen,    +minus,     +mu,        +n20147
INTEGER           +nochar,     npr007,     npr008,     npr010
INTEGER            npr011,     npr012,     npr013,     npr015
INTEGER            npr016,     npr019,     npr027,     npr028
INTEGER            npr032,     npr033,     npr043,     npr044
INTEGER           +nu,        +nul,       +number,    +nx0028
INTEGER           +nx0050,    +nx0061,    +nx0100,    +nx0114
INTEGER           +nx0141,    +nx0204,    +nx0244,    +omcron
INTEGER           +omega,     +percnt,    +period,    +phi
INTEGER           +pi,        +plus,      +psi,       +query
INTEGER           +rangle,    +rbrace,    +rbrakt,    +rho
INTEGER           +rparen,    +rslant,    +sa,        +scolon
INTEGER           +sg,        +sigma,     +slash,     +space
INTEGER           +squote,    +sr,        +ss,        +star
INTEGER           +tau,       +theta,     +tilde,     +tr
INTEGER           +uca,       +ucb,       +ucc,       +ucd
INTEGER           +uce,       +ucf,       +ucg,       +uch
INTEGER           +uci,       +ucj,       +uck,       +ucl
INTEGER           +ucm,       +ucn,       +uco,       +ucp
INTEGER           +ucq,       +ucr,       +ucs,       +uct
INTEGER           +ucu,       +ucv,       +ucw,       +ucx
INTEGER           +ucy,       +ucz,       +upslon,    +uscore
INTEGER           +vbar,      +xi,        +zeta
LOGICAL           +error
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +kfont,     maxfnt
SYM02              INTEGER           +nfont,    +nfused
SYM03              INTEGER           +ascii(96,5)
SYM03              INTEGER           +bswtch(5)
SYM03              INTEGER           +fontid(5)
SYM03              INTEGER           +fontnm(5,5)
SYM03              INTEGER           +fswtch(5)
SYM03              INTEGER           +lswtch(5)
SYM03              INTEGER           +uswtch(5)

ftnchek-3.3.1/test/Okay/t208d.htm60000644000031000002260000002050607621405726017115 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            FONT(1),    SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            MIN0,       MOD
External Functions and Subroutines Called
INTEGER            KARASC,     KARCM2,     KARUC
SUBROUTINE         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
INTEGER           +ACCENT,    +ALPHA,     +AMPSND,    +AT
INTEGER           +BA,        +BETA,      +CARET,     +CC
INTEGER           +CG,        +CHI,       +CI,        +COLON
INTEGER           +COMMA,     +CR,        +CS,        +CYA
INTEGER           +CYB,       +CYCHE,     +CYD,       +CYE
INTEGER           +CYEE,      +CYEEK,     +CYF,       +CYG
INTEGER           +CYK,       +CYKHA,     +CYL,       +CYM
INTEGER           +CYMZNK,    +CYN,       +CYO,       +CYOO
INTEGER           +CYP,       +CYR,       +CYS,       +CYSH
INTEGER           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
INTEGER           +CYV,       +CYYA,      +CYYE,      +CYYIRI
INTEGER           +CYYOO,     +CYZ,       +CYZHE,     +DEL
INTEGER           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
INTEGER           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
INTEGER           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
INTEGER           +GE,        +GG,        +GI,        +I
INTEGER           +IDIG,      +IG,        +II,        +ILC
INTEGER           +IOTA,      +IR,        +IUC,       +KAPPA
INTEGER           +KG,        +KR,        +LAMBDA,    +LANGLE
INTEGER           +LBRACE,    +LBRAKT,    +LCA,       +LCB
INTEGER           +LCC,       +LCD,       +LCE,       +LCF
INTEGER           +LCG,       +LCH,       +LCI,       +LCJ
INTEGER           +LCK,       +LCL,       +LCM,       +LCN
INTEGER           +LCO,       +LCP,       +LCQ,       +LCR
INTEGER           +LCS,       +LCT,       +LCU,       +LCV
INTEGER           +LCW,       +LCX,       +LCY,       +LCZ
INTEGER           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
INTEGER           +LPAREN,    +MINUS,     +MU,        +NOCHAR
INTEGER           +NU,        +NUL,       +NUMBER,    +OMCRON
INTEGER           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
INTEGER           +PI,        +PLUS,      +PSI,       +QUERY
INTEGER           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
INTEGER           +RPAREN,    +RSLANT,    +SA,        +SCOLON
INTEGER           +SG,        +SIGMA,     +SLASH,     +SPACE
INTEGER           +SQUOTE,    +SR,        +SS,        +STAR
INTEGER           +TAU,       +THETA,     +TILDE,     +TR
INTEGER           +UCA,       +UCB,       +UCC,       +UCD
INTEGER           +UCE,       +UCF,       +UCG,       +UCH
INTEGER           +UCI,       +UCJ,       +UCK,       +UCL
INTEGER           +UCM,       +UCN,       +UCO,       +UCP
INTEGER           +UCQ,       +UCR,       +UCS,       +UCT
INTEGER           +UCU,       +UCV,       +UCW,       +UCX
INTEGER           +UCY,       +UCZ,       +UPSLON,    +USCORE
INTEGER           +VBAR,      +XI,        +ZETA
LOGICAL           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +KFONT,     MAXFNT
SYM02              INTEGER           +NFONT,    +NFUSED
SYM03              INTEGER           +ASCII(96,5)
SYM03              INTEGER           +BSWTCH(5)
SYM03              INTEGER           +FONTID(5)
SYM03              INTEGER           +FONTNM(5,5)
SYM03              INTEGER           +FSWTCH(5)
SYM03              INTEGER           +LSWTCH(5)
SYM03              INTEGER           +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208d.htm90000644000031000002260000002107007621405726017115 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            FONT,       SWCHAR
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            MIN0,       MOD
External Functions and Subroutines Called
INTEGER            KARASC,     KARCM2,     KARUC
SUBROUTINE         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
INTEGER           +ACCENT,    +ALPHA,     +AMPSND,    +AT
INTEGER           +BA,        +BETA,      +CARET,     +CC
INTEGER           +CG,        +CHI,       +CI,        +COLON
INTEGER           +COMMA,     +CR,        +CS,        +CYA
INTEGER           +CYB,       +CYCHE,     +CYD,       +CYE
INTEGER           +CYEE,      +CYEEK,     +CYF,       +CYG
INTEGER           +CYK,       +CYKHA,     +CYL,       +CYM
INTEGER           +CYMZNK,    +CYN,       +CYO,       +CYOO
INTEGER           +CYP,       +CYR,       +CYS,       +CYSH
INTEGER           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
INTEGER           +CYV,       +CYYA,      +CYYE,      +CYYIRI
INTEGER           +CYYOO,     +CYZ,       +CYZHE,     +DEL
INTEGER           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
INTEGER           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
INTEGER           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
INTEGER           +GE,        +GG,        +GI,        +I
INTEGER           +IDIG,      +IG,        +II,        +ILC
INTEGER           +IOTA,      +IR,        +IUC,       +KAPPA
INTEGER           +KG,        +KR,        +LAMBDA,    +LANGLE
INTEGER           +LBRACE,    +LBRAKT,    +LCA,       +LCB
INTEGER           +LCC,       +LCD,       +LCE,       +LCF
INTEGER           +LCG,       +LCH,       +LCI,       +LCJ
INTEGER           +LCK,       +LCL,       +LCM,       +LCN
INTEGER           +LCO,       +LCP,       +LCQ,       +LCR
INTEGER           +LCS,       +LCT,       +LCU,       +LCV
INTEGER           +LCW,       +LCX,       +LCY,       +LCZ
INTEGER           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
INTEGER           +LPAREN,    +MINUS,     +MU,        +N20147
INTEGER           +NOCHAR,     NPR007,     NPR008,     NPR010
INTEGER            NPR011,     NPR012,     NPR013,     NPR015
INTEGER            NPR016,     NPR019,     NPR027,     NPR028
INTEGER            NPR032,     NPR033,     NPR043,     NPR044
INTEGER           +NU,        +NUL,       +NUMBER,    +NX0028
INTEGER           +NX0050,    +NX0061,    +NX0100,    +NX0114
INTEGER           +NX0141,    +NX0204,    +NX0244,    +OMCRON
INTEGER           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
INTEGER           +PI,        +PLUS,      +PSI,       +QUERY
INTEGER           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
INTEGER           +RPAREN,    +RSLANT,    +SA,        +SCOLON
INTEGER           +SG,        +SIGMA,     +SLASH,     +SPACE
INTEGER           +SQUOTE,    +SR,        +SS,        +STAR
INTEGER           +TAU,       +THETA,     +TILDE,     +TR
INTEGER           +UCA,       +UCB,       +UCC,       +UCD
INTEGER           +UCE,       +UCF,       +UCG,       +UCH
INTEGER           +UCI,       +UCJ,       +UCK,       +UCL
INTEGER           +UCM,       +UCN,       +UCO,       +UCP
INTEGER           +UCQ,       +UCR,       +UCS,       +UCT
INTEGER           +UCU,       +UCV,       +UCW,       +UCX
INTEGER           +UCY,       +UCZ,       +UPSLON,    +USCORE
INTEGER           +VBAR,      +XI,        +ZETA
LOGICAL           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +KFONT,     MAXFNT
SYM02              INTEGER           +NFONT,    +NFUSED
SYM03              INTEGER           +ASCII,    +BSWTCH
SYM03              INTEGER           +FONTID,   +FONTNM
SYM03              INTEGER           +FSWTCH,   +LSWTCH
SYM03              INTEGER           +USWTCH

ftnchek-3.3.1/test/Okay/t208d.htma0000644000031000002260000002127207621405726017171 0ustar moniotstaff00000000000000 Source t208d.f

SUBROUTINE SYMSF ( FONT, SWCHAR )

Argument Definitions (+ indicates altered content)
INTEGER            FONT(1),    SWCHAR(1)
Description
   (Select Font) 
   Select  one  of  the  Hershey  fonts  for  subsequent  text 
   plotting.  Up to five fonts may  be in effect at one  time. 
   The last selected is  the default one.   If more than  five 
   fonts are requested, the sixth will replace the first,  the 
   seventh the second, and  so on in  a cyclic fashion.   This 
   restriction  is  purely  dimensional,  and  may  easily  be 
   changed  if  required.   The  case  switch  characters  are 
   initialized to  "<"  and  ">"  for  to-upper  and  to-lower 
   respectively.    The   backspace   character   switch    is 
   initialized to 0, suppressing the backspace facility.   The 
   arguments are: 
 
   FONT(*).....5-character string selecting font (see below). 
   SWCHAR(*)...Single  character (e.g. 1H=)  used  as a switch 
               character to return to this font from  another. 
               It will be interpreted as a switch character if 
               it occurs only  once.  However, two  successive 
               switch characters  for a  single font  will  be 
               collapsed to a single character and will not be 
               interpreted as a font switch.  A blank or  zero 
               value indicates  that  no switch  character  is 
               selected. 
 
   The fonts are selected by  a five-character string made  up 
   of a  2-character case  specification, a  2-character  type 
   specification, and a 1-character variant specification,  as 
   follows: 
 
   Case: UC - Upper Case 
         LC - Lower Case 
 
   Type: KR - Cartographic Roman (9) 
         KG - Cartographic Greek (9) 
         IR - Indexical Roman (13) 
         II - Indexical Roman Italic (13) 
         IG - Indexical Greek (13) 
         SA - Simplex ASCII (15) 
         BA - Block ASCII (15) 
         SR - Simplex Roman (21) 
         SS - Simplex Roman Script (21) 
         SG - Simplex Greek (21) 
         CR - Complex Normal Roman (21) 
         CI - Complex Normal Roman Italic (21) 
         CG - Complex Normal Greek (21) 
         CS - Complex Script (21) 
         DR - Duplex Roman (21) 
         TR - Triplex Roman (21) 
         GE - Gothic English (21) 
         GI - Gothic Italian (21) 
         GG - Gothic German (21) 
         CC - Complex Cyrillic (21) 
 
   Variant: 1 - Principal 
            2 - Secondary 
            3 - Tertiary 
            4 - Quaternary 
 
   Selector letters may be  either upper- or lower-case.   The 
   case specification is arranged  such that if upper-case  is 
   requested, upper-case text will be mapped into  upper-case, 
   and  lower-case   into   lower-case.   If   lower-case   is 
   requested, both upper-  and lower-case  letters are  mapped 
   into lower case.  The four  variants are provided to  allow 
   representation of  special  characters within  the  limited 
   FORTRAN set.  The Gothic and  Cyrillic fonts have only  two 
   variants available.  Requests for variants  3 or 4 will  be 
   reduced to  variant  2.   The ASCII  fonts  have  only  one 
   variant, and  requests for  variants  2, 3,  or 4  will  be 
   reduced to variant 1. 
 
   The numbers (9),  (13), (15), and  (21) following the  type 
   indicate the height of the characters in raster units.  The 
   spacing between lines of text is conventionally measured by 
   the printer's  unit  "em",  giving the  distance  from  the 
   bottom of one line of type to the bottom of the next  line. 
   It should be  21 raster  units for indexical  size, and  32 
   raster units for normal size. 
 
   If any of the three parts  of the font specification is  in 
   error, a message  will be  issued, and a  default for  that 
   part will be assumed.  The default corresponds to  "UCTR1". 
   (01-APR-83) 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL REFERENCES (FUNCTION,SUBROUTINE,COMMON) 
 
   EXTERNAL REFS       ERRAT,       ERRCK,       ERRMS,       KARASC 
   EXTERNAL REFS       KARCM2,      KARUC,       KARUPK,      MIN0 
   EXTERNAL REFS       MOD 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   EXTERNAL FUNCTIONS AND SUBROUTINES
Source file:t208d.f
Intrinsic Functions Called
INTEGER            MIN0,       MOD
External Functions and Subroutines Called
INTEGER            KARASC,     KARCM2,     KARUC
SUBROUTINE         ERRAT,      ERRCK,      ERRMS,      KARUPK
Local Variables (+ indicates altered content)
INTEGER           +ACCENT,    +ALPHA,     +AMPSND,    +AT
INTEGER           +BA,        +BETA,      +CARET,     +CC
INTEGER           +CG,        +CHI,       +CI,        +COLON
INTEGER           +COMMA,     +CR,        +CS,        +CYA
INTEGER           +CYB,       +CYCHE,     +CYD,       +CYE
INTEGER           +CYEE,      +CYEEK,     +CYF,       +CYG
INTEGER           +CYK,       +CYKHA,     +CYL,       +CYM
INTEGER           +CYMZNK,    +CYN,       +CYO,       +CYOO
INTEGER           +CYP,       +CYR,       +CYS,       +CYSH
INTEGER           +CYSHCH,    +CYT,       +CYTSE,     +CYTZNK
INTEGER           +CYV,       +CYYA,      +CYYE,      +CYYIRI
INTEGER           +CYYOO,     +CYZ,       +CYZHE,     +DEL
INTEGER           +DELTA,     +DOLLAR,    +DQUOTE,    +DR
INTEGER           +EPSLON,    +EQUALS,    +ETA,       +EXCLPT
INTEGER           +FCASE,     +FTYPE,     +FVAR,      +GAMMA
INTEGER           +GE,        +GG,        +GI,        +I
INTEGER           +IDIG,      +IG,        +II,        +ILC
INTEGER           +IOTA,      +IR,        +IUC,       +KAPPA
INTEGER           +KG,        +KR,        +LAMBDA,    +LANGLE
INTEGER           +LBRACE,    +LBRAKT,    +LCA,       +LCB
INTEGER           +LCC,       +LCD,       +LCE,       +LCF
INTEGER           +LCG,       +LCH,       +LCI,       +LCJ
INTEGER           +LCK,       +LCL,       +LCM,       +LCN
INTEGER           +LCO,       +LCP,       +LCQ,       +LCR
INTEGER           +LCS,       +LCT,       +LCU,       +LCV
INTEGER           +LCW,       +LCX,       +LCY,       +LCZ
INTEGER           +LOC0,      +LOC0SV,    +LOCLC,     +LOCUC
INTEGER           +LPAREN,    +MINUS,     +MU,        +N20147
INTEGER           +NOCHAR,     NPR007,     NPR008,     NPR010
INTEGER            NPR011,     NPR012,     NPR013,     NPR015
INTEGER            NPR016,     NPR019,     NPR027,     NPR028
INTEGER            NPR032,     NPR033,     NPR043,     NPR044
INTEGER           +NU,        +NUL,       +NUMBER,    +NX0028
INTEGER           +NX0050,    +NX0061,    +NX0100,    +NX0114
INTEGER           +NX0141,    +NX0204,    +NX0244,    +OMCRON
INTEGER           +OMEGA,     +PERCNT,    +PERIOD,    +PHI
INTEGER           +PI,        +PLUS,      +PSI,       +QUERY
INTEGER           +RANGLE,    +RBRACE,    +RBRAKT,    +RHO
INTEGER           +RPAREN,    +RSLANT,    +SA,        +SCOLON
INTEGER           +SG,        +SIGMA,     +SLASH,     +SPACE
INTEGER           +SQUOTE,    +SR,        +SS,        +STAR
INTEGER           +TAU,       +THETA,     +TILDE,     +TR
INTEGER           +UCA,       +UCB,       +UCC,       +UCD
INTEGER           +UCE,       +UCF,       +UCG,       +UCH
INTEGER           +UCI,       +UCJ,       +UCK,       +UCL
INTEGER           +UCM,       +UCN,       +UCO,       +UCP
INTEGER           +UCQ,       +UCR,       +UCS,       +UCT
INTEGER           +UCU,       +UCV,       +UCW,       +UCX
INTEGER           +UCY,       +UCZ,       +UPSLON,    +USCORE
INTEGER           +VBAR,      +XI,        +ZETA
LOGICAL           +ERROR
Referenced Common Block Variables (+ indicates altered content)
SYM02              INTEGER           +KFONT,     MAXFNT
SYM02              INTEGER           +NFONT,    +NFUSED
SYM03              INTEGER           +ASCII(96,5)
SYM03              INTEGER           +BSWTCH(5)
SYM03              INTEGER           +FONTID(5)
SYM03              INTEGER           +FONTNM(5,5)
SYM03              INTEGER           +FSWTCH(5)
SYM03              INTEGER           +LSWTCH(5)
SYM03              INTEGER           +USWTCH(5)

ftnchek-3.3.1/test/Okay/t208e.dc00000644000031000002260000000403207621405726016702 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C CHARACTER*81 LINE C COMPLEX Z, ZZ C DOUBLE COMPLEX ZZZ, ZZZZ C DOUBLE PRECISION D(10,20,30), E(40,50), F(60) C INTEGER I, J, K, M C LOGICAL LOGVAR C REAL R, S(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C REAL PI PARAMETER (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc10000644000031000002260000000155707621405726016714 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: Undeclared variables C C Local variables C INTEGER M C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: Undeclared variables C C Common variables C REAL A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: Undeclared variables C C Common variables C REAL A, B, C C C====>End Module FUN File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc20000644000031000002260000000315307621405726016707 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C CHARACTER*81 LINE C COMPLEX Z, ZZ C DOUBLE COMPLEX ZZZ, ZZZZ C DOUBLE PRECISION D(10,20,30), E(40,50), F(60) C INTEGER I, J, K, M C LOGICAL LOGVAR C REAL R, S(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON /SHARE/ A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON /SHARE/ A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C REAL PI PARAMETER (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc30000644000031000002260000000403207621405726016705 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C CHARACTER*81 LINE C COMPLEX Z, ZZ C DOUBLE COMPLEX ZZZ, ZZZZ C DOUBLE PRECISION D(10,20,30), E(40,50), F(60) C INTEGER I, J, K, M C LOGICAL LOGVAR C REAL R, S(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C REAL PI PARAMETER (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc40000644000031000002260000000403207621405726016706 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C character C character*81 LINE C complex Z, ZZ C double complex ZZZ, ZZZZ C double precision D(10,20,30), E(40,50), F(60) C integer I, J, K, M C logical LOGVAR C real R, S(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C real X, Y, Z C C Common variables C real A, B, C C common / SHARE / A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C real X, Y, Z C C Common variables C real A, B, C C common / SHARE / A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C intrinsic COS, SIN, SQRT C C External functions C external MYSQRT, MYSUB C real MYSQRT C C Parameter variables C integer NPI parameter (NPI = 9) C real PI parameter (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc50000644000031000002260000000403207621405726016707 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C CHARACTER c CHARACTER*81 line C COMPLEX z, zz C DOUBLE COMPLEX zzz, zzzz C DOUBLE PRECISION d(10,20,30), e(40,50), f(60) C INTEGER i, j, k, m C LOGICAL logvar C REAL r, s(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL x, y, z C C Common variables C REAL a, b, c C COMMON / share / a, b, c C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL x, y, z C C Common variables C REAL a, b, c C COMMON / share / a, b, c C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC cos, sin, sqrt C C External functions C EXTERNAL mysqrt, mysub C REAL mysqrt C C Parameter variables C INTEGER npi PARAMETER (npi = 9) C REAL pi PARAMETER (pi = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc60000644000031000002260000000403207621405726016710 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C CHARACTER C CHARACTER*81 LINE C COMPLEX Z, ZZ C DOUBLE COMPLEX ZZZ, ZZZZ C DOUBLE PRECISION D(10,20,30), E(40,50), F(60) C INTEGER I, J, K, M C LOGICAL LOGVAR C REAL R, S(70,80) C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C REAL PI PARAMETER (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc70000644000031000002260000000403207621405726016711 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208e.f *---->Makedcls Options: All variables * * Local variables * CHARACTER C CHARACTER*81 LINE * COMPLEX Z, ZZ * DOUBLE COMPLEX ZZZ, ZZZZ * DOUBLE PRECISION D(10,20,30), E(40,50), F(60) * INTEGER I, J, K, M * LOGICAL LOGVAR * REAL R, S(70,80) * *====>End Module %MAIN File t208e.f *====>Begin Module SUB File t208e.f *---->Makedcls Options: All variables * * Local variables * REAL X, Y, Z * * Common variables * REAL A, B, C * COMMON / SHARE / A, B, C * *====>End Module SUB File t208e.f *====>Begin Module FUN File t208e.f *---->Makedcls Options: All variables * * Local variables * REAL X, Y, Z * * Common variables * REAL A, B, C * COMMON / SHARE / A, B, C * *====>End Module FUN File t208e.f *====>Begin Module BAR File t208e.f *---->Makedcls Options: All variables * * Intrinsic functions * INTRINSIC COS, SIN, SQRT * * External functions * EXTERNAL MYSQRT, MYSUB * REAL MYSQRT * * Parameter variables * INTEGER NPI PARAMETER (NPI = 9) * REAL PI PARAMETER (PI = 3.14159265) * *====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc80000644000031000002260000000403207621405726016712 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208e.f c---->Makedcls Options: All variables c c Local variables c CHARACTER C CHARACTER*81 LINE c COMPLEX Z, ZZ c DOUBLE COMPLEX ZZZ, ZZZZ c DOUBLE PRECISION D(10,20,30), E(40,50), F(60) c INTEGER I, J, K, M c LOGICAL LOGVAR c REAL R, S(70,80) c c====>End Module %MAIN File t208e.f c====>Begin Module SUB File t208e.f c---->Makedcls Options: All variables c c Local variables c REAL X, Y, Z c c Common variables c REAL A, B, C c COMMON / SHARE / A, B, C c c====>End Module SUB File t208e.f c====>Begin Module FUN File t208e.f c---->Makedcls Options: All variables c c Local variables c REAL X, Y, Z c c Common variables c REAL A, B, C c COMMON / SHARE / A, B, C c c====>End Module FUN File t208e.f c====>Begin Module BAR File t208e.f c---->Makedcls Options: All variables c c Intrinsic functions c INTRINSIC COS, SIN, SQRT c c External functions c EXTERNAL MYSQRT, MYSUB c REAL MYSQRT c c Parameter variables c INTEGER NPI PARAMETER (NPI = 9) c REAL PI PARAMETER (PI = 3.14159265) c c====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dc90000644000031000002260000000401707621405726016716 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208e.f C---->Makedcls Options: All variables C C Local variables C CHARACTER C CHARACTER*81 LINE C COMPLEX Z, ZZ C DOUBLE COMPLEX ZZZ, ZZZZ C DOUBLE PRECISION D, E, F C INTEGER I, J, K, M C LOGICAL LOGVAR C REAL R, S C C====>End Module %MAIN File t208e.f C====>Begin Module SUB File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module SUB File t208e.f C====>Begin Module FUN File t208e.f C---->Makedcls Options: All variables C C Local variables C REAL X, Y, Z C C Common variables C REAL A, B, C C COMMON / SHARE / A, B, C C C====>End Module FUN File t208e.f C====>Begin Module BAR File t208e.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC COS, SIN, SQRT C C External functions C EXTERNAL MYSQRT, MYSUB C REAL MYSQRT C C Parameter variables C INTEGER NPI PARAMETER (NPI = 9) C REAL PI PARAMETER (PI = 3.14159265) C C====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.dca0000644000031000002260000000370607621405726016772 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208e.f !---->Makedcls Options: All variables ! ! Local variables ! CHARACTER C CHARACTER*81 LINE ! COMPLEX Z, ZZ ! DOUBLE COMPLEX ZZZ, ZZZZ ! DOUBLE PRECISION D(10,20,30), E(40,50), F(60) ! INTEGER I, J, K, M ! LOGICAL LOGVAR ! REAL R, S(70,80) ! !====>End Module %MAIN File t208e.f !====>Begin Module SUB File t208e.f !---->Makedcls Options: All variables ! ! Local variables ! REAL X, Y, Z ! ! Common variables ! REAL A, B, C ! COMMON / SHARE / A, B, C ! !====>End Module SUB File t208e.f !====>Begin Module FUN File t208e.f !---->Makedcls Options: All variables ! ! Local variables ! REAL X, Y, Z ! ! Common variables ! REAL A, B, C ! COMMON / SHARE / A, B, C ! !====>End Module FUN File t208e.f !====>Begin Module BAR File t208e.f !---->Makedcls Options: All variables ! ! Intrinsic functions ! INTRINSIC COS, SIN, SQRT ! ! External functions ! EXTERNAL MYSQRT, MYSUB ! REAL MYSQRT ! ! Parameter variables ! INTEGER NPI PARAMETER (NPI = 9) ! REAL PI PARAMETER (PI = 3.14159265) ! !====>End Module BAR File t208e.f ftnchek-3.3.1/test/Okay/t208e.htm00000644000031000002260000000245507621405726017113 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208e.htm20000644000031000002260000000236407621405726017114 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER +J,  M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE  COS,  SIN,  SQRT
External Functions and Subroutines Called
REAL  MYSQRT
SUBROUTINE  MYSUB

ftnchek-3.3.1/test/Okay/t208e.htm30000644000031000002260000000245507621405726017116 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208e.htm40000644000031000002260000000245507621405726017117 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
integer           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
subroutine         COS,        SIN,        SQRT
External Functions and Subroutines Called
real               MYSQRT
subroutine         MYSUB

ftnchek-3.3.1/test/Okay/t208e.htm50000644000031000002260000000245507621405726017120 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +j,          m

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         cos,        sin,        sqrt
External Functions and Subroutines Called
REAL               mysqrt
SUBROUTINE         mysub

ftnchek-3.3.1/test/Okay/t208e.htm60000644000031000002260000000245507621405726017121 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208e.htm90000644000031000002260000000245507621405726017124 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208e.htma0000644000031000002260000000245507621405726017174 0ustar moniotstaff00000000000000 Source t208e.f

PROGRAM %MAIN ( )

Source file:t208e.f
Local Variables (+ indicates altered content)
INTEGER           +J,          M

SUBROUTINE SUB ( )

Source file:t208e.f

REAL FUNCTION FUN ( )

Source file:t208e.f

SUBROUTINE BAR ( )

Source file:t208e.f
Intrinsic Functions Called
SUBROUTINE         COS,        SIN,        SQRT
External Functions and Subroutines Called
REAL               MYSQRT
SUBROUTINE         MYSUB

ftnchek-3.3.1/test/Okay/t208f.dc00000644000031000002260000000163407621405726016710 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME C REAL U, V, W, X REAL Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc10000644000031000002260000000042307621405726016704 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: Undeclared variables C C Local variables C INTEGER N C C====>End Module %MAIN File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc20000644000031000002260000000133407621405726016707 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER ANOTHER_LONG_VARIABLE_NAME, ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME, A_LONG_VARIABLE_NAME INTEGER A_VARIABLE_NAME, A_VERY_LONG_VARIABLE_NAME C REAL U, V, W, X, Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc30000644000031000002260000000163407621405726016713 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER ANOTHER_LONG_VARIABLE_NAME x, ANOTHER_VARIABLE_NAME x, ANOTHER_VERY_LONG_VARIABLE_NAME x, A_LONG_VARIABLE_NAME, A_VARIABLE_NAME x, A_VERY_LONG_VARIABLE_NAME C REAL U, V, W, X x, Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc40000644000031000002260000000163407621405726016714 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C integer M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C integer ANOTHER_LONG_VARIABLE_NAME integer ANOTHER_VARIABLE_NAME integer ANOTHER_VERY_LONG_VARIABLE_NAME integer A_LONG_VARIABLE_NAME, A_VARIABLE_NAME integer A_VERY_LONG_VARIABLE_NAME C real U, V, W, X real Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc50000644000031000002260000000163407621405726016715 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER m, n C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER another_long_variable_name INTEGER another_variable_name INTEGER another_very_long_variable_name INTEGER a_long_variable_name, a_variable_name INTEGER a_very_long_variable_name C REAL u, v, w, x REAL y, z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc60000644000031000002260000000163407621405726016716 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C INTEGER M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Local variables C INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME C REAL U, V, W, X REAL Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc70000644000031000002260000000163407621405726016717 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208f.f *---->Makedcls Options: All variables * * Local variables * INTEGER M, N * *====>End Module %MAIN File t208f.f *====>Begin Module BIG File t208f.f *---->Makedcls Options: All variables * * Local variables * INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME * REAL U, V, W, X REAL Y, Z * *====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc80000644000031000002260000000163407621405726016720 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208f.f c---->Makedcls Options: All variables c c Local variables c INTEGER M, N c c====>End Module %MAIN File t208f.f c====>Begin Module BIG File t208f.f c---->Makedcls Options: All variables c c Local variables c INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME c REAL U, V, W, X REAL Y, Z c c====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dc90000644000031000002260000000163407621405726016721 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER M, N C C====>End Module %MAIN File t208f.f C====>Begin Module BIG File t208f.f C---->Makedcls Options: All variables C C Local variables C INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME C REAL U, V, W, X REAL Y, Z C C====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.dca0000644000031000002260000000157407621405726016774 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208f.f !---->Makedcls Options: All variables ! ! Local variables ! INTEGER M, N ! !====>End Module %MAIN File t208f.f !====>Begin Module BIG File t208f.f !---->Makedcls Options: All variables ! ! Local variables ! INTEGER ANOTHER_LONG_VARIABLE_NAME INTEGER ANOTHER_VARIABLE_NAME INTEGER ANOTHER_VERY_LONG_VARIABLE_NAME INTEGER A_LONG_VARIABLE_NAME, A_VARIABLE_NAME INTEGER A_VERY_LONG_VARIABLE_NAME ! REAL U, V, W, X REAL Y, Z ! !====>End Module BIG File t208f.f ftnchek-3.3.1/test/Okay/t208f.htm00000644000031000002260000000112407621405726017104 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm20000644000031000002260000000110207621405726017102 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER  M, +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm30000644000031000002260000000112407621405726017107 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm40000644000031000002260000000112407621405726017110 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
integer            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm50000644000031000002260000000112407621405726017111 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            m,         +n

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm60000644000031000002260000000112407621405726017112 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htm90000644000031000002260000000112407621405726017115 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208f.htma0000644000031000002260000000112407621405726017165 0ustar moniotstaff00000000000000 Source t208f.f

PROGRAM %MAIN ( )

Source file:t208f.f
Local Variables (+ indicates altered content)
INTEGER            M,         +N

SUBROUTINE BIG ( )

Source file:t208f.f

ftnchek-3.3.1/test/Okay/t208g.dc00000644000031000002260000000056407621405726016712 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C EXTERNAL I1MACH C INTEGER I1MACH C C Local variables C INTEGER N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc10000644000031000002260000000000007621405726016674 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208g.dc20000644000031000002260000000052107621405726016705 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C EXTERNAL I1MACH C INTEGER I1MACH C C Local variables C INTEGER N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc30000644000031000002260000000056407621405726016715 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C EXTERNAL I1MACH C INTEGER I1MACH C C Local variables C INTEGER N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc40000644000031000002260000000056407621405726016716 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C external I1MACH C integer I1MACH C C Local variables C integer N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc50000644000031000002260000000056407621405726016717 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C EXTERNAL i1mach C INTEGER i1mach C C Local variables C INTEGER n C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc60000644000031000002260000000056407621405726016720 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL I1MACH C INTEGER I1MACH C C Local variables C INTEGER N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc70000644000031000002260000000056407621405726016721 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208g.f *---->Makedcls Options: All variables * * External functions * EXTERNAL I1MACH * INTEGER I1MACH * * Local variables * INTEGER N * *====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc80000644000031000002260000000056407621405726016722 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208g.f c---->Makedcls Options: All variables c c External functions c EXTERNAL I1MACH c INTEGER I1MACH c c Local variables c INTEGER N c c====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dc90000644000031000002260000000056407621405726016723 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208g.f C---->Makedcls Options: All variables C C External functions C EXTERNAL I1MACH C INTEGER I1MACH C C Local variables C INTEGER N C C====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.dca0000644000031000002260000000055007621405726016766 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208g.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL I1MACH ! INTEGER I1MACH ! ! Local variables ! INTEGER N ! !====>End Module FOO File t208g.f ftnchek-3.3.1/test/Okay/t208g.htm00000644000031000002260000000107307621405726017110 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            I1MACH
Local Variables (+ indicates altered content)
INTEGER           +N

ftnchek-3.3.1/test/Okay/t208g.htm20000644000031000002260000000104707621405726017113 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER  I1MACH
Local Variables (+ indicates altered content)
INTEGER +N

ftnchek-3.3.1/test/Okay/t208g.htm30000644000031000002260000000107307621405726017113 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            I1MACH
Local Variables (+ indicates altered content)
INTEGER           +N

ftnchek-3.3.1/test/Okay/t208g.htm40000644000031000002260000000107307621405726017114 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
integer            I1MACH
Local Variables (+ indicates altered content)
integer           +N

ftnchek-3.3.1/test/Okay/t208g.htm50000644000031000002260000000107307621405726017115 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            i1mach
Local Variables (+ indicates altered content)
INTEGER           +n

ftnchek-3.3.1/test/Okay/t208g.htm60000644000031000002260000000107307621405726017116 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            I1MACH
Local Variables (+ indicates altered content)
INTEGER           +N

ftnchek-3.3.1/test/Okay/t208g.htm90000644000031000002260000000107307621405726017121 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            I1MACH
Local Variables (+ indicates altered content)
INTEGER           +N

ftnchek-3.3.1/test/Okay/t208g.htma0000644000031000002260000000107307621405726017171 0ustar moniotstaff00000000000000 Source t208g.f

SUBROUTINE FOO ( )

Source file:t208g.f
External Functions and Subroutines Called
INTEGER            I1MACH
Local Variables (+ indicates altered content)
INTEGER           +N

ftnchek-3.3.1/test/Okay/t208h.dc00000644000031000002260000000056707621405726016716 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C REAL R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc10000644000031000002260000000042607621405726016711 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: Undeclared variables C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc20000644000031000002260000000051607621405726016712 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C REAL R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc30000644000031000002260000000056707621405726016721 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C REAL R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc40000644000031000002260000000056707621405726016722 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C external R1MACH C real R1MACH C C Argument variables C real X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc50000644000031000002260000000056707621405726016723 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C EXTERNAL r1mach C REAL r1mach C C Argument variables C REAL x C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc60000644000031000002260000000056707621405726016724 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL R1MACH C REAL R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc70000644000031000002260000000056707621405726016725 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208h.f *---->Makedcls Options: All variables * * External functions * EXTERNAL R1MACH * REAL R1MACH * * Argument variables * REAL X * *====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc80000644000031000002260000000056707621405726016726 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208h.f c---->Makedcls Options: All variables c c External functions c EXTERNAL R1MACH c REAL R1MACH c c Argument variables c REAL X c c====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dc90000644000031000002260000000056707621405726016727 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208h.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C REAL R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.dca0000644000031000002260000000055307621405726016772 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208h.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL R1MACH ! REAL R1MACH ! ! Argument variables ! REAL X ! !====>End Module FOO File t208h.f ftnchek-3.3.1/test/Okay/t208h.htm00000644000031000002260000000131407621405726017107 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
REAL               R1MACH

ftnchek-3.3.1/test/Okay/t208h.htm20000644000031000002260000000125007621405726017110 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC  SQRT
External Functions and Subroutines Called
REAL  R1MACH

ftnchek-3.3.1/test/Okay/t208h.htm30000644000031000002260000000131407621405726017112 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
REAL               R1MACH

ftnchek-3.3.1/test/Okay/t208h.htm40000644000031000002260000000131407621405726017113 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
real              +X
Source file:t208h.f
Intrinsic Functions Called
generic            SQRT
External Functions and Subroutines Called
real               R1MACH

ftnchek-3.3.1/test/Okay/t208h.htm50000644000031000002260000000131407621405726017114 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +x
Source file:t208h.f
Intrinsic Functions Called
GENERIC            sqrt
External Functions and Subroutines Called
REAL               r1mach

ftnchek-3.3.1/test/Okay/t208h.htm60000644000031000002260000000131407621405726017115 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
REAL               R1MACH

ftnchek-3.3.1/test/Okay/t208h.htm90000644000031000002260000000131407621405726017120 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
REAL               R1MACH

ftnchek-3.3.1/test/Okay/t208h.htma0000644000031000002260000000131407621405726017170 0ustar moniotstaff00000000000000 Source t208h.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208h.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
REAL               R1MACH

ftnchek-3.3.1/test/Okay/t208i.dc00000644000031000002260000000056707621405726016717 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C DOUBLE PRECISION R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc10000644000031000002260000000042607621405726016712 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: Undeclared variables C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc20000644000031000002260000000053207621405726016711 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C DOUBLE PRECISION R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc30000644000031000002260000000056707621405726016722 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C DOUBLE PRECISION R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc40000644000031000002260000000056707621405726016723 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C external R1MACH C double precision R1MACH C C Argument variables C real X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc50000644000031000002260000000056707621405726016724 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C EXTERNAL r1mach C DOUBLE PRECISION r1mach C C Argument variables C REAL x C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc60000644000031000002260000000056707621405726016725 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL R1MACH C DOUBLE PRECISION R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc70000644000031000002260000000056707621405726016726 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208i.f *---->Makedcls Options: All variables * * External functions * EXTERNAL R1MACH * DOUBLE PRECISION R1MACH * * Argument variables * REAL X * *====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc80000644000031000002260000000056707621405726016727 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208i.f c---->Makedcls Options: All variables c c External functions c EXTERNAL R1MACH c DOUBLE PRECISION R1MACH c c Argument variables c REAL X c c====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dc90000644000031000002260000000056707621405726016730 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208i.f C---->Makedcls Options: All variables C C External functions C EXTERNAL R1MACH C DOUBLE PRECISION R1MACH C C Argument variables C REAL X C C====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.dca0000644000031000002260000000055307621405726016773 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208i.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL R1MACH ! DOUBLE PRECISION R1MACH ! ! Argument variables ! REAL X ! !====>End Module FOO File t208i.f ftnchek-3.3.1/test/Okay/t208i.htm00000644000031000002260000000131407621405726017110 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
DOUBLE PRECISION   R1MACH

ftnchek-3.3.1/test/Okay/t208i.htm20000644000031000002260000000126407621405726017116 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC  SQRT
External Functions and Subroutines Called
DOUBLE PRECISION  R1MACH

ftnchek-3.3.1/test/Okay/t208i.htm30000644000031000002260000000131407621405726017113 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
DOUBLE PRECISION   R1MACH

ftnchek-3.3.1/test/Okay/t208i.htm40000644000031000002260000000131407621405726017114 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
real              +X
Source file:t208i.f
Intrinsic Functions Called
generic            SQRT
External Functions and Subroutines Called
double precision   R1MACH

ftnchek-3.3.1/test/Okay/t208i.htm50000644000031000002260000000131407621405726017115 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +x
Source file:t208i.f
Intrinsic Functions Called
GENERIC            sqrt
External Functions and Subroutines Called
DOUBLE PRECISION   r1mach

ftnchek-3.3.1/test/Okay/t208i.htm60000644000031000002260000000131407621405726017116 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
DOUBLE PRECISION   R1MACH

ftnchek-3.3.1/test/Okay/t208i.htm90000644000031000002260000000131407621405726017121 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
DOUBLE PRECISION   R1MACH

ftnchek-3.3.1/test/Okay/t208i.htma0000644000031000002260000000131407621405726017171 0ustar moniotstaff00000000000000 Source t208i.f

SUBROUTINE FOO ( X )

Argument Definitions (+ indicates altered content)
REAL              +X
Source file:t208i.f
Intrinsic Functions Called
GENERIC            SQRT
External Functions and Subroutines Called
DOUBLE PRECISION   R1MACH

ftnchek-3.3.1/test/Okay/t208j.dc00000644000031000002260000000052007621405726016705 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC SQRT C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc10000644000031000002260000000042307621405726016710 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: Undeclared variables C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc20000644000031000002260000000046707621405726016721 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC SQRT C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc30000644000031000002260000000052007621405726016710 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC SQRT C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc40000644000031000002260000000052007621405726016711 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C intrinsic SQRT C C Local variables C real A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc50000644000031000002260000000052007621405726016712 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC sqrt C C Local variables C REAL a C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc60000644000031000002260000000052007621405726016713 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Intrinsic functions C INTRINSIC SQRT C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc70000644000031000002260000000052007621405726016714 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208j.f *---->Makedcls Options: All variables * * Intrinsic functions * INTRINSIC SQRT * * Local variables * REAL A * *====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc80000644000031000002260000000052007621405726016715 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208j.f c---->Makedcls Options: All variables c c Intrinsic functions c INTRINSIC SQRT c c Local variables c REAL A c c====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dc90000644000031000002260000000052007621405726016716 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208j.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC SQRT C C Local variables C REAL A C C====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.dca0000644000031000002260000000051007621405726016765 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208j.f !---->Makedcls Options: All variables ! ! Intrinsic functions ! INTRINSIC SQRT ! ! Local variables ! REAL A ! !====>End Module %MAIN File t208j.f ftnchek-3.3.1/test/Okay/t208j.htm00000644000031000002260000000106707621405726017116 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            COS,        SQRT
Local Variables (+ indicates altered content)
REAL              +A

ftnchek-3.3.1/test/Okay/t208j.htm20000644000031000002260000000103207621405726017110 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC  COS,  SQRT
Local Variables (+ indicates altered content)
REAL +A

ftnchek-3.3.1/test/Okay/t208j.htm30000644000031000002260000000106707621405726017121 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            COS,        SQRT
Local Variables (+ indicates altered content)
REAL              +A

ftnchek-3.3.1/test/Okay/t208j.htm40000644000031000002260000000106707621405726017122 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
generic            COS,        SQRT
Local Variables (+ indicates altered content)
real              +A

ftnchek-3.3.1/test/Okay/t208j.htm50000644000031000002260000000106707621405726017123 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            cos,        sqrt
Local Variables (+ indicates altered content)
REAL              +a

ftnchek-3.3.1/test/Okay/t208j.htm60000644000031000002260000000106707621405726017124 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            COS,        SQRT
Local Variables (+ indicates altered content)
REAL              +A

ftnchek-3.3.1/test/Okay/t208j.htm90000644000031000002260000000106707621405726017127 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            COS,        SQRT
Local Variables (+ indicates altered content)
REAL              +A

ftnchek-3.3.1/test/Okay/t208j.htma0000644000031000002260000000106707621405726017177 0ustar moniotstaff00000000000000 Source t208j.f

PROGRAM %MAIN ( )

Source file:t208j.f
Intrinsic Functions Called
GENERIC            COS,        SQRT
Local Variables (+ indicates altered content)
REAL              +A

ftnchek-3.3.1/test/Okay/t208k.dc00000644000031000002260000000042607621405726016713 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc10000644000031000002260000000000007621405726016700 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208k.dc20000644000031000002260000000042007621405726016707 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc30000644000031000002260000000042607621405726016716 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc40000644000031000002260000000042607621405726016717 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C character*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc50000644000031000002260000000042607621405726016720 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) s C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc60000644000031000002260000000042607621405726016721 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Argument variables C CHARACTER*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc70000644000031000002260000000042607621405726016722 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208k.f *---->Makedcls Options: All variables * * Argument variables * CHARACTER*(*) S * *====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc80000644000031000002260000000042607621405726016723 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208k.f c---->Makedcls Options: All variables c c Argument variables c CHARACTER*(*) S c c====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dc90000644000031000002260000000042607621405726016724 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208k.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) S C C====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.dca0000644000031000002260000000042207621405726016770 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208k.f !---->Makedcls Options: All variables ! ! Argument variables ! CHARACTER*(*) S ! !====>End Module FOO File t208k.f ftnchek-3.3.1/test/Okay/t208k.htm00000644000031000002260000000065707621405726017123 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm20000644000031000002260000000065307621405726017121 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)  S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm30000644000031000002260000000065707621405726017126 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm40000644000031000002260000000065707621405726017127 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
character*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm50000644000031000002260000000065707621405726017130 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      s
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm60000644000031000002260000000065707621405726017131 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htm90000644000031000002260000000065707621405726017134 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208k.htma0000644000031000002260000000065707621405726017204 0ustar moniotstaff00000000000000 Source t208k.f

CHARACTER FUNCTION FOO ( S )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      S
Source file:t208k.f

ftnchek-3.3.1/test/Okay/t208l.dc00000644000031000002260000000061307621405726016712 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C INTEGER M, N C REAL A(M,N) C C Local variables C REAL B(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc10000644000031000002260000000000007621405726016701 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208l.dc20000644000031000002260000000052707621405726016720 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C INTEGER M, N C REAL A(M,N) C C Local variables C REAL B(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc30000644000031000002260000000061307621405726016715 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C INTEGER M, N C REAL A(M,N) C C Local variables C REAL B(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc40000644000031000002260000000061307621405726016716 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C integer M, N C real A(M,N) C C Local variables C real B(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc50000644000031000002260000000061307621405726016717 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C INTEGER m, n C REAL a(m,n) C C Local variables C REAL b(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc60000644000031000002260000000061307621405726016720 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Argument variables C INTEGER M, N C REAL A(M,N) C C Local variables C REAL B(1,2,3,4,5,6,7) C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc70000644000031000002260000000061307621405726016721 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208l.f *---->Makedcls Options: All variables * * Argument variables * INTEGER M, N * REAL A(M,N) * * Local variables * REAL B(1,2,3,4,5,6,7) * *====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc80000644000031000002260000000061307621405726016722 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208l.f c---->Makedcls Options: All variables c c Argument variables c INTEGER M, N c REAL A(M,N) c c Local variables c REAL B(1,2,3,4,5,6,7) c c====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dc90000644000031000002260000000056707621405726016733 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208l.f C---->Makedcls Options: All variables C C Argument variables C INTEGER M, N C REAL A C C Local variables C REAL B C C====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.dca0000644000031000002260000000057707621405726017004 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208l.f !---->Makedcls Options: All variables ! ! Argument variables ! INTEGER M, N ! REAL A(M,N) ! ! Local variables ! REAL B(1,2,3,4,5,6,7) ! !====>End Module FOO File t208l.f ftnchek-3.3.1/test/Okay/t208l.htm00000644000031000002260000000072307621405726017116 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            M,          N
REAL               A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm20000644000031000002260000000066407621405726017124 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER  M,  N
REAL  A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm30000644000031000002260000000072307621405726017121 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            M,          N
REAL               A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm40000644000031000002260000000072307621405726017122 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
integer            M,          N
real               A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm50000644000031000002260000000072307621405726017123 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            m,          n
REAL               a(m,n)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm60000644000031000002260000000072307621405726017124 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            M,          N
REAL               A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htm90000644000031000002260000000071607621405726017131 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            M,          N
REAL               A
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208l.htma0000644000031000002260000000072307621405726017177 0ustar moniotstaff00000000000000 Source t208l.f

SUBROUTINE FOO ( A, M, N )

Argument Definitions (+ indicates altered content)
INTEGER            M,          N
REAL               A(M,N)
Source file:t208l.f

ftnchek-3.3.1/test/Okay/t208m.dc00000644000031000002260000000063207621405726016714 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc10000644000031000002260000000000007621405726016702 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208m.dc20000644000031000002260000000055607621405726016723 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc30000644000031000002260000000063207621405726016717 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc40000644000031000002260000000063207621405726016720 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C integer MAXDIM parameter (MAXDIM = 100+200) integer MAXARR parameter (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc50000644000031000002260000000063207621405726016721 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER maxdim PARAMETER (maxdim = 100+200) INTEGER maxarr PARAMETER (maxarr = maxdim+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc60000644000031000002260000000063207621405726016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc70000644000031000002260000000063207621405726016723 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208m.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) * *====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc80000644000031000002260000000063207621405726016724 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208m.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) c c====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dc90000644000031000002260000000063207621405726016725 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208m.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) C C====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.dca0000644000031000002260000000061207621405726016773 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208m.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER MAXDIM PARAMETER (MAXDIM = 100+200) INTEGER MAXARR PARAMETER (MAXARR = MAXDIM+100) ! !====>End Module %MAIN File t208m.f ftnchek-3.3.1/test/Okay/t208m.htm00000644000031000002260000000063207621405726017116 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm20000644000031000002260000000063207621405726017120 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER  MAXDIM                       (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm30000644000031000002260000000063207621405726017121 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm40000644000031000002260000000063207621405726017122 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
integer            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm50000644000031000002260000000063207621405726017123 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            maxdim             (maxdim = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm60000644000031000002260000000063207621405726017124 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htm90000644000031000002260000000063207621405726017127 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208m.htma0000644000031000002260000000063207621405726017177 0ustar moniotstaff00000000000000 Source t208m.f

PROGRAM %MAIN ( )

Source file:t208m.f
Parameter Variables Used
INTEGER            MAXDIM             (MAXDIM = 100+200)

ftnchek-3.3.1/test/Okay/t208n.dc00000644000031000002260000000123207621405726016712 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C INTEGER ICHAR C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C Argument variables C REAL A(1), B(*), C(21,*), D(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc10000644000031000002260000000102507621405726016713 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: Undeclared variables C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc20000644000031000002260000000101107621405726016707 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C INTEGER ICHAR C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C Argument variables C REAL A(1), B(*), C(21,*), D(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc30000644000031000002260000000123207621405726016715 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C INTEGER ICHAR C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C Argument variables C REAL A(1), B(*), C(21,*), D(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc40000644000031000002260000000123207621405726016716 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C integer ICHAR C C Parameter variables C real S parameter (S = ICHAR(')')) real T parameter (T = ICHAR(')')) real U parameter (U = 25.0) real V parameter (V = 2.18281828D+00) C C Argument variables C real A(1), B(*), C(21,*), D(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc50000644000031000002260000000123207621405726016717 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C INTEGER ichar C C Parameter variables C REAL s PARAMETER (s = ichar(')')) REAL t PARAMETER (t = ichar(')')) REAL u PARAMETER (u = 25.0) REAL v PARAMETER (v = 2.18281828d+00) C C Argument variables C REAL a(1), b(*), c(21,*), d(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc60000644000031000002260000000123207621405726016720 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables except SFTRAN3 internals C INTEGER ICHAR C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C Argument variables C REAL A(1), B(*), C(21,*), D(2) C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc70000644000031000002260000000123207621405726016721 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208n.f *---->Makedcls Options: All variables * INTEGER ICHAR * * Parameter variables * REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) * * Argument variables * REAL A(1), B(*), C(21,*), D(2) * *====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc80000644000031000002260000000123207621405726016722 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208n.f c---->Makedcls Options: All variables c INTEGER ICHAR c c Parameter variables c REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) c c Argument variables c REAL A(1), B(*), C(21,*), D(2) c c====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.dc90000644000031000002260000000122707621405726016727 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208n.f C---->Makedcls Options: All variables C INTEGER ICHAR C C Parameter variables C REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) C C Argument variables C REAL A, B, C, D C C====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/vel.inc0000644000031000002260000000047007621405727016734 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C ftnchek-3.3.1/test/Okay/t208n.dca0000644000031000002260000000116207621405726016775 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208n.f !---->Makedcls Options: All variables ! INTEGER ICHAR ! ! Parameter variables ! REAL S PARAMETER (S = ICHAR(')')) REAL T PARAMETER (T = ICHAR(')')) REAL U PARAMETER (U = 25.0) REAL V PARAMETER (V = 2.18281828D+00) ! ! Argument variables ! REAL A(1), B(*), C(21,*), D(2) ! !====>End Module FOO File t208n.f ftnchek-3.3.1/test/Okay/t208n.htm00000644000031000002260000000114207621405726017114 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               A(1),       B(*),       C(21,*),    D(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ICHAR

ftnchek-3.3.1/test/Okay/t208n.htm20000644000031000002260000000107707621405726017125 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL  A(1),  B(*),  C(21,*),  D(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER  ICHAR

ftnchek-3.3.1/test/Okay/t208n.htm30000644000031000002260000000114207621405726017117 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               A(1),       B(*),       C(21,*),    D(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ICHAR

ftnchek-3.3.1/test/Okay/t208n.htm40000644000031000002260000000114207621405726017120 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
real               A(1),       B(*),       C(21,*),    D(2)
Source file:t208n.f
Intrinsic Functions Called
integer            ICHAR

ftnchek-3.3.1/test/Okay/t208n.htm50000644000031000002260000000114207621405726017121 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               a(1),       b(*),       c(21,*),    d(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ichar

ftnchek-3.3.1/test/Okay/t208n.htm60000644000031000002260000000114207621405726017122 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               A(1),       B(*),       C(21,*),    D(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ICHAR

ftnchek-3.3.1/test/Okay/t208n.htm90000644000031000002260000000113707621405726017131 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               A,          B,          C,          D
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ICHAR

ftnchek-3.3.1/test/Okay/t208n.htma0000644000031000002260000000114207621405726017175 0ustar moniotstaff00000000000000 Source t208n.f

SUBROUTINE FOO ( A, B, C, D )

Argument Definitions (+ indicates altered content)
REAL               A(1),       B(*),       C(21,*),    D(2)
Source file:t208n.f
Intrinsic Functions Called
INTEGER            ICHAR

ftnchek-3.3.1/test/Okay/t208o.dc00000644000031000002260000000273307621405726016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') C REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc10000644000031000002260000000047307621405726016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: Undeclared variables C C Parameter variables C REAL E PARAMETER (E = 5.4) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc20000644000031000002260000000227507621405726016725 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') C REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc30000644000031000002260000000273307621405726016725 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') C REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc40000644000031000002260000000273307621405726016726 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C character*(*) Y parameter (Y = 'yes, isn''t this nice') character*(*) Z parameter (Z = 'O''Neil''s brother''s pub') character*(*) S parameter x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C integer U parameter (U = B'0110011010011001') integer V parameter (V = Z'ffff') integer W parameter (W = 'ffff'X) integer X parameter (X = X'ffff') C real C parameter (C = 1.23) real B parameter (B = 2.0*C) real A parameter (A = (B+C)) real D parameter (D = 4.0) real E parameter (E = 5.4) real T parameter (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc50000644000031000002260000000273307621405726016727 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) y PARAMETER (y = 'yes, isn''t this nice') CHARACTER*(*) z PARAMETER (z = 'O''Neil''s brother''s pub') CHARACTER*(*) s PARAMETER x(s = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER u PARAMETER (u = b'0110011010011001') INTEGER v PARAMETER (v = z'ffff') INTEGER w PARAMETER (w = 'ffff'x) INTEGER x PARAMETER (x = x'ffff') C REAL c PARAMETER (c = 1.23) REAL b PARAMETER (b = 2.0*c) REAL a PARAMETER (a = (b+c)) REAL d PARAMETER (d = 4.0) REAL e PARAMETER (e = 5.4) REAL t PARAMETER (t = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc60000644000031000002260000000273307621405726016730 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') C REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc70000644000031000002260000000273307621405726016731 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208o.f *---->Makedcls Options: All variables * * Parameter variables * CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') * INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') * REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) * *====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc80000644000031000002260000000273307621405726016732 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208o.f c---->Makedcls Options: All variables c c Parameter variables c CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') c INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') c REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) c c====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dc90000644000031000002260000000273307621405726016733 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208o.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER x(S = '123456789.123456789.123456789.123456789.123456789.123456789. x123456789.123456789.123456789.123456789.123456789.123456789.123456 x789.123456789.123456789.123456789.123456789.123456789.123456789.12 x3456789.123456789.123456789.123456789.123456789.123456789.12345678 x9.123456789.123456789.123456789.123456789.') C INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') C REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) C C====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.dca0000644000031000002260000000255107621405726017001 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208o.f !---->Makedcls Options: All variables ! ! Parameter variables ! CHARACTER*(*) Y PARAMETER (Y = 'yes, isn''t this nice') CHARACTER*(*) Z PARAMETER (Z = 'O''Neil''s brother''s pub') CHARACTER*(*) S PARAMETER & (S = '123456789.123456789.123456789.123456789.123456789.123456789.1234& &56789.123456789.123456789.123456789.123456789.123456789.123456789.123& &456789.123456789.123456789.123456789.123456789.123456789.123456789.12& &3456789.123456789.123456789.123456789.123456789.123456789.123456789.1& &23456789.123456789.123456789.') ! INTEGER U PARAMETER (U = B'0110011010011001') INTEGER V PARAMETER (V = Z'ffff') INTEGER W PARAMETER (W = 'ffff'X) INTEGER X PARAMETER (X = X'ffff') ! REAL C PARAMETER (C = 1.23) REAL B PARAMETER (B = 2.0*C) REAL A PARAMETER (A = (B+C)) REAL D PARAMETER (D = 4.0) REAL E PARAMETER (E = 5.4) REAL T PARAMETER (T = 25.0) ! !====>End Module %MAIN File t208o.f ftnchek-3.3.1/test/Okay/t208o.htm00000644000031000002260000000113107712503115017103 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               C                  (C = 1.23)
REAL               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htm20000644000031000002260000000113107712503116017106 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL  C                               (C = 1.23)
REAL  B                               (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htm30000644000031000002260000000113107712503116017107 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               C                  (C = 1.23)
REAL               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htm40000644000031000002260000000113107712503117017111 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
real               C                  (C = 1.23)
real               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htm50000644000031000002260000000113107712503117017112 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               c                  (c = 1.23)
REAL               b                  (b = 2.0*c)

ftnchek-3.3.1/test/Okay/t208o.htm60000644000031000002260000000113107712503120017105 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               C                  (C = 1.23)
REAL               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htm90000644000031000002260000000113107712503121017111 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               C                  (C = 1.23)
REAL               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208o.htma0000644000031000002260000000113107712503121017161 0ustar moniotstaff00000000000000 Source t208o.f

PROGRAM %MAIN ( )

Description
Parameters for which statement order must be preserved
Source file:t208o.f
Parameter Variables Used
REAL               C                  (C = 1.23)
REAL               B                  (B = 2.0*C)

ftnchek-3.3.1/test/Okay/t208p.dc00000644000031000002260000000071307621405726016717 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C EXTERNAL EX C INTEGER IABS C REAL EX C C Statement functions C INTEGER IN C C Local variables C INTEGER IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc10000644000031000002260000000000007621405726016705 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208p.dc20000644000031000002260000000061507621405726016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C EXTERNAL EX C INTEGER IABS C REAL EX C C Statement functions C INTEGER IN C C Local variables C INTEGER IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc30000644000031000002260000000071307621405726016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C EXTERNAL EX C INTEGER IABS C REAL EX C C Statement functions C INTEGER IN C C Local variables C INTEGER IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc40000644000031000002260000000071307621405726016723 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C external EX C integer IABS C real EX C C Statement functions C integer IN C C Local variables C integer IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc50000644000031000002260000000071307621405726016724 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C EXTERNAL ex C INTEGER iabs C REAL ex C C Statement functions C INTEGER in C C Local variables C INTEGER iarg C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc60000644000031000002260000000071307621405726016725 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables except SFTRAN3 internals C C External functions C EXTERNAL EX C INTEGER IABS C REAL EX C C Statement functions C INTEGER IN C C Local variables C INTEGER IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc70000644000031000002260000000071307621405726016726 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208p.f *---->Makedcls Options: All variables * * External functions * EXTERNAL EX * INTEGER IABS * REAL EX * * Statement functions * INTEGER IN * * Local variables * INTEGER IARG * *====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc80000644000031000002260000000071307621405726016727 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208p.f c---->Makedcls Options: All variables c c External functions c EXTERNAL EX c INTEGER IABS c REAL EX c c Statement functions c INTEGER IN c c Local variables c INTEGER IARG c c====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dc90000644000031000002260000000071307621405726016730 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208p.f C---->Makedcls Options: All variables C C External functions C EXTERNAL EX C INTEGER IABS C REAL EX C C Statement functions C INTEGER IN C C Local variables C INTEGER IARG C C====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.dca0000644000031000002260000000066707621405726017010 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208p.f !---->Makedcls Options: All variables ! ! External functions ! EXTERNAL EX ! INTEGER IABS ! REAL EX ! ! Statement functions ! INTEGER IN ! ! Local variables ! INTEGER IARG ! !====>End Module %MAIN File t208p.f ftnchek-3.3.1/test/Okay/t208p.htm00000644000031000002260000000217507621405726017125 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            IABS
Statement functions Defined
INTEGER           +IN
External Functions and Subroutines Called
REAL               EX
Local Variables (+ indicates altered content)
INTEGER            IARG

ftnchek-3.3.1/test/Okay/t208p.htm20000644000031000002260000000212207621405726017117 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER  IABS
Statement functions Defined
INTEGER +IN
External Functions and Subroutines Called
REAL  EX
Local Variables (+ indicates altered content)
INTEGER  IARG

ftnchek-3.3.1/test/Okay/t208p.htm30000644000031000002260000000217507621405726017130 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            IABS
Statement functions Defined
INTEGER           +IN
External Functions and Subroutines Called
REAL               EX
Local Variables (+ indicates altered content)
INTEGER            IARG

ftnchek-3.3.1/test/Okay/t208p.htm40000644000031000002260000000217507621405726017131 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
integer            IABS
Statement functions Defined
integer           +IN
External Functions and Subroutines Called
real               EX
Local Variables (+ indicates altered content)
integer            IARG

ftnchek-3.3.1/test/Okay/t208p.htm50000644000031000002260000000217507621405726017132 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            iabs
Statement functions Defined
INTEGER           +in
External Functions and Subroutines Called
REAL               ex
Local Variables (+ indicates altered content)
INTEGER            iarg

ftnchek-3.3.1/test/Okay/t208p.htm60000644000031000002260000000217507621405726017133 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            IABS
Statement functions Defined
INTEGER           +IN
External Functions and Subroutines Called
REAL               EX
Local Variables (+ indicates altered content)
INTEGER            IARG

ftnchek-3.3.1/test/Okay/t208p.htm90000644000031000002260000000217507621405726017136 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            IABS
Statement functions Defined
INTEGER           +IN
External Functions and Subroutines Called
REAL               EX
Local Variables (+ indicates altered content)
INTEGER            IARG

ftnchek-3.3.1/test/Okay/t208p.htma0000644000031000002260000000217507621405726017206 0ustar moniotstaff00000000000000 Source t208p.f

PROGRAM %MAIN ( )

Source file:t208p.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
               6          SEQ  FMTD           W  

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
INTEGER            IABS
Statement functions Defined
INTEGER           +IN
External Functions and Subroutines Called
REAL               EX
Local Variables (+ indicates altered content)
INTEGER            IARG

ftnchek-3.3.1/test/Okay/t208q.dc00000644000031000002260000000061407621405726016720 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc10000644000031000002260000000000007621405726016706 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208q.dc20000644000031000002260000000055207621405726016723 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc30000644000031000002260000000061407621405726016723 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc40000644000031000002260000000061407621405726016724 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C integer MAXTOK parameter (MAXTOK = 10) C C Local variables C character*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc50000644000031000002260000000061407621405726016725 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER maxtok PARAMETER (maxtok = 10) C C Local variables C CHARACTER*10 tokl10, toklmx C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc60000644000031000002260000000061407621405726016726 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc70000644000031000002260000000061407621405726016727 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208q.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER MAXTOK PARAMETER (MAXTOK = 10) * * Local variables * CHARACTER*10 TOKL10, TOKLMX * *====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc80000644000031000002260000000061407621405726016730 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208q.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER MAXTOK PARAMETER (MAXTOK = 10) c c Local variables c CHARACTER*10 TOKL10, TOKLMX c c====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dc90000644000031000002260000000061407621405726016731 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208q.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*10 TOKL10, TOKLMX C C====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.dca0000644000031000002260000000060007621405726016774 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208q.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER MAXTOK PARAMETER (MAXTOK = 10) ! ! Local variables ! CHARACTER*10 TOKL10, TOKLMX ! !====>End Module %MAIN File t208q.f ftnchek-3.3.1/test/Okay/t208q.htm00000644000031000002260000000062507621405726017124 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htm20000644000031000002260000000062507621405726017126 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER  MAXTOK                       (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htm30000644000031000002260000000062507621405726017127 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htm40000644000031000002260000000062507621405726017130 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
integer            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htm50000644000031000002260000000062507621405726017131 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            maxtok             (maxtok = 10)

ftnchek-3.3.1/test/Okay/t208q.htm60000644000031000002260000000062507621405726017132 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htm90000644000031000002260000000062507621405726017135 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208q.htma0000644000031000002260000000062507621405726017205 0ustar moniotstaff00000000000000 Source t208q.f

PROGRAM %MAIN ( )

Source file:t208q.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.dc00000644000031000002260000000152507621405726016723 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Argument variables C CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) C INTEGER MAXCOL, MAXROW C C Local variables C CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc10000644000031000002260000000073307621405726016724 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) C C Argument variables C INTEGER MAXCOL, MAXROW C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc20000644000031000002260000000130107621405726016715 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Argument variables C CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) C INTEGER MAXCOL, MAXROW C C Local variables C CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc30000644000031000002260000000152507621405726016726 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Argument variables C CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) C INTEGER MAXCOL, MAXROW C C Local variables C CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc40000644000031000002260000000152507621405726016727 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C character*(*) S parameter (S = 'hello') C integer MAXY parameter (MAXY = 54321) integer MAXZ parameter (MAXZ = 12345+MAXY) integer MAXTOK parameter (MAXTOK = 10) C C Argument variables C character*(*) ARGCHR(MAXROW,MAXCOL,*) C integer MAXCOL, MAXROW C C Local variables C character ONE, ONEAGAIN character*3 THREE character*(MAXTOK) TOKLST character*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc50000644000031000002260000000152507621405726016730 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) s PARAMETER (s = 'hello') C INTEGER maxy PARAMETER (maxy = 54321) INTEGER maxz PARAMETER (maxz = 12345+maxy) INTEGER maxtok PARAMETER (maxtok = 10) C C Argument variables C CHARACTER*(*) argchr(maxrow,maxcol,*) C INTEGER maxcol, maxrow C C Local variables C CHARACTER one, oneagain CHARACTER*3 three CHARACTER*(maxtok) toklst CHARACTER*2 two, twob C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc60000644000031000002260000000152507621405726016731 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Argument variables C CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) C INTEGER MAXCOL, MAXROW C C Local variables C CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc70000644000031000002260000000152507621405726016732 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208r.f *---->Makedcls Options: All variables * * Parameter variables * CHARACTER*(*) S PARAMETER (S = 'hello') * INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) * * Argument variables * CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) * INTEGER MAXCOL, MAXROW * * Local variables * CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB * *====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc80000644000031000002260000000152507621405726016733 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208r.f c---->Makedcls Options: All variables c c Parameter variables c CHARACTER*(*) S PARAMETER (S = 'hello') c INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) c c Argument variables c CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) c INTEGER MAXCOL, MAXROW c c Local variables c CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB c c====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dc90000644000031000002260000000150407621405726016731 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208r.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Argument variables C CHARACTER*(*) ARGCHR C INTEGER MAXCOL, MAXROW C C Local variables C CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB C C====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.dca0000644000031000002260000000143507621405726017004 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208r.f !---->Makedcls Options: All variables ! ! Parameter variables ! CHARACTER*(*) S PARAMETER (S = 'hello') ! INTEGER MAXY PARAMETER (MAXY = 54321) INTEGER MAXZ PARAMETER (MAXZ = 12345+MAXY) INTEGER MAXTOK PARAMETER (MAXTOK = 10) ! ! Argument variables ! CHARACTER*(*) ARGCHR(MAXROW,MAXCOL,*) ! INTEGER MAXCOL, MAXROW ! ! Local variables ! CHARACTER ONE, ONEAGAIN CHARACTER*3 THREE CHARACTER*(MAXTOK) TOKLST CHARACTER*2 TWO, TWOB ! !====>End Module FOO File t208r.f ftnchek-3.3.1/test/Okay/t208r.htm00000644000031000002260000000132107621405726017117 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      ARGCHR(MAXROW,MAXCOL,*)
INTEGER            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER            MAXY               (MAXY = 54321)
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htm20000644000031000002260000000130007621405726017116 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)  ARGCHR(MAXROW,MAXCOL,*)
INTEGER  MAXCOL,  MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER  MAXY                         (MAXY = 54321)
INTEGER  MAXTOK                       (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htm30000644000031000002260000000132107621405726017122 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      ARGCHR(MAXROW,MAXCOL,*)
INTEGER            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER            MAXY               (MAXY = 54321)
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htm40000644000031000002260000000132107621405726017123 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
character*(*)      ARGCHR(MAXROW,MAXCOL,*)
integer            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
integer            MAXY               (MAXY = 54321)
integer            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htm50000644000031000002260000000132107621405726017124 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      argchr(maxrow,maxcol,*)
INTEGER            maxcol,     maxrow
Source file:t208r.f
Parameter Variables Used
INTEGER            maxy               (maxy = 54321)
INTEGER            maxtok             (maxtok = 10)

ftnchek-3.3.1/test/Okay/t208r.htm60000644000031000002260000000132107621405726017125 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      ARGCHR(MAXROW,MAXCOL,*)
INTEGER            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER            MAXY               (MAXY = 54321)
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htm90000644000031000002260000000130007621405726017125 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      ARGCHR
INTEGER            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER            MAXY               (MAXY = 54321)
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208r.htma0000644000031000002260000000132107621405726017200 0ustar moniotstaff00000000000000 Source t208r.f

SUBROUTINE FOO ( ARGCHR, MAXROW, MAXCOL )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      ARGCHR(MAXROW,MAXCOL,*)
INTEGER            MAXCOL,     MAXROW
Source file:t208r.f
Parameter Variables Used
INTEGER            MAXY               (MAXY = 54321)
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208s.dc00000644000031000002260000000047707621405726016731 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc10000644000031000002260000000000007621405726016710 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208s.dc20000644000031000002260000000045707621405726016731 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc30000644000031000002260000000047707621405726016734 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc40000644000031000002260000000047707621405726016735 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C character*(*) S parameter (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc50000644000031000002260000000047707621405726016736 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) s PARAMETER (s = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc60000644000031000002260000000047707621405726016737 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc70000644000031000002260000000047707621405726016740 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208s.f *---->Makedcls Options: All variables * * Parameter variables * CHARACTER*(*) S PARAMETER (S = 'hello') * *====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc80000644000031000002260000000047707621405726016741 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208s.f c---->Makedcls Options: All variables c c Parameter variables c CHARACTER*(*) S PARAMETER (S = 'hello') c c====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dc90000644000031000002260000000047707621405726016742 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208s.f C---->Makedcls Options: All variables C C Parameter variables C CHARACTER*(*) S PARAMETER (S = 'hello') C C====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.dca0000644000031000002260000000046707621405726017011 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208s.f !---->Makedcls Options: All variables ! ! Parameter variables ! CHARACTER*(*) S PARAMETER (S = 'hello') ! !====>End Module %MAIN File t208s.f ftnchek-3.3.1/test/Okay/t208s.htm00000644000031000002260000000036107621405726017123 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm20000644000031000002260000000036107621405726017125 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm30000644000031000002260000000036107621405726017126 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm40000644000031000002260000000036107621405726017127 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm50000644000031000002260000000036107621405726017130 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm60000644000031000002260000000036107621405726017131 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htm90000644000031000002260000000036107621405726017134 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208s.htma0000644000031000002260000000036107621405726017204 0ustar moniotstaff00000000000000 Source t208s.f

PROGRAM %MAIN ( )

Source file:t208s.f

ftnchek-3.3.1/test/Okay/t208t.dc00000644000031000002260000000073007621405726016722 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F C C Local variables C CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc10000644000031000002260000000000007621405726016711 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208t.dc20000644000031000002260000000065007621405726016725 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F C C Local variables C CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc30000644000031000002260000000073007621405726016725 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F C C Local variables C CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc40000644000031000002260000000073007621405726016726 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C character*(*) D character*127 E character*(*) F C C Local variables C character*3 A character*4 B character*5 C character*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc50000644000031000002260000000073007621405726016727 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) d CHARACTER*127 e CHARACTER*(*) f C C Local variables C CHARACTER*3 a CHARACTER*4 b CHARACTER*5 c CHARACTER*255 g C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc60000644000031000002260000000073007621405726016730 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Argument variables C CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F C C Local variables C CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc70000644000031000002260000000073007621405726016731 0ustar moniotstaff00000000000000*====>Begin Module FOO File t208t.f *---->Makedcls Options: All variables * * Argument variables * CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F * * Local variables * CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G * *====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc80000644000031000002260000000073007621405726016732 0ustar moniotstaff00000000000000c====>Begin Module FOO File t208t.f c---->Makedcls Options: All variables c c Argument variables c CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F c c Local variables c CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G c c====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dc90000644000031000002260000000073007621405726016733 0ustar moniotstaff00000000000000C====>Begin Module FOO File t208t.f C---->Makedcls Options: All variables C C Argument variables C CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F C C Local variables C CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G C C====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.dca0000644000031000002260000000067407621405726017012 0ustar moniotstaff00000000000000!====>Begin Module FOO File t208t.f !---->Makedcls Options: All variables ! ! Argument variables ! CHARACTER*(*) D CHARACTER*127 E CHARACTER*(*) F ! ! Local variables ! CHARACTER*3 A CHARACTER*4 B CHARACTER*5 C CHARACTER*255 G ! !====>End Module FOO File t208t.f ftnchek-3.3.1/test/Okay/t208t.htm00000644000031000002260000000072707621405726017132 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      D
CHARACTER*127      E
CHARACTER*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm20000644000031000002260000000071307621405726017127 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)  D
CHARACTER*127  E
CHARACTER*(*)  F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm30000644000031000002260000000072707621405726017135 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      D
CHARACTER*127      E
CHARACTER*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm40000644000031000002260000000072707621405727017137 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
character*(*)      D
character*127      E
character*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm50000644000031000002260000000072707621405727017140 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      d
CHARACTER*127      e
CHARACTER*(*)      f
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm60000644000031000002260000000072707621405727017141 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      D
CHARACTER*127      E
CHARACTER*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htm90000644000031000002260000000072707621405727017144 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      D
CHARACTER*127      E
CHARACTER*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208t.htma0000644000031000002260000000072707621405727017214 0ustar moniotstaff00000000000000 Source t208t.f

SUBROUTINE FOO ( D, E, F )

Argument Definitions (+ indicates altered content)
CHARACTER*(*)      D
CHARACTER*127      E
CHARACTER*(*)      F
Source file:t208t.f

ftnchek-3.3.1/test/Okay/t208u.dc00000644000031000002260000000200207621405727016716 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) C C Local variables C CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc10000644000031000002260000000000007621405727016713 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208u.dc20000644000031000002260000000154007621405727016726 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) C C Local variables C CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc30000644000031000002260000000200207621405727016721 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) C C Local variables C CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc40000644000031000002260000000200207621405727016722 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C integer MAXTOK parameter (MAXTOK = 10) integer MAXTK1 parameter (MAXTK1 = 10) integer MAXTK2 parameter (MAXTK2 = 10) C C Local variables C character*(2*MAXTK1) TK1LS2 character*(MAXTK1**2) TK1LS3 character*(MAXTK1) TK1LST character*(2*MAXTK2) TK2AR2(200) character*(MAXTK2**2) TK2AR3(300) character*(MAXTK2) TK2ARR(100) character*(2*MAXTOK) TOKAR2(200) character*(MAXTOK**2) TOKAR3(300) character*(MAXTOK) TOKARR(100) character*(2*MAXTOK) TOKLS2 character*(MAXTOK**2) TOKLS3 character*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc50000644000031000002260000000200207621405727016723 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER maxtok PARAMETER (maxtok = 10) INTEGER maxtk1 PARAMETER (maxtk1 = 10) INTEGER maxtk2 PARAMETER (maxtk2 = 10) C C Local variables C CHARACTER*(2*maxtk1) tk1ls2 CHARACTER*(maxtk1**2) tk1ls3 CHARACTER*(maxtk1) tk1lst CHARACTER*(2*maxtk2) tk2ar2(200) CHARACTER*(maxtk2**2) tk2ar3(300) CHARACTER*(maxtk2) tk2arr(100) CHARACTER*(2*maxtok) tokar2(200) CHARACTER*(maxtok**2) tokar3(300) CHARACTER*(maxtok) tokarr(100) CHARACTER*(2*maxtok) tokls2 CHARACTER*(maxtok**2) tokls3 CHARACTER*(maxtok) toklst C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc60000644000031000002260000000200207621405727016724 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) C C Local variables C CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc70000644000031000002260000000200207621405727016725 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208u.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) * * Local variables * CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST * *====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc80000644000031000002260000000200207621405727016726 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208u.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) c c Local variables c CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST c c====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dc90000644000031000002260000000174407621405727016743 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208u.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) C C Local variables C CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2 CHARACTER*(MAXTK2**2) TK2AR3 CHARACTER*(MAXTK2) TK2ARR CHARACTER*(2*MAXTOK) TOKAR2 CHARACTER*(MAXTOK**2) TOKAR3 CHARACTER*(MAXTOK) TOKARR CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.dca0000644000031000002260000000167207621405727017013 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208u.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER MAXTOK PARAMETER (MAXTOK = 10) INTEGER MAXTK1 PARAMETER (MAXTK1 = 10) INTEGER MAXTK2 PARAMETER (MAXTK2 = 10) ! ! Local variables ! CHARACTER*(2*MAXTK1) TK1LS2 CHARACTER*(MAXTK1**2) TK1LS3 CHARACTER*(MAXTK1) TK1LST CHARACTER*(2*MAXTK2) TK2AR2(200) CHARACTER*(MAXTK2**2) TK2AR3(300) CHARACTER*(MAXTK2) TK2ARR(100) CHARACTER*(2*MAXTOK) TOKAR2(200) CHARACTER*(MAXTOK**2) TOKAR3(300) CHARACTER*(MAXTOK) TOKARR(100) CHARACTER*(2*MAXTOK) TOKLS2 CHARACTER*(MAXTOK**2) TOKLS3 CHARACTER*(MAXTOK) TOKLST ! !====>End Module %MAIN File t208u.f ftnchek-3.3.1/test/Okay/t208u.htm00000644000031000002260000000077507621405727017137 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)
INTEGER            MAXTK1             (MAXTK1 = 10)
INTEGER            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm20000644000031000002260000000077507621405727017141 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER  MAXTOK                       (MAXTOK = 10)
INTEGER  MAXTK1                       (MAXTK1 = 10)
INTEGER  MAXTK2                       (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm30000644000031000002260000000077507621405727017142 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)
INTEGER            MAXTK1             (MAXTK1 = 10)
INTEGER            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm40000644000031000002260000000077507621405727017143 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
integer            MAXTOK             (MAXTOK = 10)
integer            MAXTK1             (MAXTK1 = 10)
integer            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm50000644000031000002260000000077507621405727017144 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            maxtok             (maxtok = 10)
INTEGER            maxtk1             (maxtk1 = 10)
INTEGER            maxtk2             (maxtk2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm60000644000031000002260000000077507621405727017145 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)
INTEGER            MAXTK1             (MAXTK1 = 10)
INTEGER            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htm90000644000031000002260000000077507621405727017150 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)
INTEGER            MAXTK1             (MAXTK1 = 10)
INTEGER            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208u.htma0000644000031000002260000000077507621405727017220 0ustar moniotstaff00000000000000 Source t208u.f

PROGRAM %MAIN ( )

Source file:t208u.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)
INTEGER            MAXTK1             (MAXTK1 = 10)
INTEGER            MAXTK2             (MAXTK2 = 10)

ftnchek-3.3.1/test/Okay/t208v.dc00000644000031000002260000000057707621405727016736 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc10000644000031000002260000000000007621405727016714 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay/t208v.dc20000644000031000002260000000055007621405727016727 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc30000644000031000002260000000057707621405727016741 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc40000644000031000002260000000057707621405727016742 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C integer MAXTOK parameter (MAXTOK = 10) C C Local variables C character*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc50000644000031000002260000000057707621405727016743 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER maxtok PARAMETER (maxtok = 10) C C Local variables C CHARACTER*(maxtok) toklst C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc60000644000031000002260000000057707621405727016744 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc70000644000031000002260000000057707621405727016745 0ustar moniotstaff00000000000000*====>Begin Module %MAIN File t208v.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER MAXTOK PARAMETER (MAXTOK = 10) * * Local variables * CHARACTER*(MAXTOK) TOKLST * *====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc80000644000031000002260000000057707621405727016746 0ustar moniotstaff00000000000000c====>Begin Module %MAIN File t208v.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER MAXTOK PARAMETER (MAXTOK = 10) c c Local variables c CHARACTER*(MAXTOK) TOKLST c c====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dc90000644000031000002260000000057707621405727016747 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208v.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER MAXTOK PARAMETER (MAXTOK = 10) C C Local variables C CHARACTER*(MAXTOK) TOKLST C C====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.dca0000644000031000002260000000056307621405727017012 0ustar moniotstaff00000000000000!====>Begin Module %MAIN File t208v.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER MAXTOK PARAMETER (MAXTOK = 10) ! ! Local variables ! CHARACTER*(MAXTOK) TOKLST ! !====>End Module %MAIN File t208v.f ftnchek-3.3.1/test/Okay/t208v.htm00000644000031000002260000000062507621405727017132 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htm20000644000031000002260000000062507621405727017134 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER  MAXTOK                       (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htm30000644000031000002260000000062507621405727017135 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htm40000644000031000002260000000062507621405727017136 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
integer            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htm50000644000031000002260000000062507621405727017137 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            maxtok             (maxtok = 10)

ftnchek-3.3.1/test/Okay/t208v.htm60000644000031000002260000000062507621405727017140 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htm90000644000031000002260000000062507621405727017143 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208v.htma0000644000031000002260000000062507621405727017213 0ustar moniotstaff00000000000000 Source t208v.f

PROGRAM %MAIN ( )

Source file:t208v.f
Parameter Variables Used
INTEGER            MAXTOK             (MAXTOK = 10)

ftnchek-3.3.1/test/Okay/t208w.dc00000644000031000002260000000537607621405727016741 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSIN C C External functions C EXTERNAL EXTSUB C DOUBLE PRECISION DFLOAT, DSQRT C C Argument variables C DOUBLE PRECISION X C C Local variables C DOUBLE PRECISION Y C C Common variables C INTEGER A, B, C C COMMON / ONE / A, B, C C C Common variables C INTEGER G, H, I C REAL U, V, W C COMMON / THREE / G, H, I, U COMMON / THREE / V, W C C Common variables C INTEGER D, E, F C COMMON / TWO / D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y(1), Z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc10000644000031000002260000000112607621405727016727 0ustar moniotstaff00000000000000C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc20000644000031000002260000000443507621405727016736 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSIN C C External functions C EXTERNAL EXTSUB C DOUBLE PRECISION DFLOAT, DSQRT C C Argument variables C DOUBLE PRECISION X C C Local variables C DOUBLE PRECISION Y C C Common variables C INTEGER A, B, C C COMMON /ONE/ A, B, C C C Common variables C INTEGER G, H, I C REAL U, V, W C COMMON /THREE/ G, H, I, U, V, W C C Common variables C INTEGER D, E, F C COMMON /TWO/ D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON /FORCE/ F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2), W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON /PRES/ P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON /ONE/ X C C Equivalenced common variables C DOUBLE PRECISION Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON /ONE/ X C C Equivalenced common variables C DOUBLE PRECISION Y(1), Z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc30000644000031000002260000000537607621405727016744 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSIN C C External functions C EXTERNAL EXTSUB C DOUBLE PRECISION DFLOAT, DSQRT C C Argument variables C DOUBLE PRECISION X C C Local variables C DOUBLE PRECISION Y C C Common variables C INTEGER A, B, C C COMMON / ONE / A, B, C C C Common variables C INTEGER G, H, I C REAL U, V, W C COMMON / THREE / G, H, I, U x, V, W C C Common variables C INTEGER D, E, F C COMMON / TWO / D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) x, W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y(1), Z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc40000644000031000002260000000537607621405727016745 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C intrinsic DSIN C C External functions C external EXTSUB C double precision DFLOAT, DSQRT C C Argument variables C double precision X C C Local variables C double precision Y C C Common variables C integer A, B, C C common / ONE / A, B, C C C Common variables C integer G, H, I C real U, V, W C common / THREE / G, H, I, U common / THREE / V, W C C Common variables C integer D, E, F C common / TWO / D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NBP1 parameter (NBP1 = NB+1) C C Common variables C double precision F(0:NBP1,0:NBP1,2) C common / FORCE / F C C Equivalenced common variables C double precision W1(0:NBP1,0:NBP1,1:2) double precision W2(0:NBP1,0:NBP1,1:2) C C Common variables C double precision P(0:NBP1,0:NBP1) C common / PRES / P C C Equivalenced common variables C double precision D(0:NBP1,0:NBP1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C double precision X(10) C common / ONE / X C C Equivalenced common variables C double precision Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C double precision X(10) C common / ONE / X C C Equivalenced common variables C double precision Y(1), Z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc50000644000031000002260000000537607621405727016746 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC dsin C C External functions C EXTERNAL extsub C DOUBLE PRECISION dfloat, dsqrt C C Argument variables C DOUBLE PRECISION x C C Local variables C DOUBLE PRECISION y C C Common variables C INTEGER a, b, c C COMMON / one / a, b, c C C Common variables C INTEGER g, h, i C REAL u, v, w C COMMON / three / g, h, i, u COMMON / three / v, w C C Common variables C INTEGER d, e, f C COMMON / two / d, e, f C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Common variables C DOUBLE PRECISION f(0:nbp1,0:nbp1,2) C COMMON / force / f C C Equivalenced common variables C DOUBLE PRECISION w1(0:nbp1,0:nbp1,1:2) DOUBLE PRECISION w2(0:nbp1,0:nbp1,1:2) C C Common variables C DOUBLE PRECISION p(0:nbp1,0:nbp1) C COMMON / pres / p C C Equivalenced common variables C DOUBLE PRECISION d(0:nbp1,0:nbp1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION x(10) C COMMON / one / x C C Equivalenced common variables C DOUBLE PRECISION y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION x(10) C COMMON / one / x C C Equivalenced common variables C DOUBLE PRECISION y(1), z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc60000644000031000002260000000537607621405727016747 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Intrinsic functions C INTRINSIC DSIN C C External functions C EXTERNAL EXTSUB C DOUBLE PRECISION DFLOAT, DSQRT C C Argument variables C DOUBLE PRECISION X C C Local variables C DOUBLE PRECISION Y C C Common variables C INTEGER A, B, C C COMMON / ONE / A, B, C C C Common variables C INTEGER G, H, I C REAL U, V, W C COMMON / THREE / G, H, I, U COMMON / THREE / V, W C C Common variables C INTEGER D, E, F C COMMON / TWO / D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Common variables C DOUBLE PRECISION X(10) C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y(1), Z(2) C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc70000644000031000002260000000537607621405727016750 0ustar moniotstaff00000000000000*====>Begin Module S File t208w.f *---->Makedcls Options: All variables * * Intrinsic functions * INTRINSIC DSIN * * External functions * EXTERNAL EXTSUB * DOUBLE PRECISION DFLOAT, DSQRT * * Argument variables * DOUBLE PRECISION X * * Local variables * DOUBLE PRECISION Y * * Common variables * INTEGER A, B, C * COMMON / ONE / A, B, C * * Common variables * INTEGER G, H, I * REAL U, V, W * COMMON / THREE / G, H, I, U COMMON / THREE / V, W * * Common variables * INTEGER D, E, F * COMMON / TWO / D, E, F * *====>End Module S File t208w.f *====>Begin Module %MAIN File t208w.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Common variables * DOUBLE PRECISION F(0:NBP1,0:NBP1,2) * COMMON / FORCE / F * * Equivalenced common variables * DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) * * Common variables * DOUBLE PRECISION P(0:NBP1,0:NBP1) * COMMON / PRES / P * * Equivalenced common variables * DOUBLE PRECISION D(0:NBP1,0:NBP1) * *====>End Module %MAIN File t208w.f *====>Begin Module %MAIN File t208w.f *---->Makedcls Options: All variables * * Common variables * DOUBLE PRECISION X(10) * COMMON / ONE / X * * Equivalenced common variables * DOUBLE PRECISION Y * *====>End Module %MAIN File t208w.f *====>Begin Module %MAIN File t208w.f *---->Makedcls Options: All variables * * Common variables * DOUBLE PRECISION X(10) * COMMON / ONE / X * * Equivalenced common variables * DOUBLE PRECISION Y(1), Z(2) * *====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc80000644000031000002260000000537607621405727016751 0ustar moniotstaff00000000000000c====>Begin Module S File t208w.f c---->Makedcls Options: All variables c c Intrinsic functions c INTRINSIC DSIN c c External functions c EXTERNAL EXTSUB c DOUBLE PRECISION DFLOAT, DSQRT c c Argument variables c DOUBLE PRECISION X c c Local variables c DOUBLE PRECISION Y c c Common variables c INTEGER A, B, C c COMMON / ONE / A, B, C c c Common variables c INTEGER G, H, I c REAL U, V, W c COMMON / THREE / G, H, I, U COMMON / THREE / V, W c c Common variables c INTEGER D, E, F c COMMON / TWO / D, E, F c c====>End Module S File t208w.f c====>Begin Module %MAIN File t208w.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Common variables c DOUBLE PRECISION F(0:NBP1,0:NBP1,2) c COMMON / FORCE / F c c Equivalenced common variables c DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) c c Common variables c DOUBLE PRECISION P(0:NBP1,0:NBP1) c COMMON / PRES / P c c Equivalenced common variables c DOUBLE PRECISION D(0:NBP1,0:NBP1) c c====>End Module %MAIN File t208w.f c====>Begin Module %MAIN File t208w.f c---->Makedcls Options: All variables c c Common variables c DOUBLE PRECISION X(10) c COMMON / ONE / X c c Equivalenced common variables c DOUBLE PRECISION Y c c====>End Module %MAIN File t208w.f c====>Begin Module %MAIN File t208w.f c---->Makedcls Options: All variables c c Common variables c DOUBLE PRECISION X(10) c COMMON / ONE / X c c Equivalenced common variables c DOUBLE PRECISION Y(1), Z(2) c c====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dc90000644000031000002260000000521607621405727016743 0ustar moniotstaff00000000000000C====>Begin Module S File t208w.f C---->Makedcls Options: All variables C C Intrinsic functions C INTRINSIC DSIN C C External functions C EXTERNAL EXTSUB C DOUBLE PRECISION DFLOAT, DSQRT C C Argument variables C DOUBLE PRECISION X C C Local variables C DOUBLE PRECISION Y C C Common variables C INTEGER A, B, C C COMMON / ONE / A, B, C C C Common variables C INTEGER G, H, I C REAL U, V, W C COMMON / THREE / G, H, I, U COMMON / THREE / V, W C C Common variables C INTEGER D, E, F C COMMON / TWO / D, E, F C C====>End Module S File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Common variables C DOUBLE PRECISION F C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1, W2 C C Common variables C DOUBLE PRECISION P C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y C C====>End Module %MAIN File t208w.f C====>Begin Module %MAIN File t208w.f C---->Makedcls Options: All variables C C Common variables C DOUBLE PRECISION X C COMMON / ONE / X C C Equivalenced common variables C DOUBLE PRECISION Y, Z C C====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.dca0000644000031000002260000000513407621405727017012 0ustar moniotstaff00000000000000!====>Begin Module S File t208w.f !---->Makedcls Options: All variables ! ! Intrinsic functions ! INTRINSIC DSIN ! ! External functions ! EXTERNAL EXTSUB ! DOUBLE PRECISION DFLOAT, DSQRT ! ! Argument variables ! DOUBLE PRECISION X ! ! Local variables ! DOUBLE PRECISION Y ! ! Common variables ! INTEGER A, B, C ! COMMON / ONE / A, B, C ! ! Common variables ! INTEGER G, H, I ! REAL U, V, W ! COMMON / THREE / G, H, I, U COMMON / THREE / V, W ! ! Common variables ! INTEGER D, E, F ! COMMON / TWO / D, E, F ! !====>End Module S File t208w.f !====>Begin Module %MAIN File t208w.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Common variables ! DOUBLE PRECISION F(0:NBP1,0:NBP1,2) ! COMMON / FORCE / F ! ! Equivalenced common variables ! DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2), W2(0:NBP1,0:NBP1,1:2) ! ! Common variables ! DOUBLE PRECISION P(0:NBP1,0:NBP1) ! COMMON / PRES / P ! ! Equivalenced common variables ! DOUBLE PRECISION D(0:NBP1,0:NBP1) ! !====>End Module %MAIN File t208w.f !====>Begin Module %MAIN File t208w.f !---->Makedcls Options: All variables ! ! Common variables ! DOUBLE PRECISION X(10) ! COMMON / ONE / X ! ! Equivalenced common variables ! DOUBLE PRECISION Y ! !====>End Module %MAIN File t208w.f !====>Begin Module %MAIN File t208w.f !---->Makedcls Options: All variables ! ! Common variables ! DOUBLE PRECISION X(10) ! COMMON / ONE / X ! ! Equivalenced common variables ! DOUBLE PRECISION Y(1), Z(2) ! !====>End Module %MAIN File t208w.f ftnchek-3.3.1/test/Okay/t208w.htm00000644000031000002260000000744507621405727017142 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   DFLOAT,     DSQRT
SUBROUTINE         DSIN
External Functions and Subroutines Called
SUBROUTINE         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            A,         B,              C
TWO                INTEGER            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         FOO
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   D()        Local Var
                   DOUBLE PRECISION   P()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   F()        COMMON /FORCE/
                   DOUBLE PRECISION   W2()       Local Var
                   DOUBLE PRECISION   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   F(0:NBP1,0:NBP1,2)
PRES               DOUBLE PRECISION   P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   X()        COMMON /ONE/
                   DOUBLE PRECISION   Z()        Local Var
                   DOUBLE PRECISION   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   X(10)

ftnchek-3.3.1/test/Okay/t208w.htm20000644000031000002260000000733507621405727017142 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION  DFLOAT,  DSQRT
SUBROUTINE  DSIN
External Functions and Subroutines Called
SUBROUTINE  EXTSUB,  SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER  A,   B,              C
TWO                INTEGER  D,   E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE  FOO
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION  D()         Local Var
                   DOUBLE PRECISION  P()         COMMON /PRES/
EQUIV              DOUBLE PRECISION  F()         COMMON /FORCE/
                   DOUBLE PRECISION  W2()        Local Var
                   DOUBLE PRECISION  W1()        Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION  F(0:NBP1,0:NBP1,2)
PRES               DOUBLE PRECISION  P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE  SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION  X()         COMMON /ONE/
                   DOUBLE PRECISION  Z()         Local Var
                   DOUBLE PRECISION  Y()         Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION  X(10)

ftnchek-3.3.1/test/Okay/t208w.htm30000644000031000002260000000744507621405727017145 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   DFLOAT,     DSQRT
SUBROUTINE         DSIN
External Functions and Subroutines Called
SUBROUTINE         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            A,         B,              C
TWO                INTEGER            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         FOO
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   D()        Local Var
                   DOUBLE PRECISION   P()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   F()        COMMON /FORCE/
                   DOUBLE PRECISION   W2()       Local Var
                   DOUBLE PRECISION   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   F(0:NBP1,0:NBP1,2)
PRES               DOUBLE PRECISION   P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   X()        COMMON /ONE/
                   DOUBLE PRECISION   Z()        Local Var
                   DOUBLE PRECISION   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   X(10)

ftnchek-3.3.1/test/Okay/t208w.htm40000644000031000002260000000744507621405727017146 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
double precision   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
double precision   DFLOAT,     DSQRT
subroutine         DSIN
External Functions and Subroutines Called
subroutine         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
double precision  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                integer            A,         B,              C
TWO                integer            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
subroutine         FOO
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              double precision   D()        Local Var
                   double precision   P()        COMMON /PRES/
EQUIV              double precision   F()        COMMON /FORCE/
                   double precision   W2()       Local Var
                   double precision   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              double precision   F(0:NBP1,0:NBP1,2)
PRES               double precision   P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
subroutine         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              double precision   X()        COMMON /ONE/
                   double precision   Z()        Local Var
                   double precision   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                double precision   X(10)

ftnchek-3.3.1/test/Okay/t208w.htm50000644000031000002260000000744507621405727017147 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   x
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   dfloat,     dsqrt
SUBROUTINE         dsin
External Functions and Subroutines Called
SUBROUTINE         extsub,     subext
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            a,         b,              c
TWO                INTEGER            d,         e,              f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         foo
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   d()        Local Var
                   DOUBLE PRECISION   p()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   f()        COMMON /FORCE/
                   DOUBLE PRECISION   w2()       Local Var
                   DOUBLE PRECISION   w1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   f(0:nbp1,0:nbp1,2)
PRES               DOUBLE PRECISION   p(0:nbp1,0:nbp1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         subrtn
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   x()        COMMON /ONE/
                   DOUBLE PRECISION   z()        Local Var
                   DOUBLE PRECISION   y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   x(10)

ftnchek-3.3.1/test/Okay/t208w.htm60000644000031000002260000000744507621405727017150 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   DFLOAT,     DSQRT
SUBROUTINE         DSIN
External Functions and Subroutines Called
SUBROUTINE         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            A,         B,              C
TWO                INTEGER            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         FOO
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   D()        Local Var
                   DOUBLE PRECISION   P()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   F()        COMMON /FORCE/
                   DOUBLE PRECISION   W2()       Local Var
                   DOUBLE PRECISION   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   F(0:NBP1,0:NBP1,2)
PRES               DOUBLE PRECISION   P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   X()        COMMON /ONE/
                   DOUBLE PRECISION   Z()        Local Var
                   DOUBLE PRECISION   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   X(10)

ftnchek-3.3.1/test/Okay/t208w.htm90000644000031000002260000000740107621405727017143 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   DFLOAT,     DSQRT
SUBROUTINE         DSIN
External Functions and Subroutines Called
SUBROUTINE         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            A,         B,              C
TWO                INTEGER            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         FOO
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   D()        Local Var
                   DOUBLE PRECISION   P()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   F()        COMMON /FORCE/
                   DOUBLE PRECISION   W2()       Local Var
                   DOUBLE PRECISION   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   F
PRES               DOUBLE PRECISION   P

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   X()        COMMON /ONE/
                   DOUBLE PRECISION   Z()        Local Var
                   DOUBLE PRECISION   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   X

ftnchek-3.3.1/test/Okay/t208w.htma0000644000031000002260000000744507621405727017223 0ustar moniotstaff00000000000000 Source t208w.f

DOUBLE PRECISION FUNCTION S ( X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   X
Description
ftnchek test file: t208w.f, Mon Mar 13 14:01:03 1995
Source file:t208w.f
Intrinsic Functions Called
DOUBLE PRECISION   DFLOAT,     DSQRT
SUBROUTINE         DSIN
External Functions and Subroutines Called
SUBROUTINE         EXTSUB,     SUBEXT
Local Variables (+ indicates altered content)
DOUBLE PRECISION  +Y
Referenced Common Block Variables (+ indicates altered content)
ONE                INTEGER            A,         B,              C
TWO                INTEGER            D,         E,              F

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         FOO
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   D()        Local Var
                   DOUBLE PRECISION   P()        COMMON /PRES/
EQUIV              DOUBLE PRECISION   F()        COMMON /FORCE/
                   DOUBLE PRECISION   W2()       Local Var
                   DOUBLE PRECISION   W1()       Local Var
Referenced Common Block Variables (+ indicates altered content)
FORCE              DOUBLE PRECISION   F(0:NBP1,0:NBP1,2)
PRES               DOUBLE PRECISION   P(0:NBP1,0:NBP1)

PROGRAM %MAIN ( )

Source file:t208w.f

PROGRAM %MAIN ( )

Source file:t208w.f
External Functions and Subroutines Called
SUBROUTINE         SUBRTN
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   X()        COMMON /ONE/
                   DOUBLE PRECISION   Z()        Local Var
                   DOUBLE PRECISION   Y()        Local Var
Referenced Common Block Variables (+ indicates altered content)
ONE                DOUBLE PRECISION   X(10)

ftnchek-3.3.1/test/Okay/t208x.dc00000644000031000002260000010143107621405727016727 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON / GRID / X, Y C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc10000644000031000002260000003761507621405727016744 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C REAL DZSUB C C Common variables C INTEGER NFIL C C Common variables C INTEGER METHOD, MTHLIM C C Common variables C INTEGER NK C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Common variables C INTEGER NK C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER ISIGN C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Common variables C INTEGER NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: Undeclared variables C C Argument variables C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C INTEGER NM1 C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module PERIOD File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: Undeclared variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Common variables C INTEGER NK C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc20000644000031000002260000006176507621405727016750 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE, E13FILE, E14FILE CHARACTER*18 E15FILE, E16FILE, E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE, E24FILE, E2FILE CHARACTER*18 E3FILE, E4FILE, E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE, MAIFILE, MFILE, MMFILE CHARACTER*18 PAFILE, PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX, FLMAX, PHIAMAX, PHIAMIN DOUBLE PRECISION PHINMAX, PHINMIN, Q, TCOEF, TFREQ, TIME, TPI DOUBLE PRECISION UMAX, UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX, BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB, DZSUB C C Namelists C NAMELIST /DATA/ AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, DERIV x, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON /ADP/ C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON /AGG/ ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON /EFNUM/ NFIL C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON /FMARKERS/ XM C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON /FORCE/ F C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON /FORCEB/ FB C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON /LINK/ ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON /MTH/ METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON /PHI/ PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON /RSIZE/ DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON /STEPS/ H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON /STIFF/ K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON /WAVE/ WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0, ANG, AX, AY, B0, C0, C1, C2 DOUBLE PRECISION CCHAR, CMAX, CMIN, CO, CT, CX, CXH, CY, CYH, D DOUBLE PRECISION DC, DN, ELF0, ELFCHAR, MU, PCHAR, PHI0, PI, R0 DOUBLE PRECISION RO, S0, SI, SX, SXH, SY, SYH, TCHAR, TH, TPI, U0 DOUBLE PRECISION UCHAR, WL, XCHAR, XH, XLOW, YH, YLOW, Z0 C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON /ADP/ C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON /AGG/ ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON /CHAR/ FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4, CND5 C COMMON /CND/ CND1, CND2, CND3, CND4, CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2, S3 C COMMON /COEFS/ S1, S2, S3, RE, A C C Common variables C DOUBLE PRECISION PEC C COMMON /DIFFC/ PEC C C Common variables C DOUBLE PRECISION PEN C COMMON /DIFFN/ PEN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON /FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON /FORCEB/ FB C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON /GRID/ X, Y C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON /LINK/ ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON /LINKB/ BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON /LINKF/ ALPHA0 C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON /PHI/ PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON /PSTEPS/ THETA C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON /RSIZE/ DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON /STEPS/ H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON /STIFF/ K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2, S3 C COMMON /COEFS/ S1, S2, S3, RE, A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON /FFT/ SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON /PTDS/ Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON /STEPS/ H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1), LAM(NG), PRO DOUBLE PRECISION R(0:NBP1,0:NBP1), XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION A, RE, S1, S2, S3 C COMMON /COEFS/ S1, S2, S3, RE, A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON /FFT/ SINSQ, BZERO C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON /FORCE/ F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2), W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON /PRES/ P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON /PTDS/ Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON /STEPS/ H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION W(0:NBP1,0:NBP1), Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON /TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION W(0:NBP1,0:NBP1), Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON /TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3, W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N), T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON /PHI/ PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON /AGG/ ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME, U(0:NBP1,0:NBP1,2) DOUBLE PRECISION XM(MMAX,2), ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON /EFNUM/ NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN, VM, VMN, X, XN, Y, YN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON /FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON /STEPS/ H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON /DIFFN/ PEN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON /PHI/ PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON /ADP/ C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON /DIFFC/ PEC C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON /VEL/ U, UY, VY, UX, VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1), PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1), GSUB(NB-1), LAM, Y(NB-1) DOUBLE PRECISION Z(NB-1) C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1, TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON /ADP/ C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON /AGG/ ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4, CND5 C COMMON /CND/ CND1, CND2, CND3, CND4, CND5 C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON /LINK/ ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON /PHI/ PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON /RSIZE/ DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON /STEPS/ H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc30000644000031000002260000010143107621405727016732 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE x, E13FILE, E14FILE, E15FILE, E16FILE x, E17FILE, E18FILE, E19FILE, E1FILE x, E20FILE, E21FILE, E22FILE, E23FILE x, E24FILE, E2FILE, E3FILE, E4FILE x, E5FILE, E6FILE, E7FILE, E8FILE x, E9FILE, EFILE, FFILE, FMFILE x, MAIFILE, MFILE, MMFILE, PAFILE x, PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX x, FLMAX, PHIAMAX, PHIAMIN, PHINMAX x, PHINMIN, Q, TCOEF, TFREQ x, TIME, TPI, UMAX x, UOLD(0:NBP1,0:NBP1,2), USMAX x, ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB x, DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) x, ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 x, ANG, AX, AY, B0 x, C0, C1, C2, CCHAR x, CMAX, CMIN, CO, CT x, CX, CXH, CY, CYH x, D, DC, DN, ELF0 x, ELFCHAR, MU, PCHAR, PHI0 x, PI, R0, RO, S0 x, SI, SX, SXH, SY x, SYH, TCHAR, TH, TPI x, U0, UCHAR, WL, XCHAR x, XH, XLOW, YH, YLOW x, Z0 C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 x, CND5 C COMMON / CND / CND1, CND2, CND3, CND4 x, CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2 x, S3 C COMMON / COEFS / S1, S2, S3, RE x, A C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON / GRID / X, Y C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) x, ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2 x, S3 C COMMON / COEFS / S1, S2, S3, RE x, A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) x, LAM(NG), PRO, R(0:NBP1,0:NBP1) x, XL, YH(0:NBP1,0:NBP1), YL x, YP(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION A, RE, S1, S2 x, S3 C COMMON / COEFS / S1, S2, S3, RE x, A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) x, W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) x, C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) x, Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) x, R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) x, C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) x, Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) x, R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 x, W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N) x, T2(N), T3(N), T4(N), TU1 x, U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1) x, ELF(0:NBP1,0:NBP1,0:NR2,NT1) x, F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), TIME x, U(0:NBP1,0:NBP1,2), XM(MMAX,2) x, ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN x, VM, VMN, X, XN x, Y, YN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) x, UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) x, VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX x, VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) x, PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) x, GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 x, TEMP2, TEMP3, TEMP4 x, Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 x, CND5 C COMMON / CND / CND1, CND2, CND3, CND4 x, CND5 C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) x, ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) x, PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc40000644000031000002260000010143107621405727016733 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer NR parameter (NR = 32) integer NT parameter (NT = 16) integer NR2 parameter (NR2 = NR+2) integer NT1 parameter (NT1 = NT+1) integer NW parameter (NW = 2*NT+15) integer MMAX parameter (MMAX = 200) C C Local variables C character*18 CFILE, E10FILE, E11FILE, E12FILE character*18 E13FILE, E14FILE, E15FILE, E16FILE character*18 E17FILE, E18FILE, E19FILE, E1FILE character*18 E20FILE, E21FILE, E22FILE, E23FILE character*18 E24FILE, E2FILE, E3FILE, E4FILE character*18 E5FILE, E6FILE, E7FILE, E8FILE character*18 E9FILE, EFILE, FFILE, FMFILE character*18 MAIFILE, MFILE, MMFILE, PAFILE character*18 PARFILE, PNFILE character*15 RNAME character*18 SYMFILE, UFILE, ZFILE C double precision CMAX, CMIN, F0, FBMAX double precision FLMAX, PHIAMAX, PHIAMIN, PHINMAX double precision PHINMIN, Q, TCOEF, TFREQ double precision TIME, TPI, UMAX double precision UOLD(0:NBP1,0:NBP1,2), USMAX double precision ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C integer RLEN C logical AVRAGE(06), AXES3D, BCLIP, BOX logical BYROWS, CHKDUP, DERIV(06) C real DUSUB, DVSUB, DXSUB, DYSUB real DZSUB C C Namelists C namelist / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C double precision C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C common / ADP / C, CN C C Common variables C double precision ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C common / AGG / ZAG, ZAGN C C Common variables C integer NFIL C common / EFNUM / NFIL C C Common variables C double precision XM(MMAX,2) C common / FMARKERS/ XM C C Common variables C double precision F(0:NBP1,0:NBP1,2) C common / FORCE / F C C Common variables C double precision FB(0:NBP1,0:NBP1,2) C common / FORCEB / FB C C Common variables C double precision ELF(0:NBP1,0:NBP1,0:NR2,NT1) double precision ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C common / LINK / ELF, ELFN C C Common variables C integer METHOD, MTHLIM C common / MTH / METHOD, MTHLIM C C Common variables C double precision PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C common / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C double precision DR(NR2), R(0:NR2) C integer NK C common / RSIZE / DR, R, NK C C Common variables C double precision DLT, H C common / STEPS / H, DLT C C Common variables C double precision K0 C common / STIFF / K0 C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C Common variables C double precision WSAVE(NW) C common / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer NR parameter (NR = 32) integer NT parameter (NT = 16) integer NR2 parameter (NR2 = NR+2) integer NT1 parameter (NT1 = NT+1) integer MMAX parameter (MMAX = 200) C C Local variables C double precision A0, A2, ACHEM, ADP0 double precision ANG, AX, AY, B0 double precision C0, C1, C2, CCHAR double precision CMAX, CMIN, CO, CT double precision CX, CXH, CY, CYH double precision D, DC, DN, ELF0 double precision ELFCHAR, MU, PCHAR, PHI0 double precision PI, R0, RO, S0 double precision SI, SX, SXH, SY double precision SYH, TCHAR, TH, TPI double precision U0, UCHAR, WL, XCHAR double precision XH, XLOW, YH, YLOW double precision Z0 C C Common variables C double precision C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C common / ADP / C, CN C C Common variables C double precision ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C common / AGG / ZAG, ZAGN C C Common variables C double precision FCHAR, PHICHAR, ZCHAR C common / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C double precision CND1, CND2, CND3, CND4 double precision CND5 C common / CND / CND1, CND2, CND3, CND4 common / CND / CND5 C C Common variables C double precision A, RE, S1, S2 double precision S3 C common / COEFS / S1, S2, S3, RE common / COEFS / A C C Common variables C double precision PEC C common / DIFFC / PEC C C Common variables C double precision PEN C common / DIFFN / PEN C C Common variables C double precision XM(MMAX,2) C common / FMARKERS/ XM C C Common variables C double precision FB(0:NBP1,0:NBP1,2) C common / FORCEB / FB C C Common variables C double precision X(0:NBP1), Y(0:NBP1) C common / GRID / X, Y C C Common variables C double precision ELF(0:NBP1,0:NBP1,0:NR2,NT1) double precision ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C common / LINK / ELF, ELFN C C Common variables C double precision BETA0 C common / LINKB / BETA0 C C Common variables C double precision ALPHA0 C common / LINKF / ALPHA0 C C Common variables C double precision PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C common / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C double precision THETA C common / PSTEPS / THETA C C Common variables C double precision DR(NR2), R(0:NR2) C integer NK C common / RSIZE / DR, R, NK C C Common variables C double precision DLT, H C common / STEPS / H, DLT C C Common variables C double precision K0 C common / STIFF / K0 C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NBP1 parameter (NBP1 = NB+1) C C Local variables C double precision PI, SI, SJ, TPON C C Common variables C double precision A, RE, S1, S2 double precision S3 C common / COEFS / S1, S2, S3, RE common / COEFS / A C C Common variables C double precision BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C common / FFT / SINSQ, BZERO C C Common variables C double precision Z(0:NBP1,0:NBP1) C common / PTDS / Z C C Common variables C double precision DLT, H C common / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NBP1 parameter (NBP1 = NB+1) C C Local variables C double precision B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) double precision LAM(NG), PRO, R(0:NBP1,0:NBP1) double precision XL, YH(0:NBP1,0:NBP1), YL double precision YP(0:NBP1,0:NBP1) C C Common variables C double precision A, RE, S1, S2 double precision S3 C common / COEFS / S1, S2, S3, RE common / COEFS / A C C Common variables C double precision BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C common / FFT / SINSQ, BZERO C C Common variables C double precision F(0:NBP1,0:NBP1,2) C common / FORCE / F C C Equivalenced common variables C double precision W1(0:NBP1,0:NBP1,1:2) double precision W2(0:NBP1,0:NBP1,1:2) C C Common variables C double precision P(0:NBP1,0:NBP1) C common / PRES / P C C Equivalenced common variables C double precision D(0:NBP1,0:NBP1) C C Common variables C double precision Z(0:NBP1,0:NBP1) C common / PTDS / Z C C Common variables C double precision DLT, H C common / STEPS / H, DLT C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer N parameter (N = NG-1) integer NP1 parameter (NP1 = N+1) integer NM1 parameter (NM1 = N-1) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision A, B(0:NBP1,0:NBP1) double precision C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) double precision Y(0:NBP1,0:NBP1) C C Common variables C double precision D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) double precision R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C common / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer N parameter (N = NG-1) integer NP1 parameter (NP1 = N+1) integer NM1 parameter (NM1 = N-1) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision A, B(0:NBP1,0:NBP1) double precision C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) double precision Y(0:NBP1,0:NBP1) C C Common variables C double precision D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) double precision R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C common / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C double precision S C C Common variables C double precision H, K C common / STEPS / H, K C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision D(0:NBP1,0:NBP1), S3 double precision W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer N parameter (N = NG) integer M parameter (M = L2NG) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C integer ISIGN C C Local variables C double precision ANG, PI, SSIGN, T1(N) double precision T2(N), T3(N), T4(N), TU1 double precision U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C integer N C C Common variables C double precision PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C common / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C double precision H, K C common / STEPS / H, K C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C integer N C C Common variables C double precision ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C common / AGG / ZAG, ZAGN C C Common variables C double precision H, K C common / STEPS / H, K C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer NR parameter (NR = 32) integer NT parameter (NT = 16) integer NR2 parameter (NR2 = NR+2) integer NT1 parameter (NT1 = NT+1) integer MMAX parameter (MMAX = 200) C C Argument variables C double precision C(0:NBP1,0:NBP1) double precision ELF(0:NBP1,0:NBP1,0:NR2,NT1) double precision F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), TIME double precision U(0:NBP1,0:NBP1,2), XM(MMAX,2) double precision ZAG(0:NBP1,0:NBP1) C integer N, NK C C Common variables C integer NFIL C common / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer MMAX parameter (MMAX = 200) C C Local variables C double precision AX, AY, UM, UMN double precision VM, VMN, X, XN double precision Y, YN C C Common variables C double precision XM(MMAX,2) C common / FMARKERS/ XM C C Common variables C double precision DLT, H C common / STEPS / H, DLT C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer MMAX parameter (MMAX = 200) C C Argument variables C integer N C C Common variables C double precision PEN C common / DIFFN / PEN C C Common variables C double precision PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C common / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C double precision H, K C common / STEPS / H, K C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer MMAX parameter (MMAX = 200) C C Argument variables C integer N C C Common variables C double precision C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C common / ADP / C, CN C C Common variables C double precision PEC C common / DIFFC / PEC C C Common variables C double precision H, K C common / STEPS / H, K C C Common variables C double precision U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) double precision UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) double precision VY(0:NBP1,0:NBP1) C common / VEL / U, UY, VY, UX common / VEL / VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C double precision DIAG(NN), SUBD(NN) C integer NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer MAX parameter (MAX = NBP1) C C Argument variables C double precision B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C integer NM1 C C Local variables C double precision Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C double precision L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) C C Argument variables C double precision ALPHA, K1, PH(0:NBP1,0:NBP1) double precision PHN(0:NBP1,0:NBP1) C C Local variables C double precision B(NB), ETA, GDIAG(NB-1) double precision GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C Common variables C double precision H, K C common / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C integer L2NG parameter (L2NG = 6) integer NG parameter (NG = 2**L2NG) integer NB parameter (NB = NG+2) integer NGM1 parameter (NGM1 = NG-1) integer NGP1 parameter (NGP1 = NG+1) integer NGP2 parameter (NGP2 = NG+2) integer NBP1 parameter (NBP1 = NB+1) integer NR parameter (NR = 32) integer NT parameter (NT = 16) integer NR2 parameter (NR2 = NR+2) integer NT1 parameter (NT1 = NT+1) C C Local variables C double precision ALPHA, C4, RC(0:NBP1), TEMP1 double precision TEMP2, TEMP3, TEMP4 double precision Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C double precision C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C common / ADP / C, CN C C Common variables C double precision ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C common / AGG / ZAG, ZAGN C C Common variables C double precision CND1, CND2, CND3, CND4 double precision CND5 C common / CND / CND1, CND2, CND3, CND4 common / CND / CND5 C C Common variables C double precision ELF(0:NBP1,0:NBP1,0:NR2,NT1) double precision ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C common / LINK / ELF, ELFN C C Common variables C double precision PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) double precision PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C common / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C double precision DR(NR2), R(0:NR2) C integer NK C common / RSIZE / DR, R, NK C C Common variables C double precision H, K C common / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc50000644000031000002260000010143107621405727016734 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER nr PARAMETER (nr = 32) INTEGER nt PARAMETER (nt = 16) INTEGER nr2 PARAMETER (nr2 = nr+2) INTEGER nt1 PARAMETER (nt1 = nt+1) INTEGER nw PARAMETER (nw = 2*nt+15) INTEGER mmax PARAMETER (mmax = 200) C C Local variables C CHARACTER*18 cfile, e10file, e11file, e12file CHARACTER*18 e13file, e14file, e15file, e16file CHARACTER*18 e17file, e18file, e19file, e1file CHARACTER*18 e20file, e21file, e22file, e23file CHARACTER*18 e24file, e2file, e3file, e4file CHARACTER*18 e5file, e6file, e7file, e8file CHARACTER*18 e9file, efile, ffile, fmfile CHARACTER*18 maifile, mfile, mmfile, pafile CHARACTER*18 parfile, pnfile CHARACTER*15 rname CHARACTER*18 symfile, ufile, zfile C DOUBLE PRECISION cmax, cmin, f0, fbmax DOUBLE PRECISION flmax, phiamax, phiamin, phinmax DOUBLE PRECISION phinmin, q, tcoef, tfreq DOUBLE PRECISION time, tpi, umax DOUBLE PRECISION uold(0:nbp1,0:nbp1,2), usmax DOUBLE PRECISION zagi(0:nbp1,0:nbp1), zagmax, zagmin C INTEGER rlen C LOGICAL avrage(06), axes3d, bclip, box LOGICAL byrows, chkdup, deriv(06) C REAL dusub, dvsub, dxsub, dysub REAL dzsub C C Namelists C NAMELIST / data / avrage, axes3d, bclip, box x, byrows, chkdup, deriv, dusub x, dvsub, dxsub, dysub, dzsub C C Common variables C DOUBLE PRECISION c(0:nbp1,0:nbp1), cn(0:nbp1,0:nbp1) C COMMON / adp / c, cn C C Common variables C DOUBLE PRECISION zag(0:nbp1,0:nbp1), zagn(0:nbp1,0:nbp1) C COMMON / agg / zag, zagn C C Common variables C INTEGER nfil C COMMON / efnum / nfil C C Common variables C DOUBLE PRECISION xm(mmax,2) C COMMON / fmarkers/ xm C C Common variables C DOUBLE PRECISION f(0:nbp1,0:nbp1,2) C COMMON / force / f C C Common variables C DOUBLE PRECISION fb(0:nbp1,0:nbp1,2) C COMMON / forceb / fb C C Common variables C DOUBLE PRECISION elf(0:nbp1,0:nbp1,0:nr2,nt1) DOUBLE PRECISION elfn(0:nbp1,0:nbp1,0:nr2,nt1) C COMMON / link / elf, elfn C C Common variables C INTEGER method, mthlim C COMMON / mth / method, mthlim C C Common variables C DOUBLE PRECISION phia(0:nbp1,0:nbp1), phian(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), phinn(0:nbp1,0:nbp1) C COMMON / phi / phin, phinn, phia, phian C C Common variables C DOUBLE PRECISION dr(nr2), r(0:nr2) C INTEGER nk C COMMON / rsize / dr, r, nk C C Common variables C DOUBLE PRECISION dlt, h C COMMON / steps / h, dlt C C Common variables C DOUBLE PRECISION k0 C COMMON / stiff / k0 C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C Common variables C DOUBLE PRECISION wsave(nw) C COMMON / wave / wsave C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER nr PARAMETER (nr = 32) INTEGER nt PARAMETER (nt = 16) INTEGER nr2 PARAMETER (nr2 = nr+2) INTEGER nt1 PARAMETER (nt1 = nt+1) INTEGER mmax PARAMETER (mmax = 200) C C Local variables C DOUBLE PRECISION a0, a2, achem, adp0 DOUBLE PRECISION ang, ax, ay, b0 DOUBLE PRECISION c0, c1, c2, cchar DOUBLE PRECISION cmax, cmin, co, ct DOUBLE PRECISION cx, cxh, cy, cyh DOUBLE PRECISION d, dc, dn, elf0 DOUBLE PRECISION elfchar, mu, pchar, phi0 DOUBLE PRECISION pi, r0, ro, s0 DOUBLE PRECISION si, sx, sxh, sy DOUBLE PRECISION syh, tchar, th, tpi DOUBLE PRECISION u0, uchar, wl, xchar DOUBLE PRECISION xh, xlow, yh, ylow DOUBLE PRECISION z0 C C Common variables C DOUBLE PRECISION c(0:nbp1,0:nbp1), cn(0:nbp1,0:nbp1) C COMMON / adp / c, cn C C Common variables C DOUBLE PRECISION zag(0:nbp1,0:nbp1), zagn(0:nbp1,0:nbp1) C COMMON / agg / zag, zagn C C Common variables C DOUBLE PRECISION fchar, phichar, zchar C COMMON / char / fchar, zchar, phichar C C Common variables C DOUBLE PRECISION cnd1, cnd2, cnd3, cnd4 DOUBLE PRECISION cnd5 C COMMON / cnd / cnd1, cnd2, cnd3, cnd4 COMMON / cnd / cnd5 C C Common variables C DOUBLE PRECISION a, re, s1, s2 DOUBLE PRECISION s3 C COMMON / coefs / s1, s2, s3, re COMMON / coefs / a C C Common variables C DOUBLE PRECISION pec C COMMON / diffc / pec C C Common variables C DOUBLE PRECISION pen C COMMON / diffn / pen C C Common variables C DOUBLE PRECISION xm(mmax,2) C COMMON / fmarkers/ xm C C Common variables C DOUBLE PRECISION fb(0:nbp1,0:nbp1,2) C COMMON / forceb / fb C C Common variables C DOUBLE PRECISION x(0:nbp1), y(0:nbp1) C COMMON / grid / x, y C C Common variables C DOUBLE PRECISION elf(0:nbp1,0:nbp1,0:nr2,nt1) DOUBLE PRECISION elfn(0:nbp1,0:nbp1,0:nr2,nt1) C COMMON / link / elf, elfn C C Common variables C DOUBLE PRECISION beta0 C COMMON / linkb / beta0 C C Common variables C DOUBLE PRECISION alpha0 C COMMON / linkf / alpha0 C C Common variables C DOUBLE PRECISION phia(0:nbp1,0:nbp1), phian(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), phinn(0:nbp1,0:nbp1) C COMMON / phi / phin, phinn, phia, phian C C Common variables C DOUBLE PRECISION theta C COMMON / psteps / theta C C Common variables C DOUBLE PRECISION dr(nr2), r(0:nr2) C INTEGER nk C COMMON / rsize / dr, r, nk C C Common variables C DOUBLE PRECISION dlt, h C COMMON / steps / h, dlt C C Common variables C DOUBLE PRECISION k0 C COMMON / stiff / k0 C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Local variables C DOUBLE PRECISION pi, si, sj, tpon C C Common variables C DOUBLE PRECISION a, re, s1, s2 DOUBLE PRECISION s3 C COMMON / coefs / s1, s2, s3, re COMMON / coefs / a C C Common variables C DOUBLE PRECISION bzero(0:nbp1,0:nbp1), sinsq(0:nbp1,0:nbp1) C COMMON / fft / sinsq, bzero C C Common variables C DOUBLE PRECISION z(0:nbp1,0:nbp1) C COMMON / ptds / z C C Common variables C DOUBLE PRECISION dlt, h C COMMON / steps / h, dlt C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Local variables C DOUBLE PRECISION b(0:nbp1,0:nbp1), c(0:nbp1,0:nbp1) DOUBLE PRECISION lam(ng), pro, r(0:nbp1,0:nbp1) DOUBLE PRECISION xl, yh(0:nbp1,0:nbp1), yl DOUBLE PRECISION yp(0:nbp1,0:nbp1) C C Common variables C DOUBLE PRECISION a, re, s1, s2 DOUBLE PRECISION s3 C COMMON / coefs / s1, s2, s3, re COMMON / coefs / a C C Common variables C DOUBLE PRECISION bzero(0:nbp1,0:nbp1), sinsq(0:nbp1,0:nbp1) C COMMON / fft / sinsq, bzero C C Common variables C DOUBLE PRECISION f(0:nbp1,0:nbp1,2) C COMMON / force / f C C Equivalenced common variables C DOUBLE PRECISION w1(0:nbp1,0:nbp1,1:2) DOUBLE PRECISION w2(0:nbp1,0:nbp1,1:2) C C Common variables C DOUBLE PRECISION p(0:nbp1,0:nbp1) C COMMON / pres / p C C Equivalenced common variables C DOUBLE PRECISION d(0:nbp1,0:nbp1) C C Common variables C DOUBLE PRECISION z(0:nbp1,0:nbp1) C COMMON / ptds / z C C Common variables C DOUBLE PRECISION dlt, h C COMMON / steps / h, dlt C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER n PARAMETER (n = ng-1) INTEGER np1 PARAMETER (np1 = n+1) INTEGER nm1 PARAMETER (nm1 = n-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION a, b(0:nbp1,0:nbp1) DOUBLE PRECISION c(0:nbp1,0:nbp1), w(0:nbp1,0:nbp1) DOUBLE PRECISION y(0:nbp1,0:nbp1) C C Common variables C DOUBLE PRECISION d(0:nbp1,0:nbp1), l(0:nbp1,0:nbp1) DOUBLE PRECISION r(0:nbp1,0:nbp1), x(0:nbp1,0:nbp1) C COMMON / tdspace/ x, l, r, d C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER n PARAMETER (n = ng-1) INTEGER np1 PARAMETER (np1 = n+1) INTEGER nm1 PARAMETER (nm1 = n-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION a, b(0:nbp1,0:nbp1) DOUBLE PRECISION c(0:nbp1,0:nbp1), w(0:nbp1,0:nbp1) DOUBLE PRECISION y(0:nbp1,0:nbp1) C C Common variables C DOUBLE PRECISION d(0:nbp1,0:nbp1), l(0:nbp1,0:nbp1) DOUBLE PRECISION r(0:nbp1,0:nbp1), x(0:nbp1,0:nbp1) C COMMON / tdspace/ x, l, r, d C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION p(0:nbp1,0:nbp1), w2(0:nbp1,0:nbp1,2) C C Local variables C DOUBLE PRECISION s C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION d(0:nbp1,0:nbp1), s3 DOUBLE PRECISION w2(0:nbp1,0:nbp1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER n PARAMETER (n = ng) INTEGER m PARAMETER (m = l2ng) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION a(0:nbp1,0:nbp1), b(0:nbp1,0:nbp1) C INTEGER isign C C Local variables C DOUBLE PRECISION ang, pi, ssign, t1(n) DOUBLE PRECISION t2(n), t3(n), t4(n), tu1 DOUBLE PRECISION u1, u2, w1, w2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C INTEGER n C C Common variables C DOUBLE PRECISION phia(0:nbp1,0:nbp1), phian(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), phinn(0:nbp1,0:nbp1) C COMMON / phi / phin, phinn, phia, phian C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C INTEGER n C C Common variables C DOUBLE PRECISION zag(0:nbp1,0:nbp1), zagn(0:nbp1,0:nbp1) C COMMON / agg / zag, zagn C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER nr PARAMETER (nr = 32) INTEGER nt PARAMETER (nt = 16) INTEGER nr2 PARAMETER (nr2 = nr+2) INTEGER nt1 PARAMETER (nt1 = nt+1) INTEGER mmax PARAMETER (mmax = 200) C C Argument variables C DOUBLE PRECISION c(0:nbp1,0:nbp1) DOUBLE PRECISION elf(0:nbp1,0:nbp1,0:nr2,nt1) DOUBLE PRECISION f(0:nbp1,0:nbp1,2), phia(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), time DOUBLE PRECISION u(0:nbp1,0:nbp1,2), xm(mmax,2) DOUBLE PRECISION zag(0:nbp1,0:nbp1) C INTEGER n, nk C C Common variables C INTEGER nfil C COMMON / efnum / nfil C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER mmax PARAMETER (mmax = 200) C C Local variables C DOUBLE PRECISION ax, ay, um, umn DOUBLE PRECISION vm, vmn, x, xn DOUBLE PRECISION y, yn C C Common variables C DOUBLE PRECISION xm(mmax,2) C COMMON / fmarkers/ xm C C Common variables C DOUBLE PRECISION dlt, h C COMMON / steps / h, dlt C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER mmax PARAMETER (mmax = 200) C C Argument variables C INTEGER n C C Common variables C DOUBLE PRECISION pen C COMMON / diffn / pen C C Common variables C DOUBLE PRECISION phia(0:nbp1,0:nbp1), phian(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), phinn(0:nbp1,0:nbp1) C COMMON / phi / phin, phinn, phia, phian C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER mmax PARAMETER (mmax = 200) C C Argument variables C INTEGER n C C Common variables C DOUBLE PRECISION c(0:nbp1,0:nbp1), cn(0:nbp1,0:nbp1) C COMMON / adp / c, cn C C Common variables C DOUBLE PRECISION pec C COMMON / diffc / pec C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C Common variables C DOUBLE PRECISION u(0:nbp1,0:nbp1,2), ux(0:nbp1,0:nbp1) DOUBLE PRECISION uy(0:nbp1,0:nbp1), vx(0:nbp1,0:nbp1) DOUBLE PRECISION vy(0:nbp1,0:nbp1) C COMMON / vel / u, uy, vy, ux COMMON / vel / vx C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION diag(nn), subd(nn) C INTEGER nn C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER max PARAMETER (max = nbp1) C C Argument variables C DOUBLE PRECISION b(nm1+1), diag(nm1), sub(nm1), x(nm1) C INTEGER nm1 C C Local variables C DOUBLE PRECISION y(max) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION ph(0:nbp1,0:nbp1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION l, r, v C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) C C Argument variables C DOUBLE PRECISION alpha, k1, ph(0:nbp1,0:nbp1) DOUBLE PRECISION phn(0:nbp1,0:nbp1) C C Local variables C DOUBLE PRECISION b(nb), eta, gdiag(nb-1) DOUBLE PRECISION gsub(nb-1), lam, y(nb-1), z(nb-1) C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER l2ng PARAMETER (l2ng = 6) INTEGER ng PARAMETER (ng = 2**l2ng) INTEGER nb PARAMETER (nb = ng+2) INTEGER ngm1 PARAMETER (ngm1 = ng-1) INTEGER ngp1 PARAMETER (ngp1 = ng+1) INTEGER ngp2 PARAMETER (ngp2 = ng+2) INTEGER nbp1 PARAMETER (nbp1 = nb+1) INTEGER nr PARAMETER (nr = 32) INTEGER nt PARAMETER (nt = 16) INTEGER nr2 PARAMETER (nr2 = nr+2) INTEGER nt1 PARAMETER (nt1 = nt+1) C C Local variables C DOUBLE PRECISION alpha, c4, rc(0:nbp1), temp1 DOUBLE PRECISION temp2, temp3, temp4 DOUBLE PRECISION y(0:nbp1,4), yn(0:nbp1,4) C C Common variables C DOUBLE PRECISION c(0:nbp1,0:nbp1), cn(0:nbp1,0:nbp1) C COMMON / adp / c, cn C C Common variables C DOUBLE PRECISION zag(0:nbp1,0:nbp1), zagn(0:nbp1,0:nbp1) C COMMON / agg / zag, zagn C C Common variables C DOUBLE PRECISION cnd1, cnd2, cnd3, cnd4 DOUBLE PRECISION cnd5 C COMMON / cnd / cnd1, cnd2, cnd3, cnd4 COMMON / cnd / cnd5 C C Common variables C DOUBLE PRECISION elf(0:nbp1,0:nbp1,0:nr2,nt1) DOUBLE PRECISION elfn(0:nbp1,0:nbp1,0:nr2,nt1) C COMMON / link / elf, elfn C C Common variables C DOUBLE PRECISION phia(0:nbp1,0:nbp1), phian(0:nbp1,0:nbp1) DOUBLE PRECISION phin(0:nbp1,0:nbp1), phinn(0:nbp1,0:nbp1) C COMMON / phi / phin, phinn, phia, phian C C Common variables C DOUBLE PRECISION dr(nr2), r(0:nr2) C INTEGER nk C COMMON / rsize / dr, r, nk C C Common variables C DOUBLE PRECISION h, k C COMMON / steps / h, k C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc60000644000031000002260000010143107621405727016735 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON / GRID / X, Y C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables except SFTRAN3 internals C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc70000644000031000002260000010143107621405727016736 0ustar moniotstaff00000000000000*====>Begin Module PROB5_4DIM File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) * * Local variables * CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE * DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN * INTEGER RLEN * LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) * REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB * * Namelists * NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB * * Common variables * DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) * COMMON / ADP / C, CN * * Common variables * DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) * COMMON / AGG / ZAG, ZAGN * * Common variables * INTEGER NFIL * COMMON / EFNUM / NFIL * * Common variables * DOUBLE PRECISION XM(MMAX,2) * COMMON / FMARKERS/ XM * * Common variables * DOUBLE PRECISION F(0:NBP1,0:NBP1,2) * COMMON / FORCE / F * * Common variables * DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) * COMMON / FORCEB / FB * * Common variables * DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) * COMMON / LINK / ELF, ELFN * * Common variables * INTEGER METHOD, MTHLIM * COMMON / MTH / METHOD, MTHLIM * * Common variables * DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) * COMMON / PHI / PHIN, PHINN, PHIA, PHIAN * * Common variables * DOUBLE PRECISION DR(NR2), R(0:NR2) * INTEGER NK * COMMON / RSIZE / DR, R, NK * * Common variables * DOUBLE PRECISION DLT, H * COMMON / STEPS / H, DLT * * Common variables * DOUBLE PRECISION K0 * COMMON / STIFF / K0 * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * * Common variables * DOUBLE PRECISION WSAVE(NW) * COMMON / WAVE / WSAVE * *====>End Module PROB5_4DIM File t208x.f *====>Begin Module UINIT File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) * * Local variables * DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 * * Common variables * DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) * COMMON / ADP / C, CN * * Common variables * DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) * COMMON / AGG / ZAG, ZAGN * * Common variables * DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR * COMMON / CHAR / FCHAR, ZCHAR, PHICHAR * * Common variables * DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 * COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 * * Common variables * DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 * COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A * * Common variables * DOUBLE PRECISION PEC * COMMON / DIFFC / PEC * * Common variables * DOUBLE PRECISION PEN * COMMON / DIFFN / PEN * * Common variables * DOUBLE PRECISION XM(MMAX,2) * COMMON / FMARKERS/ XM * * Common variables * DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) * COMMON / FORCEB / FB * * Common variables * DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) * COMMON / GRID / X, Y * * Common variables * DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) * COMMON / LINK / ELF, ELFN * * Common variables * DOUBLE PRECISION BETA0 * COMMON / LINKB / BETA0 * * Common variables * DOUBLE PRECISION ALPHA0 * COMMON / LINKF / ALPHA0 * * Common variables * DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) * COMMON / PHI / PHIN, PHINN, PHIA, PHIAN * * Common variables * DOUBLE PRECISION THETA * COMMON / PSTEPS / THETA * * Common variables * DOUBLE PRECISION DR(NR2), R(0:NR2) * INTEGER NK * COMMON / RSIZE / DR, R, NK * * Common variables * DOUBLE PRECISION DLT, H * COMMON / STEPS / H, DLT * * Common variables * DOUBLE PRECISION K0 * COMMON / STIFF / K0 * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module UINIT File t208x.f *====>Begin Module XINIT File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Local variables * DOUBLE PRECISION PI, SI, SJ, TPON * * Common variables * DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 * COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A * * Common variables * DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) * COMMON / FFT / SINSQ, BZERO * * Common variables * DOUBLE PRECISION Z(0:NBP1,0:NBP1) * COMMON / PTDS / Z * * Common variables * DOUBLE PRECISION DLT, H * COMMON / STEPS / H, DLT * *====>End Module XINIT File t208x.f *====>Begin Module NAVS2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Local variables * DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) * * Common variables * DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 * COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A * * Common variables * DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) * COMMON / FFT / SINSQ, BZERO * * Common variables * DOUBLE PRECISION F(0:NBP1,0:NBP1,2) * COMMON / FORCE / F * * Equivalenced common variables * DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) * * Common variables * DOUBLE PRECISION P(0:NBP1,0:NBP1) * COMMON / PRES / P * * Equivalenced common variables * DOUBLE PRECISION D(0:NBP1,0:NBP1) * * Common variables * DOUBLE PRECISION Z(0:NBP1,0:NBP1) * COMMON / PTDS / Z * * Common variables * DOUBLE PRECISION DLT, H * COMMON / STEPS / H, DLT * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module NAVS2D File t208x.f *====>Begin Module TRIDGX File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) * * Common variables * DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) * COMMON / TDSPACE/ X, L, R, D * *====>End Module TRIDGX File t208x.f *====>Begin Module TRIDGY File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) * * Common variables * DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) * COMMON / TDSPACE/ X, L, R, D * *====>End Module TRIDGY File t208x.f *====>Begin Module NEWU File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) * * Local variables * DOUBLE PRECISION S * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module NEWU File t208x.f *====>Begin Module DIV File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) * *====>End Module DIV File t208x.f *====>Begin Module FFT2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) * INTEGER ISIGN * * Local variables * DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 * *====>End Module FFT2D File t208x.f *====>Begin Module PHIA2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * INTEGER N * * Common variables * DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) * COMMON / PHI / PHIN, PHINN, PHIA, PHIAN * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module PHIA2D File t208x.f *====>Begin Module ZAG2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * INTEGER N * * Common variables * DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) * COMMON / AGG / ZAG, ZAGN * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module ZAG2D File t208x.f *====>Begin Module PLOT File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) * * Argument variables * DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) * INTEGER N, NK * * Common variables * INTEGER NFIL * COMMON / EFNUM / NFIL * *====>End Module PLOT File t208x.f *====>Begin Module MARKERS File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) * * Local variables * DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN * * Common variables * DOUBLE PRECISION XM(MMAX,2) * COMMON / FMARKERS/ XM * * Common variables * DOUBLE PRECISION DLT, H * COMMON / STEPS / H, DLT * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module MARKERS File t208x.f *====>Begin Module PHIN2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) * * Argument variables * INTEGER N * * Common variables * DOUBLE PRECISION PEN * COMMON / DIFFN / PEN * * Common variables * DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) * COMMON / PHI / PHIN, PHINN, PHIA, PHIAN * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module PHIN2D File t208x.f *====>Begin Module CHEM2D File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) * * Argument variables * INTEGER N * * Common variables * DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) * COMMON / ADP / C, CN * * Common variables * DOUBLE PRECISION PEC * COMMON / DIFFC / PEC * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * * Common variables * DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) * COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX * *====>End Module CHEM2D File t208x.f *====>Begin Module CHLFAC File t208x.f *---->Makedcls Options: All variables * * Argument variables * DOUBLE PRECISION DIAG(NN), SUBD(NN) * INTEGER NN * *====>End Module CHLFAC File t208x.f *====>Begin Module CHLSLV File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) * * Argument variables * DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) * INTEGER NM1 * * Local variables * DOUBLE PRECISION Y(MAX) * *====>End Module CHLSLV File t208x.f *====>Begin Module PERIOD File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION PH(0:NBP1,0:NBP1) * *====>End Module PERIOD File t208x.f *====>Begin Module SOL File t208x.f *---->Makedcls Options: All variables * * Argument variables * DOUBLE PRECISION L, R, V * *====>End Module SOL File t208x.f *====>Begin Module DIFFU File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) * * Argument variables * DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) * * Local variables * DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * *====>End Module DIFFU File t208x.f *====>Begin Module REACT File t208x.f *---->Makedcls Options: All variables * * Parameter variables * INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) * * Local variables * DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) * * Common variables * DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) * COMMON / ADP / C, CN * * Common variables * DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) * COMMON / AGG / ZAG, ZAGN * * Common variables * DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 * COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 * * Common variables * DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) * COMMON / LINK / ELF, ELFN * * Common variables * DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) * COMMON / PHI / PHIN, PHINN, PHIA, PHIAN * * Common variables * DOUBLE PRECISION DR(NR2), R(0:NR2) * INTEGER NK * COMMON / RSIZE / DR, R, NK * * Common variables * DOUBLE PRECISION H, K * COMMON / STEPS / H, K * *====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc80000644000031000002260000010143107621405727016737 0ustar moniotstaff00000000000000c====>Begin Module PROB5_4DIM File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) c c Local variables c CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE c DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN c INTEGER RLEN c LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) c REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB c c Namelists c NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB c c Common variables c DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) c COMMON / ADP / C, CN c c Common variables c DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) c COMMON / AGG / ZAG, ZAGN c c Common variables c INTEGER NFIL c COMMON / EFNUM / NFIL c c Common variables c DOUBLE PRECISION XM(MMAX,2) c COMMON / FMARKERS/ XM c c Common variables c DOUBLE PRECISION F(0:NBP1,0:NBP1,2) c COMMON / FORCE / F c c Common variables c DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) c COMMON / FORCEB / FB c c Common variables c DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) c COMMON / LINK / ELF, ELFN c c Common variables c INTEGER METHOD, MTHLIM c COMMON / MTH / METHOD, MTHLIM c c Common variables c DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) c COMMON / PHI / PHIN, PHINN, PHIA, PHIAN c c Common variables c DOUBLE PRECISION DR(NR2), R(0:NR2) c INTEGER NK c COMMON / RSIZE / DR, R, NK c c Common variables c DOUBLE PRECISION DLT, H c COMMON / STEPS / H, DLT c c Common variables c DOUBLE PRECISION K0 c COMMON / STIFF / K0 c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c Common variables c DOUBLE PRECISION WSAVE(NW) c COMMON / WAVE / WSAVE c c====>End Module PROB5_4DIM File t208x.f c====>Begin Module UINIT File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) c c Local variables c DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 c c Common variables c DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) c COMMON / ADP / C, CN c c Common variables c DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) c COMMON / AGG / ZAG, ZAGN c c Common variables c DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR c COMMON / CHAR / FCHAR, ZCHAR, PHICHAR c c Common variables c DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 c COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 c c Common variables c DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 c COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A c c Common variables c DOUBLE PRECISION PEC c COMMON / DIFFC / PEC c c Common variables c DOUBLE PRECISION PEN c COMMON / DIFFN / PEN c c Common variables c DOUBLE PRECISION XM(MMAX,2) c COMMON / FMARKERS/ XM c c Common variables c DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) c COMMON / FORCEB / FB c c Common variables c DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) c COMMON / GRID / X, Y c c Common variables c DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) c COMMON / LINK / ELF, ELFN c c Common variables c DOUBLE PRECISION BETA0 c COMMON / LINKB / BETA0 c c Common variables c DOUBLE PRECISION ALPHA0 c COMMON / LINKF / ALPHA0 c c Common variables c DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) c COMMON / PHI / PHIN, PHINN, PHIA, PHIAN c c Common variables c DOUBLE PRECISION THETA c COMMON / PSTEPS / THETA c c Common variables c DOUBLE PRECISION DR(NR2), R(0:NR2) c INTEGER NK c COMMON / RSIZE / DR, R, NK c c Common variables c DOUBLE PRECISION DLT, H c COMMON / STEPS / H, DLT c c Common variables c DOUBLE PRECISION K0 c COMMON / STIFF / K0 c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module UINIT File t208x.f c====>Begin Module XINIT File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Local variables c DOUBLE PRECISION PI, SI, SJ, TPON c c Common variables c DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 c COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A c c Common variables c DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) c COMMON / FFT / SINSQ, BZERO c c Common variables c DOUBLE PRECISION Z(0:NBP1,0:NBP1) c COMMON / PTDS / Z c c Common variables c DOUBLE PRECISION DLT, H c COMMON / STEPS / H, DLT c c====>End Module XINIT File t208x.f c====>Begin Module NAVS2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Local variables c DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) c c Common variables c DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 c COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A c c Common variables c DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) c COMMON / FFT / SINSQ, BZERO c c Common variables c DOUBLE PRECISION F(0:NBP1,0:NBP1,2) c COMMON / FORCE / F c c Equivalenced common variables c DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) c c Common variables c DOUBLE PRECISION P(0:NBP1,0:NBP1) c COMMON / PRES / P c c Equivalenced common variables c DOUBLE PRECISION D(0:NBP1,0:NBP1) c c Common variables c DOUBLE PRECISION Z(0:NBP1,0:NBP1) c COMMON / PTDS / Z c c Common variables c DOUBLE PRECISION DLT, H c COMMON / STEPS / H, DLT c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module NAVS2D File t208x.f c====>Begin Module TRIDGX File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) c c Common variables c DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) c COMMON / TDSPACE/ X, L, R, D c c====>End Module TRIDGX File t208x.f c====>Begin Module TRIDGY File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) c c Common variables c DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) c COMMON / TDSPACE/ X, L, R, D c c====>End Module TRIDGY File t208x.f c====>Begin Module NEWU File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) c c Local variables c DOUBLE PRECISION S c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module NEWU File t208x.f c====>Begin Module DIV File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) c c====>End Module DIV File t208x.f c====>Begin Module FFT2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) c INTEGER ISIGN c c Local variables c DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 c c====>End Module FFT2D File t208x.f c====>Begin Module PHIA2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c INTEGER N c c Common variables c DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) c COMMON / PHI / PHIN, PHINN, PHIA, PHIAN c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module PHIA2D File t208x.f c====>Begin Module ZAG2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c INTEGER N c c Common variables c DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) c COMMON / AGG / ZAG, ZAGN c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module ZAG2D File t208x.f c====>Begin Module PLOT File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) c c Argument variables c DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) c INTEGER N, NK c c Common variables c INTEGER NFIL c COMMON / EFNUM / NFIL c c====>End Module PLOT File t208x.f c====>Begin Module MARKERS File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) c c Local variables c DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN c c Common variables c DOUBLE PRECISION XM(MMAX,2) c COMMON / FMARKERS/ XM c c Common variables c DOUBLE PRECISION DLT, H c COMMON / STEPS / H, DLT c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module MARKERS File t208x.f c====>Begin Module PHIN2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) c c Argument variables c INTEGER N c c Common variables c DOUBLE PRECISION PEN c COMMON / DIFFN / PEN c c Common variables c DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) c COMMON / PHI / PHIN, PHINN, PHIA, PHIAN c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module PHIN2D File t208x.f c====>Begin Module CHEM2D File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) c c Argument variables c INTEGER N c c Common variables c DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) c COMMON / ADP / C, CN c c Common variables c DOUBLE PRECISION PEC c COMMON / DIFFC / PEC c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c Common variables c DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) c COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX c c====>End Module CHEM2D File t208x.f c====>Begin Module CHLFAC File t208x.f c---->Makedcls Options: All variables c c Argument variables c DOUBLE PRECISION DIAG(NN), SUBD(NN) c INTEGER NN c c====>End Module CHLFAC File t208x.f c====>Begin Module CHLSLV File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) c c Argument variables c DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) c INTEGER NM1 c c Local variables c DOUBLE PRECISION Y(MAX) c c====>End Module CHLSLV File t208x.f c====>Begin Module PERIOD File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION PH(0:NBP1,0:NBP1) c c====>End Module PERIOD File t208x.f c====>Begin Module SOL File t208x.f c---->Makedcls Options: All variables c c Argument variables c DOUBLE PRECISION L, R, V c c====>End Module SOL File t208x.f c====>Begin Module DIFFU File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) c c Argument variables c DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) c c Local variables c DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c====>End Module DIFFU File t208x.f c====>Begin Module REACT File t208x.f c---->Makedcls Options: All variables c c Parameter variables c INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) c c Local variables c DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) c c Common variables c DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) c COMMON / ADP / C, CN c c Common variables c DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) c COMMON / AGG / ZAG, ZAGN c c Common variables c DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 c COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 c c Common variables c DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) c COMMON / LINK / ELF, ELFN c c Common variables c DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) c COMMON / PHI / PHIN, PHINN, PHIA, PHIAN c c Common variables c DOUBLE PRECISION DR(NR2), R(0:NR2) c INTEGER NK c COMMON / RSIZE / DR, R, NK c c Common variables c DOUBLE PRECISION H, K c COMMON / STEPS / H, K c c====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dc90000644000031000002260000007424607621405727016755 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX, UOLD DOUBLE PRECISION USMAX, ZAGI, ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE, AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV C REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C, CN C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG, ZAGN C COMMON / AGG / ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C Common variables C DOUBLE PRECISION XM C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION F C COMMON / FORCE / F C C Common variables C DOUBLE PRECISION FB C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION ELF, ELFN C COMMON / LINK / ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA, PHIAN, PHIN, PHINN C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR, R C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C Common variables C DOUBLE PRECISION WSAVE C COMMON / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 C C Common variables C DOUBLE PRECISION C, CN C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG, ZAGN C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION XM C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION X, Y C COMMON / GRID / X, Y C C Common variables C DOUBLE PRECISION ELF, ELFN C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C C Common variables C DOUBLE PRECISION PHIA, PHIAN, PHIN, PHINN C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C C Common variables C DOUBLE PRECISION DR, R C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO, SINSQ C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B, C, LAM, PRO DOUBLE PRECISION R, XL, YH, YL DOUBLE PRECISION YP C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO, SINSQ C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION F C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1, W2 C C Common variables C DOUBLE PRECISION P C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D C C Common variables C DOUBLE PRECISION Z C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B, C, W DOUBLE PRECISION Y C C Common variables C DOUBLE PRECISION D, L, R, X C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B, C, W DOUBLE PRECISION Y C C Common variables C DOUBLE PRECISION D, L, R, X C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P, W2 C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D, S3, W2 C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1 DOUBLE PRECISION T2, T3, T4, TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA, PHIAN, PHIN, PHINN C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG, ZAGN C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C, ELF, F, PHIA DOUBLE PRECISION PHIN, TIME, U, XM DOUBLE PRECISION ZAG C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN C C Common variables C DOUBLE PRECISION XM C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION PHIA, PHIAN, PHIN, PHINN C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C, CN C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U, UX, UY, VX DOUBLE PRECISION VY C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG, SUBD C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B, DIAG, SUB, X C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH, PHN C C Local variables C DOUBLE PRECISION B, ETA, GDIAG, GSUB DOUBLE PRECISION LAM, Y, Z C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC, TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4, Y DOUBLE PRECISION YN C C Common variables C DOUBLE PRECISION C, CN C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG, ZAGN C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION ELF, ELFN C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA, PHIAN, PHIN, PHINN C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR, R C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dca0000644000031000002260000007475407621405727017031 0ustar moniotstaff00000000000000!====>Begin Module PROB5_4DIM File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Local variables ! CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE ! DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN ! INTEGER RLEN ! LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) ! REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB ! ! Namelists ! NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX & , BYROWS, CHKDUP, DERIV, DUSUB & , DVSUB, DXSUB, DYSUB, DZSUB ! ! Common variables ! DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) ! COMMON / ADP / C, CN ! ! Common variables ! DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) ! COMMON / AGG / ZAG, ZAGN ! ! Common variables ! INTEGER NFIL ! COMMON / EFNUM / NFIL ! ! Common variables ! DOUBLE PRECISION XM(MMAX,2) ! COMMON / FMARKERS/ XM ! ! Common variables ! DOUBLE PRECISION F(0:NBP1,0:NBP1,2) ! COMMON / FORCE / F ! ! Common variables ! DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) ! COMMON / FORCEB / FB ! ! Common variables ! DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) ! COMMON / LINK / ELF, ELFN ! ! Common variables ! INTEGER METHOD, MTHLIM ! COMMON / MTH / METHOD, MTHLIM ! ! Common variables ! DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) ! COMMON / PHI / PHIN, PHINN, PHIA, PHIAN ! ! Common variables ! DOUBLE PRECISION DR(NR2), R(0:NR2) ! INTEGER NK ! COMMON / RSIZE / DR, R, NK ! ! Common variables ! DOUBLE PRECISION DLT, H ! COMMON / STEPS / H, DLT ! ! Common variables ! DOUBLE PRECISION K0 ! COMMON / STIFF / K0 ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! ! Common variables ! DOUBLE PRECISION WSAVE(NW) ! COMMON / WAVE / WSAVE ! !====>End Module PROB5_4DIM File t208x.f !====>Begin Module UINIT File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Local variables ! DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 ! ! Common variables ! DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) ! COMMON / ADP / C, CN ! ! Common variables ! DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) ! COMMON / AGG / ZAG, ZAGN ! ! Common variables ! DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR ! COMMON / CHAR / FCHAR, ZCHAR, PHICHAR ! ! Common variables ! DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 ! COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 ! ! Common variables ! DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 ! COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A ! ! Common variables ! DOUBLE PRECISION PEC ! COMMON / DIFFC / PEC ! ! Common variables ! DOUBLE PRECISION PEN ! COMMON / DIFFN / PEN ! ! Common variables ! DOUBLE PRECISION XM(MMAX,2) ! COMMON / FMARKERS/ XM ! ! Common variables ! DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) ! COMMON / FORCEB / FB ! ! Common variables ! DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) ! COMMON / GRID / X, Y ! ! Common variables ! DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) ! COMMON / LINK / ELF, ELFN ! ! Common variables ! DOUBLE PRECISION BETA0 ! COMMON / LINKB / BETA0 ! ! Common variables ! DOUBLE PRECISION ALPHA0 ! COMMON / LINKF / ALPHA0 ! ! Common variables ! DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) ! COMMON / PHI / PHIN, PHINN, PHIA, PHIAN ! ! Common variables ! DOUBLE PRECISION THETA ! COMMON / PSTEPS / THETA ! ! Common variables ! DOUBLE PRECISION DR(NR2), R(0:NR2) ! INTEGER NK ! COMMON / RSIZE / DR, R, NK ! ! Common variables ! DOUBLE PRECISION DLT, H ! COMMON / STEPS / H, DLT ! ! Common variables ! DOUBLE PRECISION K0 ! COMMON / STIFF / K0 ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module UINIT File t208x.f !====>Begin Module XINIT File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Local variables ! DOUBLE PRECISION PI, SI, SJ, TPON ! ! Common variables ! DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 ! COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A ! ! Common variables ! DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) ! COMMON / FFT / SINSQ, BZERO ! ! Common variables ! DOUBLE PRECISION Z(0:NBP1,0:NBP1) ! COMMON / PTDS / Z ! ! Common variables ! DOUBLE PRECISION DLT, H ! COMMON / STEPS / H, DLT ! !====>End Module XINIT File t208x.f !====>Begin Module NAVS2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Local variables ! DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) ! ! Common variables ! DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 ! COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A ! ! Common variables ! DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) ! COMMON / FFT / SINSQ, BZERO ! ! Common variables ! DOUBLE PRECISION F(0:NBP1,0:NBP1,2) ! COMMON / FORCE / F ! ! Equivalenced common variables ! DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2), W2(0:NBP1,0:NBP1,1:2) ! ! Common variables ! DOUBLE PRECISION P(0:NBP1,0:NBP1) ! COMMON / PRES / P ! ! Equivalenced common variables ! DOUBLE PRECISION D(0:NBP1,0:NBP1) ! ! Common variables ! DOUBLE PRECISION Z(0:NBP1,0:NBP1) ! COMMON / PTDS / Z ! ! Common variables ! DOUBLE PRECISION DLT, H ! COMMON / STEPS / H, DLT ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module NAVS2D File t208x.f !====>Begin Module TRIDGX File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) ! ! Common variables ! DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) ! COMMON / TDSPACE/ X, L, R, D ! !====>End Module TRIDGX File t208x.f !====>Begin Module TRIDGY File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) ! ! Common variables ! DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) ! COMMON / TDSPACE/ X, L, R, D ! !====>End Module TRIDGY File t208x.f !====>Begin Module NEWU File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) ! ! Local variables ! DOUBLE PRECISION S ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module NEWU File t208x.f !====>Begin Module DIV File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) ! !====>End Module DIV File t208x.f !====>Begin Module FFT2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) ! INTEGER ISIGN ! ! Local variables ! DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 ! !====>End Module FFT2D File t208x.f !====>Begin Module PHIA2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! INTEGER N ! ! Common variables ! DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) ! COMMON / PHI / PHIN, PHINN, PHIA, PHIAN ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module PHIA2D File t208x.f !====>Begin Module ZAG2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! INTEGER N ! ! Common variables ! DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) ! COMMON / AGG / ZAG, ZAGN ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module ZAG2D File t208x.f !====>Begin Module PLOT File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Argument variables ! DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) ! INTEGER N, NK ! ! Common variables ! INTEGER NFIL ! COMMON / EFNUM / NFIL ! !====>End Module PLOT File t208x.f !====>Begin Module MARKERS File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Local variables ! DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN ! ! Common variables ! DOUBLE PRECISION XM(MMAX,2) ! COMMON / FMARKERS/ XM ! ! Common variables ! DOUBLE PRECISION DLT, H ! COMMON / STEPS / H, DLT ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module MARKERS File t208x.f !====>Begin Module PHIN2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Argument variables ! INTEGER N ! ! Common variables ! DOUBLE PRECISION PEN ! COMMON / DIFFN / PEN ! ! Common variables ! DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) ! COMMON / PHI / PHIN, PHINN, PHIA, PHIAN ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module PHIN2D File t208x.f !====>Begin Module CHEM2D File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) ! ! Argument variables ! INTEGER N ! ! Common variables ! DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) ! COMMON / ADP / C, CN ! ! Common variables ! DOUBLE PRECISION PEC ! COMMON / DIFFC / PEC ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! ! Common variables ! DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) ! COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX ! !====>End Module CHEM2D File t208x.f !====>Begin Module CHLFAC File t208x.f !---->Makedcls Options: All variables ! ! Argument variables ! DOUBLE PRECISION DIAG(NN), SUBD(NN) ! INTEGER NN ! !====>End Module CHLFAC File t208x.f !====>Begin Module CHLSLV File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) ! ! Argument variables ! DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) ! INTEGER NM1 ! ! Local variables ! DOUBLE PRECISION Y(MAX) ! !====>End Module CHLSLV File t208x.f !====>Begin Module PERIOD File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION PH(0:NBP1,0:NBP1) ! !====>End Module PERIOD File t208x.f !====>Begin Module SOL File t208x.f !---->Makedcls Options: All variables ! ! Argument variables ! DOUBLE PRECISION L, R, V ! !====>End Module SOL File t208x.f !====>Begin Module DIFFU File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) ! ! Argument variables ! DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) ! ! Local variables ! DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1), GSUB(NB-1) DOUBLE PRECISION LAM, Y(NB-1), Z(NB-1) ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! !====>End Module DIFFU File t208x.f !====>Begin Module REACT File t208x.f !---->Makedcls Options: All variables ! ! Parameter variables ! INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) ! ! Local variables ! DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4, Y(0:NBP1,4) DOUBLE PRECISION YN(0:NBP1,4) ! ! Common variables ! DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) ! COMMON / ADP / C, CN ! ! Common variables ! DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) ! COMMON / AGG / ZAG, ZAGN ! ! Common variables ! DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 ! COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 ! ! Common variables ! DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) ! COMMON / LINK / ELF, ELFN ! ! Common variables ! DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) ! COMMON / PHI / PHIN, PHINN, PHIA, PHIAN ! ! Common variables ! DOUBLE PRECISION DR(NR2), R(0:NR2) ! INTEGER NK ! COMMON / RSIZE / DR, R, NK ! ! Common variables ! DOUBLE PRECISION H, K ! COMMON / STEPS / H, K ! !====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dcl0000644000031000002260000010143107621405727017023 0ustar moniotstaff00000000000000C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C INTEGER METHOD, MTHLIM C COMMON / MTH / METHOD, MTHLIM C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON / WAVE / WSAVE C C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION FCHAR, PHICHAR, ZCHAR C COMMON / CHAR / FCHAR, ZCHAR, PHICHAR C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION FB(0:NBP1,0:NBP1,2) C COMMON / FORCEB / FB C C Common variables C DOUBLE PRECISION X(0:NBP1), Y(0:NBP1) C COMMON / GRID / X, Y C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION BETA0 C COMMON / LINKB / BETA0 C C Common variables C DOUBLE PRECISION ALPHA0 C COMMON / LINKF / ALPHA0 C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION THETA C COMMON / PSTEPS / THETA C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION K0 C COMMON / STIFF / K0 C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION A, RE, S1, S2 DOUBLE PRECISION S3 C COMMON / COEFS / S1, S2, S3, RE COMMON / COEFS / A C C Common variables C DOUBLE PRECISION BZERO(0:NBP1,0:NBP1), SINSQ(0:NBP1,0:NBP1) C COMMON / FFT / SINSQ, BZERO C C Common variables C DOUBLE PRECISION F(0:NBP1,0:NBP1,2) C COMMON / FORCE / F C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C C Common variables C DOUBLE PRECISION P(0:NBP1,0:NBP1) C COMMON / PRES / P C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION Z(0:NBP1,0:NBP1) C COMMON / PTDS / Z C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C C Common variables C INTEGER NFIL C COMMON / EFNUM / NFIL C C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN C C Common variables C DOUBLE PRECISION XM(MMAX,2) C COMMON / FMARKERS/ XM C C Common variables C DOUBLE PRECISION DLT, H C COMMON / STEPS / H, DLT C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION PEN C COMMON / DIFFN / PEN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION PEC C COMMON / DIFFC / PEC C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C Common variables C DOUBLE PRECISION U(0:NBP1,0:NBP1,2), UX(0:NBP1,0:NBP1) DOUBLE PRECISION UY(0:NBP1,0:NBP1), VX(0:NBP1,0:NBP1) DOUBLE PRECISION VY(0:NBP1,0:NBP1) C COMMON / VEL / U, UY, VY, UX COMMON / VEL / VX C C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) C C Common variables C DOUBLE PRECISION C(0:NBP1,0:NBP1), CN(0:NBP1,0:NBP1) C COMMON / ADP / C, CN C C Common variables C DOUBLE PRECISION ZAG(0:NBP1,0:NBP1), ZAGN(0:NBP1,0:NBP1) C COMMON / AGG / ZAG, ZAGN C C Common variables C DOUBLE PRECISION CND1, CND2, CND3, CND4 DOUBLE PRECISION CND5 C COMMON / CND / CND1, CND2, CND3, CND4 COMMON / CND / CND5 C C Common variables C DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION ELFN(0:NBP1,0:NBP1,0:NR2,NT1) C COMMON / LINK / ELF, ELFN C C Common variables C DOUBLE PRECISION PHIA(0:NBP1,0:NBP1), PHIAN(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), PHINN(0:NBP1,0:NBP1) C COMMON / PHI / PHIN, PHINN, PHIA, PHIAN C C Common variables C DOUBLE PRECISION DR(NR2), R(0:NR2) C INTEGER NK C COMMON / RSIZE / DR, R, NK C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.dcn0000644000031000002260000005711607621405727017037 0ustar moniotstaff00000000000000C C====>Begin Module PROB5_4DIM File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER NW PARAMETER (NW = 2*NT+15) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C CHARACTER*18 CFILE, E10FILE, E11FILE, E12FILE CHARACTER*18 E13FILE, E14FILE, E15FILE, E16FILE CHARACTER*18 E17FILE, E18FILE, E19FILE, E1FILE CHARACTER*18 E20FILE, E21FILE, E22FILE, E23FILE CHARACTER*18 E24FILE, E2FILE, E3FILE, E4FILE CHARACTER*18 E5FILE, E6FILE, E7FILE, E8FILE CHARACTER*18 E9FILE, EFILE, FFILE, FMFILE CHARACTER*18 MAIFILE, MFILE, MMFILE, PAFILE CHARACTER*18 PARFILE, PNFILE CHARACTER*15 RNAME CHARACTER*18 SYMFILE, UFILE, ZFILE C DOUBLE PRECISION CMAX, CMIN, F0, FBMAX DOUBLE PRECISION FLMAX, PHIAMAX, PHIAMIN, PHINMAX DOUBLE PRECISION PHINMIN, Q, TCOEF, TFREQ DOUBLE PRECISION TIME, TPI, UMAX DOUBLE PRECISION UOLD(0:NBP1,0:NBP1,2), USMAX DOUBLE PRECISION ZAGI(0:NBP1,0:NBP1), ZAGMAX, ZAGMIN C INTEGER RLEN C LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX LOGICAL BYROWS, CHKDUP, DERIV(06) C REAL DUSUB, DVSUB, DXSUB, DYSUB REAL DZSUB C C Namelists C NAMELIST / DATA / AVRAGE, AXES3D, BCLIP, BOX x, BYROWS, CHKDUP, DERIV, DUSUB x, DVSUB, DXSUB, DYSUB, DZSUB C INCLUDE 'adp.inc' INCLUDE 'agg.inc' INCLUDE 'efnum.inc' INCLUDE 'fmarkers.inc' INCLUDE 'force.inc' INCLUDE 'forceb.inc' INCLUDE 'link.inc' INCLUDE 'mth.inc' INCLUDE 'phi.inc' INCLUDE 'rsize.inc' INCLUDE 'steps.inc' INCLUDE 'stiff.inc' INCLUDE 'vel.inc' INCLUDE 'wave.inc' C====>End Module PROB5_4DIM File t208x.f C====>Begin Module UINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION A0, A2, ACHEM, ADP0 DOUBLE PRECISION ANG, AX, AY, B0 DOUBLE PRECISION C0, C1, C2, CCHAR DOUBLE PRECISION CMAX, CMIN, CO, CT DOUBLE PRECISION CX, CXH, CY, CYH DOUBLE PRECISION D, DC, DN, ELF0 DOUBLE PRECISION ELFCHAR, MU, PCHAR, PHI0 DOUBLE PRECISION PI, R0, RO, S0 DOUBLE PRECISION SI, SX, SXH, SY DOUBLE PRECISION SYH, TCHAR, TH, TPI DOUBLE PRECISION U0, UCHAR, WL, XCHAR DOUBLE PRECISION XH, XLOW, YH, YLOW DOUBLE PRECISION Z0 C INCLUDE 'adp.inc' INCLUDE 'agg.inc' INCLUDE 'char.inc' INCLUDE 'cnd.inc' INCLUDE 'coefs.inc' INCLUDE 'diffc.inc' INCLUDE 'diffn.inc' INCLUDE 'fmarkers.inc' INCLUDE 'forceb.inc' INCLUDE 'grid.inc' INCLUDE 'link.inc' INCLUDE 'linkb.inc' INCLUDE 'linkf.inc' INCLUDE 'phi.inc' INCLUDE 'psteps.inc' INCLUDE 'rsize.inc' INCLUDE 'steps.inc' INCLUDE 'stiff.inc' INCLUDE 'vel.inc' C====>End Module UINIT File t208x.f C====>Begin Module XINIT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION PI, SI, SJ, TPON C INCLUDE 'coefs.inc' INCLUDE 'fft.inc' INCLUDE 'ptds.inc' INCLUDE 'steps.inc' C====>End Module XINIT File t208x.f C====>Begin Module NAVS2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Local variables C DOUBLE PRECISION B(0:NBP1,0:NBP1), C(0:NBP1,0:NBP1) DOUBLE PRECISION LAM(NG), PRO, R(0:NBP1,0:NBP1) DOUBLE PRECISION XL, YH(0:NBP1,0:NBP1), YL DOUBLE PRECISION YP(0:NBP1,0:NBP1) C INCLUDE 'coefs.inc' INCLUDE 'fft.inc' INCLUDE 'force.inc' C C Equivalenced common variables C DOUBLE PRECISION W1(0:NBP1,0:NBP1,1:2) DOUBLE PRECISION W2(0:NBP1,0:NBP1,1:2) C INCLUDE 'pres.inc' C C Equivalenced common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1) C INCLUDE 'ptds.inc' INCLUDE 'steps.inc' INCLUDE 'vel.inc' C====>End Module NAVS2D File t208x.f C====>Begin Module TRIDGX File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C INCLUDE 'tdspace.inc' C====>End Module TRIDGX File t208x.f C====>Begin Module TRIDGY File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG-1) INTEGER NP1 PARAMETER (NP1 = N+1) INTEGER NM1 PARAMETER (NM1 = N-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A, B(0:NBP1,0:NBP1) DOUBLE PRECISION C(0:NBP1,0:NBP1), W(0:NBP1,0:NBP1) DOUBLE PRECISION Y(0:NBP1,0:NBP1) C INCLUDE 'tdspace.inc' C====>End Module TRIDGY File t208x.f C====>Begin Module NEWU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION P(0:NBP1,0:NBP1), W2(0:NBP1,0:NBP1,2) C C Local variables C DOUBLE PRECISION S C C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C INCLUDE 'vel.inc' C====>End Module NEWU File t208x.f C====>Begin Module DIV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), S3 DOUBLE PRECISION W2(0:NBP1,0:NBP1,2) C C====>End Module DIV File t208x.f C====>Begin Module FFT2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER N PARAMETER (N = NG) INTEGER M PARAMETER (M = L2NG) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION A(0:NBP1,0:NBP1), B(0:NBP1,0:NBP1) C INTEGER ISIGN C C Local variables C DOUBLE PRECISION ANG, PI, SSIGN, T1(N) DOUBLE PRECISION T2(N), T3(N), T4(N), TU1 DOUBLE PRECISION U1, U2, W1, W2 C C====>End Module FFT2D File t208x.f C====>Begin Module PHIA2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C INCLUDE 'phi.inc' C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C INCLUDE 'vel.inc' C====>End Module PHIA2D File t208x.f C====>Begin Module ZAG2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C INTEGER N C INCLUDE 'agg.inc' C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C INCLUDE 'vel.inc' C====>End Module ZAG2D File t208x.f C====>Begin Module PLOT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C DOUBLE PRECISION C(0:NBP1,0:NBP1) DOUBLE PRECISION ELF(0:NBP1,0:NBP1,0:NR2,NT1) DOUBLE PRECISION F(0:NBP1,0:NBP1,2), PHIA(0:NBP1,0:NBP1) DOUBLE PRECISION PHIN(0:NBP1,0:NBP1), TIME DOUBLE PRECISION U(0:NBP1,0:NBP1,2), XM(MMAX,2) DOUBLE PRECISION ZAG(0:NBP1,0:NBP1) C INTEGER N, NK C INCLUDE 'efnum.inc' C====>End Module PLOT File t208x.f C====>Begin Module MARKERS File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Local variables C DOUBLE PRECISION AX, AY, UM, UMN DOUBLE PRECISION VM, VMN, X, XN DOUBLE PRECISION Y, YN C INCLUDE 'fmarkers.inc' INCLUDE 'steps.inc' INCLUDE 'vel.inc' C====>End Module MARKERS File t208x.f C====>Begin Module PHIN2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C INCLUDE 'diffn.inc' INCLUDE 'phi.inc' C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C INCLUDE 'vel.inc' C====>End Module PHIN2D File t208x.f C====>Begin Module CHEM2D File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MMAX PARAMETER (MMAX = 200) C C Argument variables C INTEGER N C INCLUDE 'adp.inc' INCLUDE 'diffc.inc' C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C INCLUDE 'vel.inc' C====>End Module CHEM2D File t208x.f C====>Begin Module CHLFAC File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION DIAG(NN), SUBD(NN) C INTEGER NN C C====>End Module CHLFAC File t208x.f C====>Begin Module CHLSLV File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER MAX PARAMETER (MAX = NBP1) C C Argument variables C DOUBLE PRECISION B(NM1+1), DIAG(NM1), SUB(NM1), X(NM1) C INTEGER NM1 C C Local variables C DOUBLE PRECISION Y(MAX) C C====>End Module CHLSLV File t208x.f C====>Begin Module PERIOD File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION PH(0:NBP1,0:NBP1) C C====>End Module PERIOD File t208x.f C====>Begin Module SOL File t208x.f C---->Makedcls Options: All variables C C Argument variables C DOUBLE PRECISION L, R, V C C====>End Module SOL File t208x.f C====>Begin Module DIFFU File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) C C Argument variables C DOUBLE PRECISION ALPHA, K1, PH(0:NBP1,0:NBP1) DOUBLE PRECISION PHN(0:NBP1,0:NBP1) C C Local variables C DOUBLE PRECISION B(NB), ETA, GDIAG(NB-1) DOUBLE PRECISION GSUB(NB-1), LAM, Y(NB-1), Z(NB-1) C C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module DIFFU File t208x.f C====>Begin Module REACT File t208x.f C---->Makedcls Options: All variables C C Parameter variables C INTEGER L2NG PARAMETER (L2NG = 6) INTEGER NG PARAMETER (NG = 2**L2NG) INTEGER NB PARAMETER (NB = NG+2) INTEGER NGM1 PARAMETER (NGM1 = NG-1) INTEGER NGP1 PARAMETER (NGP1 = NG+1) INTEGER NGP2 PARAMETER (NGP2 = NG+2) INTEGER NBP1 PARAMETER (NBP1 = NB+1) INTEGER NR PARAMETER (NR = 32) INTEGER NT PARAMETER (NT = 16) INTEGER NR2 PARAMETER (NR2 = NR+2) INTEGER NT1 PARAMETER (NT1 = NT+1) C C Local variables C DOUBLE PRECISION ALPHA, C4, RC(0:NBP1), TEMP1 DOUBLE PRECISION TEMP2, TEMP3, TEMP4 DOUBLE PRECISION Y(0:NBP1,4), YN(0:NBP1,4) C INCLUDE 'adp.inc' INCLUDE 'agg.inc' INCLUDE 'cnd.inc' INCLUDE 'link.inc' INCLUDE 'phi.inc' INCLUDE 'rsize.inc' C C Common variables C DOUBLE PRECISION H, K C COMMON / STEPS / H, K C C====>End Module REACT File t208x.f ftnchek-3.3.1/test/Okay/t208x.err0000644000031000002260000000110707621405727017050 0ustar moniotstaff00000000000000t208x.dcl:561: Common block /steps/ mismatch with definition at t208x.dcl:443--449 t208x.dcl:663: Common block /steps/ mismatch with definition at t208x.dcl:443--449 t208x.dcl:709: Common block /steps/ mismatch with definition at t208x.dcl:443--449 t208x.dcl:862: Common block /steps/ mismatch with definition at t208x.dcl:801--807 t208x.dcl:916: Common block /steps/ mismatch with definition at t208x.dcl:801--807 t208x.dcl:1038: Common block /steps/ mismatch with definition at t208x.dcl:801--807 t208x.dcl:1121: Common block /steps/ mismatch with definition at t208x.dcl:801--807 ftnchek-3.3.1/test/Okay/t208x.htm00000644000031000002260000003736107621405727017143 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            NW                 (NW = 2*NT+15)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   P(0:NBP1,0:NBP1),       W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   D(0:NBP1,0:NBP1),       S3
DOUBLE PRECISION   W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A(0:NBP1,0:NBP1),       B(0:NBP1,0:NBP1)
INTEGER            ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   C(0:NBP1,0:NBP1)
DOUBLE PRECISION   ELF(0:NBP1,0:NBP1,0:NR2,NT1)
DOUBLE PRECISION   F(0:NBP1,0:NBP1,2),     PHIA(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHIN(0:NBP1,0:NBP1),    TIME
DOUBLE PRECISION   U(0:NBP1,0:NBP1,2),     XM(MMAX,2)
DOUBLE PRECISION   ZAG(0:NBP1,0:NBP1)
INTEGER            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   DIAG(NN),   SUBD(NN)
INTEGER            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   B(NM1+1),   DIAG(NM1),  SUB(NM1),   X(NM1)
INTEGER            NM1
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ALPHA,      K1,         PH(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htm20000644000031000002260000003674407621405727017151 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  NR                           (NR = 32)
INTEGER  NT                           (NT = 16)
INTEGER  NR2                          (NR2 = NR+2)
INTEGER  NT1                          (NT1 = NT+1)
INTEGER  NW                           (NW = 2*NT+15)
INTEGER  MMAX                         (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  NR                           (NR = 32)
INTEGER  NT                           (NT = 16)
INTEGER  NR2                          (NR2 = NR+2)
INTEGER  NT1                          (NT1 = NT+1)
INTEGER  MMAX                         (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  A,  B(0:NBP1,0:NBP1),  C(0:NBP1,0:NBP1)
DOUBLE PRECISION  W(0:NBP1,0:NBP1),  Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  N                            (N = NG-1)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  A,  B(0:NBP1,0:NBP1),  C(0:NBP1,0:NBP1)
DOUBLE PRECISION  W(0:NBP1,0:NBP1),  Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  N                            (N = NG-1)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  P(0:NBP1,0:NBP1),  W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  D(0:NBP1,0:NBP1),  S3,  W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  A(0:NBP1,0:NBP1),  B(0:NBP1,0:NBP1)
INTEGER  ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  N                            (N = NG)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER  N
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER  N
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  C(0:NBP1,0:NBP1),  ELF(0:NBP1,0:NBP1,0:NR2,NT1)
DOUBLE PRECISION  F(0:NBP1,0:NBP1,2),  PHIA(0:NBP1,0:NBP1)
DOUBLE PRECISION  PHIN(0:NBP1,0:NBP1),  TIME,  U(0:NBP1,0:NBP1,2)
DOUBLE PRECISION  XM(MMAX,2),  ZAG(0:NBP1,0:NBP1)
INTEGER  N,  NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  NR                           (NR = 32)
INTEGER  NT                           (NT = 16)
INTEGER  NR2                          (NR2 = NR+2)
INTEGER  NT1                          (NT1 = NT+1)
INTEGER  MMAX                         (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  MMAX                         (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER  N
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER  N
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  DIAG(NN),  SUBD(NN)
INTEGER  NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  B(NM1+1),  DIAG(NM1),  SUB(NM1),  X(NM1)
INTEGER  NM1
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  MAX                          (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  L,  R,  V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  ALPHA,  K1,  PH(0:NBP1,0:NBP1)
DOUBLE PRECISION  PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER  L2NG                         (L2NG = 6)
INTEGER  NG                           (NG = 2**L2NG)
INTEGER  NB                           (NB = NG+2)
INTEGER  NBP1                         (NBP1 = NB+1)
INTEGER  NR                           (NR = 32)
INTEGER  NT                           (NT = 16)
INTEGER  NR2                          (NR2 = NR+2)
INTEGER  NT1                          (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htm30000644000031000002260000003736107621405727017146 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            NW                 (NW = 2*NT+15)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
     x,            C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
     x,            Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
     x,            C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
     x,            Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   P(0:NBP1,0:NBP1),       W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   D(0:NBP1,0:NBP1),       S3
     x,            W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A(0:NBP1,0:NBP1),       B(0:NBP1,0:NBP1)
INTEGER            ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   C(0:NBP1,0:NBP1)
     x,            ELF(0:NBP1,0:NBP1,0:NR2,NT1)
     x,            F(0:NBP1,0:NBP1,2),     PHIA(0:NBP1,0:NBP1)
     x,            PHIN(0:NBP1,0:NBP1),    TIME
     x,            U(0:NBP1,0:NBP1,2),     XM(MMAX,2)
     x,            ZAG(0:NBP1,0:NBP1)
INTEGER            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   DIAG(NN),   SUBD(NN)
INTEGER            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   B(NM1+1),   DIAG(NM1),  SUB(NM1),   X(NM1)
INTEGER            NM1
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ALPHA,      K1,         PH(0:NBP1,0:NBP1)
     x,            PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htm40000644000031000002260000003736107621405727017147 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            NR                 (NR = 32)
integer            NT                 (NT = 16)
integer            NR2                (NR2 = NR+2)
integer            NT1                (NT1 = NT+1)
integer            NW                 (NW = 2*NT+15)
integer            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            NR                 (NR = 32)
integer            NT                 (NT = 16)
integer            NR2                (NR2 = NR+2)
integer            NT1                (NT1 = NT+1)
integer            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
double precision   A,          B(0:NBP1,0:NBP1)
double precision   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
double precision   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            N                  (N = NG-1)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
double precision   A,          B(0:NBP1,0:NBP1)
double precision   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
double precision   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            N                  (N = NG-1)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
double precision   P(0:NBP1,0:NBP1),       W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
double precision   D(0:NBP1,0:NBP1),       S3
double precision   W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
double precision   A(0:NBP1,0:NBP1),       B(0:NBP1,0:NBP1)
integer            ISIGN
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            N                  (N = NG)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
integer            N
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
integer            N
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
double precision   C(0:NBP1,0:NBP1)
double precision   ELF(0:NBP1,0:NBP1,0:NR2,NT1)
double precision   F(0:NBP1,0:NBP1,2),     PHIA(0:NBP1,0:NBP1)
double precision   PHIN(0:NBP1,0:NBP1),    TIME
double precision   U(0:NBP1,0:NBP1,2),     XM(MMAX,2)
double precision   ZAG(0:NBP1,0:NBP1)
integer            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            NR                 (NR = 32)
integer            NT                 (NT = 16)
integer            NR2                (NR2 = NR+2)
integer            NT1                (NT1 = NT+1)
integer            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
integer            N
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
integer            N
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
double precision   DIAG(NN),   SUBD(NN)
integer            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
double precision   B(NM1+1),   DIAG(NM1),  SUB(NM1),   X(NM1)
integer            NM1
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
double precision   PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
double precision   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
double precision   ALPHA,      K1,         PH(0:NBP1,0:NBP1)
double precision   PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
integer            L2NG               (L2NG = 6)
integer            NG                 (NG = 2**L2NG)
integer            NB                 (NB = NG+2)
integer            NBP1               (NBP1 = NB+1)
integer            NR                 (NR = 32)
integer            NT                 (NT = 16)
integer            NR2                (NR2 = NR+2)
integer            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htm50000644000031000002260000003736107621405727017150 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            nr                 (nr = 32)
INTEGER            nt                 (nt = 16)
INTEGER            nr2                (nr2 = nr+2)
INTEGER            nt1                (nt1 = nt+1)
INTEGER            nw                 (nw = 2*nt+15)
INTEGER            mmax               (mmax = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            nr                 (nr = 32)
INTEGER            nt                 (nt = 16)
INTEGER            nr2                (nr2 = nr+2)
INTEGER            nt1                (nt1 = nt+1)
INTEGER            mmax               (mmax = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   a,          b(0:nbp1,0:nbp1)
DOUBLE PRECISION   c(0:nbp1,0:nbp1),       w(0:nbp1,0:nbp1)
DOUBLE PRECISION   y(0:nbp1,0:nbp1)
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            n                  (n = ng-1)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   a,          b(0:nbp1,0:nbp1)
DOUBLE PRECISION   c(0:nbp1,0:nbp1),       w(0:nbp1,0:nbp1)
DOUBLE PRECISION   y(0:nbp1,0:nbp1)
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            n                  (n = ng-1)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   p(0:nbp1,0:nbp1),       w2(0:nbp1,0:nbp1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   d(0:nbp1,0:nbp1),       s3
DOUBLE PRECISION   w2(0:nbp1,0:nbp1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   a(0:nbp1,0:nbp1),       b(0:nbp1,0:nbp1)
INTEGER            isign
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            n                  (n = ng)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            n
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            n
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   c(0:nbp1,0:nbp1)
DOUBLE PRECISION   elf(0:nbp1,0:nbp1,0:nr2,nt1)
DOUBLE PRECISION   f(0:nbp1,0:nbp1,2),     phia(0:nbp1,0:nbp1)
DOUBLE PRECISION   phin(0:nbp1,0:nbp1),    time
DOUBLE PRECISION   u(0:nbp1,0:nbp1,2),     xm(mmax,2)
DOUBLE PRECISION   zag(0:nbp1,0:nbp1)
INTEGER            n,          nk
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            nr                 (nr = 32)
INTEGER            nt                 (nt = 16)
INTEGER            nr2                (nr2 = nr+2)
INTEGER            nt1                (nt1 = nt+1)
INTEGER            mmax               (mmax = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            mmax               (mmax = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            n
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            n
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   diag(nn),   subd(nn)
INTEGER            nn
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   b(nm1+1),   diag(nm1),  sub(nm1),   x(nm1)
INTEGER            nm1
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            max                (max = nbp1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ph(0:nbp1,0:nbp1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   l,          r,          v
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   alpha,      k1,         ph(0:nbp1,0:nbp1)
DOUBLE PRECISION   phn(0:nbp1,0:nbp1)
Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            l2ng               (l2ng = 6)
INTEGER            ng                 (ng = 2**l2ng)
INTEGER            nb                 (nb = ng+2)
INTEGER            nbp1               (nbp1 = nb+1)
INTEGER            nr                 (nr = 32)
INTEGER            nt                 (nt = 16)
INTEGER            nr2                (nr2 = nr+2)
INTEGER            nt1                (nt1 = nt+1)

ftnchek-3.3.1/test/Okay/t208x.htm60000644000031000002260000003736107621405727017151 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            NW                 (NW = 2*NT+15)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   P(0:NBP1,0:NBP1),       W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   D(0:NBP1,0:NBP1),       S3
DOUBLE PRECISION   W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A(0:NBP1,0:NBP1),       B(0:NBP1,0:NBP1)
INTEGER            ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   C(0:NBP1,0:NBP1)
DOUBLE PRECISION   ELF(0:NBP1,0:NBP1,0:NR2,NT1)
DOUBLE PRECISION   F(0:NBP1,0:NBP1,2),     PHIA(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHIN(0:NBP1,0:NBP1),    TIME
DOUBLE PRECISION   U(0:NBP1,0:NBP1,2),     XM(MMAX,2)
DOUBLE PRECISION   ZAG(0:NBP1,0:NBP1)
INTEGER            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   DIAG(NN),   SUBD(NN)
INTEGER            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   B(NM1+1),   DIAG(NM1),  SUB(NM1),   X(NM1)
INTEGER            NM1
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ALPHA,      K1,         PH(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htm90000644000031000002260000003647407621405727017160 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            NW                 (NW = 2*NT+15)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B,          C,          W
DOUBLE PRECISION   Y
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B,          C,          W
DOUBLE PRECISION   Y
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   P,          W2
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   D,          S3,         W2
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B
INTEGER            ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   C,          ELF,        F,          PHIA
DOUBLE PRECISION   PHIN,       TIME,       U,          XM
DOUBLE PRECISION   ZAG
INTEGER            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   DIAG,       SUBD
INTEGER            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   B,          DIAG,       SUB,        X
INTEGER            NM1
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   PH
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ALPHA,      K1,         PH,         PHN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.htma0000644000031000002260000003736107621405727017224 0ustar moniotstaff00000000000000 Source t208x.f

PROGRAM PROB5_4DIM ( )

Description
   ftnchek test file: t208x.f, Mon Mar 13 14:13:16 1995 
   Adapted from a benchmark program at the University of Utah, with 
   code bodies and most comments eliminated.  ftnchek's -makedcls 
   option and the dcl2inc program have been subsequently used on 
   the original copy of this program to replace all in-line COMMON 
   blocks with INCLUDE statements and separate include files. 
 
Modified Sat Feb  3 10:07:52 EST 2001 by R. Moniot to include a 
NAMELIST declaration to improve it as a test of ftnchek.  The 
declarations were excerpted from the PLOT79 grfgg3.sf3 file.
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            NW                 (NW = 2*NT+15)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE UINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE XINIT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NAVS2D ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGX ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE TRIDGY ( A, B, C, W, Y )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A,          B(0:NBP1,0:NBP1)
DOUBLE PRECISION   C(0:NBP1,0:NBP1),       W(0:NBP1,0:NBP1)
DOUBLE PRECISION   Y(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG-1)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE NEWU ( W2, P )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   P(0:NBP1,0:NBP1),       W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE DIV ( S3, W2, D )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   D(0:NBP1,0:NBP1),       S3
DOUBLE PRECISION   W2(0:NBP1,0:NBP1,2)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE FFT2D ( A, B, ISIGN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   A(0:NBP1,0:NBP1),       B(0:NBP1,0:NBP1)
INTEGER            ISIGN
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            N                  (N = NG)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PHIA2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE ZAG2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE PLOT ( TIME, N, U, F, PHIA, PHIN, C, ZAG, XM, ELF, NK )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   C(0:NBP1,0:NBP1)
DOUBLE PRECISION   ELF(0:NBP1,0:NBP1,0:NR2,NT1)
DOUBLE PRECISION   F(0:NBP1,0:NBP1,2),     PHIA(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHIN(0:NBP1,0:NBP1),    TIME
DOUBLE PRECISION   U(0:NBP1,0:NBP1,2),     XM(MMAX,2)
DOUBLE PRECISION   ZAG(0:NBP1,0:NBP1)
INTEGER            N,          NK
Description
prints out data(0:ng,0:ng) for subsequent plotting
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE MARKERS ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MMAX               (MMAX = 200)

SUBROUTINE PHIN2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHEM2D ( N )

Argument Definitions (+ indicates altered content)
INTEGER            N
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE CHLFAC ( DIAG, SUBD, NN )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   DIAG(NN),   SUBD(NN)
INTEGER            NN
Source file:t208x.f

SUBROUTINE CHLSLV ( DIAG, SUB, NM1, B, X )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   B(NM1+1),   DIAG(NM1),  SUB(NM1),   X(NM1)
INTEGER            NM1
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            MAX                (MAX = NBP1)

SUBROUTINE PERIOD ( PH )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   PH(0:NBP1,0:NBP1)
Description
extend ph periodically
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

DOUBLE PRECISION FUNCTION SOL ( V, L, R )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   L,          R,          V
Source file:t208x.f

SUBROUTINE DIFFU ( PH, PHN, K1, ALPHA )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION   ALPHA,      K1,         PH(0:NBP1,0:NBP1)
DOUBLE PRECISION   PHN(0:NBP1,0:NBP1)
Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)

SUBROUTINE REACT ( )

Source file:t208x.f
Parameter Variables Used
INTEGER            L2NG               (L2NG = 6)
INTEGER            NG                 (NG = 2**L2NG)
INTEGER            NB                 (NB = NG+2)
INTEGER            NBP1               (NBP1 = NB+1)
INTEGER            NR                 (NR = 32)
INTEGER            NT                 (NT = 16)
INTEGER            NR2                (NR2 = NR+2)
INTEGER            NT1                (NT1 = NT+1)

ftnchek-3.3.1/test/Okay/t208x.mak0000644000031000002260000000054107621405727017031 0ustar moniotstaff00000000000000t208x.o: t208x.f adp.inc agg.inc char.inc cnd.inc coefs.inc diffc.inc \ diffn.inc efnum.inc fft.inc fmarkers.inc force.inc forceb.inc \ grid.inc link.inc linkb.inc linkf.inc mth.inc phi.inc \ pres.inc psteps.inc ptds.inc rsize.inc steps.inc stiff.inc \ tdspace.inc vel.inc wave.inc ftnchek-3.3.1/test/Okay/tdspace.inc0000644000031000002260000000035407621405727017572 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION D(0:NBP1,0:NBP1), L(0:NBP1,0:NBP1) DOUBLE PRECISION R(0:NBP1,0:NBP1), X(0:NBP1,0:NBP1) C COMMON / TDSPACE/ X, L, R, D C ftnchek-3.3.1/test/Okay/wave.inc0000644000031000002260000000014307621405727017105 0ustar moniotstaff00000000000000C C Common variables C DOUBLE PRECISION WSAVE(NW) C COMMON / WAVE / WSAVE C ftnchek-3.3.1/test/Okay/wildcard.fc10000644000031000002260000000131207621405727017633 0ustar moniotstaff00000000000000 Portability Warning Options: backslash [no]: Backslash in standard-conforming strings common-alignment [no]: COMMON not in descending size order hollerith [no]: Hollerith constants (except in FORMAT) long-string [no]: Strings over 255 chars long mixed-equivalence [yes]: Different data types equivalenced mixed-size [yes]: Default and explicit size types mixed real-do [no]: Non-integer DO loops param-implicit-type [no]: Implicit type of PARAMETER differs from default type tab [no]: Tabs in source code Prefix option name with no- to turn off option If no options given, equivalent to -portability=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay/wildcard.fc20000644000031000002260000000302507621405727017637 0ustar moniotstaff00000000000000 Usage Warning Options: arg-alias [yes]: scalar argument same as another is modified arg-array-alias [yes]: argument in same array as another is modified arg-common-alias [yes]: scalar argument same as common variable, either is modified arg-common-array-alias [yes]: array argument same as common variable, either is modified arg-const-modified [yes]: constant or expression argument is modified arg-unused [yes]: dummy argument declared but not used com-block-unused [yes]: whole common block declared but not used com-block-volatile [yes]: common block may lose definition if volatile com-var-set-unused [no]: common variable set but not used com-var-uninitialized [no]: common variable used but not set com-var-unused [no]: common variable declared but not used do-index-modified [yes]: active DO index variable modified ext-multiply-defined [yes]: external multiply defined ext-declared-only [yes]: name declared EXTERNAL but not defined or used ext-undefined [yes]: external declared or used but not defined (= -external) ext-unused [yes]: external defined but not used label-undefined [yes]: label used but undefined label-unused [yes]: label defined but unused var-set-unused [no]: local variable set but not used var-uninitialized [no]: local variable used before set var-unused [no]: local variable declared but not used Prefix option name with no- to turn off option If no options given, equivalent to -usage=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay/wildcard.fc30000644000031000002260000000303007621405727017634 0ustar moniotstaff00000000000000 Usage Warning Options: arg-alias [yes]: scalar argument same as another is modified arg-array-alias [yes]: argument in same array as another is modified arg-common-alias [yes]: scalar argument same as common variable, either is modified arg-common-array-alias [yes]: array argument same as common variable, either is modified arg-const-modified [yes]: constant or expression argument is modified arg-unused [yes]: dummy argument declared but not used com-block-unused [yes]: whole common block declared but not used com-block-volatile [yes]: common block may lose definition if volatile com-var-set-unused [yes]: common variable set but not used com-var-uninitialized [yes]: common variable used but not set com-var-unused [yes]: common variable declared but not used do-index-modified [yes]: active DO index variable modified ext-multiply-defined [yes]: external multiply defined ext-declared-only [yes]: name declared EXTERNAL but not defined or used ext-undefined [yes]: external declared or used but not defined (= -external) ext-unused [yes]: external defined but not used label-undefined [yes]: label used but undefined label-unused [yes]: label defined but unused var-set-unused [no]: local variable set but not used var-uninitialized [no]: local variable used before set var-unused [no]: local variable declared but not used Prefix option name with no- to turn off option If no options given, equivalent to -usage=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay/wildcard.fc40000644000031000002260000000525710146517646017652 0ustar moniotstaff00000000000000 Fortran 77 Warning Options: accept-type [no]: ACCEPT and TYPE I/O statements array-bounds [yes]: array bounds expressions assignment-stmt [no]: assignment involving array attribute-based-decl [no]: attribute-based (:: -style) variable declaration automatic-array [yes]: local array of variable size backslash [no]: Unix backslash escape in strings byte [no]: BYTE data type case-construct [no]: CASE construct character [no]: Character variable defined length <= 0 common-subprog-name [no]: Common block & subprog with same name construct-name [no]: Construct names on DO statements continuation [no]: More than 19 continuation lines cpp [no]: Unix C preprocessor directives cray-pointer [no]: Cray pointer syntax cycle-exit [no]: CYCLE or EXIT statement d-comment [no]: Debug comments starting with D dec-tab [no]: DEC Fortran tab-formatted source do-enddo [no]: DO loop extensions double-complex [no]: Double complex datatype format-dollarsign [yes]: $ control code in FORMAT format-edit-descr [yes]: Nonstandard edit descriptors function-noparen [no]: FUNCTION defined without parens implicit-none [no]: IMPLICIT NONE statement include [no]: INCLUDE statement initializer [no]: Variable initializer in declaration inline-comment [no]: Inline comments starting with ! internal-list-io [no]: List-directed I/O to internal file intrinsic [no]: Nonstandard intrinsic functions io-keywords [no]: Nonstandard I/O keywords long-line [no]: Statements with code past 72 columns long-name [no]: Identifiers over 6 chars mixed-common [no]: Mixed char and nonchar data in common mixed-expr [no]: Incompatible type combinations in exprs name-dollarsign [no]: $ or other nonalnum (except _) in identifiers name-underscore [no]: Underscores in identifiers namelist [no]: NAMELIST statement param-implicit-type [no]: implicit typing of PARAMETERs param-intrinsic [no]: Intrinsics and **real in PARAMETER defns param-noparen [no]: PARAMETER statement without parens pointer [no]: Fortran 90 pointer syntax quad-constant [no]: Quad precision constants like 1.23Q4 quotemark [no]: Strings delimited by "quote marks" relops [no]: Relational operators < <= == /= > >= semicolon [no]: Semicolon as statement separator statement-order [no]: Statement out of order typeless-constant [no]: Typeless constants like Z'19AF' type-size [no]: Sized type declarations like REAL*8 variable-format [no]: Variable format repeat spec or field size vms-io [no]: Nonstandard I/O keywords Prefix option name with no- to turn off option If no options given, equivalent to -f77=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay/wildcard.fc50000644000031000002260000000132407621405727017642 0ustar moniotstaff00000000000000 No Such Appearance Warning Option: *ugly*: ignored Appearance Warning Options: alternate-return [yes]: Alternate return out of range embedded-space [yes]: Space in variable names or operators continuation [yes]: Continuation mark following comment line long-line [yes]: Lines over 72 columns missing-space [yes]: Missing space between variable & keyword multiple-common [yes]: COMMON declared in multiple stmts multiple-namelist [yes]: NAMELIST declared in multiple stmts parentheses [yes]: Parentheses around a variable Prefix option name with no- to turn off option If no options given, equivalent to -pretty=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay/allkeywords.fcl0000644000031000002260000002241010201532632020457 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File allkeywords.f: 1 ! All the keywords recognized by ftnchek as of 21 July 2000 ^ Warning near line 1 col 1: Nonstandard syntax: inline comment 2 PROGRAM allkeys 3 IMPLICIT NONE ^ Warning near line 3 col 16: Nonstandard syntax 4 BYTE b(100) ^ Warning near line 4 col 7: Nonstandard syntax 5 CHARACTER *100 c 6 DOUBLE COMPLEX a ^ Warning near line 6 col 7: Nonstandard syntax 7 COMPLEX z 8 DOUBLEPRECISION d 9 DOUBLE PRECISION f 10 EXTERNAL f, foo, iftn_calloc 11 INTEGER i, l, u, iftn_calloc 12 LOGICAL bool 13 POINTER (ptr, ptee) ^ Warning near line 13 col 7: Nonstandard syntax 14 INTEGER ptee(*) ^ Warning near line 14 col 20: Nonstandard syntax: local array cannot have variable size 15 REAL pi 16 EQUIVALENCE (b(1), i) 17 NAMELIST /n1/ a,b,c ^ Warning near line 17 col 7: Nonstandard syntax 18 PARAMETER (pi = 3.1415926) 19 INCLUDE 'block2.i' ^ Warning near line 19 col 7: Nonstandard syntax Including file block2.i: 1 ! Include file with common block definition for allkeywords.f ^ Warning near line 1 col 1 file block2.i: Nonstandard syntax: inline comment 2 REAL x, y 3 COMMON /block2/ x, y 4 Resuming file allkeywords.f: 20 ACCEPT *, c ^ Warning near line 20 col 7: Nonstandard syntax 21 OPEN(unit=10, file=c) 22 u = 10 23 ASSIGN 100 TO l 24 100 CONTINUE 25 READ(10,*) a, x, i, z, d 26 BACKSPACE 10 27 BACKSPACE u 28 BACKSPACE (unit=10) 29 ptr = iftn_calloc (1000, 4) ^ Nonportable usage near line 29 col 11: mixed default and explicit precision items: intg expr IFTN_CALLOC(1000,4) assigned to intg*4 PTR 30 CALL foo 31 SELECTCASE (i) ^ Warning near line 31 col 7: Nonstandard syntax 32 CASE (1) 33 ptee(i) = 2 34 CASEDEFAULT 35 ptee(i) = ptee(1) 36 ENDSELECT 37 SELECT CASE (i) ^ Warning near line 37 col 7: Nonstandard syntax 38 CASE (2) 39 i = 3 40 CASE DEFAULT 41 i = 4 42 END SELECT 43 DO 200 i=1,10 44 200 PRINT *, i 45 IF( x .eq. i ) GOTO l 46 INQUIRE(UNIT=u, IOSTAT=i) 47 ENDFILE 10 48 END FILE u 49 ENDFILE (unit=10,err=100) 50 REWIND 10 51 REWIND u 52 REWIND (unit=10) 53 CLOSE (UNIT=10) 54 bool = .TRUE. 55 IF( bool ) THEN 56 WRITE(10,*) a, y, z 57 ELSEIF( .NOT. .FALSE. ) THEN 58 WRITE(UNIT=10,FMT=900) 'Testing 1, 2, 3' 59 900 FORMAT(1x,a20) 60 ELSE 61 CALL bar 62 STOP 63 ENDIF 64 DOWHILE( i .lt. 100 ) ^ Warning near line 64 col 7: Nonstandard syntax 65 IF( f(d) .gt. 3.14) THEN ^ Warning near line 65 col 16: comparison mixes terms of different precision: dble expr F(D) .GT. real const 3.14 66 CYCLE ^ Warning near line 66 col 10: Nonstandard syntax: CYCLE statement 67 ELSE 68 EXIT ^ Warning near line 68 col 10: Nonstandard syntax: EXIT statement 69 END IF 70 ENDDO ^ Warning near line 70 col 7: Nonstandard syntax 71 i = 1 72 DO WHILE( i .lt. 100 ) ^ Warning near line 72 col 7: Nonstandard syntax 73 i = i*2 74 END DO ^ Warning near line 74 col 7: Nonstandard syntax 75 DO 300 WHILE( x .gt. 0.0 ) ^ Warning near line 75 col 7: Nonstandard syntax 76 TYPE *, pi, 'Over and over' ^ Warning near line 76 col 10: Nonstandard syntax 77 300 CONTINUE 78 DO 4321, WHILE( x .gt. 0.0 ) ^ Warning near line 78 col 7: Nonstandard syntax 79 TYPE *, pi, 'Over and over' ^ Warning near line 79 col 10: Nonstandard syntax 80 4321 CONTINUE 81 GO TO 100 82 END Module ALLKEYS: prog External subprograms referenced: BAR: subr F: dble FOO: subr IFTN_CALLOC: intg Common blocks referenced: BLOCK2 Namelists defined: N1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A dcpx B intg1 1 BOOL logl C char100 D dble I intg L intg PI real PTEE intg 1 PTR intg4 U intg X real Y real Z cplx Warning in module ALLKEYS: Variables set but never used: PTR set at line 29 Warning in module ALLKEYS: Names longer than 6 chars (nonstandard): ALLKEYS declared at line 2 IFTN_CALLOC defined at line 11 Warning in module ALLKEYS: Names containing nonstandard characters: IFTN_CALLOC defined at line 11 Warning in module ALLKEYS: Mixed sizes equivalenced (not portable): B declared at line 4 with type intg*1 I declared at line 11 with type intg I/O Operations: Unit ID Unit No. Access Form Operation Line 10 SEQ BACKSPACE 26 28 10 CLOSE 53 10 SEQ ENDFILE 47 49 10 SEQ FMTD OPEN 21 10 SEQ FMTD READ 25 10 SEQ REWIND 50 52 10 SEQ FMTD WRITE 56 58 * SEQ FMTD ACCEPT 20 * SEQ FMTD PRINT 44 * SEQ FMTD TYPE 76 79 U SEQ BACKSPACE 27 U SEQ ENDFILE 48 U INQUIRE 46 U SEQ REWIND 51 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <100> 24 exec <200> 44 exec <300> 77 exec <900> 59 format <4321> 80 exec 83 DOUBLEPRECISION FUNCTION f(x) 84 DOUBLE PRECISION x 85 REAL y1, y2 86 DOUBLECOMPLEX a ^ Warning near line 86 col 7: Nonstandard syntax 87 SAVE a 88 DIMENSION a(2) 89 INTRINSIC sqrt 90 COMMON /block1/ y1, y2 91 a(1) = (1.0d1, 2.0d2) ^ Warning near line 91 col 14: nonstandard double precision complex constant 92 a(2) = a(1) 93 f = x*dble(y1*y2)* sqrt(real(a(1))) 94 RETURN 95 END Module F: func: dble External subprograms referenced: DBLE: intrns REAL: intrns SQRT: intrns Common blocks referenced: BLOCK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A dcpx 1 F dble X dble Y1 real Y2 real 96 SUBROUTINE foo 97 IMPLICIT INTEGER (A-Z) 98 WRITE(10,*) 'foo' 99 RETURN 100 ENTRY bar 101 WRITE(10,*) 'bar' 102 PAUSE 103 RETURN 104 END Module FOO: subr Entry Points BAR FOO I/O Operations: Unit ID Unit No. Access Form Operation Line 10 SEQ FMTD WRITE 98 101 105 BLOCKDATA bdat1 106 COMMON /block1/ a, b 107 DATA a, b /1.0, 2.0/ 108 END Module BDAT1: data Common blocks referenced: BLOCK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* * Variable not declared. Type has been implicitly defined. 109 BLOCK DATA bdat2 110 IMPLICITNONE ^ Possibly misleading appearance near line 110 col 15: keyword NONE not clearly separated from context ^ Warning near line 110 col 15: Nonstandard syntax 111 INCLUDE 'block2.i' ^ Warning near line 111 col 7: Nonstandard syntax Including file block2.i: 1 ! Include file with common block definition for allkeywords.f ^ Warning near line 1 col 1 file block2.i: Nonstandard syntax: inline comment 2 REAL x, y 3 COMMON /block2/ x, y 4 Resuming file allkeywords.f: 112 DATA x, y /1.0, 2.0/ 113 END Module BDAT2: data Common blocks referenced: BLOCK2 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X real Y real 0 syntax errors detected in file allkeywords.f 35 warnings issued in file allkeywords.f Warning: Subprogram IFTN_CALLOC never defined Invoked in module ALLKEYS line 29 file allkeywords.f ftnchek-3.3.1/test/Okay/allkeywords.fcx0000644000031000002260000002350510201532633020502 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File allkeywords.f: 1 ! All the keywords recognized by ftnchek as of 21 July 2000 ^ "allkeywords.f", line 1 col 1: Warning: Nonstandard syntax: inline comment 2 PROGRAM allkeys 3 IMPLICIT NONE ^ "allkeywords.f", line 3 col 16: Warning: Nonstandard syntax 4 BYTE b(100) ^ "allkeywords.f", line 4 col 7: Warning: Nonstandard syntax 5 CHARACTER *100 c 6 DOUBLE COMPLEX a ^ "allkeywords.f", line 6 col 7: Warning: Nonstandard syntax 7 COMPLEX z 8 DOUBLEPRECISION d 9 DOUBLE PRECISION f 10 EXTERNAL f, foo, iftn_calloc 11 INTEGER i, l, u, iftn_calloc 12 LOGICAL bool 13 POINTER (ptr, ptee) ^ "allkeywords.f", line 13 col 7: Warning: Nonstandard syntax 14 INTEGER ptee(*) ^ "allkeywords.f", line 14 col 20: Warning: Nonstandard syntax: local array cannot have variable size 15 REAL pi 16 EQUIVALENCE (b(1), i) 17 NAMELIST /n1/ a,b,c ^ "allkeywords.f", line 17 col 7: Warning: Nonstandard syntax 18 PARAMETER (pi = 3.1415926) 19 INCLUDE 'block2.i' ^ "allkeywords.f", line 19 col 7: Warning: Nonstandard syntax Including file block2.i: 1 ! Include file with common block definition for allkeywords.f ^ "block2.i", line 1 col 1: Warning: Nonstandard syntax: inline comment 2 REAL x, y 3 COMMON /block2/ x, y 4 Resuming file allkeywords.f: 20 ACCEPT *, c ^ "allkeywords.f", line 20 col 7: Warning: Nonstandard syntax 21 OPEN(unit=10, file=c) 22 u = 10 23 ASSIGN 100 TO l 24 100 CONTINUE 25 READ(10,*) a, x, i, z, d 26 BACKSPACE 10 27 BACKSPACE u 28 BACKSPACE (unit=10) 29 ptr = iftn_calloc (1000, 4) ^ "allkeywords.f", line 29 col 11: Nonportable usage: mixed default and explicit precision items: intg expr IFTN_CALLOC(1000,4) assigned to intg*4 PTR 30 CALL foo 31 SELECTCASE (i) ^ "allkeywords.f", line 31 col 7: Warning: Nonstandard syntax 32 CASE (1) 33 ptee(i) = 2 34 CASEDEFAULT 35 ptee(i) = ptee(1) 36 ENDSELECT 37 SELECT CASE (i) ^ "allkeywords.f", line 37 col 7: Warning: Nonstandard syntax 38 CASE (2) 39 i = 3 40 CASE DEFAULT 41 i = 4 42 END SELECT 43 DO 200 i=1,10 44 200 PRINT *, i 45 IF( x .eq. i ) GOTO l 46 INQUIRE(UNIT=u, IOSTAT=i) 47 ENDFILE 10 48 END FILE u 49 ENDFILE (unit=10,err=100) 50 REWIND 10 51 REWIND u 52 REWIND (unit=10) 53 CLOSE (UNIT=10) 54 bool = .TRUE. 55 IF( bool ) THEN 56 WRITE(10,*) a, y, z 57 ELSEIF( .NOT. .FALSE. ) THEN 58 WRITE(UNIT=10,FMT=900) 'Testing 1, 2, 3' 59 900 FORMAT(1x,a20) 60 ELSE 61 CALL bar 62 STOP 63 ENDIF 64 DOWHILE( i .lt. 100 ) ^ "allkeywords.f", line 64 col 7: Warning: Nonstandard syntax 65 IF( f(d) .gt. 3.14) THEN ^ "allkeywords.f", line 65 col 16: Warning: comparison mixes terms of different precision: dble expr F(D) .GT. real const 3.14 66 CYCLE ^ "allkeywords.f", line 66 col 10: Warning: Nonstandard syntax: CYCLE statement 67 ELSE 68 EXIT ^ "allkeywords.f", line 68 col 10: Warning: Nonstandard syntax: EXIT statement 69 END IF 70 ENDDO ^ "allkeywords.f", line 70 col 7: Warning: Nonstandard syntax 71 i = 1 72 DO WHILE( i .lt. 100 ) ^ "allkeywords.f", line 72 col 7: Warning: Nonstandard syntax 73 i = i*2 74 END DO ^ "allkeywords.f", line 74 col 7: Warning: Nonstandard syntax 75 DO 300 WHILE( x .gt. 0.0 ) ^ "allkeywords.f", line 75 col 7: Warning: Nonstandard syntax 76 TYPE *, pi, 'Over and over' ^ "allkeywords.f", line 76 col 10: Warning: Nonstandard syntax 77 300 CONTINUE 78 DO 4321, WHILE( x .gt. 0.0 ) ^ "allkeywords.f", line 78 col 7: Warning: Nonstandard syntax 79 TYPE *, pi, 'Over and over' ^ "allkeywords.f", line 79 col 10: Warning: Nonstandard syntax 80 4321 CONTINUE 81 GO TO 100 82 END Module ALLKEYS: prog External subprograms referenced: BAR: subr F: dble FOO: subr IFTN_CALLOC: intg Common blocks referenced: BLOCK2 Namelists defined: N1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A dcpx B intg1 1 BOOL logl C char100 D dble I intg L intg PI real PTEE intg 1 PTR intg4 U intg X real Y real Z cplx "allkeywords.f", line 29: Warning in module ALLKEYS: Variables set but never used: "allkeywords.f", line 29: PTR set "allkeywords.f", line 2: Warning in module ALLKEYS: Names longer than 6 chars (nonstandard): "allkeywords.f", line 2: ALLKEYS declared "allkeywords.f", line 11: IFTN_CALLOC defined "allkeywords.f", line 11: Warning in module ALLKEYS: Names containing nonstandard characters: "allkeywords.f", line 11: IFTN_CALLOC defined "allkeywords.f", line 4: Warning in module ALLKEYS: Mixed sizes equivalenced (not portable): "allkeywords.f", line 4: B declared with type intg*1 "allkeywords.f", line 11: I declared with type intg I/O Operations: Unit ID Unit No. Access Form Operation Line 10 SEQ BACKSPACE 26 28 10 CLOSE 53 10 SEQ ENDFILE 47 49 10 SEQ FMTD OPEN 21 10 SEQ FMTD READ 25 10 SEQ REWIND 50 52 10 SEQ FMTD WRITE 56 58 * SEQ FMTD ACCEPT 20 * SEQ FMTD PRINT 44 * SEQ FMTD TYPE 76 79 U SEQ BACKSPACE 27 U SEQ ENDFILE 48 U INQUIRE 46 U SEQ REWIND 51 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <100> 24 exec <200> 44 exec <300> 77 exec <900> 59 format <4321> 80 exec 83 DOUBLEPRECISION FUNCTION f(x) 84 DOUBLE PRECISION x 85 REAL y1, y2 86 DOUBLECOMPLEX a ^ "allkeywords.f", line 86 col 7: Warning: Nonstandard syntax 87 SAVE a 88 DIMENSION a(2) 89 INTRINSIC sqrt 90 COMMON /block1/ y1, y2 91 a(1) = (1.0d1, 2.0d2) ^ "allkeywords.f", line 91 col 14: Warning: nonstandard double precision complex constant 92 a(2) = a(1) 93 f = x*dble(y1*y2)* sqrt(real(a(1))) 94 RETURN 95 END Module F: func: dble External subprograms referenced: DBLE: intrns REAL: intrns SQRT: intrns Common blocks referenced: BLOCK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A dcpx 1 F dble X dble Y1 real Y2 real 96 SUBROUTINE foo 97 IMPLICIT INTEGER (A-Z) 98 WRITE(10,*) 'foo' 99 RETURN 100 ENTRY bar 101 WRITE(10,*) 'bar' 102 PAUSE 103 RETURN 104 END Module FOO: subr Entry Points BAR FOO I/O Operations: Unit ID Unit No. Access Form Operation Line 10 SEQ FMTD WRITE 98 101 105 BLOCKDATA bdat1 106 COMMON /block1/ a, b 107 DATA a, b /1.0, 2.0/ 108 END Module BDAT1: data Common blocks referenced: BLOCK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* * Variable not declared. Type has been implicitly defined. 109 BLOCK DATA bdat2 110 IMPLICITNONE ^ "allkeywords.f", line 110 col 15: Possibly misleading appearance: keyword NONE not clearly separated from context ^ "allkeywords.f", line 110 col 15: Warning: Nonstandard syntax 111 INCLUDE 'block2.i' ^ "allkeywords.f", line 111 col 7: Warning: Nonstandard syntax Including file block2.i: 1 ! Include file with common block definition for allkeywords.f ^ "block2.i", line 1 col 1: Warning: Nonstandard syntax: inline comment 2 REAL x, y 3 COMMON /block2/ x, y 4 Resuming file allkeywords.f: 112 DATA x, y /1.0, 2.0/ 113 END Module BDAT2: data Common blocks referenced: BLOCK2 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X real Y real 0 syntax errors detected in file allkeywords.f 35 warnings issued in file allkeywords.f "allkeywords.f", line 29: Warning: Subprogram IFTN_CALLOC never defined "allkeywords.f", line 29: Invoked in module ALLKEYS ftnchek-3.3.1/test/Okay/arg-alias.fcl0000644000031000002260000001035010145015311017754 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arg-alias.f: 1 INTEGER LIST(100) 2 EQUIVALENCE (E,B) 3 EQUIVALENCE (E,C) 4 EQUIVALENCE (A,C) 5 A = 1.0 6 CALL FOO(A,D,B,C) 7 CALL FOO(A,B,C,A) 8 CALL FOO(W,X,Y,Z) 9 DO 10 I = 1,100 10 LIST(I) = I 11 10 CONTINUE 12 DO 30 I = 1,100 13 DO 20 J = 1,I 14 CALL SWAP(LIST(I),LIST(J)) 15 20 CONTINUE 16 30 CONTINUE 17 END Module %MAIN: prog External subprograms referenced: FOO: subr SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* E real* I intg* J intg* LIST intg 1 W real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 11 exec <20> 15 exec <30> 16 exec 18 SUBROUTINE FOO(A,B,C,D) 19 CALL SWAP(A,B) 20 B = C 21 C = D 22 D = A 23 END Module FOO: subr External subprograms referenced: SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* * Variable not declared. Type has been implicitly defined. 24 SUBROUTINE SWAP(X,Y) 25 INTEGER X,Y 26 INTEGER TEMP 27 TEMP = X 28 X = Y 29 Y = TEMP 30 END 31 Module SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims TEMP intg X intg Y intg 0 syntax errors detected in file arg-alias.f 2 warnings issued in file arg-alias.f Warning: Subprogram FOO argument usage mismatch at position 1: Dummy arg A in module FOO line 18 file arg-alias.f may be modified Actual arg A in module %MAIN line 6 file arg-alias.f same as arg 4: C and at position 3: Dummy arg C in module FOO line 18 file arg-alias.f is modified Actual arg B in module %MAIN line 6 file arg-alias.f same as arg 1: A and at position 4: Dummy arg D in module FOO line 18 file arg-alias.f is modified Actual arg C in module %MAIN line 6 file arg-alias.f same as arg 3: B Warning: Subprogram FOO argument usage mismatch at position 1: Dummy arg A in module FOO line 18 file arg-alias.f may be modified Actual arg A in module %MAIN line 7 file arg-alias.f same as arg 4: A and at position 2: Dummy arg B in module FOO line 18 file arg-alias.f is modified Actual arg B in module %MAIN line 7 file arg-alias.f same as arg 1: A and at position 3: Dummy arg C in module FOO line 18 file arg-alias.f is modified Actual arg C in module %MAIN line 7 file arg-alias.f same as arg 2: B etc... Warning: Subprogram FOO argument usage mismatch at position 3: Dummy arg C in module FOO line 18 file arg-alias.f is used before set Actual arg Y in module %MAIN line 8 file arg-alias.f is not set and at position 4: Dummy arg D in module FOO line 18 file arg-alias.f is used before set Actual arg Z in module %MAIN line 8 file arg-alias.f is not set Warning: Subprogram SWAP argument data type mismatch at position 1: Dummy arg X in module SWAP line 24 file arg-alias.f is type intg Actual arg A in module FOO line 19 file arg-alias.f is type real and at position 2: Dummy arg Y in module SWAP line 24 file arg-alias.f is type intg Actual arg B in module FOO line 19 file arg-alias.f is type real Warning: Subprogram SWAP argument usage mismatch at position 1: Dummy arg X in module SWAP line 24 file arg-alias.f is modified Actual arg LIST(I) in module %MAIN line 14 file arg-alias.f may be same as arg 2: LIST(J) and at position 2: Dummy arg Y in module SWAP line 24 file arg-alias.f is modified Actual arg LIST(J) in module %MAIN line 14 file arg-alias.f may be same as arg 1: LIST(I) ftnchek-3.3.1/test/Okay/arg-alias.fcx0000644000031000002260000001072710145015311020000 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arg-alias.f: 1 INTEGER LIST(100) 2 EQUIVALENCE (E,B) 3 EQUIVALENCE (E,C) 4 EQUIVALENCE (A,C) 5 A = 1.0 6 CALL FOO(A,D,B,C) 7 CALL FOO(A,B,C,A) 8 CALL FOO(W,X,Y,Z) 9 DO 10 I = 1,100 10 LIST(I) = I 11 10 CONTINUE 12 DO 30 I = 1,100 13 DO 20 J = 1,I 14 CALL SWAP(LIST(I),LIST(J)) 15 20 CONTINUE 16 30 CONTINUE 17 END Module %MAIN: prog External subprograms referenced: FOO: subr SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* E real* I intg* J intg* LIST intg 1 W real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 11 exec <20> 15 exec <30> 16 exec 18 SUBROUTINE FOO(A,B,C,D) 19 CALL SWAP(A,B) 20 B = C 21 C = D 22 D = A 23 END Module FOO: subr External subprograms referenced: SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* * Variable not declared. Type has been implicitly defined. 24 SUBROUTINE SWAP(X,Y) 25 INTEGER X,Y 26 INTEGER TEMP 27 TEMP = X 28 X = Y 29 Y = TEMP 30 END 31 Module SWAP: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims TEMP intg X intg Y intg 0 syntax errors detected in file arg-alias.f 2 warnings issued in file arg-alias.f "arg-alias.f", line 18: Warning: Subprogram FOO argument usage mismatch at position 1: "arg-alias.f", line 18: Dummy arg A in module FOO may be modified "arg-alias.f", line 6: Actual arg A in module %MAIN same as arg 4: C "arg-alias.f", line 18: and at position 3: "arg-alias.f", line 18: Dummy arg C in module FOO is modified "arg-alias.f", line 6: Actual arg B in module %MAIN same as arg 1: A "arg-alias.f", line 18: and at position 4: "arg-alias.f", line 18: Dummy arg D in module FOO is modified "arg-alias.f", line 6: Actual arg C in module %MAIN same as arg 3: B "arg-alias.f", line 18: Warning: Subprogram FOO argument usage mismatch at position 1: "arg-alias.f", line 18: Dummy arg A in module FOO may be modified "arg-alias.f", line 7: Actual arg A in module %MAIN same as arg 4: A "arg-alias.f", line 18: and at position 2: "arg-alias.f", line 18: Dummy arg B in module FOO is modified "arg-alias.f", line 7: Actual arg B in module %MAIN same as arg 1: A "arg-alias.f", line 18: and at position 3: "arg-alias.f", line 18: Dummy arg C in module FOO is modified "arg-alias.f", line 7: Actual arg C in module %MAIN same as arg 2: B etc... "arg-alias.f", line 18: Warning: Subprogram FOO argument usage mismatch at position 3: "arg-alias.f", line 18: Dummy arg C in module FOO is used before set "arg-alias.f", line 8: Actual arg Y in module %MAIN is not set "arg-alias.f", line 18: and at position 4: "arg-alias.f", line 18: Dummy arg D in module FOO is used before set "arg-alias.f", line 8: Actual arg Z in module %MAIN is not set "arg-alias.f", line 24: Warning: Subprogram SWAP argument data type mismatch at position 1: "arg-alias.f", line 24: Dummy arg X in module SWAP is type intg "arg-alias.f", line 19: Actual arg A in module FOO is type real "arg-alias.f", line 24: and at position 2: "arg-alias.f", line 24: Dummy arg Y in module SWAP is type intg "arg-alias.f", line 19: Actual arg B in module FOO is type real "arg-alias.f", line 24: Warning: Subprogram SWAP argument usage mismatch at position 1: "arg-alias.f", line 24: Dummy arg X in module SWAP is modified "arg-alias.f", line 14: Actual arg LIST(I) in module %MAIN may be same as arg 2: LIST(J) "arg-alias.f", line 24: and at position 2: "arg-alias.f", line 24: Dummy arg Y in module SWAP is modified "arg-alias.f", line 14: Actual arg LIST(J) in module %MAIN may be same as arg 1: LIST(I) ftnchek-3.3.1/test/Okay/args01.fc00000644000031000002260000000013610145015311017116 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args01.f: 0 syntax errors detected in file args01.f ftnchek-3.3.1/test/Okay/args01.fc10000644000031000002260000000013610145015311017117 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args01.f: 0 syntax errors detected in file args01.f ftnchek-3.3.1/test/Okay/args01.fc20000644000031000002260000000044510145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args01.f: 0 syntax errors detected in file args01.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args01.f is scalar Actual arg C in module %MAIN line 3 file args01.f is whole array ftnchek-3.3.1/test/Okay/args01.fc30000644000031000002260000000044510145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args01.f: 0 syntax errors detected in file args01.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args01.f is scalar Actual arg C in module %MAIN line 3 file args01.f is whole array ftnchek-3.3.1/test/Okay/args02.fc00000644000031000002260000000013610145015311017117 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args02.f: 0 syntax errors detected in file args02.f ftnchek-3.3.1/test/Okay/args02.fc10000644000031000002260000000013610145015311017120 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args02.f: 0 syntax errors detected in file args02.f ftnchek-3.3.1/test/Okay/args02.fc20000644000031000002260000000046110145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args02.f: 0 syntax errors detected in file args02.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args02.f has 1 dim size 10 Actual arg C in module %MAIN line 3 file args02.f has 1 dim size 100 ftnchek-3.3.1/test/Okay/args02.fc30000644000031000002260000000046110145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args02.f: 0 syntax errors detected in file args02.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args02.f has 1 dim size 10 Actual arg C in module %MAIN line 3 file args02.f has 1 dim size 100 ftnchek-3.3.1/test/Okay/args03.fc00000644000031000002260000000013610145015311017120 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args03.f: 0 syntax errors detected in file args03.f ftnchek-3.3.1/test/Okay/args03.fc10000644000031000002260000000013610145015311017121 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args03.f: 0 syntax errors detected in file args03.f ftnchek-3.3.1/test/Okay/args03.fc20000644000031000002260000000046310145015311017125 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args03.f: 0 syntax errors detected in file args03.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args03.f has 1 dim size 100 Actual arg C in module %MAIN line 3 file args03.f has 2 dims size 100 ftnchek-3.3.1/test/Okay/args03.fc30000644000031000002260000000046310145015311017126 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args03.f: 0 syntax errors detected in file args03.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args03.f has 1 dim size 100 Actual arg C in module %MAIN line 3 file args03.f has 2 dims size 100 ftnchek-3.3.1/test/Okay/args04.fc00000644000031000002260000000013610145015311017121 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args04.f: 0 syntax errors detected in file args04.f ftnchek-3.3.1/test/Okay/args04.fc10000644000031000002260000000013610145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args04.f: 0 syntax errors detected in file args04.f ftnchek-3.3.1/test/Okay/args04.fc20000644000031000002260000000046310145015311017126 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args04.f: 0 syntax errors detected in file args04.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args04.f has 1 dim size 100 Actual arg C in module %MAIN line 3 file args04.f has 2 dims size 200 ftnchek-3.3.1/test/Okay/args04.fc30000644000031000002260000000046310145015311017127 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args04.f: 0 syntax errors detected in file args04.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args04.f has 1 dim size 100 Actual arg C in module %MAIN line 3 file args04.f has 2 dims size 200 ftnchek-3.3.1/test/Okay/args05.fc00000644000031000002260000000013610145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args05.f: 0 syntax errors detected in file args05.f ftnchek-3.3.1/test/Okay/args05.fc10000644000031000002260000000013610145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args05.f: 0 syntax errors detected in file args05.f ftnchek-3.3.1/test/Okay/args05.fc20000644000031000002260000000046710145015311017133 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args05.f: 0 syntax errors detected in file args05.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args05.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args05.f has 2 dims size 200*1 ftnchek-3.3.1/test/Okay/args05.fc30000644000031000002260000000046710145015311017134 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args05.f: 0 syntax errors detected in file args05.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args05.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args05.f has 2 dims size 200*1 ftnchek-3.3.1/test/Okay/args06.fc00000644000031000002260000000013610145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args06.f: 0 syntax errors detected in file args06.f ftnchek-3.3.1/test/Okay/args06.fc10000644000031000002260000000013610145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args06.f: 0 syntax errors detected in file args06.f ftnchek-3.3.1/test/Okay/args06.fc20000644000031000002260000000046710145015311017134 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args06.f: 0 syntax errors detected in file args06.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args06.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args06.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args06.fc30000644000031000002260000000046710145015311017135 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args06.f: 0 syntax errors detected in file args06.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args06.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args06.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args07.fc00000644000031000002260000000013610145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args07.f: 0 syntax errors detected in file args07.f ftnchek-3.3.1/test/Okay/args07.fc10000644000031000002260000000013610145015311017125 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args07.f: 0 syntax errors detected in file args07.f ftnchek-3.3.1/test/Okay/args07.fc20000644000031000002260000000046710145015311017135 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args07.f: 0 syntax errors detected in file args07.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args07.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args07.f has 2 dims size 100*2 ftnchek-3.3.1/test/Okay/args07.fc30000644000031000002260000000046710145015311017136 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args07.f: 0 syntax errors detected in file args07.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args07.f has 1 dim size 100*1 Actual arg C in module %MAIN line 3 file args07.f has 2 dims size 100*2 ftnchek-3.3.1/test/Okay/args08.fc00000644000031000002260000000013610145015311017125 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args08.f: 0 syntax errors detected in file args08.f ftnchek-3.3.1/test/Okay/args08.fc10000644000031000002260000000013610145015311017126 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args08.f: 0 syntax errors detected in file args08.f ftnchek-3.3.1/test/Okay/args08.fc20000644000031000002260000000100410145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args08.f: 0 syntax errors detected in file args08.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg C in module SUBA line 5 file args08.f is type char*2(100) Actual arg C in module %MAIN line 3 file args08.f is type char*1(100) Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args08.f has 1 dim size 100*2 Actual arg C in module %MAIN line 3 file args08.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args08.fc30000644000031000002260000000100410145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args08.f: 0 syntax errors detected in file args08.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg C in module SUBA line 5 file args08.f is type char*2(100) Actual arg C in module %MAIN line 3 file args08.f is type char*1(100) Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args08.f has 1 dim size 100*2 Actual arg C in module %MAIN line 3 file args08.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args09.fc00000644000031000002260000000013610145015311017126 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args09.f: 0 syntax errors detected in file args09.f ftnchek-3.3.1/test/Okay/args09.fc10000644000031000002260000000013610145015311017127 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args09.f: 0 syntax errors detected in file args09.f ftnchek-3.3.1/test/Okay/args09.fc20000644000031000002260000000046610145015311017136 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args09.f: 0 syntax errors detected in file args09.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args09.f has 1 dim size 50*2 Actual arg C in module %MAIN line 3 file args09.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args09.fc30000644000031000002260000000046610145015311017137 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args09.f: 0 syntax errors detected in file args09.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args09.f has 1 dim size 50*2 Actual arg C in module %MAIN line 3 file args09.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args10.fc00000644000031000002260000000013610145015311017116 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args10.f: 0 syntax errors detected in file args10.f ftnchek-3.3.1/test/Okay/args10.fc10000644000031000002260000000013610145015311017117 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args10.f: 0 syntax errors detected in file args10.f ftnchek-3.3.1/test/Okay/args10.fc20000644000031000002260000000046610145015311017126 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args10.f: 0 syntax errors detected in file args10.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args10.f has 1 dim size 2000 Actual arg C in module %MAIN line 3 file args10.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args10.fc30000644000031000002260000000046610145015311017127 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args10.f: 0 syntax errors detected in file args10.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 5 file args10.f has 1 dim size 2000 Actual arg C in module %MAIN line 3 file args10.f has 2 dims size 100*1 ftnchek-3.3.1/test/Okay/args11.fc00000644000031000002260000000013610145015311017117 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args11.f: 0 syntax errors detected in file args11.f ftnchek-3.3.1/test/Okay/args11.fc10000644000031000002260000000013610145015311017120 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args11.f: 0 syntax errors detected in file args11.f ftnchek-3.3.1/test/Okay/args11.fc20000644000031000002260000000045710145015311017127 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args11.f: 0 syntax errors detected in file args11.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 4 file args11.f is whole array Actual arg C(1) in module %MAIN line 2 file args11.f is array element ftnchek-3.3.1/test/Okay/args11.fc30000644000031000002260000000045710145015311017130 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args11.f: 0 syntax errors detected in file args11.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg C in module SUBA line 4 file args11.f is whole array Actual arg C(1) in module %MAIN line 2 file args11.f is array element ftnchek-3.3.1/test/Okay/args12.fc00000644000031000002260000000013610145015311017120 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args12.f: 0 syntax errors detected in file args12.f ftnchek-3.3.1/test/Okay/args12.fc10000644000031000002260000000013610145015311017121 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args12.f: 0 syntax errors detected in file args12.f ftnchek-3.3.1/test/Okay/args12.fc20000644000031000002260000000013610145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args12.f: 0 syntax errors detected in file args12.f ftnchek-3.3.1/test/Okay/args12.fc30000644000031000002260000000013610145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args12.f: 0 syntax errors detected in file args12.f ftnchek-3.3.1/test/Okay/args13.fc00000644000031000002260000000013610145015311017121 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args13.f: 0 syntax errors detected in file args13.f ftnchek-3.3.1/test/Okay/args13.fc10000644000031000002260000000013610145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args13.f: 0 syntax errors detected in file args13.f ftnchek-3.3.1/test/Okay/args13.fc20000644000031000002260000000044310145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args13.f: 0 syntax errors detected in file args13.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg C in module SUBA line 4 file args13.f is type char*2 Actual arg C(1) in module %MAIN line 2 file args13.f is type char*1 ftnchek-3.3.1/test/Okay/args13.fc30000644000031000002260000000044310145015311017125 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args13.f: 0 syntax errors detected in file args13.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg C in module SUBA line 4 file args13.f is type char*2 Actual arg C(1) in module %MAIN line 2 file args13.f is type char*1 ftnchek-3.3.1/test/Okay/args14.fc00000644000031000002260000000013610145015311017122 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args14.f: 0 syntax errors detected in file args14.f ftnchek-3.3.1/test/Okay/args14.fc10000644000031000002260000000013610145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args14.f: 0 syntax errors detected in file args14.f ftnchek-3.3.1/test/Okay/args14.fc20000644000031000002260000000013610145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args14.f: 0 syntax errors detected in file args14.f ftnchek-3.3.1/test/Okay/args14.fc30000644000031000002260000000013610145015311017125 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args14.f: 0 syntax errors detected in file args14.f ftnchek-3.3.1/test/Okay/args15.fc00000644000031000002260000000013610145015311017123 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args15.f: 0 syntax errors detected in file args15.f ftnchek-3.3.1/test/Okay/args15.fc10000644000031000002260000000013610145015311017124 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args15.f: 0 syntax errors detected in file args15.f ftnchek-3.3.1/test/Okay/args15.fc20000644000031000002260000000044410145015311017127 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args15.f: 0 syntax errors detected in file args15.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg I in module SUBA line 3 file args15.f is type intg Actual arg 5Hjunky in module %MAIN line 1 file args15.f is type holl*5 ftnchek-3.3.1/test/Okay/args15.fc30000644000031000002260000000044410145015311017130 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File args15.f: 0 syntax errors detected in file args15.f Warning: Subprogram SUBA argument mismatch at position 1: Dummy arg I in module SUBA line 3 file args15.f is type intg Actual arg 5Hjunky in module %MAIN line 1 file args15.f is type holl*5 ftnchek-3.3.1/test/Okay/arrayclash.fc00000644000031000002260000000154410145015311020156 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arrayclash.f: 10 end Warning near line 10 file arrayclash.f: Module contains no executable statements Warning in module SUBA in file arrayclash.f: Variables declared but never referenced: W declared at line 9 file arrayclash.f (dummy argument) Z declared at line 9 file arrayclash.f (dummy argument) Nonportable usage in file arrayclash.f: File contains tabs 0 syntax errors detected in file arrayclash.f 3 warnings issued in file arrayclash.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is array Actual arg X in module %MAIN line 3 file arrayclash.f is scalar and at position 2: Dummy arg Z in module SUBA line 8 file arrayclash.f is scalar Actual arg A in module %MAIN line 3 file arrayclash.f is whole array ftnchek-3.3.1/test/Okay/arrayclash.fc10000644000031000002260000000243210145015311020154 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arrayclash.f: 10 end Warning near line 10 file arrayclash.f: Module contains no executable statements Warning in module SUBA in file arrayclash.f: Variables declared but never referenced: W declared at line 9 file arrayclash.f (dummy argument) Z declared at line 9 file arrayclash.f (dummy argument) Nonportable usage in file arrayclash.f: File contains tabs 0 syntax errors detected in file arrayclash.f 3 warnings issued in file arrayclash.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f has 1 dim size 21 Actual arg A in module %MAIN line 2 file arrayclash.f has 2 dims size 21 Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is array Actual arg X in module %MAIN line 3 file arrayclash.f is scalar and at position 2: Dummy arg Z in module SUBA line 8 file arrayclash.f is scalar Actual arg A in module %MAIN line 3 file arrayclash.f is whole array Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is whole array Actual arg Y(1) in module %MAIN line 5 file arrayclash.f is array element ftnchek-3.3.1/test/Okay/arrayclash.fc20000644000031000002260000000207710145015311020162 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arrayclash.f: 10 end Warning near line 10 file arrayclash.f: Module contains no executable statements Warning in module SUBA in file arrayclash.f: Variables declared but never referenced: W declared at line 9 file arrayclash.f (dummy argument) Z declared at line 9 file arrayclash.f (dummy argument) Nonportable usage in file arrayclash.f: File contains tabs 0 syntax errors detected in file arrayclash.f 3 warnings issued in file arrayclash.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is array Actual arg X in module %MAIN line 3 file arrayclash.f is scalar and at position 2: Dummy arg Z in module SUBA line 8 file arrayclash.f is scalar Actual arg A in module %MAIN line 3 file arrayclash.f is whole array Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f has 1 dim size 21 Actual arg B in module %MAIN line 6 file arrayclash.f has 1 dim size 20 ftnchek-3.3.1/test/Okay/arrayclash.fc30000644000031000002260000000276510145015311020167 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File arrayclash.f: 10 end Warning near line 10 file arrayclash.f: Module contains no executable statements Warning in module SUBA in file arrayclash.f: Variables declared but never referenced: W declared at line 9 file arrayclash.f (dummy argument) Z declared at line 9 file arrayclash.f (dummy argument) Nonportable usage in file arrayclash.f: File contains tabs 0 syntax errors detected in file arrayclash.f 3 warnings issued in file arrayclash.f Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f has 1 dim size 21 Actual arg A in module %MAIN line 2 file arrayclash.f has 2 dims size 21 Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is array Actual arg X in module %MAIN line 3 file arrayclash.f is scalar and at position 2: Dummy arg Z in module SUBA line 8 file arrayclash.f is scalar Actual arg A in module %MAIN line 3 file arrayclash.f is whole array Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f is whole array Actual arg Y(1) in module %MAIN line 5 file arrayclash.f is array element Warning: Subprogram SUBA argument arrayness mismatch at position 1: Dummy arg W in module SUBA line 8 file arrayclash.f has 1 dim size 21 Actual arg B in module %MAIN line 6 file arrayclash.f has 1 dim size 20 ftnchek-3.3.1/test/Okay/assign.fc10000644000031000002260000000642510145015311017315 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 1 c for testing propagation of type sizes 2 subroutine sizeprop(cadj,i,x) 3 character cadj*(*) 4 character c1, c5*5, c10*10 5 c1 = c5 6 c5 = c1 7 c5 = cadj 8 cadj = c5 9 c5 = 'hello' 10 c5 = 5Hhello ^ Error near line 10 col 10: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 12 end Warning in module SIZEPROP: Variables declared but never referenced: C10 declared at line 4 I declared at line 2 (dummy argument) X declared at line 2 (dummy argument) Warning in module SIZEPROP: Variables may be used before set: C5 used at line 5 C5 set at line 6 13 integer i,j,n 14 integer*4 m 15 parameter (n=6) 16 parameter (m=7) 17 real x,y 18 integer*2 i2 19 integer*4 i4 20 logical L 21 logical*2 L2 22 logical*4 L4 23 double precision d 24 real*4 r4 25 real*8 r8 26 complex c 27 real*16 r16 28 double complex z 29 complex*16 c16 30 complex*32 c32 31 i = m 32 i = n 33 i = 1 34 i = i2 35 i = i4 36 i4 = i 37 i4 = i2 38 i2 = i4 39 i = 4habcd 40 i = 8habcdefgh 41 x = r4 42 x = r8 43 x = c 44 d = x 45 x = d 46 z = d 47 d = z 48 r16 = d 49 r16 = r8 50 d = r4 51 d = r8 52 d = r16 53 c = x 54 c = z 55 i = L4 ^ Error near line 55 col 9: type mismatch: logl*4 L4 assigned to intg I 56 call sizeprop('hello',i2,r16) 57 end Warning in module %MAIN: Variables declared but never referenced: C16 declared at line 29 C32 declared at line 30 J declared at line 13 L declared at line 20 L2 declared at line 21 Y declared at line 17 Warning in module %MAIN: Variables used before set L4 used at line 55; never set R4 used at line 41; never set R8 used at line 42; never set Warning in module %MAIN: Variables may be used before set: C used at line 43 C set at line 53 I2 used at line 34 I2 set at line 38 I4 used at line 35 I4 set at line 36 3 syntax errors detected in file assign.f 5 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc20000644000031000002260000001022110145015311017303 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f Warning in module SIZEPROP in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP declared at line 2 file assign.f 14 integer*4 m ^ Warning near line 14 col 15 file assign.f: Nonstandard syntax 18 integer*2 i2 ^ Warning near line 18 col 15 file assign.f: Nonstandard syntax 19 integer*4 i4 ^ Warning near line 19 col 15 file assign.f: Nonstandard syntax 21 logical*2 L2 ^ Warning near line 21 col 15 file assign.f: Nonstandard syntax 22 logical*4 L4 ^ Warning near line 22 col 15 file assign.f: Nonstandard syntax 24 real*4 r4 ^ Warning near line 24 col 12 file assign.f: Nonstandard syntax 25 real*8 r8 ^ Warning near line 25 col 12 file assign.f: Nonstandard syntax 27 real*16 r16 ^ Warning near line 27 col 12 file assign.f: Nonstandard syntax 28 double complex z ^ Warning near line 28 col 7 file assign.f: Nonstandard syntax 29 complex*16 c16 ^ Warning near line 29 col 15 file assign.f: Nonstandard syntax 30 complex*32 c32 ^ Warning near line 30 col 15 file assign.f: Nonstandard syntax 39 i = 4habcd ^ Warning near line 39 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*8 const 8Habcdefgh assigned to intg I 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f Warning in module %MAIN in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP referenced at line 56 file assign.f 3 syntax errors detected in file assign.f 20 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc30000644000031000002260000001133310145015311017311 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 40 col 9 file assign.f: mixed default and explicit size items: holl*8 const 8Habcdefgh assigned to intg I 41 x = r4 ^ Nonportable usage near line 41 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to real X 42 x = r8 ^ Nonportable usage near line 42 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to real X 48 r16 = d ^ Nonportable usage near line 48 col 11 file assign.f: mixed default and explicit precision items: dble D assigned to real*16 R16 50 d = r4 ^ Nonportable usage near line 50 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to dble D 51 d = r8 ^ Nonportable usage near line 51 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to dble D 52 d = r16 ^ Nonportable usage near line 52 col 9 file assign.f: mixed default and explicit precision items: real*16 R16 assigned to dble D 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 21 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc40000644000031000002260000001474210145015311017321 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f Warning in module SIZEPROP in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP declared at line 2 file assign.f 14 integer*4 m ^ Warning near line 14 col 15 file assign.f: Nonstandard syntax 18 integer*2 i2 ^ Warning near line 18 col 15 file assign.f: Nonstandard syntax 19 integer*4 i4 ^ Warning near line 19 col 15 file assign.f: Nonstandard syntax 21 logical*2 L2 ^ Warning near line 21 col 15 file assign.f: Nonstandard syntax 22 logical*4 L4 ^ Warning near line 22 col 15 file assign.f: Nonstandard syntax 24 real*4 r4 ^ Warning near line 24 col 12 file assign.f: Nonstandard syntax 25 real*8 r8 ^ Warning near line 25 col 12 file assign.f: Nonstandard syntax 27 real*16 r16 ^ Warning near line 27 col 12 file assign.f: Nonstandard syntax 28 double complex z ^ Warning near line 28 col 7 file assign.f: Nonstandard syntax 29 complex*16 c16 ^ Warning near line 29 col 15 file assign.f: Nonstandard syntax 30 complex*32 c32 ^ Warning near line 30 col 15 file assign.f: Nonstandard syntax 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 39 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*4 const 4Habcd assigned to intg I ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 40 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*8 const 8Habcdefgh assigned to intg I ^ Nonportable usage near line 40 col 9 file assign.f: mixed default and explicit size items: holl*8 const 8Habcdefgh assigned to intg I 41 x = r4 ^ Nonportable usage near line 41 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to real X 42 x = r8 ^ Nonportable usage near line 42 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to real X 48 r16 = d ^ Nonportable usage near line 48 col 11 file assign.f: mixed default and explicit precision items: dble D assigned to real*16 R16 50 d = r4 ^ Nonportable usage near line 50 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to dble D 51 d = r8 ^ Nonportable usage near line 51 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to dble D 52 d = r16 ^ Nonportable usage near line 52 col 9 file assign.f: mixed default and explicit precision items: real*16 R16 assigned to dble D 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f Warning in module %MAIN in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP referenced at line 56 file assign.f 3 syntax errors detected in file assign.f 36 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc50000644000031000002260000000763110145015311017321 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 40 i = 8habcdefgh ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 18 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc60000644000031000002260000001327110145015311017317 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f Warning in module SIZEPROP in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP declared at line 2 file assign.f 14 integer*4 m ^ Warning near line 14 col 15 file assign.f: Nonstandard syntax 18 integer*2 i2 ^ Warning near line 18 col 15 file assign.f: Nonstandard syntax 19 integer*4 i4 ^ Warning near line 19 col 15 file assign.f: Nonstandard syntax 21 logical*2 L2 ^ Warning near line 21 col 15 file assign.f: Nonstandard syntax 22 logical*4 L4 ^ Warning near line 22 col 15 file assign.f: Nonstandard syntax 24 real*4 r4 ^ Warning near line 24 col 12 file assign.f: Nonstandard syntax 25 real*8 r8 ^ Warning near line 25 col 12 file assign.f: Nonstandard syntax 27 real*16 r16 ^ Warning near line 27 col 12 file assign.f: Nonstandard syntax 28 double complex z ^ Warning near line 28 col 7 file assign.f: Nonstandard syntax 29 complex*16 c16 ^ Warning near line 29 col 15 file assign.f: Nonstandard syntax 30 complex*32 c32 ^ Warning near line 30 col 15 file assign.f: Nonstandard syntax 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*8 const 8Habcdefgh assigned to intg I ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f Warning in module %MAIN in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP referenced at line 56 file assign.f 3 syntax errors detected in file assign.f 33 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc70000644000031000002260000001271110145015311017316 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 41 x = r4 ^ Nonportable usage near line 41 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to real X 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 51 d = r8 ^ Nonportable usage near line 51 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to dble D 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 29 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fc80000644000031000002260000001632010145015311017317 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f Warning in module SIZEPROP in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP declared at line 2 file assign.f 14 integer*4 m ^ Warning near line 14 col 15 file assign.f: Nonstandard syntax 18 integer*2 i2 ^ Warning near line 18 col 15 file assign.f: Nonstandard syntax 19 integer*4 i4 ^ Warning near line 19 col 15 file assign.f: Nonstandard syntax 21 logical*2 L2 ^ Warning near line 21 col 15 file assign.f: Nonstandard syntax 22 logical*4 L4 ^ Warning near line 22 col 15 file assign.f: Nonstandard syntax 24 real*4 r4 ^ Warning near line 24 col 12 file assign.f: Nonstandard syntax 25 real*8 r8 ^ Warning near line 25 col 12 file assign.f: Nonstandard syntax 27 real*16 r16 ^ Warning near line 27 col 12 file assign.f: Nonstandard syntax 28 double complex z ^ Warning near line 28 col 7 file assign.f: Nonstandard syntax 29 complex*16 c16 ^ Warning near line 29 col 15 file assign.f: Nonstandard syntax 30 complex*32 c32 ^ Warning near line 30 col 15 file assign.f: Nonstandard syntax 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 39 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*4 const 4Habcd assigned to intg I ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 40 col 9 file assign.f: Nonstandard syntax: incompatible type combination: holl*8 const 8Habcdefgh assigned to intg I ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 41 x = r4 ^ Nonportable usage near line 41 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to real X 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 51 d = r8 ^ Nonportable usage near line 51 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to dble D 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f Warning in module %MAIN in file assign.f: Names longer than 6 chars (nonstandard): SIZEPROP referenced at line 56 file assign.f 3 syntax errors detected in file assign.f 44 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcA0000644000031000002260000001232410145015311017330 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Warning near line 31 col 9 file assign.f: intg*4 M truncated to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Warning near line 35 col 9 file assign.f: intg*4 I4 truncated to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 39 col 9 file assign.f: holl*4 const 4Habcd truncated to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 41 x = r4 ^ Warning near line 41 col 9 file assign.f: real*4 R4 truncated to real X 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Nonportable usage near line 50 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to dble D 51 d = r8 ^ Warning near line 51 col 9 file assign.f: real*8 R8 truncated to dble D 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 29 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcB0000644000031000002260000001271110145015311017331 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Nonportable usage near line 36 col 10 file assign.f: mixed default and explicit precision items: intg I assigned to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 41 x = r4 ^ Nonportable usage near line 41 col 9 file assign.f: mixed default and explicit precision items: real*4 R4 assigned to real X 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 51 d = r8 ^ Nonportable usage near line 51 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to dble D 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 29 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcC0000644000031000002260000001303110145015311017326 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Warning near line 10 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Warning near line 11 col 12 file assign.f: hollerith constant may not be portable ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit precision items: intg*4 M assigned to intg I 34 i = i2 ^ Nonportable usage near line 34 col 9 file assign.f: mixed default and explicit precision items: intg*2 I2 assigned to intg I 35 i = i4 ^ Nonportable usage near line 35 col 9 file assign.f: mixed default and explicit precision items: intg*4 I4 assigned to intg I 36 i4 = i ^ Warning near line 36 col 10 file assign.f: intg I truncated to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 39 col 9 file assign.f: mixed default and explicit size items: holl*4 const 4Habcd assigned to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 11 file assign.f: hollerith constant may not be portable ^ Nonportable usage near line 40 col 9 file assign.f: mixed default and explicit size items: holl*8 const 8Habcdefgh assigned to intg I 41 x = r4 ^ Warning near line 41 col 9 file assign.f: real*4 R4 promoted to real X: may not give desired precision 42 x = r8 ^ Nonportable usage near line 42 col 9 file assign.f: mixed default and explicit precision items: real*8 R8 assigned to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Nonportable usage near line 48 col 11 file assign.f: mixed default and explicit precision items: dble D assigned to real*16 R16 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 51 d = r8 ^ Warning near line 51 col 9 file assign.f: real*8 R8 promoted to dble D: may not give desired precision 52 d = r16 ^ Nonportable usage near line 52 col 9 file assign.f: mixed default and explicit precision items: real*16 R16 assigned to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 29 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcD0000644000031000002260000001024210145015311017330 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 31 i = m ^ Warning near line 31 col 9 file assign.f: intg*4 M truncated to intg I 35 i = i4 ^ Warning near line 35 col 9 file assign.f: intg*4 I4 truncated to intg I 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 39 i = 4habcd ^ Warning near line 39 col 9 file assign.f: holl*4 const 4Habcd truncated to intg I 40 i = 8habcdefgh ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 41 x = r4 ^ Warning near line 41 col 9 file assign.f: real*4 R4 truncated to real X 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 51 d = r8 ^ Warning near line 51 col 9 file assign.f: real*8 R8 truncated to dble D 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 22 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcE0000644000031000002260000000763110145015311017341 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 40 i = 8habcdefgh ^ Warning near line 40 col 9 file assign.f: holl*8 const 8Habcdefgh truncated to intg I 42 x = r8 ^ Warning near line 42 col 9 file assign.f: real*8 R8 truncated to real X 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 48 r16 = d ^ Warning near line 48 col 11 file assign.f: dble D promoted to real*16 R16: may not give desired precision 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 52 d = r16 ^ Warning near line 52 col 9 file assign.f: real*16 R16 truncated to dble D 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 18 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/assign.fcF0000644000031000002260000000745310145015311017344 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File assign.f: 5 c1 = c5 ^ Warning near line 5 col 10 file assign.f: char*5 C5 truncated to char*1 C1 10 c5 = 5Hhello ^ Error near line 10 col 10 file assign.f: type mismatch: holl*5 const 5Hhello assigned to char*5 C5 11 c5 = 11Hhello there ^ Error near line 11 col 10 file assign.f: type mismatch: holl*11 const 11Hhello there assigned to char*5 C5 Warning in module SIZEPROP in file assign.f: Variables declared but never referenced: C10 declared at line 4 file assign.f I declared at line 2 file assign.f (dummy argument) X declared at line 2 file assign.f (dummy argument) Warning in module SIZEPROP in file assign.f: Variables may be used before set: C5 used at line 5 file assign.f C5 set at line 6 file assign.f 36 i4 = i ^ Warning near line 36 col 10 file assign.f: intg I truncated to intg*4 I4 38 i2 = i4 ^ Warning near line 38 col 10 file assign.f: intg*4 I4 truncated to intg*2 I2 41 x = r4 ^ Warning near line 41 col 9 file assign.f: real*4 R4 promoted to real X: may not give desired precision 43 x = c ^ Warning near line 43 col 9 file assign.f: cplx C truncated to real X 44 d = x ^ Warning near line 44 col 9 file assign.f: real X promoted to dble D: may not give desired precision 45 x = d ^ Warning near line 45 col 9 file assign.f: dble D truncated to real X 47 d = z ^ Warning near line 47 col 9 file assign.f: dcpx Z truncated to dble D 49 r16 = r8 ^ Warning near line 49 col 11 file assign.f: real*8 R8 promoted to real*16 R16: may not give desired precision 50 d = r4 ^ Warning near line 50 col 9 file assign.f: real*4 R4 promoted to dble D: may not give desired precision 51 d = r8 ^ Warning near line 51 col 9 file assign.f: real*8 R8 promoted to dble D: may not give desired precision 54 c = z ^ Warning near line 54 col 9 file assign.f: dcpx Z truncated to cplx C 55 i = L4 ^ Error near line 55 col 9 file assign.f: type mismatch: logl*4 L4 assigned to intg I Warning in module %MAIN in file assign.f: Variables declared but never referenced: C16 declared at line 29 file assign.f C32 declared at line 30 file assign.f J declared at line 13 file assign.f L declared at line 20 file assign.f L2 declared at line 21 file assign.f Y declared at line 17 file assign.f Warning in module %MAIN in file assign.f: Variables used before set L4 used at line 55 file assign.f; never set R4 used at line 41 file assign.f; never set R8 used at line 42 file assign.f; never set Warning in module %MAIN in file assign.f: Variables may be used before set: C used at line 43 file assign.f C set at line 53 file assign.f I2 used at line 34 file assign.f I2 set at line 38 file assign.f I4 used at line 35 file assign.f I4 set at line 36 file assign.f 3 syntax errors detected in file assign.f 17 warnings issued in file assign.f Warning: Subprogram SIZEPROP argument data type mismatch at position 2: Dummy arg I in module SIZEPROP line 2 file assign.f is type intg Actual arg I2 in module %MAIN line 56 file assign.f is type intg*2 and at position 3: Dummy arg X in module SIZEPROP line 2 file assign.f is type real Actual arg R16 in module %MAIN line 56 file assign.f is type real*16 Warning: Subprogram SIZEPROP argument usage mismatch at position 1: Dummy arg CADJ in module SIZEPROP line 2 file assign.f is modified Actual arg 'hello' in module %MAIN line 56 file assign.f is const or expr ftnchek-3.3.1/test/Okay/autoarray.fcl0000644000031000002260000000143710145015311020131 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File autoarray.f: 1 program main 2 call test(100) 3 end Module MAIN: prog External subprograms referenced: TEST: subr 4 subroutine test(n) 5 integer n 6 C the following local array cannot have variable bounds. 7 integer auto(n) ^ Warning near line 7 col 20: Nonstandard syntax: local array cannot have variable size 8 auto(1) = 5 9 auto(2) = auto(1)*2 10 end 11 Module TEST: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AUTO intg 1 N intg 0 syntax errors detected in file autoarray.f 1 warning issued in file autoarray.f ftnchek-3.3.1/test/Okay/autoarray.fcx0000644000031000002260000000145210145015311020142 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File autoarray.f: 1 program main 2 call test(100) 3 end Module MAIN: prog External subprograms referenced: TEST: subr 4 subroutine test(n) 5 integer n 6 C the following local array cannot have variable bounds. 7 integer auto(n) ^ "autoarray.f", line 7 col 20: Warning: Nonstandard syntax: local array cannot have variable size 8 auto(1) = 5 9 auto(2) = auto(1)*2 10 end 11 Module TEST: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AUTO intg 1 N intg 0 syntax errors detected in file autoarray.f 1 warning issued in file autoarray.f ftnchek-3.3.1/test/Okay/average.fcl0000644000031000002260000000626610145015311017541 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File average.f: 1 C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO 30 I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 30 CONTINUE 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20: integer quotient expr SUM/COUNT converted to real 17 END Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV: Variables declared but never referenced: J declared at line 11 Warning in module COMPAV: Variables may be used before set: SUM used at line 14 SUM set at line 14 Statement labels defined: Label Line StmtType <30> 15 exec 18 19 20 PROGRAM AVENUM 21 C 22 C MAIN PROGRAM 23 C 24 C AUTHOR: LOIS BIGBIE 25 C DATE: MAY 15, 1990 26 C 27 C Variables: 28 C MAXNOS -> maximum number of input values 29 C NUMS -> an array of numbers 30 C COUNT -> exact number of input values 31 C AVG -> average returned by COMPAV 32 C I -> loop counter 33 C 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO 80 I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) 41 COUNT = COUNT + 1 42 80 CONTINUE 43 100 AVG = COMPAV(NUMS, COUNT) 44 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM: Variables set but never used: AVG set at line 43 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42 exec <100> 43 exec 0 syntax errors detected in file average.f 6 warnings issued in file average.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f is type intg Actual arg NUMS in module AVENUM line 43 file average.f is type real ftnchek-3.3.1/test/Okay/average.fcx0000644000031000002260000000650310145015311017547 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File average.f: 1 C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO 30 I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 30 CONTINUE 16 COMPAV = SUM/COUNT ^ "average.f", line 16 col 20: Warning: integer quotient expr SUM/COUNT converted to real 17 END Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. "average.f", line 11: Warning in module COMPAV: Variables declared but never referenced: "average.f", line 11: J declared "average.f", line 14: Warning in module COMPAV: Variables may be used before set: "average.f", line 14: SUM used "average.f", line 14: SUM set Statement labels defined: Label Line StmtType <30> 15 exec 18 19 20 PROGRAM AVENUM 21 C 22 C MAIN PROGRAM 23 C 24 C AUTHOR: LOIS BIGBIE 25 C DATE: MAY 15, 1990 26 C 27 C Variables: 28 C MAXNOS -> maximum number of input values 29 C NUMS -> an array of numbers 30 C COUNT -> exact number of input values 31 C AVG -> average returned by COMPAV 32 C I -> loop counter 33 C 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO 80 I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) 41 COUNT = COUNT + 1 42 80 CONTINUE 43 100 AVG = COMPAV(NUMS, COUNT) 44 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. "average.f", line 43: Warning in module AVENUM: Variables set but never used: "average.f", line 43: AVG set I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42 exec <100> 43 exec 0 syntax errors detected in file average.f 6 warnings issued in file average.f "average.f", line 10: Warning: Subprogram COMPAV argument data type mismatch at position 1: "average.f", line 10: Dummy arg SCORE in module COMPAV is type intg "average.f", line 43: Actual arg NUMS in module AVENUM is type real ftnchek-3.3.1/test/Okay/average.out0000644000031000002260000000626610145015311017604 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File average.f: 1 C AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO 30 I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 30 CONTINUE 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20: integer quotient expr SUM/COUNT converted to real 17 END Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV: Variables declared but never referenced: J declared at line 11 Warning in module COMPAV: Variables may be used before set: SUM used at line 14 SUM set at line 14 Statement labels defined: Label Line StmtType <30> 15 exec 18 19 20 PROGRAM AVENUM 21 C 22 C MAIN PROGRAM 23 C 24 C AUTHOR: LOIS BIGBIE 25 C DATE: MAY 15, 1990 26 C 27 C Variables: 28 C MAXNOS -> maximum number of input values 29 C NUMS -> an array of numbers 30 C COUNT -> exact number of input values 31 C AVG -> average returned by COMPAV 32 C I -> loop counter 33 C 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO 80 I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) 41 COUNT = COUNT + 1 42 80 CONTINUE 43 100 AVG = COMPAV(NUMS, COUNT) 44 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM: Variables set but never used: AVG set at line 43 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42 exec <100> 43 exec 0 syntax errors detected in file average.f 6 warnings issued in file average.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f is type intg Actual arg NUMS in module AVENUM line 43 file average.f is type real ftnchek-3.3.1/test/Okay/backslash.fcl0000644000031000002260000000043310145015311020050 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File backslash.f: 9 c = c// "don't" ^ Warning near line 9 col 9 file backslash.f: char*105 expr C//"don't" truncated to char*100 C 0 syntax errors detected in file backslash.f 1 warning issued in file backslash.f ftnchek-3.3.1/test/Okay/backslash.fcx0000644000031000002260000000042510145015311020065 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File backslash.f: 9 c = c// "don't" ^ "backslash.f", line 9 col 9: Warning: char*105 expr C//"don't" truncated to char*100 C 0 syntax errors detected in file backslash.f 1 warning issued in file backslash.f ftnchek-3.3.1/test/Okay/blockcheck.fcl0000644000031000002260000000773410145015311020220 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File blockcheck.f90: 1 program blocks 2 ! program to check parsing of block structures 3 real x 4 integer n 5 x = bar(1.0) 6 if( x .gt. 0 ) then 7 call baz(x) 8 n = int(x) 9 select case (n) 10 case(1) 11 call baz(2.0) 12 case(2:10) 13 call baz(3.0) 14 case(-1,11:100,300) 15 call baz(4.0) 16 case default 17 call baz(5.0) 18 end select 19 else 20 k = 0 21 loop1: do i=1,100 22 loop2: do j=1,10 23 write(*,*) i,j,i*j 24 if( i .eq. 50 ) exit loop1 25 k = k + j 26 if( k .eq. 50) cycle loop2 27 end do loop2 28 write(*,*) k*i**2 29 enddo loop1 30 case2: select case (n) 31 case(1) case2 32 call baz(2.0) 33 case(2:10) case2 34 call baz(3.0) 35 case(-1,11:100,300) case2 36 call baz(4.0) 37 case default case2 38 do i=1,10 39 if( i == 7 ) goto 200 40 call baz(5.0) 41 200 end do 42 end select case2 43 end if 44 end program blocks Module BLOCKS: prog External subprograms referenced: BAR: real* BAZ: subr INT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* J intg* K intg* N intg X real * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 23 28 Statement labels defined: Label Line StmtType <200> 41 exec 45 function bar(c) 46 real a, b, c ,d 47 read *, a 48 ! This block is from section 8.1.2.3 of the F90 standard, except for 49 ! removing space between some keywords 50 if ( a .gt. 0 ) then 51 b = c/a 52 if (b .gt. 0) then 53 d = 1.0 54 endif 55 elseif (c .gt. 0) then 56 b = a/c 57 d = -1.0 58 else 59 b = abs (max (a, c)) 60 d = 0 61 endif 62 bar = d*b 63 end function bar Module BAR: func: real* External subprograms referenced: ABS: intrns MAX: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real B real BAR real* C real D real * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 47 64 subroutine baz(c) 65 real a, b, c ,d 66 read *, a 67 ! Same as above but with spaces restored and construct names added 68 first_if: if ( a .gt. 0 ) then 69 b = c/a 70 second_if: if (b .gt. 0) then 71 d = 1.0 72 end if second_if 73 else if (c .gt. 0) then first_if 74 b = a/c 75 d = -1.0 76 else first_if 77 b = abs (max (a, c)) 78 d = 0 79 end if first_if 80 print *, a, b, c, d 81 end subroutine baz 82 Module BAZ: subr External subprograms referenced: ABS: intrns MAX: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real B real C real D real I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 80 * SEQ FMTD READ 66 0 syntax errors detected in file blockcheck.f90 2 warnings issued in file blockcheck.f90 ftnchek-3.3.1/test/Okay/blockerrors.fcl0000644000031000002260000001446210145015311020453 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File blockerrors.f: 1 program blocks 2 ! program with various errors in balancing block structures 3 real x 4 integer n 5 x = bar(1.0) 6 if( x .gt. 0 ) then ^ Warning near line 6 col 9: Construct name missing from IF statement 7 call baz(x) 8 n = int(x) 9 select case (n) ^ Warning near line 9 col 12: Construct name missing from SELECT statement 10 case(1) 11 call baz(2.0) 12 case(2:10) 13 call baz(3.0) 14 case(-1,11:100,300) 15 call baz(4.0) 16 case default 17 call baz(5.0) 18 end select 19 else 20 k = 0 21 loop1: do i=1,100 22 loop2: do j=1,10 23 write(*,*) i,j,i*j 24 if( i .eq. 50 ) exit loopdedo ! wrong construct name ^ Error near line 24 col 34: construct name LOOPDEDO does not match name of any enclosing DO construct 25 k = k + j 26 if( k .eq. 50) cycle loop2 27 end do loop2 28 write(*,*) k*i**2 29 enddo foop1 ^ Error near line 29 col 12: Name FOOP1 does not match construct name LOOP1 30 case2: select case (n) 31 case(1) case2 32 call baz(2.0) 33 case(2:10) caseZ ^ Error near line 33 col 15: Name CASEZ does not match construct name CASE2 34 call baz(3.0) 35 case(-1,11:100,300) case2 ^ Error near line 35 col 15: Name CASE2 does not match construct name CASEZ 36 call baz(4.0) 37 case default case2 38 ! do-loops with shared terminator 39 do 100 i=1,10 ^ Warning near line 39 col 18: Construct name missing from DO statement 40 do 100 j=1,10 ^ Warning near line 40 col 21: Construct name missing from DO statement 41 print *, i, j, i*j 42 100 continue ^ Warning near line 42 col 18: DO loop not terminated by ENDDO ^ Warning near line 42 col 18: Obsolescent feature: shared DO terminator ^ Warning near line 42 col 2: obsolescent feature: labeled statement 43 do 200 i=1,10 ^ Warning near line 43 col 18: Construct name missing from DO statement 44 do 250 j=1,10 ^ Warning near line 44 col 21: Construct name missing from DO statement 45 print *, i, j, i*j 46 200 continue ! terminators out of order ^ Warning near line 46 col 21: DO loop not terminated by ENDDO ^ Error near line 46 col 21: Label 200 on DO loop terminator does not match corresponding DO label 250 above ^ Warning near line 46 col 2: obsolescent feature: labeled statement 47 250 end do ^ Error near line 47 col 18: Label 250 on DO loop terminator does not match corresponding DO label 200 above ^ Warning near line 47 col 2: obsolescent feature: labeled statement 48 end select case2 49 end if 50 if( x .eq. 0) exit ! no enclosing DO ^ Error near line 50 col 23: statement not within range of any DO loop 51 else if( x .lt. 0 ) then ! else has no matching then ^ Error near line 51 col 9: ELSE statement does not match PROGRAM block it closes 52 print *, 'Hello' 53 end select ! should be end if ^ Error near line 53 col 9: ENDSELECT statement does not match IF block it closes 54 end program blocks ^ Error near line 54 col 7: no construct to end here 55 function bar(c) 56 real a, b, c ,d 57 read *, a 58 ! This block is from section 8.1.2.3 of the F90 standard, except for 59 ! removing space between some keywords 60 if ( a .gt. 0 ) then ^ Warning near line 60 col 9: Construct name missing from IF statement 61 b = c/a 62 if (b .gt. 0) then ^ Warning near line 62 col 12: Construct name missing from IF statement 63 d = 1.0 64 endif 65 elseif (c .gt. 0) then 66 b = a/c 67 d = -1.0 68 else 69 b = abs (max (a, c)) 70 d = 0 71 endif 72 bar = d*b 73 end subroutine ^ Error near line 73 col 7: ENDSUBROUTINE statement does not match FUNCTION block it closes 74 subroutine baz(c) 75 real a, b, c ,d 76 read *, a 77 ! Same as above but with spaces restored and construct names added 78 first_if: if ( a .gt. 0 ) then 79 b = c/a 80 second_if: if (b .gt. 0) then 81 d = 1.0 82 end if second_if 83 else if (c .gt. 0) then firstif ^ Error near line 83 col 9: Name FIRSTIF does not match construct name FIRST_IF 84 b = a/c 85 d = -1.0 86 else first_if ^ Error near line 86 col 9: Name FIRST_IF does not match construct name FIRSTIF 87 b = abs (max (a, c)) 88 d = 0 89 end if ^ Error near line 89 col 9: Construct name FIRST_IF missing 90 print *, a, b, c, d 91 end subroutine bazz ^ Error near line 91 col 7: Name BAZZ does not match subprogram name BAZ 92 15 syntax errors detected in file blockerrors.f 14 warnings issued in file blockerrors.f ftnchek-3.3.1/test/Okay/blockerrors.fcx0000644000031000002260000001530110145015311020460 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File blockerrors.f: 1 program blocks 2 ! program with various errors in balancing block structures 3 real x 4 integer n 5 x = bar(1.0) 6 if( x .gt. 0 ) then ^ "blockerrors.f", line 6 col 9: Warning: Construct name missing from IF statement 7 call baz(x) 8 n = int(x) 9 select case (n) ^ "blockerrors.f", line 9 col 12: Warning: Construct name missing from SELECT statement 10 case(1) 11 call baz(2.0) 12 case(2:10) 13 call baz(3.0) 14 case(-1,11:100,300) 15 call baz(4.0) 16 case default 17 call baz(5.0) 18 end select 19 else 20 k = 0 21 loop1: do i=1,100 22 loop2: do j=1,10 23 write(*,*) i,j,i*j 24 if( i .eq. 50 ) exit loopdedo ! wrong construct name ^ "blockerrors.f", line 24 col 34: Error: construct name LOOPDEDO does not match name of any enclosing DO construct 25 k = k + j 26 if( k .eq. 50) cycle loop2 27 end do loop2 28 write(*,*) k*i**2 29 enddo foop1 ^ "blockerrors.f", line 29 col 12: Error: Name FOOP1 does not match construct name LOOP1 30 case2: select case (n) 31 case(1) case2 32 call baz(2.0) 33 case(2:10) caseZ ^ "blockerrors.f", line 33 col 15: Error: Name CASEZ does not match construct name CASE2 34 call baz(3.0) 35 case(-1,11:100,300) case2 ^ "blockerrors.f", line 35 col 15: Error: Name CASE2 does not match construct name CASEZ 36 call baz(4.0) 37 case default case2 38 ! do-loops with shared terminator 39 do 100 i=1,10 ^ "blockerrors.f", line 39 col 18: Warning: Construct name missing from DO statement 40 do 100 j=1,10 ^ "blockerrors.f", line 40 col 21: Warning: Construct name missing from DO statement 41 print *, i, j, i*j 42 100 continue ^ "blockerrors.f", line 42 col 18: Warning: DO loop not terminated by ENDDO ^ "blockerrors.f", line 42 col 18: Warning: Obsolescent feature: shared DO terminator ^ "blockerrors.f", line 42 col 2: Warning: obsolescent feature: labeled statement 43 do 200 i=1,10 ^ "blockerrors.f", line 43 col 18: Warning: Construct name missing from DO statement 44 do 250 j=1,10 ^ "blockerrors.f", line 44 col 21: Warning: Construct name missing from DO statement 45 print *, i, j, i*j 46 200 continue ! terminators out of order ^ "blockerrors.f", line 46 col 21: Warning: DO loop not terminated by ENDDO ^ "blockerrors.f", line 46 col 21: Error: Label 200 on DO loop terminator does not match corresponding DO label 250 above ^ "blockerrors.f", line 46 col 2: Warning: obsolescent feature: labeled statement 47 250 end do ^ "blockerrors.f", line 47 col 18: Error: Label 250 on DO loop terminator does not match corresponding DO label 200 above ^ "blockerrors.f", line 47 col 2: Warning: obsolescent feature: labeled statement 48 end select case2 49 end if 50 if( x .eq. 0) exit ! no enclosing DO ^ "blockerrors.f", line 50 col 23: Error: statement not within range of any DO loop 51 else if( x .lt. 0 ) then ! else has no matching then ^ "blockerrors.f", line 51 col 9: Error: ELSE statement does not match PROGRAM block it closes 52 print *, 'Hello' 53 end select ! should be end if ^ "blockerrors.f", line 53 col 9: Error: ENDSELECT statement does not match IF block it closes 54 end program blocks ^ "blockerrors.f", line 54 col 7: Error: no construct to end here 55 function bar(c) 56 real a, b, c ,d 57 read *, a 58 ! This block is from section 8.1.2.3 of the F90 standard, except for 59 ! removing space between some keywords 60 if ( a .gt. 0 ) then ^ "blockerrors.f", line 60 col 9: Warning: Construct name missing from IF statement 61 b = c/a 62 if (b .gt. 0) then ^ "blockerrors.f", line 62 col 12: Warning: Construct name missing from IF statement 63 d = 1.0 64 endif 65 elseif (c .gt. 0) then 66 b = a/c 67 d = -1.0 68 else 69 b = abs (max (a, c)) 70 d = 0 71 endif 72 bar = d*b 73 end subroutine ^ "blockerrors.f", line 73 col 7: Error: ENDSUBROUTINE statement does not match FUNCTION block it closes 74 subroutine baz(c) 75 real a, b, c ,d 76 read *, a 77 ! Same as above but with spaces restored and construct names added 78 first_if: if ( a .gt. 0 ) then 79 b = c/a 80 second_if: if (b .gt. 0) then 81 d = 1.0 82 end if second_if 83 else if (c .gt. 0) then firstif ^ "blockerrors.f", line 83 col 9: Error: Name FIRSTIF does not match construct name FIRST_IF 84 b = a/c 85 d = -1.0 86 else first_if ^ "blockerrors.f", line 86 col 9: Error: Name FIRST_IF does not match construct name FIRSTIF 87 b = abs (max (a, c)) 88 d = 0 89 end if ^ "blockerrors.f", line 89 col 9: Error: Construct name FIRST_IF missing 90 print *, a, b, c, d 91 end subroutine bazz ^ "blockerrors.f", line 91 col 7: Error: Name BAZZ does not match subprogram name BAZ 92 15 syntax errors detected in file blockerrors.f 14 warnings issued in file blockerrors.f ftnchek-3.3.1/test/Okay/case.fcl0000644000031000002260000000540710145015311017036 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File case.f: 1 2 program testcase 3 integer ivar1 4 character*8 cvar1 5 character*1 cvar2 6 logical lvar1 7 real rvar1 8 ivar1 = 3 9 lvar1 = .true. 10 11 select case (ivar1) ^ Warning near line 11 col 7: Nonstandard syntax 12 cvar1 = 'no path!' Error near line 12: No path to this statement 13 case (:-1) 14 cvar1 = 'path' 15 case (10/5 - 2) 16 case (1) 17 case (2:3, 5:7, 9) 18 case (10:) 19 case default 20 cvar2 = 'd' 21 end select 22 23 select case (lvar1) ^ Warning near line 23 col 7: Nonstandard syntax 24 case (.false.) 25 case (.true.:) 26 case (:.false.) ^ Error near line 26 col 14: ranges may not have type LOGICAL bounds 27 case (1.eq.0) 28 end select 29 30 cvar1 = 'hamster' 31 select case (cvar1) ^ Warning near line 31 col 7: Nonstandard syntax 32 case (:'cat') 33 case ('dog':'fer' // 'ret') 34 case ('gerbil') 35 case ('horse':) 36 case default 37 end select 38 39 select case (rvar1) ^ Warning near line 39 col 7: Nonstandard syntax ^ Error near line 39 col 20: integer, character, or logical expression required 40 case (-1.0) ^ Error near line 40 col 13: integer, character, or logical expression required 41 case (2:5.0) ^ Error near line 41 col 15: integer, character, or logical expression required ^ Error near line 41 col 15: range boundaries must have the same type 42 case (ivar1) ^ Error near line 42 col 13: expression must evaluate to a compile-time constant 43 case (:.false.) ^ Error near line 43 col 14: ranges may not have type LOGICAL bounds 44 end select 45 stop 46 end Module TESTCASE: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CVAR1 char8 CVAR2 char IVAR1 intg LVAR1 logl RVAR1 real Warning in module TESTCASE: Variables set but never used: CVAR2 set at line 20 Warning in module TESTCASE: Variables used before set RVAR1 used at line 39; never set Warning in module TESTCASE: Names longer than 6 chars (nonstandard): TESTCASE declared at line 2 8 syntax errors detected in file case.f 7 warnings issued in file case.f ftnchek-3.3.1/test/Okay/case.fcx0000644000031000002260000000565110145015311017053 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File case.f: 1 2 program testcase 3 integer ivar1 4 character*8 cvar1 5 character*1 cvar2 6 logical lvar1 7 real rvar1 8 ivar1 = 3 9 lvar1 = .true. 10 11 select case (ivar1) ^ "case.f", line 11 col 7: Warning: Nonstandard syntax 12 cvar1 = 'no path!' "case.f", near line 12: Error: No path to this statement 13 case (:-1) 14 cvar1 = 'path' 15 case (10/5 - 2) 16 case (1) 17 case (2:3, 5:7, 9) 18 case (10:) 19 case default 20 cvar2 = 'd' 21 end select 22 23 select case (lvar1) ^ "case.f", line 23 col 7: Warning: Nonstandard syntax 24 case (.false.) 25 case (.true.:) 26 case (:.false.) ^ "case.f", line 26 col 14: Error: ranges may not have type LOGICAL bounds 27 case (1.eq.0) 28 end select 29 30 cvar1 = 'hamster' 31 select case (cvar1) ^ "case.f", line 31 col 7: Warning: Nonstandard syntax 32 case (:'cat') 33 case ('dog':'fer' // 'ret') 34 case ('gerbil') 35 case ('horse':) 36 case default 37 end select 38 39 select case (rvar1) ^ "case.f", line 39 col 7: Warning: Nonstandard syntax ^ "case.f", line 39 col 20: Error: integer, character, or logical expression required 40 case (-1.0) ^ "case.f", line 40 col 13: Error: integer, character, or logical expression required 41 case (2:5.0) ^ "case.f", line 41 col 15: Error: integer, character, or logical expression required ^ "case.f", line 41 col 15: Error: range boundaries must have the same type 42 case (ivar1) ^ "case.f", line 42 col 13: Error: expression must evaluate to a compile-time constant 43 case (:.false.) ^ "case.f", line 43 col 14: Error: ranges may not have type LOGICAL bounds 44 end select 45 stop 46 end Module TESTCASE: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CVAR1 char8 CVAR2 char IVAR1 intg LVAR1 logl RVAR1 real "case.f", line 20: Warning in module TESTCASE: Variables set but never used: "case.f", line 20: CVAR2 set "case.f", line 39: Warning in module TESTCASE: Variables used before set "case.f", line 39: RVAR1 used; never set "case.f", line 2: Warning in module TESTCASE: Names longer than 6 chars (nonstandard): "case.f", line 2: TESTCASE declared 8 syntax errors detected in file case.f 7 warnings issued in file case.f ftnchek-3.3.1/test/Okay/chestnuts.fcl0000644000031000002260000000427710145015311020147 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File chestnuts.f: 6 DOUBLE PRECISION I=1,10 ^ Warning near line 6 col 9 file chestnuts.f: DO index is not integer ^ Warning near line 6 col 7 file chestnuts.f: Nonstandard syntax 8 END DO ^ Warning near line 8 col 7 file chestnuts.f: Nonstandard syntax Warning in module %MAIN in file chestnuts.f: Variables set but never used: DO10I set at line 4 file chestnuts.f DOUBLEPRECISIONI set at line 7 file chestnuts.f FORMAT set at line 10 file chestnuts.f Warning in module %MAIN in file chestnuts.f: Variables used before set H3 used at line 10 file chestnuts.f; never set I10 used at line 10 file chestnuts.f; never set I9 used at line 10 file chestnuts.f; never set Warning in module %MAIN in file chestnuts.f: Names longer than 6 chars (nonstandard): DOUBLEPRECISIONI first occurrence at line 7 file chestnuts.f UBLEPRECISIONI first occurrence at line 6 file chestnuts.f Warning in module %MAIN in file chestnuts.f: Labels defined but not used: <1> defined at line 9 file chestnuts.f <2> defined at line 10 file chestnuts.f 13 REALFUNCTIONF(M,N) ^ Warning near line 13 col 21 file chestnuts.f: Nonstandard syntax: local array cannot have variable size ^ Warning near line 13 col 23 file chestnuts.f: Nonstandard syntax: local array cannot have variable size ^ Warning near line 13 col 11 file chestnuts.f: Possible intended function declaration is not first line of module Warning in module F in file chestnuts.f: Statement functions defined but never referenced: REALFUNCTIONF defined at line 14 file chestnuts.f Warning in module F in file chestnuts.f: Variables set but never used: FUNCTIONF set at line 15 file chestnuts.f Warning in module F in file chestnuts.f: Names longer than 6 chars (nonstandard): FUNCTIONF declared at line 13 file chestnuts.f REALFUNCTIONF defined at line 14 file chestnuts.f 0 syntax errors detected in file chestnuts.f 13 warnings issued in file chestnuts.f Warning: Subprogram F never invoked Defined in module F line 12 file chestnuts.f ftnchek-3.3.1/test/Okay/chestnuts.fcx0000644000031000002260000000402210145015311020147 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File chestnuts.f: 6 DOUBLE PRECISION I=1,10 ^ "chestnuts.f", line 6 col 9: Warning: DO index is not integer ^ "chestnuts.f", line 6 col 7: Warning: Nonstandard syntax 8 END DO ^ "chestnuts.f", line 8 col 7: Warning: Nonstandard syntax "chestnuts.f", line 4: Warning in module %MAIN: Variables set but never used: "chestnuts.f", line 4: DO10I set "chestnuts.f", line 7: DOUBLEPRECISIONI set "chestnuts.f", line 10: FORMAT set "chestnuts.f", line 10: Warning in module %MAIN: Variables used before set "chestnuts.f", line 10: H3 used; never set "chestnuts.f", line 10: I10 used; never set "chestnuts.f", line 10: I9 used; never set "chestnuts.f", line 7: Warning in module %MAIN: Names longer than 6 chars (nonstandard): "chestnuts.f", line 7: DOUBLEPRECISIONI first occurrence "chestnuts.f", line 6: UBLEPRECISIONI first occurrence "chestnuts.f", line 9: Warning in module %MAIN: Labels defined but not used: "chestnuts.f", line 9: <1> defined "chestnuts.f", line 10: <2> defined 13 REALFUNCTIONF(M,N) ^ "chestnuts.f", line 13 col 21: Warning: Nonstandard syntax: local array cannot have variable size ^ "chestnuts.f", line 13 col 23: Warning: Nonstandard syntax: local array cannot have variable size "chestnuts.f", line 14: Warning in module F: Statement functions defined but never referenced: "chestnuts.f", line 14: REALFUNCTIONF defined "chestnuts.f", line 15: Warning in module F: Variables set but never used: "chestnuts.f", line 15: FUNCTIONF set "chestnuts.f", line 13: Warning in module F: Names longer than 6 chars (nonstandard): "chestnuts.f", line 13: FUNCTIONF declared "chestnuts.f", line 14: REALFUNCTIONF defined 0 syntax errors detected in file chestnuts.f 12 warnings issued in file chestnuts.f "chestnuts.f", line 12: Warning: Subprogram F never invoked "chestnuts.f", line 12: Defined in module F ftnchek-3.3.1/test/Okay/comclash.fcl0000644000031000002260000000624010145015311017710 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comclash.f: 1 common /abc/ x,y,z 2 abc = 5 3 x = abc 4 end Module %MAIN: prog Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. 5 subroutine sub1 6 common /abc/ x,y,z 7 real abc(5) 8 x = abc(1) 9 call sub2(x,y) 10 call sub2(1.0,2) 11 end Module SUB1: subr External subprograms referenced: SUB2: subr Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real 1 X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. Warning in module SUB1: Variables used before set ABC used at line 8; never set 12 subroutine sub2(a,b) 13 common /abc/ x,i,z 14 x = abc(1) 15 end Module SUB2: subr External subprograms referenced: ABC: real* Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* I intg* X real* Z real* * Variable not declared. Type has been implicitly defined. Warning in module SUB2: Variables declared but never referenced: A declared at line 12 (dummy argument) B declared at line 12 (dummy argument) 16 function abc(n) 17 abc = n*n 18 end Module ABC: func: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real* N intg* * Variable not declared. Type has been implicitly defined. Nonportable usage: File contains tabs 0 syntax errors detected in file comclash.f 7 warnings issued in file comclash.f Warning: Common block ABC Elements never used, never set: Z Warning: Common block ABC has same name as a subprogram (nonstandard) Declared as common block in module SUB2 line 13 file comclash.f Declared as subprogram in module ABC line 16 file comclash.f Warning: Common block ABC data type mismatch at position 2: Variable Y in module %MAIN line 1 file comclash.f is type real Variable I in module SUB2 line 13 file comclash.f is type intg Warning: Subprogram SUB1 never invoked Defined in module SUB1 line 5 file comclash.f Warning: Subprogram SUB2 never invoked Defined in module SUB2 line 12 file comclash.f Warning: Subprogram SUB2 argument usage mismatch at position 1: Dummy arg A in module SUB2 line 12 file comclash.f is aliased to common var 1: X in block ABC which is modified Actual arg X in module SUB1 line 9 file comclash.f is in common block ABC Warning: Subprogram SUB2 argument data type mismatch at position 2: Dummy arg B in module SUB2 line 12 file comclash.f is type real Actual arg 2 in module SUB1 line 10 file comclash.f is type intg Warning: Subprogram ABC never invoked Defined in module ABC line 16 file comclash.f ftnchek-3.3.1/test/Okay/comclash.fcx0000644000031000002260000000664610145015311017736 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comclash.f: 1 common /abc/ x,y,z 2 abc = 5 3 x = abc 4 end Module %MAIN: prog Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. 5 subroutine sub1 6 common /abc/ x,y,z 7 real abc(5) 8 x = abc(1) 9 call sub2(x,y) 10 call sub2(1.0,2) 11 end Module SUB1: subr External subprograms referenced: SUB2: subr Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real 1 X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. "comclash.f", line 8: Warning in module SUB1: Variables used before set "comclash.f", line 8: ABC used; never set 12 subroutine sub2(a,b) 13 common /abc/ x,i,z 14 x = abc(1) 15 end Module SUB2: subr External subprograms referenced: ABC: real* Common blocks referenced: ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* I intg* X real* Z real* * Variable not declared. Type has been implicitly defined. "comclash.f", line 12: Warning in module SUB2: Variables declared but never referenced: "comclash.f", line 12: A declared (dummy argument) "comclash.f", line 12: B declared (dummy argument) 16 function abc(n) 17 abc = n*n 18 end Module ABC: func: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABC real* N intg* * Variable not declared. Type has been implicitly defined. "comclash.f": Nonportable usage: File contains tabs 0 syntax errors detected in file comclash.f 7 warnings issued in file comclash.f "comclash.f", line 13: Warning: Common block ABC Elements never used, never set: Z "comclash.f", line 13: Warning: Common block ABC has same name as a subprogram (nonstandard) "comclash.f", line 13: Declared as common block in module SUB2 "comclash.f", line 16: Declared as subprogram in module ABC "comclash.f", line 1: Warning: Common block ABC data type mismatch at position 2: "comclash.f", line 1: Variable Y in module %MAIN is type real "comclash.f", line 13: Variable I in module SUB2 is type intg "comclash.f", line 5: Warning: Subprogram SUB1 never invoked "comclash.f", line 5: Defined in module SUB1 "comclash.f", line 12: Warning: Subprogram SUB2 never invoked "comclash.f", line 12: Defined in module SUB2 "comclash.f", line 12: Warning: Subprogram SUB2 argument usage mismatch at position 1: "comclash.f", line 12: Dummy arg A in module SUB2 is aliased to common var 1: X in block ABC which is modified "comclash.f", line 9: Actual arg X in module SUB1 is in common block ABC "comclash.f", line 12: Warning: Subprogram SUB2 argument data type mismatch at position 2: "comclash.f", line 12: Dummy arg B in module SUB2 is type real "comclash.f", line 10: Actual arg 2 in module SUB1 is type intg "comclash.f", line 16: Warning: Subprogram ABC never invoked "comclash.f", line 16: Defined in module ABC ftnchek-3.3.1/test/Okay/comcmp.fc00000644000031000002260000000053510145015311017302 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comcmp.f: 33 c7 = c1//c8 ^ Warning near line 33 col 10 file comcmp.f: char*9 expr C1//C8 truncated to char*7 C7 0 syntax errors detected in file comcmp.f 1 warning issued in file comcmp.f Warning: Common block INTS unused anywhere Warning: Common block BK1 unused anywhere ftnchek-3.3.1/test/Okay/comcmp.fc10000644000031000002260000000234010145015311017277 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comcmp.f: 33 c7 = c1//c8 ^ Warning near line 33 col 10 file comcmp.f: char*9 expr C1//C8 truncated to char*7 C7 0 syntax errors detected in file comcmp.f 1 warning issued in file comcmp.f Warning: Common block INTS unused anywhere Warning: Common block BK1 unused anywhere Warning: Common block INTS data type mismatch Byte 5 is type intg*4 in module %MAIN line 7 file comcmp.f Byte 5 is type intg*2 in module FOO line 19 file comcmp.f and Byte 9 is type intg*2 in module %MAIN line 7 file comcmp.f Byte 9 is type intg*4 in module FOO line 19 file comcmp.f Warning: Common block BK1 data type mismatch Word 4 is type real in module %MAIN line 8 file comcmp.f Word 4 is type intg in module BAR line 31 file comcmp.f Warning: Common block BK1 data type mismatch Word 1 is type real in module %MAIN line 8 file comcmp.f Word 1 is type intg in module FOO line 20 file comcmp.f and Word 2 is type real in module %MAIN line 8 file comcmp.f Word 2 is type intg in module FOO line 20 file comcmp.f and Word 3 is type real in module %MAIN line 8 file comcmp.f Word 3 is type intg in module FOO line 20 file comcmp.f etc... ftnchek-3.3.1/test/Okay/comcmp.fc20000644000031000002260000000301610145015311017301 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comcmp.f: 33 c7 = c1//c8 ^ Warning near line 33 col 10 file comcmp.f: char*9 expr C1//C8 truncated to char*7 C7 0 syntax errors detected in file comcmp.f 1 warning issued in file comcmp.f Warning: Common block INTS unused anywhere Warning: Common block BK1 unused anywhere Warning: Common block CHARS varying length: Has 16 bytes in module %MAIN line 3 file comcmp.f Has 15 bytes in module BAR line 27 file comcmp.f Warning: Common block INTS varying length: Has 10 bytes in module %MAIN line 7 file comcmp.f Has 8 bytes in module BAR line 30 file comcmp.f Warning: Common block INTS data type mismatch Byte 5 is type intg*4 in module %MAIN line 7 file comcmp.f Byte 5 is type intg*2 in module FOO line 19 file comcmp.f and Byte 9 is type intg*2 in module %MAIN line 7 file comcmp.f Byte 9 is type intg*4 in module FOO line 19 file comcmp.f Warning: Common block BK1 data type mismatch Word 4 is type real in module %MAIN line 8 file comcmp.f Word 4 is type intg in module BAR line 31 file comcmp.f Warning: Common block BK1 data type mismatch Word 1 is type real in module %MAIN line 8 file comcmp.f Word 1 is type intg in module FOO line 20 file comcmp.f and Word 2 is type real in module %MAIN line 8 file comcmp.f Word 2 is type intg in module FOO line 20 file comcmp.f and Word 3 is type real in module %MAIN line 8 file comcmp.f Word 3 is type intg in module FOO line 20 file comcmp.f etc... ftnchek-3.3.1/test/Okay/comcmp.fc30000644000031000002260000000553210145015311017307 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comcmp.f: 33 c7 = c1//c8 ^ Warning near line 33 col 10 file comcmp.f: char*9 expr C1//C8 truncated to char*7 C7 0 syntax errors detected in file comcmp.f 1 warning issued in file comcmp.f Warning: Common block CHARS Elements used but never set: C8 Warning: Common block CHARS Elements set but never used: C7 C1 Warning: Common block INTS unused anywhere Warning: Common block BK1 unused anywhere Warning: Common block CHARS varying length: Has 3 variables in module %MAIN line 3 file comcmp.f Has 2 variables in module BAR line 27 file comcmp.f Warning: Common block CHARS data type mismatch at position 1: Variable C1 in module %MAIN line 3 file comcmp.f is type char*1 Variable C7 in module BAR line 27 file comcmp.f is type char*7 Warning: Common block CHARS data type mismatch at position 1: Variable C1 in module %MAIN line 3 file comcmp.f is type char*1 Variable C7 in module FOO line 15 file comcmp.f is type char*7 and at position 3: Variable C7 in module %MAIN line 3 file comcmp.f is type char*7 Variable C1 in module FOO line 15 file comcmp.f is type char*1 Warning: Common block INTS varying length: Has 3 variables in module %MAIN line 7 file comcmp.f Has 2 variables in module BAR line 30 file comcmp.f Warning: Common block INTS data type mismatch at position 2: Variable IFOUR in module %MAIN line 7 file comcmp.f is type intg*4 Variable ITWO in module FOO line 19 file comcmp.f is type intg*2 and at position 3: Variable ITWO in module %MAIN line 7 file comcmp.f is type intg*2 Variable IFOUR in module FOO line 19 file comcmp.f is type intg*4 Warning: Common block BK1 varying length: Has 7 variables in module %MAIN line 8 file comcmp.f Has 5 variables in module BAR line 31 file comcmp.f Warning: Common block BK1 data type mismatch at position 2: Variable B in module %MAIN line 8 file comcmp.f is type real Variable J in module BAR line 31 file comcmp.f is type intg Warning: Common block BK1 array dimen/size mismatch at position 1: Variable A in module %MAIN line 8 file comcmp.f has 0 dimensions Variable A in module BAR line 31 file comcmp.f has 1 dimension and at position 1: Variable A in module %MAIN line 8 file comcmp.f has size 1 Variable A in module BAR line 31 file comcmp.f has size 3 Warning: Common block BK1 data type mismatch at position 1: Variable A in module %MAIN line 8 file comcmp.f is type real Variable I in module FOO line 20 file comcmp.f is type intg and at position 2: Variable B in module %MAIN line 8 file comcmp.f is type real Variable J in module FOO line 20 file comcmp.f is type intg and at position 3: Variable C in module %MAIN line 8 file comcmp.f is type real Variable K in module FOO line 20 file comcmp.f is type intg etc... ftnchek-3.3.1/test/Okay/comcmp.fcl0000644000031000002260000000656410145015311017406 0ustar moniotstaff00000000000000FTNCHEK Version 3.3 November 2004 File comcmp.f: Warning in module FOO at line 19 file comcmp.f: Common block INTS has long data type following short data type (may not be portable) 33 c7 = c1//c8 ^ Warning near line 33 col 10 file comcmp.f: char*9 expr C1//C8 truncated to char*7 C7 2 warnings issued in file comcmp.f List of subprogram references: %MAIN calls: FOO FOO calls: BAR BAR calls: none Warning: Common block CHARS Elements used but never set: C8 Warning: Common block CHARS Elements set but never used: C7 C1 Warning: Common block INTS unused anywhere Warning: Common block BK1 unused anywhere Warning: Common block CHARS varying length: Has 3 variables in module %MAIN line 3 file comcmp.f Has 2 variables in module BAR line 27 file comcmp.f Warning: Common block CHARS data type mismatch at position 1: Variable C1 in module %MAIN line 3 file comcmp.f is type char*1 Variable C7 in module BAR line 27 file comcmp.f is type char*7 Warning: Common block CHARS data type mismatch at position 1: Variable C1 in module %MAIN line 3 file comcmp.f is type char*1 Variable C7 in module FOO line 15 file comcmp.f is type char*7 and at position 3: Variable C7 in module %MAIN line 3 file comcmp.f is type char*7 Variable C1 in module FOO line 15 file comcmp.f is type char*1 Warning: Common block INTS varying length: Has 3 variables in module %MAIN line 7 file comcmp.f Has 2 variables in module BAR line 30 file comcmp.f Warning: Common block INTS data type mismatch at position 1: Variable IPLAIN in module %MAIN line 7 file comcmp.f is type intg Variable IFOUR in module BAR line 30 file comcmp.f is type intg*4 and at position 2: Variable IFOUR in module %MAIN line 7 file comcmp.f is type intg*4 Variable IPLAIN in module BAR line 30 file comcmp.f is type intg Warning: Common block INTS data type mismatch at position 2: Variable IFOUR in module %MAIN line 7 file comcmp.f is type intg*4 Variable ITWO in module FOO line 19 file comcmp.f is type intg*2 and at position 3: Variable ITWO in module %MAIN line 7 file comcmp.f is type intg*2 Variable IFOUR in module FOO line 19 file comcmp.f is type intg*4 Warning: Common block BK1 varying length: Has 7 variables in module %MAIN line 8 file comcmp.f Has 5 variables in module BAR line 31 file comcmp.f Warning: Common block BK1 data type mismatch at position 2: Variable B in module %MAIN line 8 file comcmp.f is type real Variable J in module BAR line 31 file comcmp.f is type intg Warning: Common block BK1 array dimen/size mismatch at position 1: Variable A in module %MAIN line 8 file comcmp.f has 0 dimensions Variable A in module BAR line 31 file comcmp.f has 1 dimension and at position 1: Variable A in module %MAIN line 8 file comcmp.f has size 1 Variable A in module BAR line 31 file comcmp.f has size 3 Warning: Common block BK1 data type mismatch at position 1: Variable A in module %MAIN line 8 file comcmp.f is type real Variable I in module FOO line 20 file comcmp.f is type intg and at position 2: Variable B in module %MAIN line 8 file comcmp.f is type real Variable J in module FOO line 20 file comcmp.f is type intg and at position 3: Variable C in module %MAIN line 8 file comcmp.f is type real Variable K in module FOO line 20 file comcmp.f is type intg etc... ftnchek-3.3.1/test/Okay/comcmp.fcx0000644000031000002260000000727510145015311017422 0ustar moniotstaff00000000000000FTNCHEK Version 3.3 November 2004 File comcmp.f: "comcmp.f", line 19: Warning in module FOO: Common block INTS has long data type following short data type (may not be portable) 33 c7 = c1//c8 ^ "comcmp.f", line 33 col 10: Warning: char*9 expr C1//C8 truncated to char*7 C7 2 warnings issued in file comcmp.f List of subprogram references: %MAIN calls: FOO FOO calls: BAR BAR calls: none "comcmp.f", line 15: Warning: Common block CHARS Elements used but never set: C8 "comcmp.f", line 15: Warning: Common block CHARS Elements set but never used: C7 C1 "comcmp.f", line 19: Warning: Common block INTS unused anywhere "comcmp.f", line 20: Warning: Common block BK1 unused anywhere "comcmp.f", line 3: Warning: Common block CHARS varying length: "comcmp.f", line 3: Has 3 variables in module %MAIN "comcmp.f", line 27: Has 2 variables in module BAR "comcmp.f", line 3: Warning: Common block CHARS data type mismatch at position 1: "comcmp.f", line 3: Variable C1 in module %MAIN is type char*1 "comcmp.f", line 27: Variable C7 in module BAR is type char*7 "comcmp.f", line 3: Warning: Common block CHARS data type mismatch at position 1: "comcmp.f", line 3: Variable C1 in module %MAIN is type char*1 "comcmp.f", line 15: Variable C7 in module FOO is type char*7 "comcmp.f", line 3: and at position 3: "comcmp.f", line 3: Variable C7 in module %MAIN is type char*7 "comcmp.f", line 15: Variable C1 in module FOO is type char*1 "comcmp.f", line 7: Warning: Common block INTS varying length: "comcmp.f", line 7: Has 3 variables in module %MAIN "comcmp.f", line 30: Has 2 variables in module BAR "comcmp.f", line 7: Warning: Common block INTS data type mismatch at position 1: "comcmp.f", line 7: Variable IPLAIN in module %MAIN is type intg "comcmp.f", line 30: Variable IFOUR in module BAR is type intg*4 "comcmp.f", line 7: and at position 2: "comcmp.f", line 7: Variable IFOUR in module %MAIN is type intg*4 "comcmp.f", line 30: Variable IPLAIN in module BAR is type intg "comcmp.f", line 7: Warning: Common block INTS data type mismatch at position 2: "comcmp.f", line 7: Variable IFOUR in module %MAIN is type intg*4 "comcmp.f", line 19: Variable ITWO in module FOO is type intg*2 "comcmp.f", line 7: and at position 3: "comcmp.f", line 7: Variable ITWO in module %MAIN is type intg*2 "comcmp.f", line 19: Variable IFOUR in module FOO is type intg*4 "comcmp.f", line 8: Warning: Common block BK1 varying length: "comcmp.f", line 8: Has 7 variables in module %MAIN "comcmp.f", line 31: Has 5 variables in module BAR "comcmp.f", line 8: Warning: Common block BK1 data type mismatch at position 2: "comcmp.f", line 8: Variable B in module %MAIN is type real "comcmp.f", line 31: Variable J in module BAR is type intg "comcmp.f", line 8: Warning: Common block BK1 array dimen/size mismatch at position 1: "comcmp.f", line 8: Variable A in module %MAIN has 0 dimensions "comcmp.f", line 31: Variable A in module BAR has 1 dimension "comcmp.f", line 8: and at position 1: "comcmp.f", line 8: Variable A in module %MAIN has size 1 "comcmp.f", line 31: Variable A in module BAR has size 3 "comcmp.f", line 8: Warning: Common block BK1 data type mismatch at position 1: "comcmp.f", line 8: Variable A in module %MAIN is type real "comcmp.f", line 20: Variable I in module FOO is type intg "comcmp.f", line 8: and at position 2: "comcmp.f", line 8: Variable B in module %MAIN is type real "comcmp.f", line 20: Variable J in module FOO is type intg "comcmp.f", line 8: and at position 3: "comcmp.f", line 8: Variable C in module %MAIN is type real "comcmp.f", line 20: Variable K in module FOO is type intg etc... ftnchek-3.3.1/test/Okay/common-alias.fcl0000644000031000002260000000644010145015311020500 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File common-alias.f: 1 C Test program for checking aliasing of arguments to common variables 2 C 3 COMMON Q,F,X 4 COMMON /BLK1/ DAT(100) 5 W = 1.0 6 X = 2.0 7 Z = 4.0 8 CALL FOO(W,X,Y,Z) 9 CALL FOO(F,W,Y,Z) 10 CALL FOO(W,Y,Q,Z) 11 PRINT *, W,X,Y,Z 12 CALL BAR(DAT,100) 13 STOP 14 END Module %MAIN: prog External subprograms referenced: BAR: subr FOO: subr Common blocks referenced: %BLANK BLK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims DAT real* 1 F real* Q real* W real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 11 15 SUBROUTINE FOO(A,B,C,D) 16 COMMON T,U,V 17 B = A+C+D 18 T = B + 1.0 19 RETURN 20 END Module FOO: subr Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* T real* U real* V real* * Variable not declared. Type has been implicitly defined. 21 SUBROUTINE BAR(D,N) 22 COMMON /BLK1/ TAD(100) 23 REAL D(N) 24 DO 10 I=1,N-1 25 TAD(I) = I 26 D(I) = TAD(I)*2.0 27 10 CONTINUE 28 END Module BAR: subr Common blocks referenced: BLK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims D real 1 I intg* N intg* TAD real* 1 * Variable not declared. Type has been implicitly defined. Statement labels defined: Label Line StmtType <10> 27 exec 0 syntax errors detected in file common-alias.f 3 warnings issued in file common-alias.f Warning: Subprogram FOO argument usage mismatch at position 2: Dummy arg B in module FOO line 15 file common-alias.f is aliased to common var 3: V in block %BLANK Dummy arg B in module FOO line 15 file common-alias.f is modified Actual arg X in module %MAIN line 8 file common-alias.f is in common block %BLANK and at position 3: Dummy arg C in module FOO line 15 file common-alias.f is used before set Actual arg Y in module %MAIN line 8 file common-alias.f is not set Warning: Subprogram FOO argument usage mismatch at position 3: Dummy arg C in module FOO line 15 file common-alias.f is aliased to common var 1: T in block %BLANK which is modified Actual arg Q in module %MAIN line 10 file common-alias.f is in common block %BLANK Warning: Subprogram BAR argument usage mismatch at position 1: Dummy arg D in module BAR line 21 file common-alias.f is aliased to common var 1: TAD in block BLK1 which is modified Dummy arg D in module BAR line 21 file common-alias.f is modified Actual arg DAT in module %MAIN line 12 file common-alias.f is in common block BLK1 ftnchek-3.3.1/test/Okay/common-alias.fcx0000644000031000002260000000657310145015311020523 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File common-alias.f: 1 C Test program for checking aliasing of arguments to common variables 2 C 3 COMMON Q,F,X 4 COMMON /BLK1/ DAT(100) 5 W = 1.0 6 X = 2.0 7 Z = 4.0 8 CALL FOO(W,X,Y,Z) 9 CALL FOO(F,W,Y,Z) 10 CALL FOO(W,Y,Q,Z) 11 PRINT *, W,X,Y,Z 12 CALL BAR(DAT,100) 13 STOP 14 END Module %MAIN: prog External subprograms referenced: BAR: subr FOO: subr Common blocks referenced: %BLANK BLK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims DAT real* 1 F real* Q real* W real* X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 11 15 SUBROUTINE FOO(A,B,C,D) 16 COMMON T,U,V 17 B = A+C+D 18 T = B + 1.0 19 RETURN 20 END Module FOO: subr Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* D real* T real* U real* V real* * Variable not declared. Type has been implicitly defined. 21 SUBROUTINE BAR(D,N) 22 COMMON /BLK1/ TAD(100) 23 REAL D(N) 24 DO 10 I=1,N-1 25 TAD(I) = I 26 D(I) = TAD(I)*2.0 27 10 CONTINUE 28 END Module BAR: subr Common blocks referenced: BLK1 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims D real 1 I intg* N intg* TAD real* 1 * Variable not declared. Type has been implicitly defined. Statement labels defined: Label Line StmtType <10> 27 exec 0 syntax errors detected in file common-alias.f 3 warnings issued in file common-alias.f "common-alias.f", line 15: Warning: Subprogram FOO argument usage mismatch at position 2: "common-alias.f", line 15: Dummy arg B in module FOO is aliased to common var 3: V in block %BLANK "common-alias.f", line 15: Dummy arg B in module FOO is modified "common-alias.f", line 8: Actual arg X in module %MAIN is in common block %BLANK "common-alias.f", line 15: and at position 3: "common-alias.f", line 15: Dummy arg C in module FOO is used before set "common-alias.f", line 8: Actual arg Y in module %MAIN is not set "common-alias.f", line 15: Warning: Subprogram FOO argument usage mismatch at position 3: "common-alias.f", line 15: Dummy arg C in module FOO is aliased to common var 1: T in block %BLANK which is modified "common-alias.f", line 10: Actual arg Q in module %MAIN is in common block %BLANK "common-alias.f", line 21: Warning: Subprogram BAR argument usage mismatch at position 1: "common-alias.f", line 21: Dummy arg D in module BAR is aliased to common var 1: TAD in block BLK1 which is modified "common-alias.f", line 21: Dummy arg D in module BAR is modified "common-alias.f", line 12: Actual arg DAT in module %MAIN is in common block BLK1 ftnchek-3.3.1/test/Okay/complex.fcl0000644000031000002260000000254010145015311017565 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File complex.f: 4 a = (12,32) ^ Warning near line 4 col 9: cplx const (12,32) truncated to real A 5 a = (5,-3e5) ^ Warning near line 5 col 9: cplx const (5,-3E5) truncated to real A Module %MAIN: prog External subprograms referenced: ABC: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* CC cplx CD cplx DE real* I intg* * Variable not declared. Type has been implicitly defined. Warning in module %MAIN: Variables set but never used: CC set at line 2 CD set at line 3 DE set at line 3 I/O Operations: Unit ID Unit No. Access Form Operation Line 11 SEQ FMTD WRITE 6 * SEQ FMTD PRINT 8 Statement labels defined: Label Line StmtType Label Line StmtType <7> 7 format <22> 9 format Module ABC: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X intg Z cplx I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 15 0 syntax errors detected in file complex.f 4 warnings issued in file complex.f ftnchek-3.3.1/test/Okay/complex.fcx0000644000031000002260000000265010145015311017603 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File complex.f: 4 a = (12,32) ^ "complex.f", line 4 col 9: Warning: cplx const (12,32) truncated to real A 5 a = (5,-3e5) ^ "complex.f", line 5 col 9: Warning: cplx const (5,-3E5) truncated to real A Module %MAIN: prog External subprograms referenced: ABC: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* CC cplx CD cplx DE real* I intg* * Variable not declared. Type has been implicitly defined. "complex.f", line 2: Warning in module %MAIN: Variables set but never used: "complex.f", line 2: CC set "complex.f", line 3: CD set "complex.f", line 3: DE set I/O Operations: Unit ID Unit No. Access Form Operation Line 11 SEQ FMTD WRITE 6 * SEQ FMTD PRINT 8 Statement labels defined: Label Line StmtType Label Line StmtType <7> 7 format <22> 9 format Module ABC: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X intg Z cplx I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 15 0 syntax errors detected in file complex.f 4 warnings issued in file complex.f ftnchek-3.3.1/test/Okay/comtest.fcl0000644000031000002260000000425610145015311017602 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comtest.f: 1 COMMON A,B,C/ABC/M,N 2 COMMON X,I,J 3 COMMON /ABC/Q,R,S ^ Possibly misleading appearance near line 3 col 17: Common block declared in more than one statement 4 END Warning near line 4: Module contains no executable statements Module %MAIN: prog Common blocks referenced: %BLANK ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* I intg* J intg* M intg* N intg* Q real* R real* S real* X real* * Variable not declared. Type has been implicitly defined. 5 subroutine noname 6 common x,y,i,a,b,n 7 common /abc/ m,n ^ Error near line 7 col 24: Variable cannot be in common twice 8 end Warning near line 8: Module contains no executable statements Module NONAME: subr Common blocks referenced: %BLANK ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* I intg* M intg* N intg* X real* Y real* * Variable not declared. Type has been implicitly defined. Nonportable usage: File contains tabs 1 syntax error detected in file comtest.f 6 warnings issued in file comtest.f Warning: Common block ABC unused anywhere Warning: Common block %BLANK unused anywhere Warning: Common block ABC varying length: Has 5 variables in module %MAIN line 3 file comtest.f Has 2 variables in module NONAME line 7 file comtest.f Warning: Common block %BLANK data type mismatch at position 3: Variable C in module %MAIN line 2 file comtest.f is type real Variable I in module NONAME line 6 file comtest.f is type intg and at position 5: Variable I in module %MAIN line 2 file comtest.f is type intg Variable B in module NONAME line 6 file comtest.f is type real Warning: Subprogram NONAME never invoked Defined in module NONAME line 5 file comtest.f ftnchek-3.3.1/test/Okay/comtest.fcx0000644000031000002260000000453110145015311017612 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comtest.f: 1 COMMON A,B,C/ABC/M,N 2 COMMON X,I,J 3 COMMON /ABC/Q,R,S ^ "comtest.f", line 3 col 17: Possibly misleading appearance: Common block declared in more than one statement 4 END "comtest.f", near line 4: Warning: Module contains no executable statements Module %MAIN: prog Common blocks referenced: %BLANK ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* I intg* J intg* M intg* N intg* Q real* R real* S real* X real* * Variable not declared. Type has been implicitly defined. 5 subroutine noname 6 common x,y,i,a,b,n 7 common /abc/ m,n ^ "comtest.f", line 7 col 24: Error: Variable cannot be in common twice 8 end "comtest.f", near line 8: Warning: Module contains no executable statements Module NONAME: subr Common blocks referenced: %BLANK ABC Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* I intg* M intg* N intg* X real* Y real* * Variable not declared. Type has been implicitly defined. "comtest.f": Nonportable usage: File contains tabs 1 syntax error detected in file comtest.f 6 warnings issued in file comtest.f "comtest.f", line 3: Warning: Common block ABC unused anywhere "comtest.f", line 6: Warning: Common block %BLANK unused anywhere "comtest.f", line 3: Warning: Common block ABC varying length: "comtest.f", line 3: Has 5 variables in module %MAIN "comtest.f", line 7: Has 2 variables in module NONAME "comtest.f", line 2: Warning: Common block %BLANK data type mismatch at position 3: "comtest.f", line 2: Variable C in module %MAIN is type real "comtest.f", line 6: Variable I in module NONAME is type intg "comtest.f", line 2: and at position 5: "comtest.f", line 2: Variable I in module %MAIN is type intg "comtest.f", line 6: Variable B in module NONAME is type real "comtest.f", line 5: Warning: Subprogram NONAME never invoked "comtest.f", line 5: Defined in module NONAME ftnchek-3.3.1/test/Okay/comusage.fc00000644000031000002260000000032210145015311017621 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Warning: Common block %BLANK No elements are set, but some are used. Warning: Common block ZAP unused anywhere ftnchek-3.3.1/test/Okay/comusage.fc10000644000031000002260000000122010145015311017620 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Warning: Common block %BLANK No elements are set, but some are used. Warning: Common block ZAP unused anywhere Warning: Common block LAST data type mismatch Word 1 is type real in module INPUT line 12 file comusage.f Word 1 is type intg in module OUTPUT line 32 file comusage.f and Word 2 is type real in module INPUT line 12 file comusage.f Word 2 is type intg in module OUTPUT line 32 file comusage.f and Word 3 is type real in module INPUT line 12 file comusage.f Word 3 is type intg in module OUTPUT line 32 file comusage.f ftnchek-3.3.1/test/Okay/comusage.fc20000644000031000002260000000145210145015311017630 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Warning: Common block %BLANK No elements are set, but some are used. Warning: Common block ZAP unused anywhere Warning: Common block INP varying length: Has 4 words in module INPUT line 10 file comusage.f Has 3 words in module COMP line 20 file comusage.f Warning: Common block LAST data type mismatch Word 1 is type real in module INPUT line 12 file comusage.f Word 1 is type intg in module OUTPUT line 32 file comusage.f and Word 2 is type real in module INPUT line 12 file comusage.f Word 2 is type intg in module OUTPUT line 32 file comusage.f and Word 3 is type real in module INPUT line 12 file comusage.f Word 3 is type intg in module OUTPUT line 32 file comusage.f ftnchek-3.3.1/test/Okay/comusage.fc30000644000031000002260000000207310145015311017631 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Warning: Common block %BLANK Elements used but never set: all Warning: Common block INP Elements never used, never set: X4 Warning: Common block LAST Elements used but never set: N3 Warning: Common block LAST Elements set but never used: N1 N2 Warning: Common block ZAP unused anywhere Warning: Common block INP varying length: Has 4 variables in module INPUT line 10 file comusage.f Has 3 variables in module COMP line 20 file comusage.f Warning: Common block LAST data type mismatch at position 1: Variable Y1 in module INPUT line 12 file comusage.f is type real Variable N1 in module OUTPUT line 32 file comusage.f is type intg and at position 2: Variable Y2 in module INPUT line 12 file comusage.f is type real Variable N2 in module OUTPUT line 32 file comusage.f is type intg and at position 3: Variable Y3 in module INPUT line 12 file comusage.f is type real Variable N3 in module OUTPUT line 32 file comusage.f is type intg ftnchek-3.3.1/test/Okay/comusage.fcl0000644000031000002260000000347610145015311017732 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Common block INP is volatile Warning: Common block INP may become undefined between activations Declared in module INPUT line 10 file comusage.f Declared in module COMP line 20 file comusage.f Not declared in parent module MAIN Common block LAST is volatile Warning: Common block LAST may become undefined between activations Declared in module OUTPUT line 32 file comusage.f Declared in module INPUT line 12 file comusage.f Not declared in parent module MAIN Common block ZAP is volatile Common block OUTP is volatile Warning: Common block OUTP may become undefined between activations Declared in module OUTPUT line 30 file comusage.f Declared in module COMP line 23 file comusage.f Not declared in parent module MAIN Warning: Common block %BLANK Elements used but never set: all Warning: Common block INP Elements never used, never set: X4 Warning: Common block LAST Elements used but never set: N3 Warning: Common block LAST Elements set but never used: N1 N2 Warning: Common block ZAP unused anywhere Warning: Common block INP varying length: Has 4 variables in module INPUT line 10 file comusage.f Has 3 variables in module COMP line 20 file comusage.f Warning: Common block LAST data type mismatch at position 1: Variable Y1 in module INPUT line 12 file comusage.f is type real Variable N1 in module OUTPUT line 32 file comusage.f is type intg and at position 2: Variable Y2 in module INPUT line 12 file comusage.f is type real Variable N2 in module OUTPUT line 32 file comusage.f is type intg and at position 3: Variable Y3 in module INPUT line 12 file comusage.f is type real Variable N3 in module OUTPUT line 32 file comusage.f is type intg ftnchek-3.3.1/test/Okay/comusage.fcx0000644000031000002260000000407110145015311017736 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File comusage.f: 0 syntax errors detected in file comusage.f Common block INP is volatile "comusage.f", line 10: Warning: Common block INP may become undefined between activations "comusage.f", line 10: Declared in module INPUT "comusage.f", line 20: Declared in module COMP Not declared in parent module MAIN Common block LAST is volatile "comusage.f", line 32: Warning: Common block LAST may become undefined between activations "comusage.f", line 32: Declared in module OUTPUT "comusage.f", line 12: Declared in module INPUT Not declared in parent module MAIN Common block ZAP is volatile Common block OUTP is volatile "comusage.f", line 30: Warning: Common block OUTP may become undefined between activations "comusage.f", line 30: Declared in module OUTPUT "comusage.f", line 23: Declared in module COMP Not declared in parent module MAIN "comusage.f", line 2: Warning: Common block %BLANK Elements used but never set: all "comusage.f", line 10: Warning: Common block INP Elements never used, never set: X4 "comusage.f", line 32: Warning: Common block LAST Elements used but never set: N3 "comusage.f", line 32: Warning: Common block LAST Elements set but never used: N1 N2 "comusage.f", line 21: Warning: Common block ZAP unused anywhere "comusage.f", line 10: Warning: Common block INP varying length: "comusage.f", line 10: Has 4 variables in module INPUT "comusage.f", line 20: Has 3 variables in module COMP "comusage.f", line 12: Warning: Common block LAST data type mismatch at position 1: "comusage.f", line 12: Variable Y1 in module INPUT is type real "comusage.f", line 32: Variable N1 in module OUTPUT is type intg "comusage.f", line 12: and at position 2: "comusage.f", line 12: Variable Y2 in module INPUT is type real "comusage.f", line 32: Variable N2 in module OUTPUT is type intg "comusage.f", line 12: and at position 3: "comusage.f", line 12: Variable Y3 in module INPUT is type real "comusage.f", line 32: Variable N3 in module OUTPUT is type intg ftnchek-3.3.1/test/Okay/correct.fc10000644000031000002260000000017510145015311017466 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File correct.f: Project file is correct.prj 0 syntax errors detected in file correct.f ftnchek-3.3.1/test/Okay/correct.fcl0000644000031000002260000000477510145015311017573 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File correct.f: 1 C AUTHORS: MIKE MYERS & LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,I,SCORE(5) 12 13 SUM = 0 14 DO 30 I = 1,COUNT 15 SUM = SUM + SCORE(I) 16 30 CONTINUE 17 COMPAV = FLOAT(SUM)/FLOAT(COUNT) 18 END Module COMPAV: func: real External subprograms referenced: FLOAT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg SCORE intg 1 SUM intg Statement labels defined: Label Line StmtType <30> 16 exec 19 20 21 PROGRAM AVENUM 22 C 23 C MAIN PROGRAM 24 C 25 C AUTHOR: LOIS BIGBIE 26 C DATE: MAY 15, 1990 27 C 28 C Variables: 29 C MAXNOS -> maximum number of input values 30 C NUMS -> an array of numbers 31 C COUNT -> exact number of input values 32 C AVG -> average returned by COMPAV 33 C I -> loop counter 34 C 35 36 INTEGER MAXNOS 37 PARAMETER(MAXNOS=5) 38 INTEGER I, NUMS(MAXNOS), COUNT 39 REAL AVG 40 COUNT = 0 41 DO 80 I = 1,MAXNOS 42 READ (5,*,END=100) NUMS(I) 43 COUNT = COUNT + 1 44 80 CONTINUE 45 100 AVG = COMPAV(NUMS, COUNT) 46 WRITE(6,*) 'AVERAGE =',AVG 47 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg NUMS intg 1 * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 42 6 SEQ FMTD WRITE 46 Statement labels defined: Label Line StmtType Label Line StmtType <80> 44 exec <100> 45 exec Nonportable usage: File contains tabs 0 syntax errors detected in file correct.f 2 warnings issued in file correct.f ftnchek-3.3.1/test/Okay/correct.fcx0000644000031000002260000000501210145015311017570 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File correct.f: 1 C AUTHORS: MIKE MYERS & LUCIA SPAGNUOLO 2 C DATE: MAY 8, 1989 3 4 C Variables: 5 C SCORE -> an array of test scores 6 C SUM -> sum of the test scores 7 C COUNT -> counter of scores read in 8 C I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,I,SCORE(5) 12 13 SUM = 0 14 DO 30 I = 1,COUNT 15 SUM = SUM + SCORE(I) 16 30 CONTINUE 17 COMPAV = FLOAT(SUM)/FLOAT(COUNT) 18 END Module COMPAV: func: real External subprograms referenced: FLOAT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg SCORE intg 1 SUM intg Statement labels defined: Label Line StmtType <30> 16 exec 19 20 21 PROGRAM AVENUM 22 C 23 C MAIN PROGRAM 24 C 25 C AUTHOR: LOIS BIGBIE 26 C DATE: MAY 15, 1990 27 C 28 C Variables: 29 C MAXNOS -> maximum number of input values 30 C NUMS -> an array of numbers 31 C COUNT -> exact number of input values 32 C AVG -> average returned by COMPAV 33 C I -> loop counter 34 C 35 36 INTEGER MAXNOS 37 PARAMETER(MAXNOS=5) 38 INTEGER I, NUMS(MAXNOS), COUNT 39 REAL AVG 40 COUNT = 0 41 DO 80 I = 1,MAXNOS 42 READ (5,*,END=100) NUMS(I) 43 COUNT = COUNT + 1 44 80 CONTINUE 45 100 AVG = COMPAV(NUMS, COUNT) 46 WRITE(6,*) 'AVERAGE =',AVG 47 END Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg NUMS intg 1 * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 42 6 SEQ FMTD WRITE 46 Statement labels defined: Label Line StmtType Label Line StmtType <80> 44 exec <100> 45 exec "correct.f": Nonportable usage: File contains tabs 0 syntax errors detected in file correct.f 2 warnings issued in file correct.f ftnchek-3.3.1/test/Okay/correct.pcl0000644000031000002260000000006610145015311017572 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File correct.prj: ftnchek-3.3.1/test/Okay/cray-pointers.fcl0000644000031000002260000001121110145015311020710 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File cray-pointers.f: 1 C From: USER NOTES ON FORTRAN PROGRAMMING (UNFP) 2 C http://www.ibiblio.org/pub/languages/fortran/ch2-16.html 3 Copyright (C) 1996-1998 to the contributors. All rights are reserved. 4 program cyrptr 5 integer i 6 real array1(10), array2(5), 7 & pointee1(10), pointee2(5), pointee3(*) ^ Warning near line 7 col 61: Nonstandard syntax: local array cannot have variable size 8 pointer (ptr1, pointee1), ^ Warning near line 8 col 7: Nonstandard syntax 9 & (ptr2, pointee2), 10 & (ptr3, pointee3) 11 data array1 /0,1,2,3,4,5,6,7,8,9/, 12 & array2 /5,5,5,5,5/ 13 c ------------------------------------------------------------------ 14 write(*,*) 15 write(*,'(1x,a,10f6.1)') 'array1= ', array1 16 write(*,'(1x,a,10f6.1)') 'array2= ', array2 17 c ------------------------------------------------------------------ 18 write(*,*) 19 ptr1 = loc(array1) ^ Nonportable usage near line 19 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR1 20 ptr2 = loc(array1) ^ Nonportable usage near line 20 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR2 21 ptr3 = loc(array1) ^ Nonportable usage near line 21 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR3 22 write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 23 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 24 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 10) 25 c ------------------------------------------------------------------ 26 write(*,*) 27 ptr1 = loc(array2) ^ Nonportable usage near line 27 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR1 28 ptr2 = loc(array2) ^ Nonportable usage near line 28 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR2 29 ptr3 = loc(array2) ^ Nonportable usage near line 29 col 12: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR3 30 write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 31 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 32 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 5) 33 c ------------------------------------------------------------------ 34 end 35 c The result of this program on a VMS machine was: 36 c 37 c array1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 38 c array2= 5.0 5.0 5.0 5.0 5.0 39 c 40 c pointee1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 41 c pointee2= 0.0 1.0 2.0 3.0 4.0 42 c pointee3= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 43 c 44 c pointee1= 5.0 5.0 5.0 5.0 5.0 0.0 0.0 0.0 0.0 0.0 45 c pointee2= 5.0 5.0 5.0 5.0 5.0 46 c pointee3= 5.0 5.0 5.0 5.0 5.0 47 c 48 c Module CYRPTR: prog External subprograms referenced: LOC: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ARRAY1 real 1 ARRAY2 real 1 I intg POINTEE1 real 1 POINTEE2 real 1 POINTEE3 real 1 PTR1 intg4 PTR2 intg4 PTR3 intg4 Warning in module CYRPTR: Variables set but never used: PTR1 set at line 19 PTR2 set at line 20 PTR3 set at line 21 Warning in module CYRPTR: Non Fortran 77 intrinsic functions referenced: LOC referenced at line 19 Warning in module CYRPTR: Names longer than 6 chars (nonstandard): POINTEE1 declared at line 7 POINTEE2 declared at line 7 POINTEE3 declared at line 7 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 14 15 16 18 22 23 24 26 30 31 32 0 syntax errors detected in file cray-pointers.f 11 warnings issued in file cray-pointers.f ftnchek-3.3.1/test/Okay/cray-pointers.fcx0000644000031000002260000001171610145015311020736 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File cray-pointers.f: 1 C From: USER NOTES ON FORTRAN PROGRAMMING (UNFP) 2 C http://www.ibiblio.org/pub/languages/fortran/ch2-16.html 3 Copyright (C) 1996-1998 to the contributors. All rights are reserved. 4 program cyrptr 5 integer i 6 real array1(10), array2(5), 7 & pointee1(10), pointee2(5), pointee3(*) ^ "cray-pointers.f", line 7 col 61: Warning: Nonstandard syntax: local array cannot have variable size 8 pointer (ptr1, pointee1), ^ "cray-pointers.f", line 8 col 7: Warning: Nonstandard syntax 9 & (ptr2, pointee2), 10 & (ptr3, pointee3) 11 data array1 /0,1,2,3,4,5,6,7,8,9/, 12 & array2 /5,5,5,5,5/ 13 c ------------------------------------------------------------------ 14 write(*,*) 15 write(*,'(1x,a,10f6.1)') 'array1= ', array1 16 write(*,'(1x,a,10f6.1)') 'array2= ', array2 17 c ------------------------------------------------------------------ 18 write(*,*) 19 ptr1 = loc(array1) ^ "cray-pointers.f", line 19 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR1 20 ptr2 = loc(array1) ^ "cray-pointers.f", line 20 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR2 21 ptr3 = loc(array1) ^ "cray-pointers.f", line 21 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY1) assigned to intg*4 PTR3 22 write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 23 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 24 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 10) 25 c ------------------------------------------------------------------ 26 write(*,*) 27 ptr1 = loc(array2) ^ "cray-pointers.f", line 27 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR1 28 ptr2 = loc(array2) ^ "cray-pointers.f", line 28 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR2 29 ptr3 = loc(array2) ^ "cray-pointers.f", line 29 col 12: Nonportable usage: mixed default and explicit precision items: intg expr LOC(ARRAY2) assigned to intg*4 PTR3 30 write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 31 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 32 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 5) 33 c ------------------------------------------------------------------ 34 end 35 c The result of this program on a VMS machine was: 36 c 37 c array1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 38 c array2= 5.0 5.0 5.0 5.0 5.0 39 c 40 c pointee1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 41 c pointee2= 0.0 1.0 2.0 3.0 4.0 42 c pointee3= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 43 c 44 c pointee1= 5.0 5.0 5.0 5.0 5.0 0.0 0.0 0.0 0.0 0.0 45 c pointee2= 5.0 5.0 5.0 5.0 5.0 46 c pointee3= 5.0 5.0 5.0 5.0 5.0 47 c 48 c Module CYRPTR: prog External subprograms referenced: LOC: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ARRAY1 real 1 ARRAY2 real 1 I intg POINTEE1 real 1 POINTEE2 real 1 POINTEE3 real 1 PTR1 intg4 PTR2 intg4 PTR3 intg4 "cray-pointers.f", line 19: Warning in module CYRPTR: Variables set but never used: "cray-pointers.f", line 19: PTR1 set "cray-pointers.f", line 20: PTR2 set "cray-pointers.f", line 21: PTR3 set "cray-pointers.f", line 19: Warning in module CYRPTR: Non Fortran 77 intrinsic functions referenced: "cray-pointers.f", line 19: LOC referenced "cray-pointers.f", line 7: Warning in module CYRPTR: Names longer than 6 chars (nonstandard): "cray-pointers.f", line 7: POINTEE1 declared "cray-pointers.f", line 7: POINTEE2 declared "cray-pointers.f", line 7: POINTEE3 declared I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 14 15 16 18 22 23 24 26 30 31 32 0 syntax errors detected in file cray-pointers.f 11 warnings issued in file cray-pointers.f ftnchek-3.3.1/test/Okay/cycle-exit.fcl0000644000031000002260000000302610145015311020164 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File cycle-exit.f: 1 C Testing of recognition of CYCLE and EXIT statements. 2 C Also tests that no-path warning is generated. 3 do i=1,100 ^ Warning near line 3 col 7: Nonstandard syntax 4 if( mod(i,2) .eq. 0 ) then 5 print *, i 6 cycle ^ Warning near line 6 col 13: Nonstandard syntax: CYCLE statement 7 print *, i*i ! no path to this statement ^ Warning near line 7 col 26: Nonstandard syntax: inline comment Error near line 7: No path to this statement 8 endif 9 if( i .gt. 10 ) exit ^ Warning near line 9 col 26: Nonstandard syntax: EXIT statement 10 print *, i*i ! there is a path to this statement ^ Warning near line 10 col 24: Nonstandard syntax: inline comment 11 end do ^ Warning near line 11 col 7: Nonstandard syntax 12 end 13 Module %MAIN: prog External subprograms referenced: MOD: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 5 7 10 1 syntax error detected in file cycle-exit.f 7 warnings issued in file cycle-exit.f ftnchek-3.3.1/test/Okay/cycle-exit.fcx0000644000031000002260000000315710145015311020205 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File cycle-exit.f: 1 C Testing of recognition of CYCLE and EXIT statements. 2 C Also tests that no-path warning is generated. 3 do i=1,100 ^ "cycle-exit.f", line 3 col 7: Warning: Nonstandard syntax 4 if( mod(i,2) .eq. 0 ) then 5 print *, i 6 cycle ^ "cycle-exit.f", line 6 col 13: Warning: Nonstandard syntax: CYCLE statement 7 print *, i*i ! no path to this statement ^ "cycle-exit.f", line 7 col 26: Warning: Nonstandard syntax: inline comment "cycle-exit.f", near line 7: Error: No path to this statement 8 endif 9 if( i .gt. 10 ) exit ^ "cycle-exit.f", line 9 col 26: Warning: Nonstandard syntax: EXIT statement 10 print *, i*i ! there is a path to this statement ^ "cycle-exit.f", line 10 col 24: Warning: Nonstandard syntax: inline comment 11 end do ^ "cycle-exit.f", line 11 col 7: Warning: Nonstandard syntax 12 end 13 Module %MAIN: prog External subprograms referenced: MOD: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 5 7 10 1 syntax error detected in file cycle-exit.f 7 warnings issued in file cycle-exit.f ftnchek-3.3.1/test/Okay/dec-parameter.fcl0000644000031000002260000000642410145015311020634 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File dec-parameter.f: 1 C IMPLICIT INTEGER(a-z) 2 3 PARAMETER shipmoves=3 ^ Warning near line 3 col 17: Nonstandard syntax: PARAMETER implicitly typed differently from default type ^ Warning near line 3 col 7: Nonstandard syntax : PARAMETER declaration without parentheses 4 PARAMETER fightermoves=8 ^ Warning near line 4 col 17: Nonstandard syntax: PARAMETER implicitly typed differently from default type ^ Warning near line 4 col 7: Nonstandard syntax : PARAMETER declaration without parentheses 5 PARAMETER (stdparam = 7) 6 INTEGER g2(100) 7 INTEGER hits(15),tipe(15),crahit(15),craloc(15) 8 9 BYTE specal,pass ^ Warning near line 9 col 7: Nonstandard syntax 10 BYTE ab,ac,ad,ao,e,own1,own2,own !AVOID WORD REFERENCES TO THESE ^ Warning near line 10 col 7: Nonstandard syntax ^ Warning near line 10 col 50: Nonstandard syntax: inline comment 11 INTEGER rlmap(3000) 12 LOGICAL automv,autosave,savedone 13 14 COMMON/AB9/ab9,prior,nshprf 15 COMMON/ARMTOT/armtot 16 end Warning near line 16: Module contains no executable statements Module %MAIN: prog Common blocks referenced: AB9 ARMTOT Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AB intg1 AB9 real* AC intg1 AD intg1 AO intg1 ARMTOT real* AUTOMV logl AUTOSAVE logl CRAHIT intg 1 CRALOC intg 1 E intg1 FIGHTERMOVES intg G2 intg 1 HITS intg 1 NSHPRF intg* OWN intg1 OWN1 intg1 OWN2 intg1 PASS intg1 PRIOR real* RLMAP intg 1 SAVEDONE logl SHIPMOVES intg SPECAL intg1 STDPARAM real* TIPE intg 1 * Variable not declared. Type has been implicitly defined. Warning in module %MAIN: Variables declared but never referenced: AB declared at line 10 AC declared at line 10 AD declared at line 10 AO declared at line 10 AUTOMV declared at line 12 AUTOSAVE declared at line 12 CRAHIT declared at line 7 CRALOC declared at line 7 E declared at line 10 G2 declared at line 6 HITS declared at line 7 OWN declared at line 10 OWN1 declared at line 10 OWN2 declared at line 10 PASS declared at line 9 RLMAP declared at line 11 SAVEDONE declared at line 12 SPECAL declared at line 9 TIPE declared at line 7 Warning in module %MAIN: Variables set but never used: FIGHTERMOVES set at line 4 SHIPMOVES set at line 3 STDPARAM set at line 5 Warning in module %MAIN: Names longer than 6 chars (nonstandard): AUTOSAVE declared at line 12 FIGHTERMOVES declared at line 4 SAVEDONE declared at line 12 SHIPMOVES declared at line 3 STDPARAM first occurrence at line 5 0 syntax errors detected in file dec-parameter.f 12 warnings issued in file dec-parameter.f Warning: Common block AB9 unused anywhere Warning: Common block ARMTOT unused anywhere ftnchek-3.3.1/test/Okay/dec-parameter.fcx0000644000031000002260000000775110145015311020654 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File dec-parameter.f: 1 C IMPLICIT INTEGER(a-z) 2 3 PARAMETER shipmoves=3 ^ "dec-parameter.f", line 3 col 17: Warning: Nonstandard syntax: PARAMETER implicitly typed differently from default type ^ "dec-parameter.f", line 3 col 7: Warning: Nonstandard syntax : PARAMETER declaration without parentheses 4 PARAMETER fightermoves=8 ^ "dec-parameter.f", line 4 col 17: Warning: Nonstandard syntax: PARAMETER implicitly typed differently from default type ^ "dec-parameter.f", line 4 col 7: Warning: Nonstandard syntax : PARAMETER declaration without parentheses 5 PARAMETER (stdparam = 7) 6 INTEGER g2(100) 7 INTEGER hits(15),tipe(15),crahit(15),craloc(15) 8 9 BYTE specal,pass ^ "dec-parameter.f", line 9 col 7: Warning: Nonstandard syntax 10 BYTE ab,ac,ad,ao,e,own1,own2,own !AVOID WORD REFERENCES TO THESE ^ "dec-parameter.f", line 10 col 7: Warning: Nonstandard syntax ^ "dec-parameter.f", line 10 col 50: Warning: Nonstandard syntax: inline comment 11 INTEGER rlmap(3000) 12 LOGICAL automv,autosave,savedone 13 14 COMMON/AB9/ab9,prior,nshprf 15 COMMON/ARMTOT/armtot 16 end "dec-parameter.f", near line 16: Warning: Module contains no executable statements Module %MAIN: prog Common blocks referenced: AB9 ARMTOT Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AB intg1 AB9 real* AC intg1 AD intg1 AO intg1 ARMTOT real* AUTOMV logl AUTOSAVE logl CRAHIT intg 1 CRALOC intg 1 E intg1 FIGHTERMOVES intg G2 intg 1 HITS intg 1 NSHPRF intg* OWN intg1 OWN1 intg1 OWN2 intg1 PASS intg1 PRIOR real* RLMAP intg 1 SAVEDONE logl SHIPMOVES intg SPECAL intg1 STDPARAM real* TIPE intg 1 * Variable not declared. Type has been implicitly defined. "dec-parameter.f", line 10: Warning in module %MAIN: Variables declared but never referenced: "dec-parameter.f", line 10: AB declared "dec-parameter.f", line 10: AC declared "dec-parameter.f", line 10: AD declared "dec-parameter.f", line 10: AO declared "dec-parameter.f", line 12: AUTOMV declared "dec-parameter.f", line 12: AUTOSAVE declared "dec-parameter.f", line 7: CRAHIT declared "dec-parameter.f", line 7: CRALOC declared "dec-parameter.f", line 10: E declared "dec-parameter.f", line 6: G2 declared "dec-parameter.f", line 7: HITS declared "dec-parameter.f", line 10: OWN declared "dec-parameter.f", line 10: OWN1 declared "dec-parameter.f", line 10: OWN2 declared "dec-parameter.f", line 9: PASS declared "dec-parameter.f", line 11: RLMAP declared "dec-parameter.f", line 12: SAVEDONE declared "dec-parameter.f", line 9: SPECAL declared "dec-parameter.f", line 7: TIPE declared "dec-parameter.f", line 4: Warning in module %MAIN: Variables set but never used: "dec-parameter.f", line 4: FIGHTERMOVES set "dec-parameter.f", line 3: SHIPMOVES set "dec-parameter.f", line 5: STDPARAM set "dec-parameter.f", line 12: Warning in module %MAIN: Names longer than 6 chars (nonstandard): "dec-parameter.f", line 12: AUTOSAVE declared "dec-parameter.f", line 4: FIGHTERMOVES declared "dec-parameter.f", line 12: SAVEDONE declared "dec-parameter.f", line 3: SHIPMOVES declared "dec-parameter.f", line 5: STDPARAM first occurrence 0 syntax errors detected in file dec-parameter.f 12 warnings issued in file dec-parameter.f "dec-parameter.f", line 14: Warning: Common block AB9 unused anywhere "dec-parameter.f", line 15: Warning: Common block ARMTOT unused anywhere ftnchek-3.3.1/test/Okay/dectab.fcl0000644000031000002260000000223710145015311017343 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File dectab.f: 3 1 ,c ^ Warning near line 3 col 7: Nonstandard syntax: continuation mark not in column 6 6 2 / c ^ Warning near line 6 col 7: Nonstandard syntax: continuation mark not in column 6 ^ Warning near line 6 col 9: Possible division by zero 9 3 +2 ^ Possibly misleading appearance near line 9 col 6: Continuation follows comment or blank line 10 c = 2/3 ^ Warning near line 10 col 12: integer const expr yields result of 0 ^ Warning near line 10 col 9: integer quotient expr 2/3 converted to real Module ABC: subr Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 11 0 syntax errors detected in file dectab.f 7 warnings issued in file dectab.f No main program found ftnchek-3.3.1/test/Okay/dectab.fcx0000644000031000002260000000232010145015311017350 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File dectab.f: 3 1 ,c ^ "dectab.f", line 3 col 7: Warning: Nonstandard syntax: continuation mark not in column 6 6 2 / c ^ "dectab.f", line 6 col 7: Warning: Nonstandard syntax: continuation mark not in column 6 ^ "dectab.f", line 6 col 9: Warning: Possible division by zero 9 3 +2 ^ "dectab.f", line 9 col 6: Possibly misleading appearance: Continuation follows comment or blank line 10 c = 2/3 ^ "dectab.f", line 10 col 12: Warning: integer const expr yields result of 0 ^ "dectab.f", line 10 col 9: Warning: integer quotient expr 2/3 converted to real Module ABC: subr Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 11 0 syntax errors detected in file dectab.f 7 warnings issued in file dectab.f No main program found ftnchek-3.3.1/test/Okay/dims.fcl0000644000031000002260000000243310145015311017053 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Cannot open file nosuch.f File dims.f: 10 character *10 c(len('won''t')) ^ Warning near line 10 col 23 file dims.f: Nonstandard syntax: array bounds expr cannot have array or function reference 13 $ :ichar(str("won""t",40) (1:1))) = 'x' ^ Warning near line 13 col 23 file dims.f: Nonstandard syntax: character string should be delimited by apostrophes Error in module FOO at line 7 file dims.f: STR3 cannot be adjustable size Warning in module FOO in file dims.f: Variables declared but never referenced: B declared at line 4 file dims.f D declared at line 5 file dims.f (dummy argument) STR2 declared at line 7 file dims.f STR3 declared at line 7 file dims.f STR4 declared at line 7 file dims.f Warning in module FOO in file dims.f: Variables set but never used: C set at line 12 file dims.f Warning in module FOO in file dims.f: Variables may be used before set: A used at line 11 file dims.f A set at line 11 file dims.f 1 syntax error detected in file dims.f 5 warnings issued in file dims.f No main program found Warning: Common block XX unused anywhere Warning: Subprogram STR never defined Invoked in module FOO line 13 file dims.f ftnchek-3.3.1/test/Okay/dims.fcx0000644000031000002260000000243210145015311017066 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Cannot open file nosuch.f File dims.f: 10 character *10 c(len('won''t')) ^ "dims.f", line 10 col 23: Warning: Nonstandard syntax: array bounds expr cannot have array or function reference 13 $ :ichar(str("won""t",40) (1:1))) = 'x' ^ "dims.f", line 13 col 23: Warning: Nonstandard syntax: character string should be delimited by apostrophes "dims.f", line 7: Error in module FOO: STR3 cannot be adjustable size "dims.f", line 4: Warning in module FOO: Variables declared but never referenced: "dims.f", line 4: B declared "dims.f", line 5: D declared (dummy argument) "dims.f", line 7: STR2 declared "dims.f", line 7: STR3 declared "dims.f", line 7: STR4 declared "dims.f", line 12: Warning in module FOO: Variables set but never used: "dims.f", line 12: C set "dims.f", line 11: Warning in module FOO: Variables may be used before set: "dims.f", line 11: A used "dims.f", line 11: A set 1 syntax error detected in file dims.f 5 warnings issued in file dims.f No main program found "dims.f", line 6: Warning: Common block XX unused anywhere "dims.f", line 13: Warning: Subprogram STR never defined "dims.f", line 13: Invoked in module FOO ftnchek-3.3.1/test/Okay/do_enddo.fcl0000644000031000002260000000576310145015311017703 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File do_enddo.f: 4 do i=1,100 ^ Warning near line 4 col 7 file do_enddo.f: Nonstandard syntax 6 enddo ^ Warning near line 6 col 7 file do_enddo.f: Nonstandard syntax 7 print *,sum !@#$*& ^ Warning near line 7 col 20 file do_enddo.f: Nonstandard syntax: inline comment 10 do while(other_sum .lt. 2000) ^ Warning near line 10 col 7 file do_enddo.f: Nonstandard syntax 13 ! here we have a nonstandard comment ^ Warning near line 13 col 1 file do_enddo.f: Nonstandard syntax: inline comment 12 end do ^ Warning near line 12 col 7 file do_enddo.f: Nonstandard syntax 15 dowhile ( x .ne. (1,2)) ^ Warning near line 15 col 7 file do_enddo.f: Nonstandard syntax 17 end do ^ Warning near line 17 col 7 file do_enddo.f: Nonstandard syntax 18 do 100 while (.true.) ^ Warning near line 18 col 7 file do_enddo.f: Nonstandard syntax 20 if( sum .eq. 0.0 ) exit ^ Warning near line 20 col 29 file do_enddo.f: Nonstandard syntax: EXIT statement 22 do 200, while (.false.) ^ Warning near line 22 col 7 file do_enddo.f: Nonstandard syntax 24 200 end do ^ Warning near line 24 col 7 file do_enddo.f: Nonstandard syntax Warning in module ABC in file do_enddo.f: Variables may be used before set: X used at line 15 file do_enddo.f X set at line 16 file do_enddo.f Warning in module ABC in file do_enddo.f: Names longer than 6 chars (nonstandard): OTHER_SUM first occurrence at line 9 file do_enddo.f Warning in module ABC in file do_enddo.f: Names containing nonstandard characters: OTHER_SUM first occurrence at line 9 file do_enddo.f 26 include 'average.f' ^ Warning near line 26 col 7 file do_enddo.f: Nonstandard syntax Including file average.f: 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20 file average.f: integer quotient expr SUM/COUNT converted to real Warning in module COMPAV in file average.f: Variables may be used before set: SUM used at line 14 file average.f included at line 26 file do_enddo.f SUM set at line 14 file average.f included at line 26 file do_enddo.f Warning in module AVENUM in file average.f: Variables set but never used: AVG set at line 43 file average.f included at line 26 file do_enddo.f 0 syntax errors detected in file do_enddo.f 19 warnings issued in file do_enddo.f Warning: Subprogram ABC never invoked Defined in module ABC line 2 file do_enddo.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f (included at line 26 in do_enddo.f) is type intg Actual arg NUMS in module AVENUM line 43 file average.f (included at line 26 in do_enddo.f) is type real ftnchek-3.3.1/test/Okay/do_enddo.fcx0000644000031000002260000000576310145015311017717 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File do_enddo.f: 4 do i=1,100 ^ "do_enddo.f", line 4 col 7: Warning: Nonstandard syntax 6 enddo ^ "do_enddo.f", line 6 col 7: Warning: Nonstandard syntax 7 print *,sum !@#$*& ^ "do_enddo.f", line 7 col 20: Warning: Nonstandard syntax: inline comment 10 do while(other_sum .lt. 2000) ^ "do_enddo.f", line 10 col 7: Warning: Nonstandard syntax 13 ! here we have a nonstandard comment ^ "do_enddo.f", line 13 col 1: Warning: Nonstandard syntax: inline comment 12 end do ^ "do_enddo.f", line 12 col 7: Warning: Nonstandard syntax 15 dowhile ( x .ne. (1,2)) ^ "do_enddo.f", line 15 col 7: Warning: Nonstandard syntax 17 end do ^ "do_enddo.f", line 17 col 7: Warning: Nonstandard syntax 18 do 100 while (.true.) ^ "do_enddo.f", line 18 col 7: Warning: Nonstandard syntax 20 if( sum .eq. 0.0 ) exit ^ "do_enddo.f", line 20 col 29: Warning: Nonstandard syntax: EXIT statement 22 do 200, while (.false.) ^ "do_enddo.f", line 22 col 7: Warning: Nonstandard syntax 24 200 end do ^ "do_enddo.f", line 24 col 7: Warning: Nonstandard syntax "do_enddo.f", line 15: Warning in module ABC: Variables may be used before set: "do_enddo.f", line 15: X used "do_enddo.f", line 16: X set "do_enddo.f", line 9: Warning in module ABC: Names longer than 6 chars (nonstandard): "do_enddo.f", line 9: OTHER_SUM first occurrence "do_enddo.f", line 9: Warning in module ABC: Names containing nonstandard characters: "do_enddo.f", line 9: OTHER_SUM first occurrence 26 include 'average.f' ^ "do_enddo.f", line 26 col 7: Warning: Nonstandard syntax Including file average.f: 16 COMPAV = SUM/COUNT ^ "average.f", line 16 col 20: Warning: integer quotient expr SUM/COUNT converted to real "average.f", line 14: Warning in module COMPAV: Variables may be used before set: "average.f", line 14: SUM used "do_enddo.f", line 26: (where included) "average.f", line 14: SUM set "do_enddo.f", line 26: (where included) "average.f", line 43: Warning in module AVENUM: Variables set but never used: "average.f", line 43: AVG set "do_enddo.f", line 26: (where included) 0 syntax errors detected in file do_enddo.f 19 warnings issued in file do_enddo.f "do_enddo.f", line 2: Warning: Subprogram ABC never invoked "do_enddo.f", line 2: Defined in module ABC "average.f", line 10: Warning: Subprogram COMPAV argument data type mismatch at position 1: "average.f", line 10: (location of error) "do_enddo.f", line 26: (where included) Dummy arg SCORE in module COMPAV is type intg "average.f", line 43: (location of error) "do_enddo.f", line 26: (where included) Actual arg NUMS in module AVENUM is type real ftnchek-3.3.1/test/Okay/embedded-space.fcl0000644000031000002260000000417710145015311020750 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File embedded-space.f: 1 p r o g r a m t e s t ^ Possibly misleading appearance near line 1 col 7: keyword PROGRAM has embedded space ^ Possibly misleading appearance near line 1 col 22: identifier TEST has embedded space 2 realxray,zebra ^ Possibly misleading appearance near line 2 col 11: identifier XRAY not clearly separated from context 3 read(*,*) x ray,zebra ^ Possibly misleading appearance near line 3 col 17: identifier XRAY has embedded space 4 i f ( xray . eq . zebra ) w r i t e(*,*) xray * ^ Possibly misleading appearance near line 4 col 7: keyword IF has embedded space ^ Possibly misleading appearance near line 4 col 33: keyword WRITE has embedded space 5 $* zebra 6 if( xray .e q. zebra) write(*,*) 'h e l l o ' / / ' t h e r e' ^ Possibly misleading appearance near line 6 col 16: keyword has embedded space ^ Possibly misleading appearance near line 6 col 53: multi-character operator has embedded space 7 if( xray / = zebra ) write(* , *) xray + zebra ^ Warning near line 7 col 16: Nonstandard syntax for relational operator ^ Possibly misleading appearance near line 7 col 16: multi-character operator has embedded space 8 if( xray < zebra ) write(* , *) xray - zebra ^ Warning near line 8 col 16: Nonstandard syntax for relational operator 9 end Module TEST: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims XRAY real ZEBRA real I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 3 * SEQ FMTD WRITE 4 6 7 8 0 syntax errors detected in file embedded-space.f 11 warnings issued in file embedded-space.f ftnchek-3.3.1/test/Okay/embedded-space.fcx0000644000031000002260000000447210145015311020762 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File embedded-space.f: 1 p r o g r a m t e s t ^ "embedded-space.f", line 1 col 7: Possibly misleading appearance: keyword PROGRAM has embedded space ^ "embedded-space.f", line 1 col 22: Possibly misleading appearance: identifier TEST has embedded space 2 realxray,zebra ^ "embedded-space.f", line 2 col 11: Possibly misleading appearance: identifier XRAY not clearly separated from context 3 read(*,*) x ray,zebra ^ "embedded-space.f", line 3 col 17: Possibly misleading appearance: identifier XRAY has embedded space 4 i f ( xray . eq . zebra ) w r i t e(*,*) xray * ^ "embedded-space.f", line 4 col 7: Possibly misleading appearance: keyword IF has embedded space ^ "embedded-space.f", line 4 col 33: Possibly misleading appearance: keyword WRITE has embedded space 5 $* zebra 6 if( xray .e q. zebra) write(*,*) 'h e l l o ' / / ' t h e r e' ^ "embedded-space.f", line 6 col 16: Possibly misleading appearance: keyword has embedded space ^ "embedded-space.f", line 6 col 53: Possibly misleading appearance: multi-character operator has embedded space 7 if( xray / = zebra ) write(* , *) xray + zebra ^ "embedded-space.f", line 7 col 16: Warning: Nonstandard syntax for relational operator ^ "embedded-space.f", line 7 col 16: Possibly misleading appearance: multi-character operator has embedded space 8 if( xray < zebra ) write(* , *) xray - zebra ^ "embedded-space.f", line 8 col 16: Warning: Nonstandard syntax for relational operator 9 end Module TEST: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims XRAY real ZEBRA real I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 3 * SEQ FMTD WRITE 4 6 7 8 0 syntax errors detected in file embedded-space.f 11 warnings issued in file embedded-space.f ftnchek-3.3.1/test/Okay/empty.fcl0000644000031000002260000000016510145015311017255 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File empty.f: 0 syntax errors detected in file empty.f No main program found ftnchek-3.3.1/test/Okay/empty.fcx0000644000031000002260000000016510145015311017271 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File empty.f: 0 syntax errors detected in file empty.f No main program found ftnchek-3.3.1/test/Okay/f95deleted.fc00000644000031000002260000000040510145015311017752 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File f95deleted.f: 8 do 10 x=1,5 ^ Warning near line 8 col 13 file f95deleted.f: DO index is not integer 0 syntax errors detected in file f95deleted.f 1 warning issued in file f95deleted.f ftnchek-3.3.1/test/Okay/f95deleted.fc10000644000031000002260000000040510145015311017753 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File f95deleted.f: 8 do 10 x=1,5 ^ Warning near line 8 col 13 file f95deleted.f: DO index is not integer 0 syntax errors detected in file f95deleted.f 1 warning issued in file f95deleted.f ftnchek-3.3.1/test/Okay/f95deleted.fc20000644000031000002260000000040510145015311017754 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File f95deleted.f: 8 do 10 x=1,5 ^ Warning near line 8 col 13 file f95deleted.f: DO index is not integer 0 syntax errors detected in file f95deleted.f 1 warning issued in file f95deleted.f ftnchek-3.3.1/test/Okay/f95deleted.fc30000644000031000002260000000271710145015311017765 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File f95deleted.f: 4 assign 5 to label ^ Warning near line 4 col 7 file f95deleted.f: Syntax deleted in Fortran 95: ASSIGN statement 5 assign 90 to format ^ Warning near line 5 col 7 file f95deleted.f: Syntax deleted in Fortran 95: ASSIGN statement 8 do 10 x=1,5 ^ Warning near line 8 col 13 file f95deleted.f: Syntax deleted in Fortran 95: DO index is not integer 9 print format,x,j*x**2 ^ Warning near line 9 col 16 file f95deleted.f: Syntax deleted in Fortran 95: assigned format 12 if( j .eq. 2 ) goto label ^ Warning near line 12 col 22 file f95deleted.f: Syntax deleted in Fortran 95: assigned GOTO 14 assign 91 to format ^ Warning near line 14 col 7 file f95deleted.f: Syntax deleted in Fortran 95: ASSIGN statement 15 write(*,format) i,j ^ Warning near line 15 col 15 file f95deleted.f: Syntax deleted in Fortran 95: assigned format 18 91 format(1x,2hi=,i5,3h j=,i5) ^ Warning near line 18 col 17 file f95deleted.f: Syntax deleted in Fortran 95: H edit descriptor ^ Warning near line 18 col 25 file f95deleted.f: Syntax deleted in Fortran 95: H edit descriptor 0 syntax errors detected in file f95deleted.f 9 warnings issued in file f95deleted.f ftnchek-3.3.1/test/Okay/filter.fcl0000644000031000002260000000162010165302777017422 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 71 1 ('*',K=1,MOD(IBM(J),10))) ^ Error near line 71 col 43 file include.f: syntax error, unexpected ')', expecting ',' Warning in module PRINTSTATS in file include.f: Labels defined but not used: <30> defined at line 82 file include.f 106 Do O = 1,26 ^ Warning near line 106 col 10 file include.f: DO index is not integer 107 N(O) = 0 ^ Warning near line 107 col 11 file include.f: subscript is not integer 1 syntax error detected in file std_input 3 warnings issued in file std_input Warning: Common block STATS array dimen/size mismatch at position 7: Variable IBM in module GETSTATS line 1 file Include/stats.h (included at line 29 in include.f) has size 255 Variable N in module INITIALIZE line 105 file include.f has size 26 ftnchek-3.3.1/test/Okay/help.fcl0000644000031000002260000000711110201516563017055 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Patch Level 1 Copyright (C) 1994, 1997, 2000, 2004 by Robert K. Moniot This program is free software. Permission is granted to modify it and/or redistribute it, retaining this notice. No guarantees accompany this software. Commandline options [default]: -[no]brief [no]: briefer form of error messages -[no]check [yes]: perform checking -[no]declare [no]: list undeclared variables -[no]division [no]: catch possible div by 0 -[no]extern [yes]: check if externals defined -[no]help [no]: print help screen -[no]library [no]: treat next files as library -[no]list [no]: print program listing -[no]novice [yes]: extra help for novices -[no]pure [yes]: functions have no side effects -[no]quiet [no]: less verbose output -[no]reference [no]: print who-calls-who reference list -[no]resources [no]: show info on resource usage -[no]sixchar [no]: catch nonunique names -[no]sort [no]: prerequisite-order sort of modules -[no]symtab [no]: print symbol table info -[no]vcg [no]: print call graph in vcg format -[no]version [no]: print version number -[no]volatile [no]: assume volatile common blocks -arguments=str [all]: check subprogram argument agreement Use -arguments=help for list of options -array=str [all]: check subprogram argument arrayness agreement Use -array=help for list of options -calltree=str [none]: subprogram call graph options Use -calltree=help for list of options -common=str [dimensions,exact,length,type]: check for common block mismatches Use -common=help for list of options -crossref=str [none]: cross-ref printing options Use -crossref=help for list of options -f77=str [all]: warn about non-F77 extensions Use -f77=help for list of options -f90=str [none]: warn about non-F90 syntax Use -f90=help for list of options -f95=str [none]: warn about non-F95 syntax Use -f95=help for list of options -identifier-chars=str [$_]: non-alphabetic chars allowed in identifiers -include=str [NONE]: include-file directory -intrinsic=str [unix]: specify intrinsic function options Use -intrinsic=help for list of options -makedcls=str [none]: make type declaration statements Use -makedcls=help for list of options -mkhtml=str [none]: create html documents Use -mkhtml=help for list of options -output=str [NONE]: output file name -portability=str [none]: warn about portability problems Use -portability=help for list of options -pretty=str [all]: warn about deceiving appearances Use -pretty=help for list of options -project=str [none]: create project file Use -project=help for list of options -source=str [none]: select source format options Use -source=help for list of options -style=str [none]: catch violations of structured style Use -style=help for list of options -truncation=str [all]: check for truncation pitfalls Use -truncation=help for list of options -usage=str [all]: warn about variable and common block usage problems Use -usage=help for list of options Settings (legal range) [default]: -columns=dd (72 to 132) [72]: max fixed-form line length processed -errors=dd (0 to 999) [3]: max number of error messages per cascade -pointersize=dd (1 to 16) [4]: standard pointer size in bytes -wordsize=dd (0 to 16) [4]: standard wordsize in bytes (0=no default) -wrap=dd (0 to 999) [79]: width of page to wrap error messages (First 3 chars of option name significant) ftnchek-3.3.1/test/Okay/help.fcx0000644000031000002260000000711010201516564017071 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Patch Level 1 Copyright (C) 1994, 1997, 2000, 2004 by Robert K. Moniot This program is free software. Permission is granted to modify it and/or redistribute it, retaining this notice. No guarantees accompany this software. Commandline options [default]: -[no]brief [no]: briefer form of error messages -[no]check [yes]: perform checking -[no]declare [no]: list undeclared variables -[no]division [no]: catch possible div by 0 -[no]extern [yes]: check if externals defined -[no]help [no]: print help screen -[no]library [no]: treat next files as library -[no]list [no]: print program listing -[no]novice [no]: extra help for novices -[no]pure [yes]: functions have no side effects -[no]quiet [no]: less verbose output -[no]reference [no]: print who-calls-who reference list -[no]resources [no]: show info on resource usage -[no]sixchar [no]: catch nonunique names -[no]sort [no]: prerequisite-order sort of modules -[no]symtab [no]: print symbol table info -[no]vcg [no]: print call graph in vcg format -[no]version [no]: print version number -[no]volatile [no]: assume volatile common blocks -arguments=str [all]: check subprogram argument agreement Use -arguments=help for list of options -array=str [all]: check subprogram argument arrayness agreement Use -array=help for list of options -calltree=str [none]: subprogram call graph options Use -calltree=help for list of options -common=str [dimensions,exact,length,type]: check for common block mismatches Use -common=help for list of options -crossref=str [none]: cross-ref printing options Use -crossref=help for list of options -f77=str [all]: warn about non-F77 extensions Use -f77=help for list of options -f90=str [none]: warn about non-F90 syntax Use -f90=help for list of options -f95=str [none]: warn about non-F95 syntax Use -f95=help for list of options -identifier-chars=str [$_]: non-alphabetic chars allowed in identifiers -include=str [NONE]: include-file directory -intrinsic=str [unix]: specify intrinsic function options Use -intrinsic=help for list of options -makedcls=str [none]: make type declaration statements Use -makedcls=help for list of options -mkhtml=str [none]: create html documents Use -mkhtml=help for list of options -output=str [NONE]: output file name -portability=str [none]: warn about portability problems Use -portability=help for list of options -pretty=str [all]: warn about deceiving appearances Use -pretty=help for list of options -project=str [none]: create project file Use -project=help for list of options -source=str [none]: select source format options Use -source=help for list of options -style=str [none]: catch violations of structured style Use -style=help for list of options -truncation=str [all]: check for truncation pitfalls Use -truncation=help for list of options -usage=str [all]: warn about variable and common block usage problems Use -usage=help for list of options Settings (legal range) [default]: -columns=dd (72 to 132) [72]: max fixed-form line length processed -errors=dd (0 to 999) [3]: max number of error messages per cascade -pointersize=dd (1 to 16) [4]: standard pointer size in bytes -wordsize=dd (0 to 16) [4]: standard wordsize in bytes (0=no default) -wrap=dd (0 to 999) [79]: width of page to wrap error messages (First 3 chars of option name significant) ftnchek-3.3.1/test/Okay/iffy.fcl0000644000031000002260000000376110145015312017062 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iffy.f: 1 SUBROUTINE IFFY ( USE1, USE2, L ) 2 * Tests parsing & type-checking of various IF forms. 3 * 4 LOGICAL USE1, USE2 5 INTEGER L 6 INTEGER M 7 REAL X 8 * this block-if statement is OK 9 IF ( USE1 ) THEN 10 M = 1 11 * else-if statement is OK 12 ELSE IF ( USE2 ) THEN 13 M = 2 14 ELSE 15 M = 3 16 END IF 17 * this logical if is OK 18 IF( M .eq. 3 ) L = L+1 19 * this arithmetic if is OK 20 IF( L ) 100, 100, 100 21 100 X = L 22 * this arithmetic if is OK 23 IF( X ) 150, 150, 150 24 150 CONTINUE 25 * violate a block if statement 26 IF ( L ) THEN ^ Error near line 26 col 12: logical expression required 27 M = M+1 28 * violate an elseif statement 29 ELSE IF ( M ) THEN ^ Error near line 29 col 17: logical expression required 30 M = M+2 31 ELSE 32 M = M+3 33 END IF 34 * violate a logical if statement 35 IF( M ) L = L+1 ^ Error near line 35 col 11: logical expression required 36 * violate an arithmetic if statement 37 IF( L .EQ. 3 ) 200, 200, 200 ^ Error near line 37 col 11: integer, real, or double precision expression required 38 200 CONTINUE 39 END 40 Module IFFY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims L intg M intg USE1 logl USE2 logl X real Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <100> 21 exec <150> 24 exec <200> 38 exec 4 syntax errors detected in file iffy.f No main program found ftnchek-3.3.1/test/Okay/iffy.fcx0000644000031000002260000000401110145015312017063 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iffy.f: 1 SUBROUTINE IFFY ( USE1, USE2, L ) 2 * Tests parsing & type-checking of various IF forms. 3 * 4 LOGICAL USE1, USE2 5 INTEGER L 6 INTEGER M 7 REAL X 8 * this block-if statement is OK 9 IF ( USE1 ) THEN 10 M = 1 11 * else-if statement is OK 12 ELSE IF ( USE2 ) THEN 13 M = 2 14 ELSE 15 M = 3 16 END IF 17 * this logical if is OK 18 IF( M .eq. 3 ) L = L+1 19 * this arithmetic if is OK 20 IF( L ) 100, 100, 100 21 100 X = L 22 * this arithmetic if is OK 23 IF( X ) 150, 150, 150 24 150 CONTINUE 25 * violate a block if statement 26 IF ( L ) THEN ^ "iffy.f", line 26 col 12: Error: logical expression required 27 M = M+1 28 * violate an elseif statement 29 ELSE IF ( M ) THEN ^ "iffy.f", line 29 col 17: Error: logical expression required 30 M = M+2 31 ELSE 32 M = M+3 33 END IF 34 * violate a logical if statement 35 IF( M ) L = L+1 ^ "iffy.f", line 35 col 11: Error: logical expression required 36 * violate an arithmetic if statement 37 IF( L .EQ. 3 ) 200, 200, 200 ^ "iffy.f", line 37 col 11: Error: integer, real, or double precision expression required 38 200 CONTINUE 39 END 40 Module IFFY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims L intg M intg USE1 logl USE2 logl X real Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <100> 21 exec <150> 24 exec <200> 38 exec 4 syntax errors detected in file iffy.f No main program found ftnchek-3.3.1/test/Okay/include.fcl0000644000031000002260000002446510145015312017554 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File include.f: 1 C Derived from Brian Downing's WC program, replacing common decls by INCLUDEs 2 C 3 C main(){ Get a file, open it, read and determine semi-useful 4 C statistics, print them to screen, and exit quietly. 5 C }; 6 C 7 C This program is an example word counter that makes use of several 8 C Fortran intrinsic functions and data structures, such as; 9 C common, sub-routines, functions, inplied do loops, and much, much more. 10 C 11 Program WC 12 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 13 C Program: Word_Count_And_Other_Stuff C 14 C Written_By: Brian Downing C 15 C Fordham University C 16 C Date: October 1st-16th, 1990 C 17 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 18 Character Fname*80 19 20 Call Initialize 21 Call GetFileName(Fname) 22 Call GetStats(Fname) 23 Call PrintStats 24 End Module WC: prog External subprograms referenced: GETFILENAME: subr GETSTATS: subr INITIALIZE: subr PRINTSTATS: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 Warning in module WC: Names longer than 6 chars (nonstandard): GETFILENAME referenced at line 21 GETSTATS referenced at line 22 INITIALIZE referenced at line 20 PRINTSTATS referenced at line 23 25 C 26 C SubRoutine to get all kinds of neat statistics. 27 C 28 SubRoutine GetStats(Fname) 29 Include 'stats.h' ^ Warning near line 29 col 7: Nonstandard syntax Including file ./Include/stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 30 Character Inline*82, Fname*80, Ch 31 32 Open (Unit=8,File=Fname,Err=999) 33 Do While (.TRUE.) ^ Warning near line 33 col 7: Nonstandard syntax 34 Read(8,10,End=888)InLine 35 NL = NL + 1 36 LastPos = INDEX(InLine,' ') 37 Do J = 1,LastPos ^ Warning near line 37 col 11: Nonstandard syntax 38 Ch = InLine(J:J) 39 L = IntUpCase(ICHAR(Ch)) 40 NEC(L) = NEC(L) + 1 41 If ((Ch.NE.' ').AND.(Ch.NE.'.')) Then 42 NC = NC + 1 43 ElseIf (Ch.EQ.'.') Then 44 NP = NP + 1 45 Else 46 NW = NW + 1 47 EndIf 48 EndDo ^ Warning near line 48 col 11: Nonstandard syntax 49 EndDo ^ Warning near line 49 col 7: Nonstandard syntax 50 888 Continue 51 ACPW = REAL(NC)/REAL(NW) 52 AWPS = REAL(NW)/REAL(NP) 53 Return 54 10 Format(a) 55 999 Print*,'Error opening file, please verify filename and try again.' 56 C 57 C In the event of improper filename exit abruptly. 58 C 59 STOP 60 End Module GETSTATS: subr External subprograms referenced: ICHAR: intrns INDEX: intrns INTUPCASE: intg* REAL: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* CH char FNAME char80 INLINE char82 J intg* L intg* LASTPOS intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. Warning in module GETSTATS: Names longer than 6 chars (nonstandard): GETSTATS declared at line 28 INTUPCASE referenced at line 39 LASTPOS first occurrence at line 36 I/O Operations: Unit ID Unit No. Access Form Operation Line 8 SEQ FMTD OPEN 32 8 SEQ FMTD READ 34 * SEQ FMTD PRINT 55 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 54 format <888> 50 exec <999> 55 exec 61 C 62 C SubRoutine to print to terminal all of these neat statistics. 63 C 64 SubRoutine PrintStats 65 Include 'stats.h' ^ Warning near line 65 col 7: Nonstandard syntax Including file ./Include/stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 66 67 Write(5,10)ACPW,AWPS,NW,NP,NL,NC 68 Write(5,20) 69 Do J = 65,90 ^ Warning near line 69 col 7: Nonstandard syntax 70 Write(5,40)(CHAR(J),NEC(J),('@',K=1,(NEC(J)/10)), 71 1 ('*',K=1,MOD(NEC(J),10))) ^ Error near line 71 col 43: syntax error, unexpected ')', expecting ',' 72 EndDo ^ Warning near line 72 col 7: Nonstandard syntax 73 Write(5,50) 74 10 Format('1'30X'Word Statistics'/1x,80('*')/ 75 1 1X'Average characters per word = 'F6.2/ 76 2 1X'Average words per sentence = 'F6.2/ 77 3 1X'Total number of words = 'I5/ 78 4 1X'Total number of sentences = 'I5/ 79 5 1X'Total number of lines = 'I5/ 80 6 1X'Total number of characters = 'I5/) 81 20 Format(29x'Character Statistics'/1x,80('*')/) 82 30 Format(1X,A) 83 40 Format(1X,A','I3,1x,125(A)) 84 50 Format(1X'Legend:'/9x'@ equals ten characters', 85 1 ', * equals one character.') 86 Return 87 End Module PRINTSTATS: subr External subprograms referenced: CHAR: intrns MOD: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* J intg* K intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. Warning in module PRINTSTATS: Names longer than 6 chars (nonstandard): PRINTSTATS declared at line 64 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD WRITE 67 68 73 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 74 format <20> 81 format <30> 82 format <40> 83 format <50> 84 format Warning in module PRINTSTATS: Labels defined but not used: <30> defined at line 82 88 C 89 C SubRoutine to prompt for and return a filename. 90 C 91 SubRoutine GetFileName(Fname) 92 Character Fname*80, Prompt*7 93 94 Prompt = '_File: ' 95 Write(5,10)Prompt 96 Read(5,20)Fname 97 10 Format(1XA$) ^ Warning near line 97 col 17: Nonstandard syntax 98 20 Format(A) 99 Return 100 End Module GETFILENAME: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 PROMPT char7 Warning in module GETFILENAME: Names longer than 6 chars (nonstandard): GETFILENAME declared at line 91 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 96 5 SEQ FMTD WRITE 95 Statement labels defined: Label Line StmtType Label Line StmtType <10> 97 format <20> 98 format 101 C 102 C SubRoutine to initailize globally used variables. 103 C 104 SubRoutine Initialize 105 Common /Stats/A,B,J,K,L,M,N(26) 106 Do O = 1,26 ^ Warning near line 106 col 10: DO index is not integer ^ Warning near line 106 col 7: Nonstandard syntax 107 N(O) = 0 ^ Warning near line 107 col 11: subscript is not integer 108 EndDo ^ Warning near line 108 col 7: Nonstandard syntax 109 A = 0.0 110 B = 0.0 111 J = 0 112 K = 0 113 L = 0 114 M = 0 115 Return 116 End Module INITIALIZE: subr Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* J intg* K intg* L intg* M intg* N intg* 1 O real* * Variable not declared. Type has been implicitly defined. Warning in module INITIALIZE: Names longer than 6 chars (nonstandard): INITIALIZE declared at line 104 117 C 118 C Function to return integer value of a character in range of uppercase. 119 C 120 Function IntUpCase (I) 121 122 If ((I.LE.ICHAR('z')).AND.(I.GE.ICHAR('a'))) Then 123 IntUpCase = I - ICHAR(' ') 124 Else 125 IntUpCase = I 126 EndIf 127 Return 128 End Module INTUPCASE: func: intg* External subprograms referenced: ICHAR: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* INTUPCASE intg* * Variable not declared. Type has been implicitly defined. Warning in module INTUPCASE: Names longer than 6 chars (nonstandard): INTUPCASE declared at line 120 1 syntax error detected in file include.f 24 warnings issued in file include.f Warning: Common block STATS array dimen/size mismatch at position 7: Variable NEC in module GETSTATS line 1 file ./Include/stats.h (included at line 29 in include.f) has size 255 Variable N in module INITIALIZE line 105 file include.f has size 26 ftnchek-3.3.1/test/Okay/include.fcx0000644000031000002260000002541310145015312017562 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File include.f: 1 C Derived from Brian Downing's WC program, replacing common decls by INCLUDEs 2 C 3 C main(){ Get a file, open it, read and determine semi-useful 4 C statistics, print them to screen, and exit quietly. 5 C }; 6 C 7 C This program is an example word counter that makes use of several 8 C Fortran intrinsic functions and data structures, such as; 9 C common, sub-routines, functions, inplied do loops, and much, much more. 10 C 11 Program WC 12 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 13 C Program: Word_Count_And_Other_Stuff C 14 C Written_By: Brian Downing C 15 C Fordham University C 16 C Date: October 1st-16th, 1990 C 17 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 18 Character Fname*80 19 20 Call Initialize 21 Call GetFileName(Fname) 22 Call GetStats(Fname) 23 Call PrintStats 24 End Module WC: prog External subprograms referenced: GETFILENAME: subr GETSTATS: subr INITIALIZE: subr PRINTSTATS: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 "include.f", line 21: Warning in module WC: Names longer than 6 chars (nonstandard): "include.f", line 21: GETFILENAME referenced "include.f", line 22: GETSTATS referenced "include.f", line 20: INITIALIZE referenced "include.f", line 23: PRINTSTATS referenced 25 C 26 C SubRoutine to get all kinds of neat statistics. 27 C 28 SubRoutine GetStats(Fname) 29 Include 'stats.h' ^ "include.f", line 29 col 7: Warning: Nonstandard syntax Including file ./Include/stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 30 Character Inline*82, Fname*80, Ch 31 32 Open (Unit=8,File=Fname,Err=999) 33 Do While (.TRUE.) ^ "include.f", line 33 col 7: Warning: Nonstandard syntax 34 Read(8,10,End=888)InLine 35 NL = NL + 1 36 LastPos = INDEX(InLine,' ') 37 Do J = 1,LastPos ^ "include.f", line 37 col 11: Warning: Nonstandard syntax 38 Ch = InLine(J:J) 39 L = IntUpCase(ICHAR(Ch)) 40 NEC(L) = NEC(L) + 1 41 If ((Ch.NE.' ').AND.(Ch.NE.'.')) Then 42 NC = NC + 1 43 ElseIf (Ch.EQ.'.') Then 44 NP = NP + 1 45 Else 46 NW = NW + 1 47 EndIf 48 EndDo ^ "include.f", line 48 col 11: Warning: Nonstandard syntax 49 EndDo ^ "include.f", line 49 col 7: Warning: Nonstandard syntax 50 888 Continue 51 ACPW = REAL(NC)/REAL(NW) 52 AWPS = REAL(NW)/REAL(NP) 53 Return 54 10 Format(a) 55 999 Print*,'Error opening file, please verify filename and try again.' 56 C 57 C In the event of improper filename exit abruptly. 58 C 59 STOP 60 End Module GETSTATS: subr External subprograms referenced: ICHAR: intrns INDEX: intrns INTUPCASE: intg* REAL: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* CH char FNAME char80 INLINE char82 J intg* L intg* LASTPOS intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. "include.f", line 28: Warning in module GETSTATS: Names longer than 6 chars (nonstandard): "include.f", line 28: GETSTATS declared "include.f", line 39: INTUPCASE referenced "include.f", line 36: LASTPOS first occurrence I/O Operations: Unit ID Unit No. Access Form Operation Line 8 SEQ FMTD OPEN 32 8 SEQ FMTD READ 34 * SEQ FMTD PRINT 55 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 54 format <888> 50 exec <999> 55 exec 61 C 62 C SubRoutine to print to terminal all of these neat statistics. 63 C 64 SubRoutine PrintStats 65 Include 'stats.h' ^ "include.f", line 65 col 7: Warning: Nonstandard syntax Including file ./Include/stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 66 67 Write(5,10)ACPW,AWPS,NW,NP,NL,NC 68 Write(5,20) 69 Do J = 65,90 ^ "include.f", line 69 col 7: Warning: Nonstandard syntax 70 Write(5,40)(CHAR(J),NEC(J),('@',K=1,(NEC(J)/10)), 71 1 ('*',K=1,MOD(NEC(J),10))) ^ "include.f", line 71 col 43: Error: syntax error, unexpected ')', expecting ',' 72 EndDo ^ "include.f", line 72 col 7: Warning: Nonstandard syntax 73 Write(5,50) 74 10 Format('1'30X'Word Statistics'/1x,80('*')/ 75 1 1X'Average characters per word = 'F6.2/ 76 2 1X'Average words per sentence = 'F6.2/ 77 3 1X'Total number of words = 'I5/ 78 4 1X'Total number of sentences = 'I5/ 79 5 1X'Total number of lines = 'I5/ 80 6 1X'Total number of characters = 'I5/) 81 20 Format(29x'Character Statistics'/1x,80('*')/) 82 30 Format(1X,A) 83 40 Format(1X,A','I3,1x,125(A)) 84 50 Format(1X'Legend:'/9x'@ equals ten characters', 85 1 ', * equals one character.') 86 Return 87 End Module PRINTSTATS: subr External subprograms referenced: CHAR: intrns MOD: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* J intg* K intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. "include.f", line 64: Warning in module PRINTSTATS: Names longer than 6 chars (nonstandard): "include.f", line 64: PRINTSTATS declared I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD WRITE 67 68 73 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 74 format <20> 81 format <30> 82 format <40> 83 format <50> 84 format "include.f", line 82: Warning in module PRINTSTATS: Labels defined but not used: "include.f", line 82: <30> defined 88 C 89 C SubRoutine to prompt for and return a filename. 90 C 91 SubRoutine GetFileName(Fname) 92 Character Fname*80, Prompt*7 93 94 Prompt = '_File: ' 95 Write(5,10)Prompt 96 Read(5,20)Fname 97 10 Format(1XA$) ^ "include.f", line 97 col 17: Warning: Nonstandard syntax 98 20 Format(A) 99 Return 100 End Module GETFILENAME: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 PROMPT char7 "include.f", line 91: Warning in module GETFILENAME: Names longer than 6 chars (nonstandard): "include.f", line 91: GETFILENAME declared I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 96 5 SEQ FMTD WRITE 95 Statement labels defined: Label Line StmtType Label Line StmtType <10> 97 format <20> 98 format 101 C 102 C SubRoutine to initailize globally used variables. 103 C 104 SubRoutine Initialize 105 Common /Stats/A,B,J,K,L,M,N(26) 106 Do O = 1,26 ^ "include.f", line 106 col 10: Warning: DO index is not integer ^ "include.f", line 106 col 7: Warning: Nonstandard syntax 107 N(O) = 0 ^ "include.f", line 107 col 11: Warning: subscript is not integer 108 EndDo ^ "include.f", line 108 col 7: Warning: Nonstandard syntax 109 A = 0.0 110 B = 0.0 111 J = 0 112 K = 0 113 L = 0 114 M = 0 115 Return 116 End Module INITIALIZE: subr Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* J intg* K intg* L intg* M intg* N intg* 1 O real* * Variable not declared. Type has been implicitly defined. "include.f", line 104: Warning in module INITIALIZE: Names longer than 6 chars (nonstandard): "include.f", line 104: INITIALIZE declared 117 C 118 C Function to return integer value of a character in range of uppercase. 119 C 120 Function IntUpCase (I) 121 122 If ((I.LE.ICHAR('z')).AND.(I.GE.ICHAR('a'))) Then 123 IntUpCase = I - ICHAR(' ') 124 Else 125 IntUpCase = I 126 EndIf 127 Return 128 End Module INTUPCASE: func: intg* External subprograms referenced: ICHAR: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* INTUPCASE intg* * Variable not declared. Type has been implicitly defined. "include.f", line 120: Warning in module INTUPCASE: Names longer than 6 chars (nonstandard): "include.f", line 120: INTUPCASE declared 1 syntax error detected in file include.f 24 warnings issued in file include.f "./Include/stats.h", line 1: Warning: Common block STATS array dimen/size mismatch at position 7: "./Include/stats.h", line 1: (location of error) "include.f", line 29: (where included) Variable NEC in module GETSTATS has size 255 "include.f", line 105: Variable N in module INITIALIZE has size 26 ftnchek-3.3.1/test/Okay/initializers.fcl0000644000031000002260000001536510145015312020636 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File initializers.f: 1 C Testing syntax recognition and assignment type checking of 2 C standard and non-standard initializing declarations. 3 4 C Here we use modern standard F90 initializers 5 subroutine f90 6 integer :: m, n = 100 ^ Warning near line 6 col 23: Nonstandard syntax: F90-style initializer ^ Warning near line 6 col 15: Nonstandard syntax: attribute-based variable declaration 7 C ftnchek does not recognize the following one yet 8 integer, dimension(5) :: a = (/ 1, 2, 3, 4, 5 /) ^ Error near line 8 col 39: syntax error, unexpected '/' 9 real :: pi = 3.14159265358979d0 ^ Warning near line 9 col 18: Nonstandard syntax: F90-style initializer ^ Warning near line 9 col 20: dble const 3.14159265358979D0 truncated to real PI ^ Warning near line 9 col 12: Nonstandard syntax: attribute-based variable declaration 10 character :: c = 32 ! type mismatch ^ Warning near line 10 col 29: Nonstandard syntax: inline comment ^ Warning near line 10 col 22: Nonstandard syntax: F90-style initializer ^ Error near line 10 col 24: type mismatch: intg const 32 assigned to char*1 C ^ Warning near line 10 col 17: Nonstandard syntax: attribute-based variable declaration 11 integer :: q = 'hello' ! type mismatch ^ Warning near line 11 col 32: Nonstandard syntax: inline comment ^ Warning near line 11 col 20: Nonstandard syntax: F90-style initializer ^ Error near line 11 col 22: type mismatch: char*5 const 'hello' assigned to intg Q ^ Warning near line 11 col 15: Nonstandard syntax: attribute-based variable declaration 12 print *, 'F90 initializers:' 13 print *, m, n, a ! m used before set ^ Warning near line 13 col 26: Nonstandard syntax: inline comment 14 print *, pi, c, q 15 end Module F90: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg Warning in module F90: Variables used before set A used at line 13; never set M used at line 13; never set I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 12 13 14 16 C Here we use archaic but standard F77 separate type decls and data stmts 17 subroutine f77 18 integer m, n, a(5) 19 real pi 20 character c 21 integer q 22 data n / 100 / 23 data a / 1, 2, 3, 4, 5 / 24 data pi / 3.14159265358979d0 / 25 data c / 32 / ! type mismatch ^ Warning near line 25 col 23: Nonstandard syntax: inline comment 26 data q / 'hello' / ! type mismatch ^ Warning near line 26 col 28: Nonstandard syntax: inline comment 27 print *, 'F77 initializers:' 28 print *, m, n, a ! m used before set ^ Warning near line 28 col 26: Nonstandard syntax: inline comment 29 print *, pi, c, q 30 end Module F77: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg Warning in module F77: Variables used before set M used at line 28; never set I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 27 28 29 31 C This one uses "bastard" initializer form. 32 subroutine bastard 33 integer m, n / 100 /, a(5) / 1, 2, 3, 4, 5 / ^ Warning near line 33 col 20: Nonstandard syntax: combined type declaration and data-style initializer ^ Warning near line 33 col 34: Nonstandard syntax: combined type declaration and data-style initializer 34 real pi / 3.14159265358979d0 / ^ Warning near line 34 col 15: Nonstandard syntax: combined type declaration and data-style initializer ^ Warning near line 34 col 17: dble expr 3.14159265358979D0 truncated to real PI 35 character c / 32 / ! type mismatch ^ Warning near line 35 col 28: Nonstandard syntax: inline comment ^ Warning near line 35 col 19: Nonstandard syntax: combined type declaration and data-style initializer ^ Error near line 35 col 21: type mismatch: intg expr 32 assigned to char*1 C 36 integer q / 'hello' / ! type mismatch ^ Warning near line 36 col 31: Nonstandard syntax: inline comment ^ Warning near line 36 col 17: Nonstandard syntax: combined type declaration and data-style initializer ^ Error near line 36 col 19: type mismatch: char expr 'hello assigned to intg Q 37 print *, 'bastard initializers:' 38 print *, m, n, a ! m used before set ^ Warning near line 38 col 26: Nonstandard syntax: inline comment 39 print *, pi, c, q 40 end Module BASTARD: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg Warning in module BASTARD: Variables used before set M used at line 38; never set Warning in module BASTARD: Names longer than 6 chars (nonstandard): BASTARD declared at line 32 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 37 38 39 41 C Main program just suppresses "never invoked" warnings. 42 program main 43 call f90 44 call f77 45 call bastard 46 end 47 Module MAIN: prog External subprograms referenced: BASTARD: subr F77: subr F90: subr Warning in module MAIN: Names longer than 6 chars (nonstandard): BASTARD referenced at line 45 5 syntax errors detected in file initializers.f 29 warnings issued in file initializers.f ftnchek-3.3.1/test/Okay/initializers.fcx0000644000031000002260000001660210145015312020645 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File initializers.f: 1 C Testing syntax recognition and assignment type checking of 2 C standard and non-standard initializing declarations. 3 4 C Here we use modern standard F90 initializers 5 subroutine f90 6 integer :: m, n = 100 ^ "initializers.f", line 6 col 23: Warning: Nonstandard syntax: F90-style initializer ^ "initializers.f", line 6 col 15: Warning: Nonstandard syntax: attribute-based variable declaration 7 C ftnchek does not recognize the following one yet 8 integer, dimension(5) :: a = (/ 1, 2, 3, 4, 5 /) ^ "initializers.f", line 8 col 39: Error: syntax error, unexpected '/' 9 real :: pi = 3.14159265358979d0 ^ "initializers.f", line 9 col 18: Warning: Nonstandard syntax: F90-style initializer ^ "initializers.f", line 9 col 20: Warning: dble const 3.14159265358979D0 truncated to real PI ^ "initializers.f", line 9 col 12: Warning: Nonstandard syntax: attribute-based variable declaration 10 character :: c = 32 ! type mismatch ^ "initializers.f", line 10 col 29: Warning: Nonstandard syntax: inline comment ^ "initializers.f", line 10 col 22: Warning: Nonstandard syntax: F90-style initializer ^ "initializers.f", line 10 col 24: Error: type mismatch: intg const 32 assigned to char*1 C ^ "initializers.f", line 10 col 17: Warning: Nonstandard syntax: attribute-based variable declaration 11 integer :: q = 'hello' ! type mismatch ^ "initializers.f", line 11 col 32: Warning: Nonstandard syntax: inline comment ^ "initializers.f", line 11 col 20: Warning: Nonstandard syntax: F90-style initializer ^ "initializers.f", line 11 col 22: Error: type mismatch: char*5 const 'hello' assigned to intg Q ^ "initializers.f", line 11 col 15: Warning: Nonstandard syntax: attribute-based variable declaration 12 print *, 'F90 initializers:' 13 print *, m, n, a ! m used before set ^ "initializers.f", line 13 col 26: Warning: Nonstandard syntax: inline comment 14 print *, pi, c, q 15 end Module F90: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg "initializers.f", line 13: Warning in module F90: Variables used before set "initializers.f", line 13: A used; never set "initializers.f", line 13: M used; never set I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 12 13 14 16 C Here we use archaic but standard F77 separate type decls and data stmts 17 subroutine f77 18 integer m, n, a(5) 19 real pi 20 character c 21 integer q 22 data n / 100 / 23 data a / 1, 2, 3, 4, 5 / 24 data pi / 3.14159265358979d0 / 25 data c / 32 / ! type mismatch ^ "initializers.f", line 25 col 23: Warning: Nonstandard syntax: inline comment 26 data q / 'hello' / ! type mismatch ^ "initializers.f", line 26 col 28: Warning: Nonstandard syntax: inline comment 27 print *, 'F77 initializers:' 28 print *, m, n, a ! m used before set ^ "initializers.f", line 28 col 26: Warning: Nonstandard syntax: inline comment 29 print *, pi, c, q 30 end Module F77: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg "initializers.f", line 28: Warning in module F77: Variables used before set "initializers.f", line 28: M used; never set I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 27 28 29 31 C This one uses "bastard" initializer form. 32 subroutine bastard 33 integer m, n / 100 /, a(5) / 1, 2, 3, 4, 5 / ^ "initializers.f", line 33 col 20: Warning: Nonstandard syntax: combined type declaration and data-style initializer ^ "initializers.f", line 33 col 34: Warning: Nonstandard syntax: combined type declaration and data-style initializer 34 real pi / 3.14159265358979d0 / ^ "initializers.f", line 34 col 15: Warning: Nonstandard syntax: combined type declaration and data-style initializer ^ "initializers.f", line 34 col 17: Warning: dble expr 3.14159265358979D0 truncated to real PI 35 character c / 32 / ! type mismatch ^ "initializers.f", line 35 col 28: Warning: Nonstandard syntax: inline comment ^ "initializers.f", line 35 col 19: Warning: Nonstandard syntax: combined type declaration and data-style initializer ^ "initializers.f", line 35 col 21: Error: type mismatch: intg expr 32 assigned to char*1 C 36 integer q / 'hello' / ! type mismatch ^ "initializers.f", line 36 col 31: Warning: Nonstandard syntax: inline comment ^ "initializers.f", line 36 col 17: Warning: Nonstandard syntax: combined type declaration and data-style initializer ^ "initializers.f", line 36 col 19: Error: type mismatch: char expr 'hello assigned to intg Q 37 print *, 'bastard initializers:' 38 print *, m, n, a ! m used before set ^ "initializers.f", line 38 col 26: Warning: Nonstandard syntax: inline comment 39 print *, pi, c, q 40 end Module BASTARD: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 C char M intg N intg PI real Q intg "initializers.f", line 38: Warning in module BASTARD: Variables used before set "initializers.f", line 38: M used; never set "initializers.f", line 32: Warning in module BASTARD: Names longer than 6 chars (nonstandard): "initializers.f", line 32: BASTARD declared I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 37 38 39 41 C Main program just suppresses "never invoked" warnings. 42 program main 43 call f90 44 call f77 45 call bastard 46 end 47 Module MAIN: prog External subprograms referenced: BASTARD: subr F77: subr F90: subr "initializers.f", line 45: Warning in module MAIN: Names longer than 6 chars (nonstandard): "initializers.f", line 45: BASTARD referenced 5 syntax errors detected in file initializers.f 29 warnings issued in file initializers.f ftnchek-3.3.1/test/Okay/intrinstest.fc00000644000031000002260000000407110145015312020412 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 2 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram IOR never defined Invoked in module %MAIN line 8 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram NOT never defined Invoked in module %MAIN line 9 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram GETARG never defined Invoked in module %MAIN line 11 file intrinstest.f Warning: Subprogram IARGC never defined Invoked in module %MAIN line 14 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram IARGC varying number of arguments: Invoked in module %MAIN line 14 file intrinstest.f with 1 argument Invoked in module %MAIN line 13 file intrinstest.f with 0 arguments Warning: Subprogram RAND never defined Invoked in module %MAIN line 16 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram RAND varying number of arguments: Invoked in module %MAIN line 16 file intrinstest.f with 1 argument Invoked in module %MAIN line 15 file intrinstest.f with 0 arguments Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc10000644000031000002260000000342510145015312020415 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 2 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram GETARG never defined Invoked in module %MAIN line 11 file intrinstest.f Warning: Subprogram IARGC never defined Invoked in module %MAIN line 14 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram IARGC varying number of arguments: Invoked in module %MAIN line 14 file intrinstest.f with 1 argument Invoked in module %MAIN line 13 file intrinstest.f with 0 arguments Warning: Subprogram RAND never defined Invoked in module %MAIN line 16 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram RAND varying number of arguments: Invoked in module %MAIN line 16 file intrinstest.f with 1 argument Invoked in module %MAIN line 15 file intrinstest.f with 0 arguments Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc20000644000031000002260000000244210145015312020414 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 2 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram IOR never defined Invoked in module %MAIN line 8 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram NOT never defined Invoked in module %MAIN line 9 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc30000644000031000002260000000364610145015312020424 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 2 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram IOR never defined Invoked in module %MAIN line 8 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram NOT never defined Invoked in module %MAIN line 9 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram GETARG never defined Invoked in module %MAIN line 11 file intrinstest.f Warning: Subprogram IARGC never defined Invoked in module %MAIN line 14 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram IARGC varying number of arguments: Invoked in module %MAIN line 14 file intrinstest.f with 1 argument Invoked in module %MAIN line 13 file intrinstest.f with 0 arguments Warning: Subprogram RAND never defined Invoked in module %MAIN line 16 file intrinstest.f (possibly it is an array which was not declared) Warning: Subprogram RAND varying number of arguments: Invoked in module %MAIN line 16 file intrinstest.f with 1 argument Invoked in module %MAIN line 15 file intrinstest.f with 0 arguments ftnchek-3.3.1/test/Okay/intrinstest.fc40000644000031000002260000000222010145015312020410 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I 15 x = rand() ^ Error near line 15 col 11 file intrinstest.f: wrong number of arguments for intrinsic function RAND Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 3 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc50000644000031000002260000000222610145015312020417 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I 16 x = rand(0) ^ Error near line 16 col 16 file intrinstest.f: wrong number of arguments for intrinsic function RAND Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 3 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc60000644000031000002260000000222210145015312020414 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I 13 i = iargc() ^ Error near line 13 col 11 file intrinstest.f: wrong number of arguments for intrinsic function IARGC Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 3 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc70000644000031000002260000000223110145015312020415 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I 14 i = iargc(0) ^ Error near line 14 col 17 file intrinstest.f: wrong number of arguments for intrinsic function IARGC Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 3 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f Warning: Subprogram RAN never defined Invoked in module %MAIN line 18 file intrinstest.f (possibly it is an array which was not declared) ftnchek-3.3.1/test/Okay/intrinstest.fc80000644000031000002260000000155410145015312020425 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File intrinstest.f: 5 z = sqrt(i) ^ Error near line 5 col 16 file intrinstest.f: illegal argument data type for intrinsic function SQRT: intg I 6 i = max(x,i) ^ Error near line 6 col 15 file intrinstest.f: type mismatch between intrinsic function arguments: real X , intg I Warning in module %MAIN in file intrinstest.f: Variables set but never used: Z set at line 5 file intrinstest.f Warning in module %MAIN in file intrinstest.f: Variables used before set Y used at line 3 file intrinstest.f; never set Warning in module %MAIN in file intrinstest.f: Variables may be used before set: I used at line 5 file intrinstest.f I set at line 6 file intrinstest.f 2 syntax errors detected in file intrinstest.f 3 warnings issued in file intrinstest.f ftnchek-3.3.1/test/Okay/iokeywords.fc00000644000031000002260000000066110145015312020224 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iokeywords.f: Warning in module F90_STUFF in file iokeywords.f: Variables set but never used: C1 set at line 55 file iokeywords.f C2 set at line 55 file iokeywords.f I1 set at line 55 file iokeywords.f INPUTSIZE set at line 53 file iokeywords.f VAL set at line 54 file iokeywords.f 0 syntax errors detected in file iokeywords.f 1 warning issued in file iokeywords.f ftnchek-3.3.1/test/Okay/iokeywords.fc10000644000031000002260000000710010145015312020220 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iokeywords.f: Warning in module IOKEYWDS in file iokeywords.f: Names longer than 6 chars (nonstandard): DIRECT_ACCESS referenced at line 4 file iokeywords.f F90_STUFF referenced at line 5 file iokeywords.f IOKEYWDS declared at line 2 file iokeywords.f VMS_ISMS referenced at line 3 file iokeywords.f Warning in module IOKEYWDS in file iokeywords.f: Names containing nonstandard characters: DIRECT_ACCESS referenced at line 4 file iokeywords.f F90_STUFF referenced at line 5 file iokeywords.f VMS_ISMS referenced at line 3 file iokeywords.f 10 open(unit=1,carriagecontrol='none',recordtype='fixed', ^ Warning near line 10 col 19 file iokeywords.f: Nonstandard syntax ^ Warning near line 10 col 42 file iokeywords.f: Nonstandard syntax 12 open(unit=2,carriagecontrol='none',recl=512,status='old',err=1) ^ Warning near line 12 col 19 file iokeywords.f: Nonstandard syntax 15 2 do i=1,4 ^ Warning near line 15 col 7 file iokeywords.f: Nonstandard syntax 17 end do ^ Warning near line 17 col 7 file iokeywords.f: Nonstandard syntax Warning in module VMS_ISMS in file iokeywords.f: Names longer than 6 chars (nonstandard): VMS_ISMS declared at line 7 file iokeywords.f Warning in module VMS_ISMS in file iokeywords.f: Names containing nonstandard characters: VMS_ISMS declared at line 7 file iokeywords.f 33 do j = 1,100 ^ Warning near line 33 col 7 file iokeywords.f: Nonstandard syntax 37 enddo ^ Warning near line 37 col 7 file iokeywords.f: Nonstandard syntax Warning in module DIRECT_ACCESS in file iokeywords.f: Names longer than 6 chars (nonstandard): DIRECT_ACCESS declared at line 24 file iokeywords.f Warning in module DIRECT_ACCESS in file iokeywords.f: Names containing nonstandard characters: DIRECT_ACCESS declared at line 24 file iokeywords.f 51 open(unit=unit,file='data.dat',status='old',action='read', ^ Warning near line 51 col 51 file iokeywords.f: Nonstandard syntax 53 read(unit=unit,fmt='(i10)',advance='no',size=inputsize, ^ Warning near line 53 col 34 file iokeywords.f: Nonstandard syntax ^ Warning near line 53 col 47 file iokeywords.f: Nonstandard syntax 55 inquire(unit=unit,recl=i1,access=c1,position=c2) ^ Warning near line 55 col 43 file iokeywords.f: Nonstandard syntax 56 write(unit=*,fmt='(1x,a7)',advance='yes') 'Success' ^ Warning near line 56 col 34 file iokeywords.f: Nonstandard syntax Warning in module F90_STUFF in file iokeywords.f: Variables set but never used: C1 set at line 55 file iokeywords.f C2 set at line 55 file iokeywords.f I1 set at line 55 file iokeywords.f INPUTSIZE set at line 53 file iokeywords.f VAL set at line 54 file iokeywords.f Warning in module F90_STUFF in file iokeywords.f: Names longer than 6 chars (nonstandard): F90_STUFF declared at line 47 file iokeywords.f INPUTSIZE declared at line 48 file iokeywords.f Warning in module F90_STUFF in file iokeywords.f: Names containing nonstandard characters: F90_STUFF declared at line 47 file iokeywords.f 0 syntax errors detected in file iokeywords.f 21 warnings issued in file iokeywords.f ftnchek-3.3.1/test/Okay/iokeywords.fc20000644000031000002260000000171510145015312020227 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iokeywords.f: 10 open(unit=1,carriagecontrol='none',recordtype='fixed', ^ Warning near line 10 col 19 file iokeywords.f: Nonstandard syntax (not adopted in Fortran 90) ^ Warning near line 10 col 42 file iokeywords.f: Nonstandard syntax (not adopted in Fortran 90) 12 open(unit=2,carriagecontrol='none',recl=512,status='old',err=1) ^ Warning near line 12 col 19 file iokeywords.f: Nonstandard syntax (not adopted in Fortran 90) Warning in module F90_STUFF in file iokeywords.f: Variables set but never used: C1 set at line 55 file iokeywords.f C2 set at line 55 file iokeywords.f I1 set at line 55 file iokeywords.f INPUTSIZE set at line 53 file iokeywords.f VAL set at line 54 file iokeywords.f 0 syntax errors detected in file iokeywords.f 4 warnings issued in file iokeywords.f ftnchek-3.3.1/test/Okay/iokeywords.fc30000644000031000002260000000066110145015312020227 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File iokeywords.f: Warning in module F90_STUFF in file iokeywords.f: Variables set but never used: C1 set at line 55 file iokeywords.f C2 set at line 55 file iokeywords.f I1 set at line 55 file iokeywords.f INPUTSIZE set at line 53 file iokeywords.f VAL set at line 54 file iokeywords.f 0 syntax errors detected in file iokeywords.f 1 warning issued in file iokeywords.f ftnchek-3.3.1/test/Okay/keyvars.fcl0000644000031000002260000001441610145015312017610 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File keyvars.f: 1 dimension common(10,10),entry(3,4),read(5,6) 2 logical save, stop, program 3 character integer, data, endif, format(10) 4 integer external,implicit, intrinsic, pause, write(5,6) 5 real complex 6 external complex 7 data data /'!'/ 8 implicit = none 9 assign = block 10 exit = assign 11 pointer = pointee 12 double = precision 13 precision = double 14 common(9,0) = continue ** dimension 15 do = double*else-end+enddo 16 entry(external,implicit) = intrinsic - pause 17 program = stop .and. save 18 if(character .lt. close) then 19 equivalence = endfile 20 else if (rewind - backspace .lt. common(1,2)) then 21 goto = do 22 if = logical 23 end if 24 if( print .eq. if) then = to 25 include = inquire 26 open = accept 27 read(5,6) write(1,2) 28 read(5,6) = write(1,2) 29 6 format(i10) 30 format(i10) = data 31 return = real 32 subroutine = then 33 call call(complex,endif) 34 integer = data 35 end Module %MAIN: prog External subprograms referenced: CALL: subr COMPLEX: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACCEPT real* ASSIGN real* BACKSPACE real* BLOCK real* CHARACTER real* CLOSE real* COMMON real* 2 CONTINUE real* DATA char DIMENSION real* DO real* DOUBLE real* ELSE real* END real* ENDDO real* ENDFILE real* ENDIF char ENTRY real* 2 EQUIVALENCE real* EXIT real* EXTERNAL intg FORMAT char 1 GOTO real* I10 intg* IF intg* IMPLICIT intg INCLUDE intg* INQUIRE intg* INTEGER char INTRINSIC intg LOGICAL intg* NONE intg* OPEN real* PAUSE intg POINTEE real* POINTER real* PRECISION real* PRINT real* PROGRAM logl READ real* 2 REAL real* RETURN real* REWIND real* SAVE logl STOP logl SUBROUTINE real* THEN real* TO real* WRITE intg 2 * Variable not declared. Type has been implicitly defined. Warning in module %MAIN: Variables set but never used: ENTRY set at line 16 EQUIVALENCE set at line 19 EXIT set at line 10 FORMAT set at line 30 GOTO set at line 21 INCLUDE set at line 25 INTEGER set at line 34 OPEN set at line 26 POINTER set at line 11 PROGRAM set at line 17 READ set at line 28 RETURN set at line 31 SUBROUTINE set at line 32 Warning in module %MAIN: Variables used before set ACCEPT used at line 26; never set BACKSPACE used at line 20; never set BLOCK used at line 9; never set CHARACTER used at line 18; never set CLOSE used at line 18; never set CONTINUE used at line 14; never set DIMENSION used at line 14; never set ELSE used at line 15; never set END used at line 15; never set ENDDO used at line 15; never set ENDFILE used at line 19; never set EXTERNAL used at line 16; never set I10 used at line 30; never set INQUIRE used at line 25; never set INTRINSIC used at line 16; never set LOGICAL used at line 22; never set NONE used at line 8; never set PAUSE used at line 16; never set POINTEE used at line 11; never set PRINT used at line 24; never set REAL used at line 31; never set REWIND used at line 20; never set SAVE used at line 17; never set STOP used at line 17; never set TO used at line 24; never set Warning in module %MAIN: Variables may be used before set: PRECISION used at line 12 PRECISION set at line 13 Warning in module %MAIN: Names longer than 6 chars (nonstandard): BACKSPACE first occurrence at line 20 CHARACTER first occurrence at line 18 COMPLEX defined at line 5 CONTINUE first occurrence at line 14 DIMENSION first occurrence at line 14 ENDFILE first occurrence at line 19 EQUIVALENCE first occurrence at line 19 EXTERNAL declared at line 4 IMPLICIT declared at line 4 INCLUDE first occurrence at line 25 INQUIRE first occurrence at line 25 INTEGER declared at line 3 INTRINSIC declared at line 4 LOGICAL first occurrence at line 22 POINTEE first occurrence at line 11 POINTER first occurrence at line 11 PRECISION first occurrence at line 12 PROGRAM declared at line 2 SUBROUTINE first occurrence at line 32 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 27 Statement labels defined: Label Line StmtType <6> 29 format 36 subroutine call (function, character) 37 external function 38 character character 39 real = 2.3 40 complex = function(real) 41 return 42 end Module CALL: subr External subprograms referenced: FUNCTION: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CHARACTER char COMPLEX real* REAL real* * Variable not declared. Type has been implicitly defined. Warning in module CALL: Variables declared but never referenced: CHARACTER declared at line 38 (dummy argument) Warning in module CALL: Variables set but never used: COMPLEX set at line 40 Warning in module CALL: Names longer than 6 chars (nonstandard): CHARACTER declared at line 38 COMPLEX first occurrence at line 40 FUNCTION defined at line 36 43 function complex(do) 44 dimension = do + 1 45 external = 1 46 complex = dimension/external 47 return 48 end Module COMPLEX: func: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPLEX real* DIMENSION real* DO real* EXTERNAL real* * Variable not declared. Type has been implicitly defined. Warning in module COMPLEX: Names longer than 6 chars (nonstandard): COMPLEX declared at line 43 DIMENSION first occurrence at line 44 EXTERNAL first occurrence at line 45 Nonportable usage: File contains tabs 0 syntax errors detected in file keyvars.f 12 warnings issued in file keyvars.f ftnchek-3.3.1/test/Okay/keyvars.fcx0000644000031000002260000001626110145015312017624 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File keyvars.f: 1 dimension common(10,10),entry(3,4),read(5,6) 2 logical save, stop, program 3 character integer, data, endif, format(10) 4 integer external,implicit, intrinsic, pause, write(5,6) 5 real complex 6 external complex 7 data data /'!'/ 8 implicit = none 9 assign = block 10 exit = assign 11 pointer = pointee 12 double = precision 13 precision = double 14 common(9,0) = continue ** dimension 15 do = double*else-end+enddo 16 entry(external,implicit) = intrinsic - pause 17 program = stop .and. save 18 if(character .lt. close) then 19 equivalence = endfile 20 else if (rewind - backspace .lt. common(1,2)) then 21 goto = do 22 if = logical 23 end if 24 if( print .eq. if) then = to 25 include = inquire 26 open = accept 27 read(5,6) write(1,2) 28 read(5,6) = write(1,2) 29 6 format(i10) 30 format(i10) = data 31 return = real 32 subroutine = then 33 call call(complex,endif) 34 integer = data 35 end Module %MAIN: prog External subprograms referenced: CALL: subr COMPLEX: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACCEPT real* ASSIGN real* BACKSPACE real* BLOCK real* CHARACTER real* CLOSE real* COMMON real* 2 CONTINUE real* DATA char DIMENSION real* DO real* DOUBLE real* ELSE real* END real* ENDDO real* ENDFILE real* ENDIF char ENTRY real* 2 EQUIVALENCE real* EXIT real* EXTERNAL intg FORMAT char 1 GOTO real* I10 intg* IF intg* IMPLICIT intg INCLUDE intg* INQUIRE intg* INTEGER char INTRINSIC intg LOGICAL intg* NONE intg* OPEN real* PAUSE intg POINTEE real* POINTER real* PRECISION real* PRINT real* PROGRAM logl READ real* 2 REAL real* RETURN real* REWIND real* SAVE logl STOP logl SUBROUTINE real* THEN real* TO real* WRITE intg 2 * Variable not declared. Type has been implicitly defined. "keyvars.f", line 16: Warning in module %MAIN: Variables set but never used: "keyvars.f", line 16: ENTRY set "keyvars.f", line 19: EQUIVALENCE set "keyvars.f", line 10: EXIT set "keyvars.f", line 30: FORMAT set "keyvars.f", line 21: GOTO set "keyvars.f", line 25: INCLUDE set "keyvars.f", line 34: INTEGER set "keyvars.f", line 26: OPEN set "keyvars.f", line 11: POINTER set "keyvars.f", line 17: PROGRAM set "keyvars.f", line 28: READ set "keyvars.f", line 31: RETURN set "keyvars.f", line 32: SUBROUTINE set "keyvars.f", line 26: Warning in module %MAIN: Variables used before set "keyvars.f", line 26: ACCEPT used; never set "keyvars.f", line 20: BACKSPACE used; never set "keyvars.f", line 9: BLOCK used; never set "keyvars.f", line 18: CHARACTER used; never set "keyvars.f", line 18: CLOSE used; never set "keyvars.f", line 14: CONTINUE used; never set "keyvars.f", line 14: DIMENSION used; never set "keyvars.f", line 15: ELSE used; never set "keyvars.f", line 15: END used; never set "keyvars.f", line 15: ENDDO used; never set "keyvars.f", line 19: ENDFILE used; never set "keyvars.f", line 16: EXTERNAL used; never set "keyvars.f", line 30: I10 used; never set "keyvars.f", line 25: INQUIRE used; never set "keyvars.f", line 16: INTRINSIC used; never set "keyvars.f", line 22: LOGICAL used; never set "keyvars.f", line 8: NONE used; never set "keyvars.f", line 16: PAUSE used; never set "keyvars.f", line 11: POINTEE used; never set "keyvars.f", line 24: PRINT used; never set "keyvars.f", line 31: REAL used; never set "keyvars.f", line 20: REWIND used; never set "keyvars.f", line 17: SAVE used; never set "keyvars.f", line 17: STOP used; never set "keyvars.f", line 24: TO used; never set "keyvars.f", line 12: Warning in module %MAIN: Variables may be used before set: "keyvars.f", line 12: PRECISION used "keyvars.f", line 13: PRECISION set "keyvars.f", line 20: Warning in module %MAIN: Names longer than 6 chars (nonstandard): "keyvars.f", line 20: BACKSPACE first occurrence "keyvars.f", line 18: CHARACTER first occurrence "keyvars.f", line 5: COMPLEX defined "keyvars.f", line 14: CONTINUE first occurrence "keyvars.f", line 14: DIMENSION first occurrence "keyvars.f", line 19: ENDFILE first occurrence "keyvars.f", line 19: EQUIVALENCE first occurrence "keyvars.f", line 4: EXTERNAL declared "keyvars.f", line 4: IMPLICIT declared "keyvars.f", line 25: INCLUDE first occurrence "keyvars.f", line 25: INQUIRE first occurrence "keyvars.f", line 3: INTEGER declared "keyvars.f", line 4: INTRINSIC declared "keyvars.f", line 22: LOGICAL first occurrence "keyvars.f", line 11: POINTEE first occurrence "keyvars.f", line 11: POINTER first occurrence "keyvars.f", line 12: PRECISION first occurrence "keyvars.f", line 2: PROGRAM declared "keyvars.f", line 32: SUBROUTINE first occurrence I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 27 Statement labels defined: Label Line StmtType <6> 29 format 36 subroutine call (function, character) 37 external function 38 character character 39 real = 2.3 40 complex = function(real) 41 return 42 end Module CALL: subr External subprograms referenced: FUNCTION: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CHARACTER char COMPLEX real* REAL real* * Variable not declared. Type has been implicitly defined. "keyvars.f", line 38: Warning in module CALL: Variables declared but never referenced: "keyvars.f", line 38: CHARACTER declared (dummy argument) "keyvars.f", line 40: Warning in module CALL: Variables set but never used: "keyvars.f", line 40: COMPLEX set "keyvars.f", line 38: Warning in module CALL: Names longer than 6 chars (nonstandard): "keyvars.f", line 38: CHARACTER declared "keyvars.f", line 40: COMPLEX first occurrence "keyvars.f", line 36: FUNCTION defined 43 function complex(do) 44 dimension = do + 1 45 external = 1 46 complex = dimension/external 47 return 48 end Module COMPLEX: func: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPLEX real* DIMENSION real* DO real* EXTERNAL real* * Variable not declared. Type has been implicitly defined. "keyvars.f", line 43: Warning in module COMPLEX: Names longer than 6 chars (nonstandard): "keyvars.f", line 43: COMPLEX declared "keyvars.f", line 44: DIMENSION first occurrence "keyvars.f", line 45: EXTERNAL first occurrence "keyvars.f": Nonportable usage: File contains tabs 0 syntax errors detected in file keyvars.f 12 warnings issued in file keyvars.f ftnchek-3.3.1/test/Okay/labeltest.fcl0000644000031000002260000000412610145015312020100 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File labeltest.f: 1 read(unit=5,fmt=1900) x 2 1900 format(f10.0) 3 if(x) 100,250,89 4 89 assign 100 to icky 5 goto icky 6 100 write(6,*) 'hello' 7 do 123 i=1,123 8 read(fmt=1900,unit=5,end=200,err=909) x 9 123 continue 10 302 write(*,909) x 11 909 format(1x,f10.3) 12 200 continue 13 print 9, x 14 9 format(' Just checking') 15 read 10, x 16 type 11, sqrt(2.0) ^ Warning near line 16 col 7: Nonstandard syntax 17 11 format(' The sqrt of 2 is ', f15.5) 18 write(*,*) 'I''m outta here' 19 end Module %MAIN: prog External subprograms referenced: SQRT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* ICKY intg* X real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 1 8 6 SEQ FMTD WRITE 6 * SEQ FMTD PRINT 13 * SEQ FMTD READ 15 * SEQ FMTD TYPE 16 * SEQ FMTD WRITE 10 18 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <9> 14 format <11> 17 format <89> 4 exec <100> 6 exec <123> 9 exec <200> 12 exec <302> 10 exec <909> 11 format <1900> 2 format Error in module %MAIN: Goto refers to a non-executable stmt <909> referenced at line 8 Error in module %MAIN: Labels referenced but not defined: <10> referenced at line 15 <250> referenced at line 3 Warning in module %MAIN: Labels defined but not used: <302> defined at line 10 2 syntax errors detected in file labeltest.f 3 warnings issued in file labeltest.f ftnchek-3.3.1/test/Okay/labeltest.fcx0000644000031000002260000000433610145015312020117 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File labeltest.f: 1 read(unit=5,fmt=1900) x 2 1900 format(f10.0) 3 if(x) 100,250,89 4 89 assign 100 to icky 5 goto icky 6 100 write(6,*) 'hello' 7 do 123 i=1,123 8 read(fmt=1900,unit=5,end=200,err=909) x 9 123 continue 10 302 write(*,909) x 11 909 format(1x,f10.3) 12 200 continue 13 print 9, x 14 9 format(' Just checking') 15 read 10, x 16 type 11, sqrt(2.0) ^ "labeltest.f", line 16 col 7: Warning: Nonstandard syntax 17 11 format(' The sqrt of 2 is ', f15.5) 18 write(*,*) 'I''m outta here' 19 end Module %MAIN: prog External subprograms referenced: SQRT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* ICKY intg* X real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 1 8 6 SEQ FMTD WRITE 6 * SEQ FMTD PRINT 13 * SEQ FMTD READ 15 * SEQ FMTD TYPE 16 * SEQ FMTD WRITE 10 18 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <9> 14 format <11> 17 format <89> 4 exec <100> 6 exec <123> 9 exec <200> 12 exec <302> 10 exec <909> 11 format <1900> 2 format "labeltest.f", line 8: Error in module %MAIN: Goto refers to a non-executable stmt "labeltest.f", line 8: <909> referenced "labeltest.f", line 15: Error in module %MAIN: Labels referenced but not defined: "labeltest.f", line 15: <10> referenced "labeltest.f", line 3: <250> referenced "labeltest.f", line 10: Warning in module %MAIN: Labels defined but not used: "labeltest.f", line 10: <302> defined 2 syntax errors detected in file labeltest.f 3 warnings issued in file labeltest.f ftnchek-3.3.1/test/Okay/lotsalabels.fcl0000644000031000002260000000070710145015312020427 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File lotsalabels.f: Error in module TST in file lotsalabels.f: Labels referenced but not defined: <2400> referenced at line 1548 file lotsalabels.f Warning in module TST in file lotsalabels.f: Labels defined but not used: <1114> defined at line 1115 file lotsalabels.f <1548> defined at line 1549 file lotsalabels.f 1 syntax error detected in file lotsalabels.f 1 warning issued in file lotsalabels.f ftnchek-3.3.1/test/Okay/lotsalabels.fcx0000644000031000002260000000071110145015312020436 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File lotsalabels.f: "lotsalabels.f", line 1548: Error in module TST: Labels referenced but not defined: "lotsalabels.f", line 1548: <2400> referenced "lotsalabels.f", line 1115: Warning in module TST: Labels defined but not used: "lotsalabels.f", line 1115: <1114> defined "lotsalabels.f", line 1549: <1548> defined 1 syntax error detected in file lotsalabels.f 1 warning issued in file lotsalabels.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc10000644000031000002260000000055710145015312020267 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 1 real *8 x 2 double precision y 3 equivalence( x,y) 4 real r 5 equivalence (i,r) 6 x = 1.0 7 write(*,*) y 8 r = 0.0 9 write(*,*) i 10 end 0 syntax errors detected in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc20000644000031000002260000000040210145015312020255 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 1 real *8 x ^ Warning near line 1 col 13 file mixed-equiv.f: Nonstandard syntax 0 syntax errors detected in file mixed-equiv.f 1 warning issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc30000644000031000002260000000115310145015312020262 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: Warning in module %MAIN in file mixed-equiv.f: Mixed default and explicit size items equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 2 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc40000644000031000002260000000133310145015312020263 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 1 real *8 x ^ Warning near line 1 col 13 file mixed-equiv.f: Nonstandard syntax Warning in module %MAIN in file mixed-equiv.f: Mixed default and explicit size items equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 3 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc50000644000031000002260000000045610145015312020271 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision 0 syntax errors detected in file mixed-equiv.f 1 warning issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc60000644000031000002260000000063710145015312020273 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 1 real *8 x ^ Warning near line 1 col 13 file mixed-equiv.f: Nonstandard syntax 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision 0 syntax errors detected in file mixed-equiv.f 2 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc70000644000031000002260000000140710145015312020270 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision Warning in module %MAIN in file mixed-equiv.f: Mixed default and explicit size items equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 3 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fc80000644000031000002260000000156710145015312020300 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 1 real *8 x ^ Warning near line 1 col 13 file mixed-equiv.f: Nonstandard syntax 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision Warning in module %MAIN in file mixed-equiv.f: Mixed default and explicit size items equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 4 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcA0000644000031000002260000000135510145015312020304 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision Warning in module %MAIN in file mixed-equiv.f: Mixed sizes equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 3 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcB0000644000031000002260000000140710145015312020303 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision Warning in module %MAIN in file mixed-equiv.f: Mixed default and explicit size items equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 3 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcC0000644000031000002260000000112110145015312020275 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: Warning in module %MAIN in file mixed-equiv.f: Mixed sizes equivalenced (not portable): X declared at line 1 file mixed-equiv.f with type real*8 Y declared at line 2 file mixed-equiv.f with type dble Warning in module %MAIN in file mixed-equiv.f: Mixed types equivalenced (not portable): I first occurrence at line 5 file mixed-equiv.f with type intg (implicitly typed) R declared at line 4 file mixed-equiv.f with type real 0 syntax errors detected in file mixed-equiv.f 2 warnings issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcD0000644000031000002260000000045610145015312020310 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision 0 syntax errors detected in file mixed-equiv.f 1 warning issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcE0000644000031000002260000000045610145015312020311 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 6 x = 1.0 ^ Warning near line 6 col 9 file mixed-equiv.f: real const 1.0 promoted to real*8 X: may not give desired precision 0 syntax errors detected in file mixed-equiv.f 1 warning issued in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mixed-equiv.fcF0000644000031000002260000000015010145015312020301 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File mixed-equiv.f: 0 syntax errors detected in file mixed-equiv.f ftnchek-3.3.1/test/Okay/mkhtml.fcl0000644000031000002260000000440110145015312017411 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File animated_pendulum_main.f: 17 Pi = 4.0*ATAN(1.0) ^ Warning near line 17 col 12 file animated_pendulum_main.f: real expr 4.0*ATAN(1.0) promoted to dble PI: may not give desired precision 34 g = 9.81 ^ Warning near line 34 col 12 file animated_pendulum_main.f: real const 9.81 promoted to dble G: may not give desired precision 35 ThetaM = Theta*Pi/180.0 ^ Warning near line 35 col 26 file animated_pendulum_main.f: promotion may not give desired precision: dble expr THETA*PI / real const 180.0 37 t = 0.0 ^ Warning near line 37 col 12 file animated_pendulum_main.f: real const 0.0 promoted to dble T: may not give desired precision 38 w = 0.0 ^ Warning near line 38 col 12 file animated_pendulum_main.f: real const 0.0 promoted to dble W: may not give desired precision 0 syntax errors detected in file animated_pendulum_main.f 5 warnings issued in file animated_pendulum_main.f File animated_pendulum_cls.f: 0 syntax errors detected in file animated_pendulum_cls.f File animated_pendulum_entergr.f: 0 syntax errors detected in file animated_pendulum_entergr.f File animated_pendulum_plotball.f: 6 Row=Int(300.0*DSIN(Theta)) ^ Warning near line 6 col 22 file animated_pendulum_plotball.f: promotion may not give desired precision: real const 300.0 * dble expr DSIN(THETA) 7 Col=Int(300.0*DCOS(Theta)) ^ Warning near line 7 col 22 file animated_pendulum_plotball.f: promotion may not give desired precision: real const 300.0 * dble expr DCOS(THETA) Warning in module PLOTBALL in file animated_pendulum_plotball.f: Variables set but never used: COL set at line 7 file animated_pendulum_plotball.f ROW set at line 6 file animated_pendulum_plotball.f 0 syntax errors detected in file animated_pendulum_plotball.f 3 warnings issued in file animated_pendulum_plotball.f File animated_pendulum_exitgr.f: 0 syntax errors detected in file animated_pendulum_exitgr.f Tree of subprogram calls: ANIMATEDPENDULUM CLS ENTERGRAPHICSMODE EXITGRAPHICSMODE PLOTBALL ftnchek-3.3.1/test/Okay/model.fcl0000644000031000002260000000561310145015312017223 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File model.f90: 1 ! AUTHORS: MIKE MYERS AND LUCIA SPAGNUOLO 2 ! DATE: MAY 8, 1989 3 4 ! Variables: 5 ! SCORE -> an array of test scores 6 ! SUM -> sum of the test scores 7 ! COUNT -> counter of scores read in 8 ! I -> loop counter 9 10 REAL FUNCTION COMPAV(SCORE,COUNT) 11 INTEGER SUM,COUNT,J,SCORE(5) 12 13 DO I = 1,COUNT 14 SUM = SUM + SCORE(I) 15 END DO 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 10: integer quotient expr SUM/COUNT converted to real 17 END FUNCTION COMPAV Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV: Variables declared but never referenced: J declared at line 11 Warning in module COMPAV: Variables may be used before set: SUM used at line 14 SUM set at line 14 18 19 20 PROGRAM AVENUM 21 ! 22 ! MAIN PROGRAM 23 ! 24 ! AUTHOR: LOIS BIGBIE 25 ! DATE: MAY 15, 1990 26 ! 27 ! Variables: 28 ! MAXNOS -> maximum number of input values 29 ! NUMS -> an array of numbers 30 ! COUNT -> exact number of input values 31 ! AVG -> average returned by COMPAV 32 ! I -> loop counter 33 ! 34 35 PARAMETER(MAXNOS=5) 36 INTEGER I, COUNT 37 REAL NUMS(MAXNOS), AVG 38 COUNT = 0 39 DO I = 1,MAXNOS 40 READ (5,*,END=100) NUMS(I) ; COUNT = COUNT + 1 41 42 END DO 43 100 AVG = COMPAV(NUMS, COUNT) 44 END PROGRAM AVENUM Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM: Variables set but never used: AVG set at line 43 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType <100> 43 exec 0 syntax errors detected in file model.f90 6 warnings issued in file model.f90 Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file model.f90 is type intg Actual arg NUMS in module AVENUM line 43 file model.f90 is type real ftnchek-3.3.1/test/Okay/namelist.fcl0000644000031000002260000005716710145015312017752 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File namelist.f: 1 c----------------------------------------------------------------------- 2 c ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995 3 c----------------------------------------------------------------------- 4 5 common b,e,f 6 namelist /n1/ a,b,c ^ Warning near line 6 col 7: Nonstandard syntax 7 namelist /n2/ x,y,z /n3/ l,m, ^ Error near line 7 col 35: trailing comma ^ Warning near line 7 col 7: Nonstandard syntax 8 namelist /n4/ x1,y2 z3, /n5/ l6 ^ Possibly misleading appearance near line 8 col 24: identifier Y2Z3 has embedded space ^ Warning near line 8 col 7: Nonstandard syntax 9 read(*,n1) 10 write(*,n2) 11 read(1,nml=n3) ^ Warning near line 11 col 14: Nonstandard syntax 12 write(1,nml=n4) ^ Warning near line 12 col 15: Nonstandard syntax 13 end Module %MAIN: prog Common blocks referenced: %BLANK Namelists defined: N1 N2 N3 N4 N5 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* E real* F real* L intg* L6 intg* M intg* X real* X1 real* Y real* Y2Z3 real* Z real* * Variable not declared. Type has been implicitly defined. Warning in module %MAIN: Variables declared but never referenced: L6 first occurrence at line 8 Warning in module %MAIN: Variables set but never used: A set at line 9 C set at line 9 L set at line 11 M set at line 11 Warning in module %MAIN: Variables used before set X used at line 10; never set X1 used at line 12; never set Y used at line 10; never set Y2Z3 used at line 12; never set Z used at line 10; never set I/O Operations: Unit ID Unit No. Access Form Operation Line 1 SEQ FMTD READ 11 1 SEQ FMTD WRITE 12 * SEQ FMTD READ 9 * SEQ FMTD WRITE 10 14 15 16 subroutine grfgg3 17 C$ (grfgg3) 18 C$ This is a substantial portion of the declaration section from 19 C$ the PLOT79 grfgg3.sf3 file. The formatting was done by the 20 C$ Extended PFORT Verifier, and the extensive NAMELIST block serves 21 C$ as a test for ftnchek. 22 C$ (13-Mar-1995) 23 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 C$ 25 C$ EXTERNAL FUNCTIONS AND SUBROUTINES 26 C$ 27 INTEGER I1MACH, NINT, UTISL 28 REAL ALOG10, R1MACH, UTRE3 29 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 C$ 31 C$ INTRINSIC FUNCTIONS 32 C$ 33 INTEGER IABS, MAX0, MIN0 34 REAL ABS, AMAX1, AMIN1, FLOAT 35 REAL SIGN 36 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 37 C$ 38 C$ STATEMENT FUNCTIONS 39 C$ 40 LOGICAL IN 41 REAL CMTOIN, CMTOUN, FRAC, INTOCM 42 REAL INTOUN, MMTOCM, UNTOCM, UNTOIN 43 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 44 C$ 45 C$ HOLLERITH STRING VARIABLES 46 C$ 47 INTEGER BLANK, GREEK, QUOTE, ROMAN 48 C$ 49 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 50 C$ 51 C$ NON-COMMON VARIABLES 52 C$ 53 INTEGER BIGINT, CARD(500), CURCOL, CURROW 54 INTEGER FSTYLE, I, IARG, IARG1 55 INTEGER IARG2, IDFONT, IERVAL(1), II 56 INTEGER J, JX, JY, JZ 57 INTEGER K, KX, KXYZ, KY 58 INTEGER KZ, LSTYLE(06), MARK(06), MAXCRD 59 INTEGER MAXCRV, MAXVAL, MODEU, MODEV 60 INTEGER MODEX, MODEY, MODEZ, N(06) 61 INTEGER NC, NCELLX, NCELLY, NCINIT 62 INTEGER NCISAV, NCSTEP, NCTERM, NCU 63 INTEGER NCV, NCX, NCY, NCZ 64 INTEGER NIN, NJ, NOUT, NRINIT 65 INTEGER NRISAV, NRSTEP, NRTERM, NSUM 66 INTEGER NU(06), NUJ, NUMINT(06), NUSUB 67 INTEGER NVSUB, NXSUB, NYSUB, NZSUB 68 INTEGER PEN(06), TITLE(500), UTITLE(500) 69 INTEGER VTITLE(500), XTITLE(500), YTITLE(500) 70 INTEGER ZTITLE(500) 71 LOGICAL AUTOX, AUTOY, AUTOZ 72 LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX 73 LOGICAL BYROWS, CHKDUP, CVTX(06) 74 LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE 75 LOGICAL FCLIP, INTGRT(06), LOGX, LOGY 76 LOGICAL LOGZ, LSTXYZ, PARLEL, PLOPEN 77 LOGICAL PLOTID, RESET, RIGHT, UAXIS 78 LOGICAL UVAXES, VARPEN, VAXIS, WCLIP 79 LOGICAL XAXIS, XFALLS, YAXIS, YFALLS 80 LOGICAL ZAXIS, ZFALLS 81 REAL ARCLEN, ARG, ARG1, ARG2 82 REAL ARX, ARY, CMFACT, CPX 83 REAL CPY, DEFHT, DEFMAR, DT 84 REAL DUSUB, DVSUB, DXSUB, DYSUB 85 REAL DZSUB, FSCALE, GSCALE, HALF 86 REAL HH, HSCALE, HT, HTDEF 87 REAL HTFACT, HX, HY, INFITY 88 REAL LWIDTH(06), MARGIN(4), MSCALE, NINETY 89 REAL ONE, PAGESQ, PAGEX, PAGEY 90 REAL PENDIA, PERDST, PICTHX, PICTHY 91 REAL PICTX, PICTY, PPXYZ(3) 92 REAL RPXYZ(3), SIGMA(06), SWAP, T(4,4) 93 REAL TICDEF, TICKU, TICKV, TICKX 94 REAL TICKY, TICKZ, TIMAGE(4,4) 95 REAL TMODEL(4,4), TOPMAR, TT, TTLHEI 96 REAL TTLLEN, TTOTAL(4,4), TWO, U1 97 REAL U2, UDIST, UMAX, UMAXP 98 REAL UMAXRC, UMIN, UMINP, UMINRC 99 REAL UNITS, UNSPEC, UPXYZ(3), V1 100 REAL V2, VDIST, VIEWD, VMAX 101 REAL VMAXP, VMAXRC, VMIN, VMINP 102 REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN 103 REAL VPVMAX, VPVMIN, VSCALE, WMAX 104 REAL WMAXP, WMIN, WMINP 105 REAL WORK(1600,5),X(1600,06), X0, XDIST 106 REAL XFACT(06), XINT, XMAX, XMAXJ 107 REAL XMAXP, XMIN, XMINJ, XMINP 108 REAL XORG, XSHIFT(06), XX 109 REAL Y(1600,06), Y0, YDIST 110 REAL YFACT(06), YINT, YMAX, YMAXJ 111 REAL YMAXP, YMIN, YMINJ, YMINP 112 REAL YORG, YSHIFT(06), YY 113 REAL Z(1600,06), Z0, ZDIST, ZERO 114 REAL ZFACT(06), ZINT, ZMAX, ZMAXJ 115 REAL ZMAXP, ZMIN, ZMINJ, ZMINP 116 REAL ZORG, ZSHIFT(06), ZZ 117 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 118 C$ 119 C$ NAMELIST BLOCKS 120 C$ 121 NAMELIST / DATA / ^ Warning near line 121 col 7: Nonstandard syntax 122 X AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, 123 X DERIV, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB, 124 X FCLIP, FSCALE, FSTYLE, GSCALE, HSCALE, IDFONT, 125 X INTGRT, KX, KY, KZ, LOGX, LOGY, 126 X LOGZ, LSTXYZ, LSTYLE, LWIDTH, MARGIN, MARK, 127 X MODEU, MODEV, MODEX, MODEY, MODEZ, MSCALE, 128 X N, NCINIT, NCSTEP, NCTERM, NRINIT, NRSTEP, 129 X NRTERM, NU, NUMINT, NUSUB, NVSUB, NXSUB, 130 X NYSUB, NZSUB, PARLEL, PEN, PENDIA, PERDST, 131 X PLOTID, PPXYZ, RESET, RIGHT, RPXYZ, SIGMA, 132 X TICKU, TICKV, TICKX, TICKY, TICKZ, TIMAGE, 133 X TMODEL, UAXIS, UMAX, UMIN, UPXYZ, UVAXES, 134 X VAXIS, VIEWD, VMAX, VMIN, VNXYZ, VSCALE, 135 X WCLIP, WMAX, WMIN, X, XAXIS, XFACT, 136 X XFALLS, XMAX, XMIN, XSHIFT, Y, YAXIS, 137 X YFACT, YFALLS, YMAX, YMIN, YSHIFT, Z, 138 X ZAXIS, ZFACT, ZFALLS, ZMAX, ZMIN, ZSHIFT 139 END Warning near line 139: Module contains no executable statements Module GRFGG3: subr Namelists defined: DATA Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABS real ALOG10 real AMAX1 real AMIN1 real ARCLEN real ARG real ARG1 real ARG2 real ARX real ARY real AUTOX logl AUTOY logl AUTOZ logl AVRAGE logl 1 AXES3D logl BCLIP logl BIGINT intg BLANK intg BOX logl BYROWS logl CARD intg 1 CHKDUP logl CMFACT real CMTOIN real CMTOUN real CPX real CPY real CURCOL intg CURROW intg CVTX logl 1 CVTY logl 1 CVTZ logl 1 DEFHT real DEFMAR real DERIV logl 1 DT real DUSUB real DVSUB real DXSUB real DYSUB real DZSUB real EOFILE logl FCLIP logl FLOAT real FRAC real FSCALE real FSTYLE intg GREEK intg GSCALE real HALF real HH real HSCALE real HT real HTDEF real HTFACT real HX real HY real I intg I1MACH intg IABS intg IARG intg IARG1 intg IARG2 intg IDFONT intg IERVAL intg 1 II intg IN logl INFITY real INTGRT logl 1 INTOCM real INTOUN real J intg JX intg JY intg JZ intg K intg KX intg KXYZ intg KY intg KZ intg LOGX logl LOGY logl LOGZ logl LSTXYZ logl LSTYLE intg 1 LWIDTH real 1 MARGIN real 1 MARK intg 1 MAX0 intg MAXCRD intg MAXCRV intg MAXVAL intg MIN0 intg MMTOCM real MODEU intg MODEV intg MODEX intg MODEY intg MODEZ intg MSCALE real N intg 1 NC intg NCELLX intg NCELLY intg NCINIT intg NCISAV intg NCSTEP intg NCTERM intg NCU intg NCV intg NCX intg NCY intg NCZ intg NIN intg NINETY real NINT intg NJ intg NOUT intg NRINIT intg NRISAV intg NRSTEP intg NRTERM intg NSUM intg NU intg 1 NUJ intg NUMINT intg 1 NUSUB intg NVSUB intg NXSUB intg NYSUB intg NZSUB intg ONE real PAGESQ real PAGEX real PAGEY real PARLEL logl PEN intg 1 PENDIA real PERDST real PICTHX real PICTHY real PICTX real PICTY real PLOPEN logl PLOTID logl PPXYZ real 1 QUOTE intg R1MACH real RESET logl RIGHT logl ROMAN intg RPXYZ real 1 SIGMA real 1 SIGN real SWAP real T real 2 TICDEF real TICKU real TICKV real TICKX real TICKY real TICKZ real TIMAGE real 2 TITLE intg 1 TMODEL real 2 TOPMAR real TT real TTLHEI real TTLLEN real TTOTAL real 2 TWO real U1 real U2 real UAXIS logl UDIST real UMAX real UMAXP real UMAXRC real UMIN real UMINP real UMINRC real UNITS real UNSPEC real UNTOCM real UNTOIN real UPXYZ real 1 UTISL intg UTITLE intg 1 UTRE3 real UVAXES logl V1 real V2 real VARPEN logl VAXIS logl VDIST real VIEWD real VMAX real VMAXP real VMAXRC real VMIN real VMINP real VMINRC real VNXYZ real 1 VPUMAX real VPUMIN real VPVMAX real VPVMIN real VSCALE real VTITLE intg 1 WCLIP logl WMAX real WMAXP real WMIN real WMINP real WORK real 2 X real 2 X0 real XAXIS logl XDIST real XFACT real 1 XFALLS logl XINT real XMAX real XMAXJ real XMAXP real XMIN real XMINJ real XMINP real XORG real XSHIFT real 1 XTITLE intg 1 XX real Y real 2 Y0 real YAXIS logl YDIST real YFACT real 1 YFALLS logl YINT real YMAX real YMAXJ real YMAXP real YMIN real YMINJ real YMINP real YORG real YSHIFT real 1 YTITLE intg 1 YY real Z real 2 Z0 real ZAXIS logl ZDIST real ZERO real ZFACT real 1 ZFALLS logl ZINT real ZMAX real ZMAXJ real ZMAXP real ZMIN real ZMINJ real ZMINP real ZORG real ZSHIFT real 1 ZTITLE intg 1 ZZ real Warning in module GRFGG3: Variables declared but never referenced: ABS declared at line 34 ALOG10 declared at line 28 AMAX1 declared at line 34 AMIN1 declared at line 34 ARCLEN declared at line 81 ARG declared at line 81 ARG1 declared at line 81 ARG2 declared at line 81 ARX declared at line 82 ARY declared at line 82 AUTOX declared at line 71 AUTOY declared at line 71 AUTOZ declared at line 71 AVRAGE declared at line 72 AXES3D declared at line 72 BCLIP declared at line 72 BIGINT declared at line 53 BLANK declared at line 47 BOX declared at line 72 BYROWS declared at line 73 CARD declared at line 53 CHKDUP declared at line 73 CMFACT declared at line 82 CMTOIN declared at line 41 CMTOUN declared at line 41 CPX declared at line 82 CPY declared at line 83 CURCOL declared at line 53 CURROW declared at line 53 CVTX declared at line 73 CVTY declared at line 74 CVTZ declared at line 74 DEFHT declared at line 83 DEFMAR declared at line 83 DERIV declared at line 74 DT declared at line 83 DUSUB declared at line 84 DVSUB declared at line 84 DXSUB declared at line 84 DYSUB declared at line 84 DZSUB declared at line 85 EOFILE declared at line 74 FCLIP declared at line 75 FLOAT declared at line 34 FRAC declared at line 41 FSCALE declared at line 85 FSTYLE declared at line 54 GREEK declared at line 47 GSCALE declared at line 85 HALF declared at line 85 HH declared at line 86 HSCALE declared at line 86 HT declared at line 86 HTDEF declared at line 86 HTFACT declared at line 87 HX declared at line 87 HY declared at line 87 I declared at line 54 I1MACH declared at line 27 IABS declared at line 33 IARG declared at line 54 IARG1 declared at line 54 IARG2 declared at line 55 IDFONT declared at line 55 IERVAL declared at line 55 II declared at line 55 IN declared at line 40 INFITY declared at line 87 INTGRT declared at line 75 INTOCM declared at line 41 INTOUN declared at line 42 J declared at line 56 JX declared at line 56 JY declared at line 56 JZ declared at line 56 K declared at line 57 KX declared at line 57 KXYZ declared at line 57 KY declared at line 57 KZ declared at line 58 LOGX declared at line 75 LOGY declared at line 75 LOGZ declared at line 76 LSTXYZ declared at line 76 LSTYLE declared at line 58 LWIDTH declared at line 88 MARGIN declared at line 88 MARK declared at line 58 MAX0 declared at line 33 MAXCRD declared at line 58 MAXCRV declared at line 59 MAXVAL declared at line 59 MIN0 declared at line 33 MMTOCM declared at line 42 MODEU declared at line 59 MODEV declared at line 59 MODEX declared at line 60 MODEY declared at line 60 MODEZ declared at line 60 MSCALE declared at line 88 N declared at line 60 NC declared at line 61 NCELLX declared at line 61 NCELLY declared at line 61 NCINIT declared at line 61 NCISAV declared at line 62 NCSTEP declared at line 62 NCTERM declared at line 62 NCU declared at line 62 NCV declared at line 63 NCX declared at line 63 NCY declared at line 63 NCZ declared at line 63 NIN declared at line 64 NINETY declared at line 88 NINT declared at line 27 NJ declared at line 64 NOUT declared at line 64 NRINIT declared at line 64 NRISAV declared at line 65 NRSTEP declared at line 65 NRTERM declared at line 65 NSUM declared at line 65 NU declared at line 66 NUJ declared at line 66 NUMINT declared at line 66 NUSUB declared at line 66 NVSUB declared at line 67 NXSUB declared at line 67 NYSUB declared at line 67 NZSUB declared at line 67 ONE declared at line 89 PAGESQ declared at line 89 PAGEX declared at line 89 PAGEY declared at line 89 PARLEL declared at line 76 PEN declared at line 68 PENDIA declared at line 90 PERDST declared at line 90 PICTHX declared at line 90 PICTHY declared at line 90 PICTX declared at line 91 PICTY declared at line 91 PLOPEN declared at line 76 PLOTID declared at line 77 PPXYZ declared at line 91 QUOTE declared at line 47 R1MACH declared at line 28 RESET declared at line 77 RIGHT declared at line 77 ROMAN declared at line 47 RPXYZ declared at line 92 SIGMA declared at line 92 SIGN declared at line 35 SWAP declared at line 92 T declared at line 92 TICDEF declared at line 93 TICKU declared at line 93 TICKV declared at line 93 TICKX declared at line 93 TICKY declared at line 94 TICKZ declared at line 94 TIMAGE declared at line 94 TITLE declared at line 68 TMODEL declared at line 95 TOPMAR declared at line 95 TT declared at line 95 TTLHEI declared at line 95 TTLLEN declared at line 96 TTOTAL declared at line 96 TWO declared at line 96 U1 declared at line 96 U2 declared at line 97 UAXIS declared at line 77 UDIST declared at line 97 UMAX declared at line 97 UMAXP declared at line 97 UMAXRC declared at line 98 UMIN declared at line 98 UMINP declared at line 98 UMINRC declared at line 98 UNITS declared at line 99 UNSPEC declared at line 99 UNTOCM declared at line 42 UNTOIN declared at line 42 UPXYZ declared at line 99 UTISL declared at line 27 UTITLE declared at line 68 UTRE3 declared at line 28 UVAXES declared at line 78 V1 declared at line 99 V2 declared at line 100 VARPEN declared at line 78 VAXIS declared at line 78 VDIST declared at line 100 VIEWD declared at line 100 VMAX declared at line 100 VMAXP declared at line 101 VMAXRC declared at line 101 VMIN declared at line 101 VMINP declared at line 101 VMINRC declared at line 102 VNXYZ declared at line 102 VPUMAX declared at line 102 VPUMIN declared at line 102 VPVMAX declared at line 103 VPVMIN declared at line 103 VSCALE declared at line 103 VTITLE declared at line 69 WCLIP declared at line 78 WMAX declared at line 103 WMAXP declared at line 104 WMIN declared at line 104 WMINP declared at line 104 WORK declared at line 105 X declared at line 105 X0 declared at line 105 XAXIS declared at line 79 XDIST declared at line 105 XFACT declared at line 106 XFALLS declared at line 79 XINT declared at line 106 XMAX declared at line 106 XMAXJ declared at line 106 XMAXP declared at line 107 XMIN declared at line 107 XMINJ declared at line 107 XMINP declared at line 107 XORG declared at line 108 XSHIFT declared at line 108 XTITLE declared at line 69 XX declared at line 108 Y declared at line 109 Y0 declared at line 109 YAXIS declared at line 79 YDIST declared at line 109 YFACT declared at line 110 YFALLS declared at line 79 YINT declared at line 110 YMAX declared at line 110 YMAXJ declared at line 110 YMAXP declared at line 111 YMIN declared at line 111 YMINJ declared at line 111 YMINP declared at line 111 YORG declared at line 112 YSHIFT declared at line 112 YTITLE declared at line 69 YY declared at line 112 Z declared at line 113 Z0 declared at line 113 ZAXIS declared at line 80 ZDIST declared at line 113 ZERO declared at line 113 ZFACT declared at line 114 ZFALLS declared at line 80 ZINT declared at line 114 ZMAX declared at line 114 ZMAXJ declared at line 114 ZMAXP declared at line 115 ZMIN declared at line 115 ZMINJ declared at line 115 ZMINP declared at line 115 ZORG declared at line 116 ZSHIFT declared at line 116 ZTITLE declared at line 70 ZZ declared at line 116 1 syntax error detected in file namelist.f 13 warnings issued in file namelist.f Warning: Common block %BLANK Elements set but never used: B Warning: Common block %BLANK Elements never used, never set: E F Warning: Subprogram GRFGG3 never invoked Defined in module GRFGG3 line 16 file namelist.f ftnchek-3.3.1/test/Okay/namelist.fcx0000644000031000002260000006616110145015312017760 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File namelist.f: 1 c----------------------------------------------------------------------- 2 c ftnchek test file: namelist.f, Mon Mar 13 14:01:03 1995 3 c----------------------------------------------------------------------- 4 5 common b,e,f 6 namelist /n1/ a,b,c ^ "namelist.f", line 6 col 7: Warning: Nonstandard syntax 7 namelist /n2/ x,y,z /n3/ l,m, ^ "namelist.f", line 7 col 35: Error: trailing comma ^ "namelist.f", line 7 col 7: Warning: Nonstandard syntax 8 namelist /n4/ x1,y2 z3, /n5/ l6 ^ "namelist.f", line 8 col 24: Possibly misleading appearance: identifier Y2Z3 has embedded space ^ "namelist.f", line 8 col 7: Warning: Nonstandard syntax 9 read(*,n1) 10 write(*,n2) 11 read(1,nml=n3) ^ "namelist.f", line 11 col 14: Warning: Nonstandard syntax 12 write(1,nml=n4) ^ "namelist.f", line 12 col 15: Warning: Nonstandard syntax 13 end Module %MAIN: prog Common blocks referenced: %BLANK Namelists defined: N1 N2 N3 N4 N5 Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* C real* E real* F real* L intg* L6 intg* M intg* X real* X1 real* Y real* Y2Z3 real* Z real* * Variable not declared. Type has been implicitly defined. "namelist.f", line 8: Warning in module %MAIN: Variables declared but never referenced: "namelist.f", line 8: L6 first occurrence "namelist.f", line 9: Warning in module %MAIN: Variables set but never used: "namelist.f", line 9: A set "namelist.f", line 9: C set "namelist.f", line 11: L set "namelist.f", line 11: M set "namelist.f", line 10: Warning in module %MAIN: Variables used before set "namelist.f", line 10: X used; never set "namelist.f", line 12: X1 used; never set "namelist.f", line 10: Y used; never set "namelist.f", line 12: Y2Z3 used; never set "namelist.f", line 10: Z used; never set I/O Operations: Unit ID Unit No. Access Form Operation Line 1 SEQ FMTD READ 11 1 SEQ FMTD WRITE 12 * SEQ FMTD READ 9 * SEQ FMTD WRITE 10 14 15 16 subroutine grfgg3 17 C$ (grfgg3) 18 C$ This is a substantial portion of the declaration section from 19 C$ the PLOT79 grfgg3.sf3 file. The formatting was done by the 20 C$ Extended PFORT Verifier, and the extensive NAMELIST block serves 21 C$ as a test for ftnchek. 22 C$ (13-Mar-1995) 23 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 C$ 25 C$ EXTERNAL FUNCTIONS AND SUBROUTINES 26 C$ 27 INTEGER I1MACH, NINT, UTISL 28 REAL ALOG10, R1MACH, UTRE3 29 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 C$ 31 C$ INTRINSIC FUNCTIONS 32 C$ 33 INTEGER IABS, MAX0, MIN0 34 REAL ABS, AMAX1, AMIN1, FLOAT 35 REAL SIGN 36 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 37 C$ 38 C$ STATEMENT FUNCTIONS 39 C$ 40 LOGICAL IN 41 REAL CMTOIN, CMTOUN, FRAC, INTOCM 42 REAL INTOUN, MMTOCM, UNTOCM, UNTOIN 43 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 44 C$ 45 C$ HOLLERITH STRING VARIABLES 46 C$ 47 INTEGER BLANK, GREEK, QUOTE, ROMAN 48 C$ 49 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 50 C$ 51 C$ NON-COMMON VARIABLES 52 C$ 53 INTEGER BIGINT, CARD(500), CURCOL, CURROW 54 INTEGER FSTYLE, I, IARG, IARG1 55 INTEGER IARG2, IDFONT, IERVAL(1), II 56 INTEGER J, JX, JY, JZ 57 INTEGER K, KX, KXYZ, KY 58 INTEGER KZ, LSTYLE(06), MARK(06), MAXCRD 59 INTEGER MAXCRV, MAXVAL, MODEU, MODEV 60 INTEGER MODEX, MODEY, MODEZ, N(06) 61 INTEGER NC, NCELLX, NCELLY, NCINIT 62 INTEGER NCISAV, NCSTEP, NCTERM, NCU 63 INTEGER NCV, NCX, NCY, NCZ 64 INTEGER NIN, NJ, NOUT, NRINIT 65 INTEGER NRISAV, NRSTEP, NRTERM, NSUM 66 INTEGER NU(06), NUJ, NUMINT(06), NUSUB 67 INTEGER NVSUB, NXSUB, NYSUB, NZSUB 68 INTEGER PEN(06), TITLE(500), UTITLE(500) 69 INTEGER VTITLE(500), XTITLE(500), YTITLE(500) 70 INTEGER ZTITLE(500) 71 LOGICAL AUTOX, AUTOY, AUTOZ 72 LOGICAL AVRAGE(06), AXES3D, BCLIP, BOX 73 LOGICAL BYROWS, CHKDUP, CVTX(06) 74 LOGICAL CVTY(06), CVTZ(06), DERIV(06), EOFILE 75 LOGICAL FCLIP, INTGRT(06), LOGX, LOGY 76 LOGICAL LOGZ, LSTXYZ, PARLEL, PLOPEN 77 LOGICAL PLOTID, RESET, RIGHT, UAXIS 78 LOGICAL UVAXES, VARPEN, VAXIS, WCLIP 79 LOGICAL XAXIS, XFALLS, YAXIS, YFALLS 80 LOGICAL ZAXIS, ZFALLS 81 REAL ARCLEN, ARG, ARG1, ARG2 82 REAL ARX, ARY, CMFACT, CPX 83 REAL CPY, DEFHT, DEFMAR, DT 84 REAL DUSUB, DVSUB, DXSUB, DYSUB 85 REAL DZSUB, FSCALE, GSCALE, HALF 86 REAL HH, HSCALE, HT, HTDEF 87 REAL HTFACT, HX, HY, INFITY 88 REAL LWIDTH(06), MARGIN(4), MSCALE, NINETY 89 REAL ONE, PAGESQ, PAGEX, PAGEY 90 REAL PENDIA, PERDST, PICTHX, PICTHY 91 REAL PICTX, PICTY, PPXYZ(3) 92 REAL RPXYZ(3), SIGMA(06), SWAP, T(4,4) 93 REAL TICDEF, TICKU, TICKV, TICKX 94 REAL TICKY, TICKZ, TIMAGE(4,4) 95 REAL TMODEL(4,4), TOPMAR, TT, TTLHEI 96 REAL TTLLEN, TTOTAL(4,4), TWO, U1 97 REAL U2, UDIST, UMAX, UMAXP 98 REAL UMAXRC, UMIN, UMINP, UMINRC 99 REAL UNITS, UNSPEC, UPXYZ(3), V1 100 REAL V2, VDIST, VIEWD, VMAX 101 REAL VMAXP, VMAXRC, VMIN, VMINP 102 REAL VMINRC, VNXYZ(3), VPUMAX, VPUMIN 103 REAL VPVMAX, VPVMIN, VSCALE, WMAX 104 REAL WMAXP, WMIN, WMINP 105 REAL WORK(1600,5),X(1600,06), X0, XDIST 106 REAL XFACT(06), XINT, XMAX, XMAXJ 107 REAL XMAXP, XMIN, XMINJ, XMINP 108 REAL XORG, XSHIFT(06), XX 109 REAL Y(1600,06), Y0, YDIST 110 REAL YFACT(06), YINT, YMAX, YMAXJ 111 REAL YMAXP, YMIN, YMINJ, YMINP 112 REAL YORG, YSHIFT(06), YY 113 REAL Z(1600,06), Z0, ZDIST, ZERO 114 REAL ZFACT(06), ZINT, ZMAX, ZMAXJ 115 REAL ZMAXP, ZMIN, ZMINJ, ZMINP 116 REAL ZORG, ZSHIFT(06), ZZ 117 C$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 118 C$ 119 C$ NAMELIST BLOCKS 120 C$ 121 NAMELIST / DATA / ^ "namelist.f", line 121 col 7: Warning: Nonstandard syntax 122 X AVRAGE, AXES3D, BCLIP, BOX, BYROWS, CHKDUP, 123 X DERIV, DUSUB, DVSUB, DXSUB, DYSUB, DZSUB, 124 X FCLIP, FSCALE, FSTYLE, GSCALE, HSCALE, IDFONT, 125 X INTGRT, KX, KY, KZ, LOGX, LOGY, 126 X LOGZ, LSTXYZ, LSTYLE, LWIDTH, MARGIN, MARK, 127 X MODEU, MODEV, MODEX, MODEY, MODEZ, MSCALE, 128 X N, NCINIT, NCSTEP, NCTERM, NRINIT, NRSTEP, 129 X NRTERM, NU, NUMINT, NUSUB, NVSUB, NXSUB, 130 X NYSUB, NZSUB, PARLEL, PEN, PENDIA, PERDST, 131 X PLOTID, PPXYZ, RESET, RIGHT, RPXYZ, SIGMA, 132 X TICKU, TICKV, TICKX, TICKY, TICKZ, TIMAGE, 133 X TMODEL, UAXIS, UMAX, UMIN, UPXYZ, UVAXES, 134 X VAXIS, VIEWD, VMAX, VMIN, VNXYZ, VSCALE, 135 X WCLIP, WMAX, WMIN, X, XAXIS, XFACT, 136 X XFALLS, XMAX, XMIN, XSHIFT, Y, YAXIS, 137 X YFACT, YFALLS, YMAX, YMIN, YSHIFT, Z, 138 X ZAXIS, ZFACT, ZFALLS, ZMAX, ZMIN, ZSHIFT 139 END "namelist.f", near line 139: Warning: Module contains no executable statements Module GRFGG3: subr Namelists defined: DATA Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ABS real ALOG10 real AMAX1 real AMIN1 real ARCLEN real ARG real ARG1 real ARG2 real ARX real ARY real AUTOX logl AUTOY logl AUTOZ logl AVRAGE logl 1 AXES3D logl BCLIP logl BIGINT intg BLANK intg BOX logl BYROWS logl CARD intg 1 CHKDUP logl CMFACT real CMTOIN real CMTOUN real CPX real CPY real CURCOL intg CURROW intg CVTX logl 1 CVTY logl 1 CVTZ logl 1 DEFHT real DEFMAR real DERIV logl 1 DT real DUSUB real DVSUB real DXSUB real DYSUB real DZSUB real EOFILE logl FCLIP logl FLOAT real FRAC real FSCALE real FSTYLE intg GREEK intg GSCALE real HALF real HH real HSCALE real HT real HTDEF real HTFACT real HX real HY real I intg I1MACH intg IABS intg IARG intg IARG1 intg IARG2 intg IDFONT intg IERVAL intg 1 II intg IN logl INFITY real INTGRT logl 1 INTOCM real INTOUN real J intg JX intg JY intg JZ intg K intg KX intg KXYZ intg KY intg KZ intg LOGX logl LOGY logl LOGZ logl LSTXYZ logl LSTYLE intg 1 LWIDTH real 1 MARGIN real 1 MARK intg 1 MAX0 intg MAXCRD intg MAXCRV intg MAXVAL intg MIN0 intg MMTOCM real MODEU intg MODEV intg MODEX intg MODEY intg MODEZ intg MSCALE real N intg 1 NC intg NCELLX intg NCELLY intg NCINIT intg NCISAV intg NCSTEP intg NCTERM intg NCU intg NCV intg NCX intg NCY intg NCZ intg NIN intg NINETY real NINT intg NJ intg NOUT intg NRINIT intg NRISAV intg NRSTEP intg NRTERM intg NSUM intg NU intg 1 NUJ intg NUMINT intg 1 NUSUB intg NVSUB intg NXSUB intg NYSUB intg NZSUB intg ONE real PAGESQ real PAGEX real PAGEY real PARLEL logl PEN intg 1 PENDIA real PERDST real PICTHX real PICTHY real PICTX real PICTY real PLOPEN logl PLOTID logl PPXYZ real 1 QUOTE intg R1MACH real RESET logl RIGHT logl ROMAN intg RPXYZ real 1 SIGMA real 1 SIGN real SWAP real T real 2 TICDEF real TICKU real TICKV real TICKX real TICKY real TICKZ real TIMAGE real 2 TITLE intg 1 TMODEL real 2 TOPMAR real TT real TTLHEI real TTLLEN real TTOTAL real 2 TWO real U1 real U2 real UAXIS logl UDIST real UMAX real UMAXP real UMAXRC real UMIN real UMINP real UMINRC real UNITS real UNSPEC real UNTOCM real UNTOIN real UPXYZ real 1 UTISL intg UTITLE intg 1 UTRE3 real UVAXES logl V1 real V2 real VARPEN logl VAXIS logl VDIST real VIEWD real VMAX real VMAXP real VMAXRC real VMIN real VMINP real VMINRC real VNXYZ real 1 VPUMAX real VPUMIN real VPVMAX real VPVMIN real VSCALE real VTITLE intg 1 WCLIP logl WMAX real WMAXP real WMIN real WMINP real WORK real 2 X real 2 X0 real XAXIS logl XDIST real XFACT real 1 XFALLS logl XINT real XMAX real XMAXJ real XMAXP real XMIN real XMINJ real XMINP real XORG real XSHIFT real 1 XTITLE intg 1 XX real Y real 2 Y0 real YAXIS logl YDIST real YFACT real 1 YFALLS logl YINT real YMAX real YMAXJ real YMAXP real YMIN real YMINJ real YMINP real YORG real YSHIFT real 1 YTITLE intg 1 YY real Z real 2 Z0 real ZAXIS logl ZDIST real ZERO real ZFACT real 1 ZFALLS logl ZINT real ZMAX real ZMAXJ real ZMAXP real ZMIN real ZMINJ real ZMINP real ZORG real ZSHIFT real 1 ZTITLE intg 1 ZZ real "namelist.f", line 34: Warning in module GRFGG3: Variables declared but never referenced: "namelist.f", line 34: ABS declared "namelist.f", line 28: ALOG10 declared "namelist.f", line 34: AMAX1 declared "namelist.f", line 34: AMIN1 declared "namelist.f", line 81: ARCLEN declared "namelist.f", line 81: ARG declared "namelist.f", line 81: ARG1 declared "namelist.f", line 81: ARG2 declared "namelist.f", line 82: ARX declared "namelist.f", line 82: ARY declared "namelist.f", line 71: AUTOX declared "namelist.f", line 71: AUTOY declared "namelist.f", line 71: AUTOZ declared "namelist.f", line 72: AVRAGE declared "namelist.f", line 72: AXES3D declared "namelist.f", line 72: BCLIP declared "namelist.f", line 53: BIGINT declared "namelist.f", line 47: BLANK declared "namelist.f", line 72: BOX declared "namelist.f", line 73: BYROWS declared "namelist.f", line 53: CARD declared "namelist.f", line 73: CHKDUP declared "namelist.f", line 82: CMFACT declared "namelist.f", line 41: CMTOIN declared "namelist.f", line 41: CMTOUN declared "namelist.f", line 82: CPX declared "namelist.f", line 83: CPY declared "namelist.f", line 53: CURCOL declared "namelist.f", line 53: CURROW declared "namelist.f", line 73: CVTX declared "namelist.f", line 74: CVTY declared "namelist.f", line 74: CVTZ declared "namelist.f", line 83: DEFHT declared "namelist.f", line 83: DEFMAR declared "namelist.f", line 74: DERIV declared "namelist.f", line 83: DT declared "namelist.f", line 84: DUSUB declared "namelist.f", line 84: DVSUB declared "namelist.f", line 84: DXSUB declared "namelist.f", line 84: DYSUB declared "namelist.f", line 85: DZSUB declared "namelist.f", line 74: EOFILE declared "namelist.f", line 75: FCLIP declared "namelist.f", line 34: FLOAT declared "namelist.f", line 41: FRAC declared "namelist.f", line 85: FSCALE declared "namelist.f", line 54: FSTYLE declared "namelist.f", line 47: GREEK declared "namelist.f", line 85: GSCALE declared "namelist.f", line 85: HALF declared "namelist.f", line 86: HH declared "namelist.f", line 86: HSCALE declared "namelist.f", line 86: HT declared "namelist.f", line 86: HTDEF declared "namelist.f", line 87: HTFACT declared "namelist.f", line 87: HX declared "namelist.f", line 87: HY declared "namelist.f", line 54: I declared "namelist.f", line 27: I1MACH declared "namelist.f", line 33: IABS declared "namelist.f", line 54: IARG declared "namelist.f", line 54: IARG1 declared "namelist.f", line 55: IARG2 declared "namelist.f", line 55: IDFONT declared "namelist.f", line 55: IERVAL declared "namelist.f", line 55: II declared "namelist.f", line 40: IN declared "namelist.f", line 87: INFITY declared "namelist.f", line 75: INTGRT declared "namelist.f", line 41: INTOCM declared "namelist.f", line 42: INTOUN declared "namelist.f", line 56: J declared "namelist.f", line 56: JX declared "namelist.f", line 56: JY declared "namelist.f", line 56: JZ declared "namelist.f", line 57: K declared "namelist.f", line 57: KX declared "namelist.f", line 57: KXYZ declared "namelist.f", line 57: KY declared "namelist.f", line 58: KZ declared "namelist.f", line 75: LOGX declared "namelist.f", line 75: LOGY declared "namelist.f", line 76: LOGZ declared "namelist.f", line 76: LSTXYZ declared "namelist.f", line 58: LSTYLE declared "namelist.f", line 88: LWIDTH declared "namelist.f", line 88: MARGIN declared "namelist.f", line 58: MARK declared "namelist.f", line 33: MAX0 declared "namelist.f", line 58: MAXCRD declared "namelist.f", line 59: MAXCRV declared "namelist.f", line 59: MAXVAL declared "namelist.f", line 33: MIN0 declared "namelist.f", line 42: MMTOCM declared "namelist.f", line 59: MODEU declared "namelist.f", line 59: MODEV declared "namelist.f", line 60: MODEX declared "namelist.f", line 60: MODEY declared "namelist.f", line 60: MODEZ declared "namelist.f", line 88: MSCALE declared "namelist.f", line 60: N declared "namelist.f", line 61: NC declared "namelist.f", line 61: NCELLX declared "namelist.f", line 61: NCELLY declared "namelist.f", line 61: NCINIT declared "namelist.f", line 62: NCISAV declared "namelist.f", line 62: NCSTEP declared "namelist.f", line 62: NCTERM declared "namelist.f", line 62: NCU declared "namelist.f", line 63: NCV declared "namelist.f", line 63: NCX declared "namelist.f", line 63: NCY declared "namelist.f", line 63: NCZ declared "namelist.f", line 64: NIN declared "namelist.f", line 88: NINETY declared "namelist.f", line 27: NINT declared "namelist.f", line 64: NJ declared "namelist.f", line 64: NOUT declared "namelist.f", line 64: NRINIT declared "namelist.f", line 65: NRISAV declared "namelist.f", line 65: NRSTEP declared "namelist.f", line 65: NRTERM declared "namelist.f", line 65: NSUM declared "namelist.f", line 66: NU declared "namelist.f", line 66: NUJ declared "namelist.f", line 66: NUMINT declared "namelist.f", line 66: NUSUB declared "namelist.f", line 67: NVSUB declared "namelist.f", line 67: NXSUB declared "namelist.f", line 67: NYSUB declared "namelist.f", line 67: NZSUB declared "namelist.f", line 89: ONE declared "namelist.f", line 89: PAGESQ declared "namelist.f", line 89: PAGEX declared "namelist.f", line 89: PAGEY declared "namelist.f", line 76: PARLEL declared "namelist.f", line 68: PEN declared "namelist.f", line 90: PENDIA declared "namelist.f", line 90: PERDST declared "namelist.f", line 90: PICTHX declared "namelist.f", line 90: PICTHY declared "namelist.f", line 91: PICTX declared "namelist.f", line 91: PICTY declared "namelist.f", line 76: PLOPEN declared "namelist.f", line 77: PLOTID declared "namelist.f", line 91: PPXYZ declared "namelist.f", line 47: QUOTE declared "namelist.f", line 28: R1MACH declared "namelist.f", line 77: RESET declared "namelist.f", line 77: RIGHT declared "namelist.f", line 47: ROMAN declared "namelist.f", line 92: RPXYZ declared "namelist.f", line 92: SIGMA declared "namelist.f", line 35: SIGN declared "namelist.f", line 92: SWAP declared "namelist.f", line 92: T declared "namelist.f", line 93: TICDEF declared "namelist.f", line 93: TICKU declared "namelist.f", line 93: TICKV declared "namelist.f", line 93: TICKX declared "namelist.f", line 94: TICKY declared "namelist.f", line 94: TICKZ declared "namelist.f", line 94: TIMAGE declared "namelist.f", line 68: TITLE declared "namelist.f", line 95: TMODEL declared "namelist.f", line 95: TOPMAR declared "namelist.f", line 95: TT declared "namelist.f", line 95: TTLHEI declared "namelist.f", line 96: TTLLEN declared "namelist.f", line 96: TTOTAL declared "namelist.f", line 96: TWO declared "namelist.f", line 96: U1 declared "namelist.f", line 97: U2 declared "namelist.f", line 77: UAXIS declared "namelist.f", line 97: UDIST declared "namelist.f", line 97: UMAX declared "namelist.f", line 97: UMAXP declared "namelist.f", line 98: UMAXRC declared "namelist.f", line 98: UMIN declared "namelist.f", line 98: UMINP declared "namelist.f", line 98: UMINRC declared "namelist.f", line 99: UNITS declared "namelist.f", line 99: UNSPEC declared "namelist.f", line 42: UNTOCM declared "namelist.f", line 42: UNTOIN declared "namelist.f", line 99: UPXYZ declared "namelist.f", line 27: UTISL declared "namelist.f", line 68: UTITLE declared "namelist.f", line 28: UTRE3 declared "namelist.f", line 78: UVAXES declared "namelist.f", line 99: V1 declared "namelist.f", line 100: V2 declared "namelist.f", line 78: VARPEN declared "namelist.f", line 78: VAXIS declared "namelist.f", line 100: VDIST declared "namelist.f", line 100: VIEWD declared "namelist.f", line 100: VMAX declared "namelist.f", line 101: VMAXP declared "namelist.f", line 101: VMAXRC declared "namelist.f", line 101: VMIN declared "namelist.f", line 101: VMINP declared "namelist.f", line 102: VMINRC declared "namelist.f", line 102: VNXYZ declared "namelist.f", line 102: VPUMAX declared "namelist.f", line 102: VPUMIN declared "namelist.f", line 103: VPVMAX declared "namelist.f", line 103: VPVMIN declared "namelist.f", line 103: VSCALE declared "namelist.f", line 69: VTITLE declared "namelist.f", line 78: WCLIP declared "namelist.f", line 103: WMAX declared "namelist.f", line 104: WMAXP declared "namelist.f", line 104: WMIN declared "namelist.f", line 104: WMINP declared "namelist.f", line 105: WORK declared "namelist.f", line 105: X declared "namelist.f", line 105: X0 declared "namelist.f", line 79: XAXIS declared "namelist.f", line 105: XDIST declared "namelist.f", line 106: XFACT declared "namelist.f", line 79: XFALLS declared "namelist.f", line 106: XINT declared "namelist.f", line 106: XMAX declared "namelist.f", line 106: XMAXJ declared "namelist.f", line 107: XMAXP declared "namelist.f", line 107: XMIN declared "namelist.f", line 107: XMINJ declared "namelist.f", line 107: XMINP declared "namelist.f", line 108: XORG declared "namelist.f", line 108: XSHIFT declared "namelist.f", line 69: XTITLE declared "namelist.f", line 108: XX declared "namelist.f", line 109: Y declared "namelist.f", line 109: Y0 declared "namelist.f", line 79: YAXIS declared "namelist.f", line 109: YDIST declared "namelist.f", line 110: YFACT declared "namelist.f", line 79: YFALLS declared "namelist.f", line 110: YINT declared "namelist.f", line 110: YMAX declared "namelist.f", line 110: YMAXJ declared "namelist.f", line 111: YMAXP declared "namelist.f", line 111: YMIN declared "namelist.f", line 111: YMINJ declared "namelist.f", line 111: YMINP declared "namelist.f", line 112: YORG declared "namelist.f", line 112: YSHIFT declared "namelist.f", line 69: YTITLE declared "namelist.f", line 112: YY declared "namelist.f", line 113: Z declared "namelist.f", line 113: Z0 declared "namelist.f", line 80: ZAXIS declared "namelist.f", line 113: ZDIST declared "namelist.f", line 113: ZERO declared "namelist.f", line 114: ZFACT declared "namelist.f", line 80: ZFALLS declared "namelist.f", line 114: ZINT declared "namelist.f", line 114: ZMAX declared "namelist.f", line 114: ZMAXJ declared "namelist.f", line 115: ZMAXP declared "namelist.f", line 115: ZMIN declared "namelist.f", line 115: ZMINJ declared "namelist.f", line 115: ZMINP declared "namelist.f", line 116: ZORG declared "namelist.f", line 116: ZSHIFT declared "namelist.f", line 70: ZTITLE declared "namelist.f", line 116: ZZ declared 1 syntax error detected in file namelist.f 13 warnings issued in file namelist.f "namelist.f", line 5: Warning: Common block %BLANK Elements set but never used: B "namelist.f", line 5: Warning: Common block %BLANK Elements never used, never set: E F "namelist.f", line 16: Warning: Subprogram GRFGG3 never invoked "namelist.f", line 16: Defined in module GRFGG3 ftnchek-3.3.1/test/Okay/noblanks.fcl0000644000031000002260000000076410145015312017734 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File noblanks.f: 101 85 hitest=cuthi/float(n) ^ Warning near line 101 col 19 file noblanks.f: promotion may not give desired precision: dble CUTHI / real expr FLOAT(N) Warning in module DNRM2 in file noblanks.f: Variables may be used before set: J used at line 70 file noblanks.f J set at line 105 file noblanks.f 0 syntax errors detected in file noblanks.f 2 warnings issued in file noblanks.f No main program found ftnchek-3.3.1/test/Okay/noblanks.fcx0000644000031000002260000000075310145015312017746 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File noblanks.f: 101 85 hitest=cuthi/float(n) ^ "noblanks.f", line 101 col 19: Warning: promotion may not give desired precision: dble CUTHI / real expr FLOAT(N) "noblanks.f", line 70: Warning in module DNRM2: Variables may be used before set: "noblanks.f", line 70: J used "noblanks.f", line 105: J set 0 syntax errors detected in file noblanks.f 2 warnings issued in file noblanks.f No main program found ftnchek-3.3.1/test/Okay/pointer_alloc.fcl0000644000031000002260000000322210145015312020747 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File pointer_alloc.f90: 1 ! Example of allocating and using an array via a pointer 2 3 program pointer_alloc 4 real, pointer, dimension(:, :) :: A 5 integer :: M, N 6 integer :: alloc_err, dealloc_err 7 8 read *, M, N 9 allocate ( A(M, N) , stat=alloc_err) 10 if( alloc_err /= 0 ) then 11 print *, "Error allocating real array of size", & 12 M, "x", N 13 else 14 read *, A 15 print *, A 16 deallocate (A, stat = dealloc_err) 17 if( dealloc_err /= 0 ) then 18 print *, "Error deallocating array" 19 else 20 print *, "Array deallocated" 21 end if 22 end if 23 24 if( associated(A) ) then 25 print *, "Pointer is still associated" 26 nullify(A) 27 end if 28 end program pointer_alloc Module POINTER_ALLOC: prog External subprograms referenced: ASSOCIATED: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real 2 ALLOC_ERR intg DEALLOC_ERR intg M intg N intg Warning in module POINTER_ALLOC: Variables used before set ALLOC_ERR used at line 10; never set DEALLOC_ERR used at line 17; never set I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 11 15 18 20 25 * SEQ FMTD READ 8 14 0 syntax errors detected in file pointer_alloc.f90 1 warning issued in file pointer_alloc.f90 ftnchek-3.3.1/test/Okay/primes.fcl0000644000031000002260000001263710145015312017426 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File primes.f: 1 implicit none ^ Warning near line 1 col 16: Nonstandard syntax 2 integer M, numprimes 3 integer MAXPRIMES 4 5 parameter (MAXPRIMES=10000) 6 integer primes(MAXPRIMES) 7 integer makeprimes 8 9 write(*,*) 'Enter ceiling on primes' 10 read(*,*) M 11 12 C Get list of primes up to M 13 numprimes = makeprimes(primes,M,MAXPRIMES) 14 15 C Print the primes 16 call printarray('Primes',primes,numprimes) 17 18 end Module %MAIN: prog External subprograms referenced: MAKEPRIMES: intg PRINTARRAY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims M intg MAXPRIMES intg NUMPRIMES intg PRIMES intg 1 Warning in module %MAIN: Variables may be used before set: PRIMES used at line 13 PRIMES may be set at line 16 Warning in module %MAIN: Names longer than 6 chars (nonstandard): MAKEPRIMES defined at line 7 MAXPRIMES declared at line 3 NUMPRIMES declared at line 2 PRINTARRAY referenced at line 16 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 10 * SEQ FMTD WRITE 9 19 20 subroutine printarray(heading,a,n) 21 implicit none ^ Warning near line 21 col 16: Nonstandard syntax 22 character *(*) heading 23 integer i, n, a(1) 24 write(*,*) heading 25 do i=1,n ^ Warning near line 25 col 7: Nonstandard syntax 26 write(*,'(1x,i4,1x,i5)') i, a(i) 27 end do ^ Warning near line 27 col 7: Nonstandard syntax 28 end Module PRINTARRAY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 HEADING char+ I intg N intg char+ indicates adjustable size Warning in module PRINTARRAY: Names longer than 6 chars (nonstandard): HEADING declared at line 22 PRINTARRAY declared at line 20 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 24 26 29 30 integer function makeprimes(p,n,max) 31 C computes array of primes less than or equal to n. 32 C note: max = limit of number of primes, must be at least 1. 33 implicit none ^ Warning near line 33 col 16: Nonstandard syntax 34 integer n, max, p(max) 35 integer i, numprimes 36 logical divisible 37 C put the even prime into the list 38 numprimes = 1 39 p(numprimes) = 2 40 C loop thru odd integers, testing if divisible 41 do i=3,n,2 ^ Warning near line 41 col 7: Nonstandard syntax 42 if( .not. divisible(i,p,numprimes) ) then 43 numprimes = numprimes+1 44 if( numprimes .gt. max ) then 45 write(*,*) 'Ran out of space at p=',i 46 stop 47 else 48 p(numprimes) = i 49 end if 50 end if 51 end do ^ Warning near line 51 col 7: Nonstandard syntax 52 C return number of primes found 53 makeprimes = numprimes 54 return 55 end Module MAKEPRIMES: func: intg External subprograms referenced: DIVISIBLE: logl Warning in module MAKEPRIMES at line 39: Function modifies argument P Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg MAKEPRIMES intg MAX intg N intg NUMPRIMES intg P intg 1 Warning in module MAKEPRIMES: Names longer than 6 chars (nonstandard): DIVISIBLE defined at line 36 MAKEPRIMES declared at line 30 NUMPRIMES declared at line 35 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 45 56 logical function divisible(n,p,nump) 57 implicit none ^ Warning near line 57 col 16: Nonstandard syntax 58 integer n, nump, p(1) 59 integer i 60 do i=1,nump ^ Warning near line 60 col 7: Nonstandard syntax 61 if( mod(n,p(i)) .eq. 0 ) then 62 divisible = .true. 63 return 64 end if 65 end do ^ Warning near line 65 col 7: Nonstandard syntax 66 divisible = .false. 67 return 68 end Module DIVISIBLE: func: logl External subprograms referenced: MOD: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims DIVISIBLE logl I intg N intg NUMP intg P intg 1 Warning in module DIVISIBLE: Names longer than 6 chars (nonstandard): DIVISIBLE declared at line 56 0 syntax errors detected in file primes.f 16 warnings issued in file primes.f Warning: Subprogram PRINTARRAY argument usage mismatch at position 2: Dummy arg A in module PRINTARRAY line 20 file primes.f is used before set Actual arg PRIMES in module %MAIN line 16 file primes.f is not set ftnchek-3.3.1/test/Okay/primes.fcx0000644000031000002260000001336210145015312017436 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File primes.f: 1 implicit none ^ "primes.f", line 1 col 16: Warning: Nonstandard syntax 2 integer M, numprimes 3 integer MAXPRIMES 4 5 parameter (MAXPRIMES=10000) 6 integer primes(MAXPRIMES) 7 integer makeprimes 8 9 write(*,*) 'Enter ceiling on primes' 10 read(*,*) M 11 12 C Get list of primes up to M 13 numprimes = makeprimes(primes,M,MAXPRIMES) 14 15 C Print the primes 16 call printarray('Primes',primes,numprimes) 17 18 end Module %MAIN: prog External subprograms referenced: MAKEPRIMES: intg PRINTARRAY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims M intg MAXPRIMES intg NUMPRIMES intg PRIMES intg 1 "primes.f", line 13: Warning in module %MAIN: Variables may be used before set: "primes.f", line 13: PRIMES used "primes.f", line 16: PRIMES may be set "primes.f", line 7: Warning in module %MAIN: Names longer than 6 chars (nonstandard): "primes.f", line 7: MAKEPRIMES defined "primes.f", line 3: MAXPRIMES declared "primes.f", line 2: NUMPRIMES declared "primes.f", line 16: PRINTARRAY referenced I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 10 * SEQ FMTD WRITE 9 19 20 subroutine printarray(heading,a,n) 21 implicit none ^ "primes.f", line 21 col 16: Warning: Nonstandard syntax 22 character *(*) heading 23 integer i, n, a(1) 24 write(*,*) heading 25 do i=1,n ^ "primes.f", line 25 col 7: Warning: Nonstandard syntax 26 write(*,'(1x,i4,1x,i5)') i, a(i) 27 end do ^ "primes.f", line 27 col 7: Warning: Nonstandard syntax 28 end Module PRINTARRAY: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg 1 HEADING char+ I intg N intg char+ indicates adjustable size "primes.f", line 22: Warning in module PRINTARRAY: Names longer than 6 chars (nonstandard): "primes.f", line 22: HEADING declared "primes.f", line 20: PRINTARRAY declared I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 24 26 29 30 integer function makeprimes(p,n,max) 31 C computes array of primes less than or equal to n. 32 C note: max = limit of number of primes, must be at least 1. 33 implicit none ^ "primes.f", line 33 col 16: Warning: Nonstandard syntax 34 integer n, max, p(max) 35 integer i, numprimes 36 logical divisible 37 C put the even prime into the list 38 numprimes = 1 39 p(numprimes) = 2 40 C loop thru odd integers, testing if divisible 41 do i=3,n,2 ^ "primes.f", line 41 col 7: Warning: Nonstandard syntax 42 if( .not. divisible(i,p,numprimes) ) then 43 numprimes = numprimes+1 44 if( numprimes .gt. max ) then 45 write(*,*) 'Ran out of space at p=',i 46 stop 47 else 48 p(numprimes) = i 49 end if 50 end if 51 end do ^ "primes.f", line 51 col 7: Warning: Nonstandard syntax 52 C return number of primes found 53 makeprimes = numprimes 54 return 55 end Module MAKEPRIMES: func: intg External subprograms referenced: DIVISIBLE: logl "primes.f", line 39: Warning in module MAKEPRIMES: Function modifies argument P Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg MAKEPRIMES intg MAX intg N intg NUMPRIMES intg P intg 1 "primes.f", line 36: Warning in module MAKEPRIMES: Names longer than 6 chars (nonstandard): "primes.f", line 36: DIVISIBLE defined "primes.f", line 30: MAKEPRIMES declared "primes.f", line 35: NUMPRIMES declared I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD WRITE 45 56 logical function divisible(n,p,nump) 57 implicit none ^ "primes.f", line 57 col 16: Warning: Nonstandard syntax 58 integer n, nump, p(1) 59 integer i 60 do i=1,nump ^ "primes.f", line 60 col 7: Warning: Nonstandard syntax 61 if( mod(n,p(i)) .eq. 0 ) then 62 divisible = .true. 63 return 64 end if 65 end do ^ "primes.f", line 65 col 7: Warning: Nonstandard syntax 66 divisible = .false. 67 return 68 end Module DIVISIBLE: func: logl External subprograms referenced: MOD: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims DIVISIBLE logl I intg N intg NUMP intg P intg 1 "primes.f", line 56: Warning in module DIVISIBLE: Names longer than 6 chars (nonstandard): "primes.f", line 56: DIVISIBLE declared 0 syntax errors detected in file primes.f 16 warnings issued in file primes.f "primes.f", line 20: Warning: Subprogram PRINTARRAY argument usage mismatch at position 2: "primes.f", line 20: Dummy arg A in module PRINTARRAY is used before set "primes.f", line 16: Actual arg PRIMES in module %MAIN is not set ftnchek-3.3.1/test/Okay/pure-function.fcl0000644000031000002260000000207010145015312020713 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File pure-function.f: 1 real function notpure(a,b,c) 2 real a,b,c 3 common /shared/ x,y,z 4 b = a + c 5 z = x + y 6 notpure = a*x + b*y + c*z 7 end 8 9 Module NOTPURE: func: real Common blocks referenced: SHARED Warning in module NOTPURE at line 4: Function modifies argument B Warning in module NOTPURE at line 5: Function modifies common variable Z Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real B real C real NOTPURE real X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. Warning in module NOTPURE: Names longer than 6 chars (nonstandard): NOTPURE declared at line 1 0 syntax errors detected in file pure-function.f 4 warnings issued in file pure-function.f No main program found Warning: Common block SHARED Elements used but never set: X Y ftnchek-3.3.1/test/Okay/pure-function.fcx0000644000031000002260000000224610145015312020734 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File pure-function.f: 1 real function notpure(a,b,c) 2 real a,b,c 3 common /shared/ x,y,z 4 b = a + c 5 z = x + y 6 notpure = a*x + b*y + c*z 7 end 8 9 Module NOTPURE: func: real Common blocks referenced: SHARED "pure-function.f", line 4: Warning in module NOTPURE: Function modifies argument B "pure-function.f", line 5: Warning in module NOTPURE: Function modifies common variable Z Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real B real C real NOTPURE real X real* Y real* Z real* * Variable not declared. Type has been implicitly defined. "pure-function.f", line 1: Warning in module NOTPURE: Names longer than 6 chars (nonstandard): "pure-function.f", line 1: NOTPURE declared 0 syntax errors detected in file pure-function.f 4 warnings issued in file pure-function.f No main program found "pure-function.f", line 3: Warning: Common block SHARED Elements used but never set: X Y ftnchek-3.3.1/test/Okay/quad.fcl0000644000031000002260000000713510145015312017056 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File quad.f: 1 C Test of parsing and checking quad precision variables & constants. 2 C No intrinsic functions at this time. 3 real r 4 double precision d 5 real*8 r8 ^ Warning near line 5 col 12: Nonstandard syntax 6 real*16 q ^ Warning near line 6 col 12: Nonstandard syntax 7 complex*32 cq ^ Warning near line 7 col 15: Nonstandard syntax 8 q = 1.234Q5 ^ Warning near line 8 col 11: Nonstandard syntax: quad precision constant 9 q = 1.234Q+05 ^ Warning near line 9 col 11: Nonstandard syntax: quad precision constant 10 q = 1.234Q+345 ^ Warning near line 10 col 11: Nonstandard syntax: quad precision constant 11 q = 1.234Q-345 ^ Warning near line 11 col 11: Nonstandard syntax: quad precision constant 12 d = 1.234Q+05 ^ Warning near line 12 col 11: Nonstandard syntax: quad precision constant ^ Warning near line 12 col 9: real*16 const 1.234Q+05 truncated to dble D 13 r = 1.234Q+05 ^ Warning near line 13 col 11: Nonstandard syntax: quad precision constant ^ Warning near line 13 col 9: real*16 const 1.234Q+05 truncated to real R 14 d = q ^ Warning near line 14 col 9: real*16 Q truncated to dble D 15 q = d ^ Warning near line 15 col 9: dble D promoted to real*16 Q: may not give desired precision 16 r = q ^ Warning near line 16 col 9: real*16 Q truncated to real R 17 q = r ^ Warning near line 17 col 9: real R promoted to real*16 Q: may not give desired precision 18 cq = q 19 q = qsqrt(q) 20 cq = cqsqrt(cq) 21 r = qsqrt(q) ^ Warning near line 21 col 9: real*16 expr QSQRT(Q) truncated to real R 22 q = qsqrt(r) ^ Error near line 22 col 17: illegal argument data type for intrinsic function QSQRT: real R 23 q = qsqrt(d) ^ Error near line 23 col 17: illegal argument data type for intrinsic function QSQRT: dble D 24 r8 = qsqrt(q) ^ Warning near line 24 col 10: real*16 expr QSQRT(Q) truncated to real*8 R8 25 q = qprod(d,r8) ^ Nonportable usage near line 25 col 19: argument precision may not be correct for intrinsic function QPROD: real*8 R8 ^ Nonportable usage near line 25 col 17: intrinsic argument list mixes default and explicit precision operands: dble D , real*8 R8 26 q = qmax1(1.234Q5,q,1.234Q-5) ^ Warning near line 26 col 17: Nonstandard syntax: quad precision constant ^ Warning near line 26 col 27: Nonstandard syntax: quad precision constant 27 end Module %MAIN: prog External subprograms referenced: CQSQRT: intrns QMAX1: intrns QPROD: intrns QSQRT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CQ cplx32 D dble Q real16 R real R8 real8 Warning in module %MAIN: Non Fortran 77 intrinsic functions referenced: CQSQRT referenced at line 20 QMAX1 referenced at line 26 QPROD referenced at line 25 QSQRT referenced at line 19 2 syntax errors detected in file quad.f 22 warnings issued in file quad.f ftnchek-3.3.1/test/Okay/quad.fcx0000644000031000002260000000743110145015312017071 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File quad.f: 1 C Test of parsing and checking quad precision variables & constants. 2 C No intrinsic functions at this time. 3 real r 4 double precision d 5 real*8 r8 ^ "quad.f", line 5 col 12: Warning: Nonstandard syntax 6 real*16 q ^ "quad.f", line 6 col 12: Warning: Nonstandard syntax 7 complex*32 cq ^ "quad.f", line 7 col 15: Warning: Nonstandard syntax 8 q = 1.234Q5 ^ "quad.f", line 8 col 11: Warning: Nonstandard syntax: quad precision constant 9 q = 1.234Q+05 ^ "quad.f", line 9 col 11: Warning: Nonstandard syntax: quad precision constant 10 q = 1.234Q+345 ^ "quad.f", line 10 col 11: Warning: Nonstandard syntax: quad precision constant 11 q = 1.234Q-345 ^ "quad.f", line 11 col 11: Warning: Nonstandard syntax: quad precision constant 12 d = 1.234Q+05 ^ "quad.f", line 12 col 11: Warning: Nonstandard syntax: quad precision constant ^ "quad.f", line 12 col 9: Warning: real*16 const 1.234Q+05 truncated to dble D 13 r = 1.234Q+05 ^ "quad.f", line 13 col 11: Warning: Nonstandard syntax: quad precision constant ^ "quad.f", line 13 col 9: Warning: real*16 const 1.234Q+05 truncated to real R 14 d = q ^ "quad.f", line 14 col 9: Warning: real*16 Q truncated to dble D 15 q = d ^ "quad.f", line 15 col 9: Warning: dble D promoted to real*16 Q: may not give desired precision 16 r = q ^ "quad.f", line 16 col 9: Warning: real*16 Q truncated to real R 17 q = r ^ "quad.f", line 17 col 9: Warning: real R promoted to real*16 Q: may not give desired precision 18 cq = q 19 q = qsqrt(q) 20 cq = cqsqrt(cq) 21 r = qsqrt(q) ^ "quad.f", line 21 col 9: Warning: real*16 expr QSQRT(Q) truncated to real R 22 q = qsqrt(r) ^ "quad.f", line 22 col 17: Error: illegal argument data type for intrinsic function QSQRT: real R 23 q = qsqrt(d) ^ "quad.f", line 23 col 17: Error: illegal argument data type for intrinsic function QSQRT: dble D 24 r8 = qsqrt(q) ^ "quad.f", line 24 col 10: Warning: real*16 expr QSQRT(Q) truncated to real*8 R8 25 q = qprod(d,r8) ^ "quad.f", line 25 col 19: Nonportable usage: argument precision may not be correct for intrinsic function QPROD: real*8 R8 ^ "quad.f", line 25 col 17: Nonportable usage: intrinsic argument list mixes default and explicit precision operands: dble D , real*8 R8 26 q = qmax1(1.234Q5,q,1.234Q-5) ^ "quad.f", line 26 col 17: Warning: Nonstandard syntax: quad precision constant ^ "quad.f", line 26 col 27: Warning: Nonstandard syntax: quad precision constant 27 end Module %MAIN: prog External subprograms referenced: CQSQRT: intrns QMAX1: intrns QPROD: intrns QSQRT: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims CQ cplx32 D dble Q real16 R real R8 real8 "quad.f", line 20: Warning in module %MAIN: Non Fortran 77 intrinsic functions referenced: "quad.f", line 20: CQSQRT referenced "quad.f", line 26: QMAX1 referenced "quad.f", line 25: QPROD referenced "quad.f", line 19: QSQRT referenced 2 syntax errors detected in file quad.f 22 warnings issued in file quad.f ftnchek-3.3.1/test/Okay/rc.fcl0000644000031000002260000001012210145015312016516 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File do_enddo.f: 4 do i=1,100 ^ Warning near line 4 col 7: Nonstandard syntax 6 enddo ^ Warning near line 6 col 7: Nonstandard syntax 7 print *,sum !@#$*& ^ Warning near line 7 col 20: Nonstandard syntax: inline comment 10 do while(other_sum .lt. 2000) ^ Warning near line 10 col 7: Nonstandard syntax 13 ! here we have a nonstandard comment ^ Warning near line 13 col 1: Nonstandard syntax: inline comment 12 end do ^ Warning near line 12 col 7: Nonstandard syntax 15 dowhile ( x .ne. (1,2)) ^ Warning near line 15 col 7: Nonstandard syntax 17 end do ^ Warning near line 17 col 7: Nonstandard syntax 18 do 100 while (.true.) ^ Warning near line 18 col 7: Nonstandard syntax 20 if( sum .eq. 0.0 ) exit ^ Warning near line 20 col 29: Nonstandard syntax: EXIT statement 22 do 200, while (.false.) ^ Warning near line 22 col 7: Nonstandard syntax 24 200 end do ^ Warning near line 24 col 7: Nonstandard syntax Module ABC: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* OTHER_SUM real* SUM real* X real* * Variable not declared. Type has been implicitly defined. Warning in module ABC: Variables may be used before set: X used at line 15 X set at line 16 I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD PRINT 7 14 * SEQ FMTD READ 19 * SEQ FMTD WRITE 23 Statement labels defined: Label Line StmtType Label Line StmtType <100> 21 exec <200> 24 exec 26 include 'average.f' ^ Warning near line 26 col 7: Nonstandard syntax Including file average.f: 16 COMPAV = SUM/COUNT ^ Warning near line 16 col 20 file average.f: integer quotient expr SUM/COUNT converted to real Module COMPAV: func: real Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims COMPAV real COUNT intg I intg* J intg SCORE intg 1 SUM intg * Variable not declared. Type has been implicitly defined. Warning in module COMPAV in file average.f: Variables may be used before set: SUM used at line 14 file average.f included at line 26 file do_enddo.f SUM set at line 14 file average.f included at line 26 file do_enddo.f Statement labels defined: Label Line StmtType <30> 15[1] exec ________ [1] -- in include file: average.f Module AVENUM: prog External subprograms referenced: COMPAV: real* Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims AVG real COUNT intg I intg MAXNOS intg* NUMS real 1 * Variable not declared. Type has been implicitly defined. Warning in module AVENUM in file average.f: Variables set but never used: AVG set at line 43 file average.f included at line 26 file do_enddo.f I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 40 Statement labels defined: Label Line StmtType Label Line StmtType <80> 42[1] exec <100> 43[1] exec ________ [1] -- in include file: average.f 0 syntax errors detected in file do_enddo.f 20 warnings issued in file do_enddo.f Warning: Subprogram ABC never invoked Defined in module ABC line 2 file do_enddo.f Warning: Subprogram COMPAV argument data type mismatch at position 1: Dummy arg SCORE in module COMPAV line 10 file average.f (included at line 26 in do_enddo.f) is type intg Actual arg NUMS in module AVENUM line 43 file average.f (included at line 26 in do_enddo.f) is type real ftnchek-3.3.1/test/Okay/relops.fcl0000644000031000002260000000372310145015312017427 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File relops.f: 1 C Test program for acceptance of new style relational operators. These 2 C are F90 standard, not F77. 3 real x, y 4 5 write(*,*) 'Enter two numbers' 6 read(*,*) x,y 7 8 if( x > y ) then ^ Warning near line 8 col 13: Nonstandard syntax for relational operator 9 write(*,*) x,' is greater than',y 10 endif 11 if( x == y ) then ^ Warning near line 11 col 13: Nonstandard syntax for relational operator 12 write(*,*) x, ' is equal to ',y 13 endif 14 if( x /= y ) then ^ Warning near line 14 col 13: Nonstandard syntax for relational operator 15 write(*,*) x, ' is not equal to',y 16 endif 17 if( x >= y ) then ^ Warning near line 17 col 13: Nonstandard syntax for relational operator 18 write(*,*) x,' is greater or equal to than',y 19 endif 20 if( x < y ) then ^ Warning near line 20 col 13: Nonstandard syntax for relational operator 21 write(*,*) x, ' is less than ',y 22 endif 23 if( x <= y ) then ^ Warning near line 23 col 13: Nonstandard syntax for relational operator 24 write(*,*) x, ' is less than or equal to ',y 25 endif 26 end 27 Module %MAIN: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X real Y real I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 6 * SEQ FMTD WRITE 5 9 12 15 18 21 24 0 syntax errors detected in file relops.f 6 warnings issued in file relops.f ftnchek-3.3.1/test/Okay/relops.fcx0000644000031000002260000000400310145015312017433 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File relops.f: 1 C Test program for acceptance of new style relational operators. These 2 C are F90 standard, not F77. 3 real x, y 4 5 write(*,*) 'Enter two numbers' 6 read(*,*) x,y 7 8 if( x > y ) then ^ "relops.f", line 8 col 13: Warning: Nonstandard syntax for relational operator 9 write(*,*) x,' is greater than',y 10 endif 11 if( x == y ) then ^ "relops.f", line 11 col 13: Warning: Nonstandard syntax for relational operator 12 write(*,*) x, ' is equal to ',y 13 endif 14 if( x /= y ) then ^ "relops.f", line 14 col 13: Warning: Nonstandard syntax for relational operator 15 write(*,*) x, ' is not equal to',y 16 endif 17 if( x >= y ) then ^ "relops.f", line 17 col 13: Warning: Nonstandard syntax for relational operator 18 write(*,*) x,' is greater or equal to than',y 19 endif 20 if( x < y ) then ^ "relops.f", line 20 col 13: Warning: Nonstandard syntax for relational operator 21 write(*,*) x, ' is less than ',y 22 endif 23 if( x <= y ) then ^ "relops.f", line 23 col 13: Warning: Nonstandard syntax for relational operator 24 write(*,*) x, ' is less than or equal to ',y 25 endif 26 end 27 Module %MAIN: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims X real Y real I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 6 * SEQ FMTD WRITE 5 9 12 15 18 21 24 0 syntax errors detected in file relops.f 6 warnings issued in file relops.f ftnchek-3.3.1/test/Okay/sequence.fcl0000644000031000002260000000212610145015312017727 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File sequence.f: 1 C tests message about statement out of order. 2 data x /1.0/ 3 integer a,b,c Warning near line 3: Nonstandard syntax: Statement out of order. 4 common a,b,c 5 sqr(y)=y*y 6 double precision d Warning near line 6: Nonstandard syntax: Statement out of order. 7 read(*,*) a,b,c,d 8 write(*,*) a,b,c,d,sqr(x) 9 end Module %MAIN: prog Statement functions defined: SQR: real* Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg B intg C intg D dble X real* Y real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 7 * SEQ FMTD WRITE 8 0 syntax errors detected in file sequence.f 3 warnings issued in file sequence.f ftnchek-3.3.1/test/Okay/sequence.fcx0000644000031000002260000000216610145015312017747 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File sequence.f: 1 C tests message about statement out of order. 2 data x /1.0/ 3 integer a,b,c "sequence.f", near line 3: Warning: Nonstandard syntax: Statement out of order. 4 common a,b,c 5 sqr(y)=y*y 6 double precision d "sequence.f", near line 6: Warning: Nonstandard syntax: Statement out of order. 7 read(*,*) a,b,c,d 8 write(*,*) a,b,c,d,sqr(x) 9 end Module %MAIN: prog Statement functions defined: SQR: real* Common blocks referenced: %BLANK Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A intg B intg C intg D dble X real* Y real* * Variable not declared. Type has been implicitly defined. I/O Operations: Unit ID Unit No. Access Form Operation Line * SEQ FMTD READ 7 * SEQ FMTD WRITE 8 0 syntax errors detected in file sequence.f 3 warnings issued in file sequence.f ftnchek-3.3.1/test/Okay/strings.fcl0000644000031000002260000000162010145015312017606 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File strings.f: 4 S = '12345678901234567890123456789012345678901234567890123456789012 ^ Possibly misleading appearance near line 4 col 73 file strings.f: characters past 72 columns 7 T = '12345678901234567890123456789012345678901234567890123456789012 ^ Possibly misleading appearance near line 7 col 73 file strings.f: characters past 72 columns 16 $'12345678901234567890123456789012345678901234567890123456789012' ^ Error near line 16 col 71 file strings.f: syntax error, unexpected string, expecting end of statement 1 syntax error detected in file strings.f 2 warnings issued in file strings.f ftnchek-3.3.1/test/Okay/strings.fcx0000644000031000002260000000157610145015312017634 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File strings.f: 4 S = '12345678901234567890123456789012345678901234567890123456789012 ^ "strings.f", line 4 col 73: Possibly misleading appearance: characters past 72 columns 7 T = '12345678901234567890123456789012345678901234567890123456789012 ^ "strings.f", line 7 col 73: Possibly misleading appearance: characters past 72 columns 16 $'12345678901234567890123456789012345678901234567890123456789012' ^ "strings.f", line 16 col 71: Error: syntax error, unexpected string, expecting end of statement 1 syntax error detected in file strings.f 2 warnings issued in file strings.f ftnchek-3.3.1/test/Okay/substr.fcl0000644000031000002260000000150210145015312017436 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File substr.f: 1 C This program tickled a bug in gcc under DEC Unix for Alpha 2 PROGRAM X 3 CHARACTER*80 LINE 4 INTEGER LSTART, LEND 5 PARAMETER (LSTART=2,LEND=11) 6 READ (5,'(A)') LINE(1:9) 7 PRINT *,LINE(9:10) 8 READ (5,'(A)') LINE(LSTART:LEND) 9 PRINT *,LINE(2:LEND) 10 END Module X: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims LEND intg LINE char80 LSTART intg I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 6 8 * SEQ FMTD PRINT 7 9 0 syntax errors detected in file substr.f ftnchek-3.3.1/test/Okay/substr.fcx0000644000031000002260000000150210145015312017452 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File substr.f: 1 C This program tickled a bug in gcc under DEC Unix for Alpha 2 PROGRAM X 3 CHARACTER*80 LINE 4 INTEGER LSTART, LEND 5 PARAMETER (LSTART=2,LEND=11) 6 READ (5,'(A)') LINE(1:9) 7 PRINT *,LINE(9:10) 8 READ (5,'(A)') LINE(LSTART:LEND) 9 PRINT *,LINE(2:LEND) 10 END Module X: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims LEND intg LINE char80 LSTART intg I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 6 8 * SEQ FMTD PRINT 7 9 0 syntax errors detected in file substr.f ftnchek-3.3.1/test/Okay/t208f.fcl0000644000031000002260000000543310145015312016766 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File t208f.f: 1 integer m 2 n = m 3 end Module %MAIN: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims M intg N intg* * Variable not declared. Type has been implicitly defined. Warning in module %MAIN: Variables set but never used: N set at line 2 Warning in module %MAIN: Variables used before set M used at line 2; never set 4 subroutine big 5 integer a_very_long_variable_name, another_very_long_variable_name 6 integer a_long_variable_name, another_long_variable_name 7 integer a_variable_name, another_variable_name 8 real u, v, w, x, y, z 9 end Warning near line 9: Module contains no executable statements Module BIG: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ANOTHER_LONG_VARIABLE_NAME intg ANOTHER_VARIABLE_NAME intg ANOTHER_VERY_LONG_VARIABLE_NAME intg A_LONG_VARIABLE_NAME intg A_VARIABLE_NAME intg A_VERY_LONG_VARIABLE_NAME intg U real V real W real X real Y real Z real Warning in module BIG: Variables declared but never referenced: ANOTHER_LONG_VARIABLE_NAME declared at line 6 ANOTHER_VARIABLE_NAME declared at line 7 ANOTHER_VERY_LONG_VARIABLE_NAME declared at line 5 A_LONG_VARIABLE_NAME declared at line 6 A_VARIABLE_NAME declared at line 7 A_VERY_LONG_VARIABLE_NAME declared at line 5 U declared at line 8 V declared at line 8 W declared at line 8 X declared at line 8 Y declared at line 8 Z declared at line 8 Warning in module BIG: Names longer than 6 chars (nonstandard): ANOTHER_LONG_VARIABLE_NAME declared at line 6 ANOTHER_VARIABLE_NAME declared at line 7 ANOTHER_VERY_LONG_VARIABLE_NAME declared at line 5 A_LONG_VARIABLE_NAME declared at line 6 A_VARIABLE_NAME declared at line 7 A_VERY_LONG_VARIABLE_NAME declared at line 5 Warning in module BIG: Names containing nonstandard characters: ANOTHER_LONG_VARIABLE_NAME declared at line 6 ANOTHER_VARIABLE_NAME declared at line 7 ANOTHER_VERY_LONG_VARIABLE_NAME declared at line 5 A_LONG_VARIABLE_NAME declared at line 6 A_VARIABLE_NAME declared at line 7 A_VERY_LONG_VARIABLE_NAME declared at line 5 Warning in module BIG: Identifiers which are not unique in first six chars: ANOTHER_LONG_VARIABLE_NAME declared at line 6 ANOTHER_VARIABLE_NAME declared at line 7 ANOTHER_VERY_LONG_VARIABLE_NAME declared at line 5 0 syntax errors detected in file t208f.f 8 warnings issued in file t208f.f Warning: Subprogram BIG never invoked Defined in module BIG line 4 file t208f.f ftnchek-3.3.1/test/Okay/t208f.fcx0000644000031000002260000000626310145015312017004 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File t208f.f: 1 integer m 2 n = m 3 end Module %MAIN: prog Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims M intg N intg* * Variable not declared. Type has been implicitly defined. "t208f.f", line 2: Warning in module %MAIN: Variables set but never used: "t208f.f", line 2: N set "t208f.f", line 2: Warning in module %MAIN: Variables used before set "t208f.f", line 2: M used; never set 4 subroutine big 5 integer a_very_long_variable_name, another_very_long_variable_name 6 integer a_long_variable_name, another_long_variable_name 7 integer a_variable_name, another_variable_name 8 real u, v, w, x, y, z 9 end "t208f.f", near line 9: Warning: Module contains no executable statements Module BIG: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ANOTHER_LONG_VARIABLE_NAME intg ANOTHER_VARIABLE_NAME intg ANOTHER_VERY_LONG_VARIABLE_NAME intg A_LONG_VARIABLE_NAME intg A_VARIABLE_NAME intg A_VERY_LONG_VARIABLE_NAME intg U real V real W real X real Y real Z real "t208f.f", line 6: Warning in module BIG: Variables declared but never referenced: "t208f.f", line 6: ANOTHER_LONG_VARIABLE_NAME declared "t208f.f", line 7: ANOTHER_VARIABLE_NAME declared "t208f.f", line 5: ANOTHER_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 6: A_LONG_VARIABLE_NAME declared "t208f.f", line 7: A_VARIABLE_NAME declared "t208f.f", line 5: A_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 8: U declared "t208f.f", line 8: V declared "t208f.f", line 8: W declared "t208f.f", line 8: X declared "t208f.f", line 8: Y declared "t208f.f", line 8: Z declared "t208f.f", line 6: Warning in module BIG: Names longer than 6 chars (nonstandard): "t208f.f", line 6: ANOTHER_LONG_VARIABLE_NAME declared "t208f.f", line 7: ANOTHER_VARIABLE_NAME declared "t208f.f", line 5: ANOTHER_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 6: A_LONG_VARIABLE_NAME declared "t208f.f", line 7: A_VARIABLE_NAME declared "t208f.f", line 5: A_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 6: Warning in module BIG: Names containing nonstandard characters: "t208f.f", line 6: ANOTHER_LONG_VARIABLE_NAME declared "t208f.f", line 7: ANOTHER_VARIABLE_NAME declared "t208f.f", line 5: ANOTHER_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 6: A_LONG_VARIABLE_NAME declared "t208f.f", line 7: A_VARIABLE_NAME declared "t208f.f", line 5: A_VERY_LONG_VARIABLE_NAME declared "t208f.f", line 6: Warning in module BIG: Identifiers which are not unique in first six chars: "t208f.f", line 6: ANOTHER_LONG_VARIABLE_NAME declared "t208f.f", line 7: ANOTHER_VARIABLE_NAME declared "t208f.f", line 5: ANOTHER_VERY_LONG_VARIABLE_NAME declared 0 syntax errors detected in file t208f.f 8 warnings issued in file t208f.f "t208f.f", line 4: Warning: Subprogram BIG never invoked "t208f.f", line 4: Defined in module BIG ftnchek-3.3.1/test/Okay/unixincluded.fcl0000644000031000002260000000121110145015312020604 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File unixincluded.f: 1 # 1 "unixinclude.f" ^ Warning near line 1 col 1 file unixinclude.f: Nonstandard syntax: preprocessor directive 3 # 1 "./unixdefs.h" ^ Warning near line 3 col 1 file ./unixdefs.h: Nonstandard syntax: preprocessor directive 4 # 3 "unixinclude.f" ^ Warning near line 4 col 1 file unixinclude.f: Nonstandard syntax: preprocessor directive Warning in module %MAIN in file unixinclude.f: Variables set but never used: A set at line 4 file unixinclude.f 0 syntax errors detected in file unixincluded.f 4 warnings issued in file unixincluded.f ftnchek-3.3.1/test/Okay/unixincluded.fcx0000644000031000002260000000116710145015312020632 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File unixincluded.f: 1 # 1 "unixinclude.f" ^ "unixinclude.f", line 1 col 1: Warning: Nonstandard syntax: preprocessor directive 3 # 1 "./unixdefs.h" ^ "./unixdefs.h", line 3 col 1: Warning: Nonstandard syntax: preprocessor directive 4 # 3 "unixinclude.f" ^ "unixinclude.f", line 4 col 1: Warning: Nonstandard syntax: preprocessor directive "unixinclude.f", line 4: Warning in module %MAIN: Variables set but never used: "unixinclude.f", line 4: A set 0 syntax errors detected in file unixincluded.f 4 warnings issued in file unixincluded.f ftnchek-3.3.1/test/Okay/usage.fc00000644000031000002260000000250610145015312017131 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File usage.f: 11 $ (9,9,100) ^ Possibly misleading appearance near line 11 col 6 file usage.f: Continuation follows comment or blank line 23 parameter (Pi = 3.14159265358979D0) ^ Warning near line 23 col 25 file usage.f: dble const 3.14159265358979D0 truncated to real PI 50 www = 4.7 + (Pi * 2)**8 ^ Warning near line 50 col 21 file usage.f: real expr 4.7+(PI*2)**8 truncated to intg WWW 60 dbl1 = 1.2345 ^ Warning near line 60 col 14 file usage.f: real const 1.2345 promoted to dble DBL1: may not give desired precision 75 if( beta ) xray = 1.0D0 ^ Warning near line 75 col 25 file usage.f: dble const 1.0D0 truncated to intg XRAY 81 if((x-1.0)**(sqrt(2.0))/(5/4+com6) .gt. com3) then ^ Warning near line 81 col 37 file usage.f: integer quotient expr 5/4 converted to real 87 com4(com2+com6) = com4(xray) ^ Warning near line 87 col 14 file usage.f: subscript is not integer ^ Warning near line 87 col 32 file usage.f: subscript is not integer 0 syntax errors detected in file usage.f 8 warnings issued in file usage.f ftnchek-3.3.1/test/Okay/usage.fc10000644000031000002260000000365010145015312017133 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File usage.f: 11 $ (9,9,100) ^ Possibly misleading appearance near line 11 col 6 file usage.f: Continuation follows comment or blank line 23 parameter (Pi = 3.14159265358979D0) ^ Warning near line 23 col 25 file usage.f: dble const 3.14159265358979D0 truncated to real PI 50 www = 4.7 + (Pi * 2)**8 ^ Warning near line 50 col 21 file usage.f: real expr 4.7+(PI*2)**8 truncated to intg WWW 60 dbl1 = 1.2345 ^ Warning near line 60 col 14 file usage.f: real const 1.2345 promoted to dble DBL1: may not give desired precision Warning in module YACCTEST in file usage.f: Variables used before set IUNIT used at line 43 file usage.f; never set PAUSE used at line 42 file usage.f; never set SAVE used at line 48 file usage.f; never set STOP used at line 48 file usage.f; never set Warning in module YACCTEST in file usage.f: Variables may be used before set: DBL1 used at line 38 file usage.f DBL1 set at line 60 file usage.f 75 if( beta ) xray = 1.0D0 ^ Warning near line 75 col 25 file usage.f: dble const 1.0D0 truncated to intg XRAY 81 if((x-1.0)**(sqrt(2.0))/(5/4+com6) .gt. com3) then ^ Warning near line 81 col 37 file usage.f: integer quotient expr 5/4 converted to real 87 com4(com2+com6) = com4(xray) ^ Warning near line 87 col 14 file usage.f: subscript is not integer ^ Warning near line 87 col 32 file usage.f: subscript is not integer Warning in module HOME in file usage.f: Variables used before set COM2 used at line 87 file usage.f; never set 0 syntax errors detected in file usage.f 11 warnings issued in file usage.f Warning: Common block BLK1 Elements used but never set: COM3 COM6 ftnchek-3.3.1/test/Okay/usage.fc20000644000031000002260000000423310145015312017132 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File usage.f: 11 $ (9,9,100) ^ Possibly misleading appearance near line 11 col 6 file usage.f: Continuation follows comment or blank line 23 parameter (Pi = 3.14159265358979D0) ^ Warning near line 23 col 25 file usage.f: dble const 3.14159265358979D0 truncated to real PI 50 www = 4.7 + (Pi * 2)**8 ^ Warning near line 50 col 21 file usage.f: real expr 4.7+(PI*2)**8 truncated to intg WWW 60 dbl1 = 1.2345 ^ Warning near line 60 col 14 file usage.f: real const 1.2345 promoted to dble DBL1: may not give desired precision Warning in module YACCTEST in file usage.f: Variables declared but never referenced: COMPL1 declared at line 33 file usage.f COMPL2 declared at line 33 file usage.f DBL2 declared at line 31 file usage.f PROGRAM declared at line 20 file usage.f Warning in module YACCTEST in file usage.f: Variables set but never used: A123 set at line 35 file usage.f END set at line 42 file usage.f IFA set at line 35 file usage.f WWW set at line 50 file usage.f 75 if( beta ) xray = 1.0D0 ^ Warning near line 75 col 25 file usage.f: dble const 1.0D0 truncated to intg XRAY 81 if((x-1.0)**(sqrt(2.0))/(5/4+com6) .gt. com3) then ^ Warning near line 81 col 37 file usage.f: integer quotient expr 5/4 converted to real 87 com4(com2+com6) = com4(xray) ^ Warning near line 87 col 14 file usage.f: subscript is not integer ^ Warning near line 87 col 32 file usage.f: subscript is not integer 0 syntax errors detected in file usage.f 10 warnings issued in file usage.f Warning: Common block BLK2 unused anywhere Warning: Common block %BLANK unused anywhere Warning: Common block BLK3 unused anywhere Warning: Common block BLK4 Elements set but never used: all Warning: Subprogram XRAY never invoked Defined in module XRAY line 70 file usage.f Warning: Subprogram HOME never invoked Defined in module HOME line 78 file usage.f ftnchek-3.3.1/test/Okay/usage.fc30000644000031000002260000000616710145015312017143 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File usage.f: 11 $ (9,9,100) ^ Possibly misleading appearance near line 11 col 6 file usage.f: Continuation follows comment or blank line 23 parameter (Pi = 3.14159265358979D0) ^ Warning near line 23 col 25 file usage.f: dble const 3.14159265358979D0 truncated to real PI 50 www = 4.7 + (Pi * 2)**8 ^ Warning near line 50 col 21 file usage.f: real expr 4.7+(PI*2)**8 truncated to intg WWW 60 dbl1 = 1.2345 ^ Warning near line 60 col 14 file usage.f: real const 1.2345 promoted to dble DBL1: may not give desired precision Warning in module YACCTEST in file usage.f: Variables declared but never referenced: COMPL1 declared at line 33 file usage.f COMPL2 declared at line 33 file usage.f DBL2 declared at line 31 file usage.f PROGRAM declared at line 20 file usage.f Warning in module YACCTEST in file usage.f: Variables set but never used: A123 set at line 35 file usage.f END set at line 42 file usage.f IFA set at line 35 file usage.f WWW set at line 50 file usage.f Warning in module YACCTEST in file usage.f: Variables used before set IUNIT used at line 43 file usage.f; never set PAUSE used at line 42 file usage.f; never set SAVE used at line 48 file usage.f; never set STOP used at line 48 file usage.f; never set Warning in module YACCTEST in file usage.f: Variables may be used before set: DBL1 used at line 38 file usage.f DBL1 set at line 60 file usage.f Error in module YACCTEST in file usage.f: Labels referenced but not defined: <5> referenced at line 47 file usage.f Warning in module YACCTEST in file usage.f: Labels defined but not used: <22> defined at line 12 file usage.f 75 if( beta ) xray = 1.0D0 ^ Warning near line 75 col 25 file usage.f: dble const 1.0D0 truncated to intg XRAY Warning in module XRAY in file usage.f: Variables declared but never referenced: GAMMA declared at line 71 file usage.f (dummy argument) 81 if((x-1.0)**(sqrt(2.0))/(5/4+com6) .gt. com3) then ^ Warning near line 81 col 37 file usage.f: integer quotient expr 5/4 converted to real 87 com4(com2+com6) = com4(xray) ^ Warning near line 87 col 14 file usage.f: subscript is not integer ^ Warning near line 87 col 32 file usage.f: subscript is not integer Warning in module HOME in file usage.f: Variables used before set COM2 used at line 87 file usage.f; never set 1 syntax error detected in file usage.f 15 warnings issued in file usage.f Warning: Common block BLK1 Elements used but never set: COM3 COM6 Warning: Common block BLK2 unused anywhere Warning: Common block %BLANK unused anywhere Warning: Common block BLK3 unused anywhere Warning: Common block BLK4 Elements set but never used: all Warning: Subprogram XRAY never invoked Defined in module XRAY line 70 file usage.f Warning: Subprogram HOME never invoked Defined in module HOME line 78 file usage.f ftnchek-3.3.1/test/Okay/wordsize.fc10000644000031000002260000000065410145015312017676 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 1 double precision function f(a,b) 2 double precision a,b 3 f = a+b 4 return 5 end 6 program main 7 real*8 f 8 real*8 x,y 9 x = 1.0 10 y = 2.0d0 11 write(*,*) f(x,y) 12 end 13 0 syntax errors detected in file wordsize.f ftnchek-3.3.1/test/Okay/wordsize.fc20000644000031000002260000000054210145015312017673 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 7 real*8 f ^ Warning near line 7 col 12 file wordsize.f: Nonstandard syntax 8 real*8 x,y ^ Warning near line 8 col 12 file wordsize.f: Nonstandard syntax 0 syntax errors detected in file wordsize.f 2 warnings issued in file wordsize.f ftnchek-3.3.1/test/Okay/wordsize.fc30000644000031000002260000000116210145015312017673 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 0 syntax errors detected in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fc40000644000031000002260000000156210145015312017700 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 7 real*8 f ^ Warning near line 7 col 12 file wordsize.f: Nonstandard syntax 8 real*8 x,y ^ Warning near line 8 col 12 file wordsize.f: Nonstandard syntax 0 syntax errors detected in file wordsize.f 2 warnings issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fc50000644000031000002260000000044210145015312017675 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f ftnchek-3.3.1/test/Okay/wordsize.fc60000644000031000002260000000077310145015312017705 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 7 real*8 f ^ Warning near line 7 col 12 file wordsize.f: Nonstandard syntax 8 real*8 x,y ^ Warning near line 8 col 12 file wordsize.f: Nonstandard syntax 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 3 warnings issued in file wordsize.f ftnchek-3.3.1/test/Okay/wordsize.fc70000644000031000002260000000146210145015312017702 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fc80000644000031000002260000000201310145015312017674 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 7 real*8 f ^ Warning near line 7 col 12 file wordsize.f: Nonstandard syntax 8 real*8 x,y ^ Warning near line 8 col 12 file wordsize.f: Nonstandard syntax 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 3 warnings issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fcA0000644000031000002260000000172110145015312017712 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 10 y = 2.0d0 ^ Warning near line 10 col 9 file wordsize.f: dble const 2.0D0 promoted to real*8 Y: may not give desired precision 0 syntax errors detected in file wordsize.f 2 warnings issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fcB0000644000031000002260000000146210145015312017715 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fcC0000644000031000002260000000143010145015312017711 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 10 y = 2.0d0 ^ Warning near line 10 col 9 file wordsize.f: dble const 2.0D0 truncated to real*8 Y 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fcD0000644000031000002260000000172110145015312017715 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 10 y = 2.0d0 ^ Warning near line 10 col 9 file wordsize.f: dble const 2.0D0 promoted to real*8 Y: may not give desired precision 0 syntax errors detected in file wordsize.f 2 warnings issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Okay/wordsize.fcE0000644000031000002260000000044210145015312017715 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 9 x = 1.0 ^ Warning near line 9 col 9 file wordsize.f: real const 1.0 promoted to real*8 X : may not give desired precision 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f ftnchek-3.3.1/test/Okay/wordsize.fcF0000644000031000002260000000143010145015312017714 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File wordsize.f: 10 y = 2.0d0 ^ Warning near line 10 col 9 file wordsize.f: dble const 2.0D0 truncated to real*8 Y 0 syntax errors detected in file wordsize.f 1 warning issued in file wordsize.f Warning: Subprogram F invoked inconsistently Defined in module F line 1 file wordsize.f as type dble Invoked in module MAIN line 11 file wordsize.f as type real*8 Warning: Subprogram F argument data type mismatch at position 1: Dummy arg A in module F line 1 file wordsize.f is type dble Actual arg X in module MAIN line 11 file wordsize.f is type real*8 and at position 2: Dummy arg B in module F line 1 file wordsize.f is type dble Actual arg Y in module MAIN line 11 file wordsize.f is type real*8 ftnchek-3.3.1/test/Compare.sh0000755000031000002260000000214210202535160016453 0ustar moniotstaff00000000000000#!/bin/sh # # $Id: Compare.sh.in,v 1.2 2000/07/22 19:53:36 moniot Rel $ # # Bourne shell script to compare File in directory ./Vary with # original in directory ./Okay and print a message if they differ. # If no differences it echoes a dot to show progress. # If differences, touches file CHECK_FAILED # # Usage: Compare.sh Okay Vary File OKAY=$1 VARY=$2 FILE=$3 if [ ! -d ${OKAY} ] then echo "Creating directory ${OKAY}" mkdir ${OKAY}; fi if [ ! -f ${OKAY}/${FILE} ] then echo "${FILE} is new" cp ${FILE} ${OKAY}/${FILE} fi if cmp ${OKAY}/${FILE} ${FILE} > /dev/null then rm -f -f ${FILE} echo '.' | gawk '{printf("%s",$1);}' else touch CHECK_FAILED echo "" echo "--------------------------------------------------" echo "====> Differences found in ${FILE} test <====" echo "Master: ${OKAY}/${FILE}" echo "Test: ${VARY}/${FILE}" if [ ! -d ${VARY} ] then echo "Creating directory ${VARY}" mkdir ${VARY} fi mv ${FILE} ${VARY}/${FILE} # To show diffs uncomment next line # diff ${OKAY}/${FILE} ${VARY}/${FILE} fi exit 0 ftnchek-3.3.1/test/vcg.bat0000644000031000002260000000014407070276742016016 0ustar moniotstaff00000000000000rem Batch file for checking -vcg setting. ..\ftnchek.exe -vcg %1.f > NUL call compare.bat %1.vcg ftnchek-3.3.1/test/.#Makefile.in.1.340000640000031000002260000005263107644134701017320 0ustar moniotstaff00000000000000# $Id: Makefile.in,v 1.34 2003/04/04 16:34:25 moniot Exp $ # Makefile for smoke-testing ftnchek. Say ``make'' to make all checks. # # EXE = @EXE@ CMD = @CMD@ # gawk/nawk specially needed for dcl2inc.awk NAWK = @AWK@ # ordinary awk used to print some messages AWK = @AWK@ # This defn uses version of dcl2inc.awk in the parent directory. DCL2INC = $(NAWK) -f ../dcl2inc.awk # This defn uses version of ftnchek in the parent directory. FTNCHEK = ../ftnchek$(EXE) # Since ftnpp is not included with ftnchek package, it is searched # for by configure. If it does not exist, checkftnpp will be skipped. FTNPP = @FTNPP@$(EXE) FTNPPFLAGS = # OKAY subdirectory is where the correct output files are stored. OKAY = Okay # VARY subdirectory is where the varying output files are stored. VARY = Vary # Directory containing MS-DOS variants of output files. DOSOKAY= Okay.dos # COMPARE invokes the comparison script to check new vs archive. COMPARE = ./Compare.sh $(OKAY) $(VARY) # RCFILE is the name of the startup file for checkrc RCFILE= ftnchek.ini # DEFAULT_FLAGS is the set of Ftnchek flags used by the default rule. # Note: The default rule also sets -f77 via the environment mechanism # in order to check that mechanism. DEFAULT_FLAGS = -list -symt -port MAKE = @MAKE@ FTNCHEK=$(FTNCHEK) OKAY=$(OKAY) VARY=$(VARY) CP = @CP@ GREP = @GREP@ MV = @MV@ PRINTENV = @PRINTENV@ RM = @RM@ SED = @SED@ SHELL = @SH@ .SUFFIXES: .chk .f .f90 .prj .fcl .fc1 .fc2 .fc3 .fc4 .fc5 .fc6 .fc7 .fc8 \ .fc9 .fcA .fcB .fcC .fcD .fcE .fcF .fcx #======================================================================= # # Definitions of File Groups # # # LISTOUT programs are simple, and all use the default options or else # the options given in their .opt file. These produce listing files # *.fcl (or *.fcx in -nonovice, i.e. expert mode). Note: Those with # .opt files may have associated routines in other files that do not # appear here. LISTOUT= average.f backslash.f chestnuts.f comclash.f comcmp.f\ complex.f comtest.f comusage.f correct.f dims.f do_enddo.f\ help.f include.f namelist.f noblanks.f strings.f unixincluded.f\ dectab.f quad.f sequence.f substr.f autoarray.f cycle-exit.f\ relops.f embedded-space.f arg-alias.f common-alias.f dec-parameter.f\ iffy.f pure-function.f primes.f labeltest.f case.f allkeywords.f\ blockerrors.f t208f.f lotsalabels.f initializers.f cray-pointers.f FREEFORM=model.f90 blockcheck.f90 # set of files for testing f77/f90/f95 options F90= iokeywords.f f95deleted.f # set of files for testing -arguments setting ARGS= args01.f args02.f args03.f args04.f args05.f args06.f\ args07.f args08.f args09.f args10.f args11.f args12.f\ args13.f args14.f args15.f # set of files for testing -array setting ARRAY= arrayclash.f # Set of files for testing -trun -port -f77 options and -word setting EXPR= assign.f wordsize.f mixed-equiv.f # set of files for testing -common setting COMMON= comcmp.f comusage.f # set of files for testing -intrinsic options INTRINSIC= intrinstest.f # set of files for testing dcl2inc processing DCL2INCFILES= t208x.f # set of files for testing -makedcls setting MAKEDCLS= builtin.f dcltest.f dims.f model.f90 namelist.f params.f\ t208a.f t208b.f t208c.f t208d.f t208e.f t208f.f t208g.f t208h.f \ t208i.f t208j.f t208k.f t208l.f t208m.f t208n.f t208o.f t208p.f \ t208q.f t208r.f t208s.f t208t.f t208u.f t208v.f t208w.f t208x.f # set of files for testing -mkhtml option (also uses MAKEDCLS) MKHTML= animated_pendulum_main.f animated_pendulum_cls.f \ animated_pendulum_entergr.f animated_pendulum_plotball.f \ animated_pendulum_exitgr.f # set of files for testing -usage options USAGE= usage.f # set of files for testing -vcg switch (use target checkvcg) VCGLIST= comcmp.f comusage.f #======================================================================= # # Default Rules # # Rule for creating source code listing file, suffix .fcl. Stdout and # stderr are merged and environment mechanism for setting command # options is tested. .f.fcl: @if [ -f $*.opt ] ; then \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for expert-mode listings. Same as above except for -nonovice flag. .f.fcx: @if [ -f $*.opt ] ; then \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) -nonovice `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F77=1; export FTNCHEK_F77; \ $(FTNCHEK) -nonovice $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for creating free-form source code listing file, suffix .fcl. # Same as for .f except F90 flag is set instead of F77. .f90.fcl: @if [ -f $*.opt ] ; then \ FTNCHEK_F90=1; export FTNCHEK_F90; \ $(FTNCHEK) `cat $*.opt` > $@ 2>&1 ; \ else \ FTNCHEK_F90=1; export FTNCHEK_F90; \ $(FTNCHEK) $(DEFAULT_FLAGS) $< > $@ 2>&1 ; \ fi # Rule for creating project file. The .fcl file is made as a side-effect. .f.prj: if [ -f $*.opt ] ; then \ $(FTNCHEK) -project `cat $*.opt` > $*.fcl 2>&1 ; \ else \ $(FTNCHEK) -project $(DEFAULT_FLAGS) $< > $*.fcl 2>&1 ; \ fi # Rule for running checks on source code listing. If OKAY directory does # not exist, it is created. If OKAY code listing does not exist, it # is created and moved into OKAY. Note: In this case, you must examine # the results to see if it is really OK! .f.chk: @-$(RM) $*.fcl @$(MAKE) FTNCHEK='$(FTNCHEK)' $*.fcl "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" @$(COMPARE) $*.fcl .f90.chk: @-$(RM) $*.fcl @$(MAKE) FTNCHEK='$(FTNCHEK)' $*.fcl "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" @$(COMPARE) $*.fcl #======================================================================= # # Targets. # # all: check check: announce clearfail checkall checkfail announce: @echo "============================================================" @echo "There should be no file differences reported by these tests." @echo "Output files matching master output files will be removed," @echo "leaving any erroneous output files in directory $(VARY)" @echo "for manual examination. If you built ftnchek with non-" @echo "standard compilation options, there may be some differences." @echo "============================================================" # Remove signal file created by Compare.sh clearfail: @-$(RM) CHECK_FAILED CHECK_FAILED.save # Look for CHECK_FAILED file -- if found, then Compare.sh found diffs. checkfail: @if [ -f CHECK_FAILED ] ; \ then \ echo "===============================================" ; \ echo "===> There were differences. Check failed. <==" ; \ echo "===============================================" ; \ $(RM) CHECK_FAILED CHECK_FAILED.save ; \ else \ echo "No differences found. Check successful." ; \ fi checkall: checksyntax checksettings checkother checksyntax: checklistings checkexpert checkf90 checkexpr checksettings: checkargs checkarray checkcommon checkintrinsic checkoutput checkusage checkother: checkproject checkrc checkwildcard checkmakedcls \ checkmkhtml checkvcg checkdcl2inc checkftnpp # User should make precheck before running checks. It looks out for # situations that will cause the check to fail: ftnchek not built, # user has an rc file in home directory, or FTNCHEK_* environment # variables are set. precheck: @-$(RM) $(RCFILE) @errorcode=0 ; \ if [ ! -f "$(FTNCHEK)" ] ; then \ echo "ERROR ===> Cannot run checks: no ftnchek found <==="; \ errorcode=1 ; \ fi ; \ if [ -f "$$HOME/.ftnchekrc" ] ; then \ echo "WARNING ===> $$HOME/.ftnchekrc exists <==="; \ echo "delete or rename it before running check" ; \ errorcode=1 ; \ fi ; \ if [ -f "$$HOME/ftnchek.ini" ] ; then \ echo "WARNING ===> $$HOME/ftnchek.ini exists <==="; \ echo "delete or rename it before running check" ; \ errorcode=1 ; \ fi ; \ if $(PRINTENV) | $(GREP) '^FTNCHEK_' >/dev/null 2>&1 ; then \ echo "WARNING ===> environment variables set:"; \ $(PRINTENV) | $(GREP) '^FTNCHEK_' ; \ echo "unset them before running check" ; \ errorcode=1 ; \ fi ; \ if [ "$$errorcode" = 0 ] ; then \ true ; \ else \ false ; \ fi clean mostlyclean clobber distclean realclean spotless: clearfail -$(RM) *.dc[ln0-9a] *.fc[lx0-9A-F] *.htm[l0-0a] -$(RM) *.pcl *.prj *.inc *.vcg *.err *.mak -$(RM) $(RCFILE) -$(RM) *.o -$(RM) *~ \#* -$(RM) a.out core -$(RM) $(VARY)/* # checklistings checks listing output on programs in LISTOUT and FREEFORM checklistings: announcelistings $(LISTOUT:.f=.chk) $(FREEFORM:.f90=.chk) @-echo "done" # Some systems do not have echo -n option, so to suppress newline # in a portable way, we use this `awk'ward kluge. announcelistings: @-echo|$(AWK) '{printf("%s","checking listing output:");}' # checkexpert is like checklistings but uses -nonovice mode to get # the expert style of warning messages. checkexpert: @-echo|$(AWK) '{printf("%s","checking expert-mode output:");}' @for f in $(LISTOUT:.f=) ; \ do \ $(RM) $$f.fcx ; \ $(MAKE) FTNCHEK='$(FTNCHEK)' $$f.fcx "DEFAULT_FLAGS=$(DEFAULT_FLAGS)" ; \ $(COMPARE) $$f.fcx ; \ done @-echo "done" # Next series of targets checks variations of output as options change. # The output files are named *.fc[1-9A-F] for different cases. Note that # in some instances the same source file is also in a set that is used # to check source listing as usual, with output file named *.fcl # checkf90 checks the -f77, -f90, and -f95 flag behavior. checkf90: @-echo |$(AWK) '{printf("%s","checking standard-compliance warnings:");}' @for f in $(F90:.f=) ; \ do \ $(FTNCHEK) -nof77 -nof90 -nof95 $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -f77 -nof90 -nof95 $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -nof77 -f90 -nof95 $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -nof77 -nof90 -f95 $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ done @-echo "done" # checkexpr checks listing output for various size & type clashes in # expressions and assignment stmts checkexpr: @-echo |$(AWK) '{printf("%s","checking size and type mismatch:");}' @for f in $(EXPR:.f=) ; \ do \ $(FTNCHEK) -notrun -noport -nof77 -lis $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -notrun -noport -f77 $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -notrun -port -nof77 $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ $(FTNCHEK) -notrun -port -f77 $$f.f > $$f.fc4 ; \ $(COMPARE) $$f.fc4 ; \ $(FTNCHEK) -trun -noport -nof77 $$f.f > $$f.fc5 ; \ $(COMPARE) $$f.fc5 ; \ $(FTNCHEK) -trun -noport -f77 $$f.f > $$f.fc6 ; \ $(COMPARE) $$f.fc6 ; \ $(FTNCHEK) -trun -port -nof77 $$f.f > $$f.fc7 ; \ $(COMPARE) $$f.fc7 ; \ $(FTNCHEK) -trun -port -f77 $$f.f > $$f.fc8 ; \ $(COMPARE) $$f.fc8 ; \ $(FTNCHEK) -trun -port -nof77 -word=2 $$f.f > $$f.fcA ; \ $(COMPARE) $$f.fcA ; \ $(FTNCHEK) -trun -port -nof77 -word=4 $$f.f > $$f.fcB ; \ $(COMPARE) $$f.fcB ; \ $(FTNCHEK) -trun -port -nof77 -word=8 $$f.f > $$f.fcC ; \ $(COMPARE) $$f.fcC ; \ $(FTNCHEK) -trun -noport -nof77 -word=2 $$f.f > $$f.fcD ; \ $(COMPARE) $$f.fcD ; \ $(FTNCHEK) -trun -noport -nof77 -word=4 $$f.f > $$f.fcE ; \ $(COMPARE) $$f.fcE ; \ $(FTNCHEK) -trun -noport -nof77 -word=8 $$f.f > $$f.fcF ; \ $(COMPARE) $$f.fcF ; \ done @-echo "done" # checkargs checks the -args=n setting checkargs: @-echo |$(AWK) '{printf("%s","checking -args setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-args" "RANGE=0 1 2 3" \ "FLIST=$(ARGS)" "FLAGS=" @-echo "done" # checkarray checks the -array=n setting checkarray: @-echo |$(AWK) '{printf("%s","checking -array setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-array" "RANGE=0 1 2 3" \ "FLIST=$(ARRAY)" "FLAGS=-port" @-echo "done" #checkcommon checks the -common=n setting checkcommon: @-echo |$(AWK) '{printf("%s","checking -common setting:");}' @$(MAKE) FTNCHEK='$(FTNCHEK)' \ CheckSetting "SETTING=-common" "RANGE=0 1 2 3" \ "FLIST=$(COMMON)" "FLAGS=-nof77" @-echo "done" checkdcl2inc: @-echo |$(AWK) '{printf("%s","checking dcl2inc processing:");}' @for f in $(DCL2INCFILES) ; \ do \ b=`basename $$f .f` ; \ $(RM) $$b.dcl $$b.dcn $$b.err $$b.mak ; \ $(RM) *.inc ; \ $(FTNCHEK) -nocheck -makedcls=1 $$f 1>/dev/null 2>/dev/null ; \ $(DCL2INC) $$b.dcl >$$b.mak 2>$$b.err ; \ for g in $$b.dcl $$b.dcn $$b.mak $$b.err *.inc ; \ do \ $(COMPARE) $$g ; \ done ; \ done @-echo "done" # checkftnpp tests the ftnpp filter program if it was built. The fiddling # with CHECK_FAILED is to avoid giving the special message if the test # failure occured elsewhere. checkftnpp: @if [ -x "$(FTNPP)" ] ; \ then \ if [ -f CHECK_FAILED ] ; \ then \ mv CHECK_FAILED CHECK_FAILED.save ; \ fi ; \ echo |$(AWK) '{printf("%s","checking ftnpp:");}' ; \ $(FTNPP) $(FTNPPFLAGS) -DNEC=IBM -IInclude include.f | $(FTNCHEK) > filter.fcl ; \ $(COMPARE) filter.fcl ; \ echo "done" ; \ if [ -f CHECK_FAILED ] ; \ then \ echo "" ; \ echo "--> Some systems are known to fail the ftnpp test. Check the ftnchek web" ; \ echo "--> site, Latest Information (http://www.dsm.fordham.edu/~ftnchek/Plan)," ; \ echo "--> to see if your system is listed, before reporting such error." ; \ fi ; \ if [ -f CHECK_FAILED.save ] ; \ then \ mv CHECK_FAILED.save CHECK_FAILED ; \ fi ; \ fi # checkintrinsic checks the -intrinsic=optionlist setting checkintrinsic: @-echo |$(AWK) '{printf("%s","checking -intrinsic setting:");}' @for f in $(INTRINSIC:.f=) ; \ do \ $(FTNCHEK) -intrinsic=none $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -intrinsic=none,extra $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -intrinsic=none,unix $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -intrinsic=none,vms $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-rand-no-arg $$f.f > $$f.fc4 ; \ $(COMPARE) $$f.fc4 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-rand-one-arg $$f.f > $$f.fc5 ; \ $(COMPARE) $$f.fc5 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-iargc-no-arg $$f.f > $$f.fc6 ; \ $(COMPARE) $$f.fc6 ; \ $(FTNCHEK) -intrinsic=extra,unix,no-vms,no-iargc-one-arg $$f.f > $$f.fc7 ; \ $(COMPARE) $$f.fc7 ; \ $(FTNCHEK) -intrinsic=all $$f.f > $$f.fc8 ; \ $(COMPARE) $$f.fc8 ; \ done @-echo "done" # checkoutput checks the -output=file string setting checkoutput: @-echo |$(AWK) '{printf("%s","checking -output setting:");}' @$(FTNCHEK) -novice -symt -list -port -out=average.out average.f 2> average.fc2 @-$(COMPARE) average.out @-$(COMPARE) average.fc2 @-echo "done" # checkusage checks the -usage=options setting USAGE_UNUSED=com-block-unused,com-var-set-unused,com-var-unused,ext-unused,var-set-unused,var-unused USAGE_UNINIT=com-var-uninitialized,var-uninitialized checkusage: @-echo |$(AWK) '{printf("%s","checking -usage setting:");}' @for f in $(USAGE:.f=) ; \ do \ $(FTNCHEK) -usage=none $$f.f > $$f.fc0 ; \ $(COMPARE) $$f.fc0 ; \ $(FTNCHEK) -usage=none,$(USAGE_UNINIT) $$f.f > $$f.fc1 ; \ $(COMPARE) $$f.fc1 ; \ $(FTNCHEK) -usage=none,$(USAGE_UNUSED) $$f.f > $$f.fc2 ; \ $(COMPARE) $$f.fc2 ; \ $(FTNCHEK) -usage=all $$f.f > $$f.fc3 ; \ $(COMPARE) $$f.fc3 ; \ done @-echo "done" # checkproject checks creation and use of project files # Note that correct.f is used in LISTOUT also, but with default # compilation options. So we make listing file suffix .fc1 here checkproject: @-echo |$(AWK) '{printf("%s","checking project files:");}' @$(RM) correct.prj correct.fc1 correct.pcl @$(MAKE) FTNCHEK='$(FTNCHEK)' correct.prj @$(MAKE) FTNCHEK='$(FTNCHEK)' correct.pcl @-for f in correct.fc1 correct.prj correct.pcl ; \ do \ $(COMPARE) $$f ; \ done @-echo "done" # Need explicit rule since the default rule is used by listing-file check correct.prj: correct.f @$(FTNCHEK) -project correct.f > correct.fc1 2>&1 # This target creates output listing file from project file input correct.pcl: correct.f @$(FTNCHEK) correct.prj > correct.pcl 2>&1 # Check the reading of startup file checkrc: @-echo |$(AWK) '{printf("%s","checking reading rc file:");}' @-echo "f77=all" > $(RCFILE) @-echo "symtab" >> $(RCFILE) @$(FTNCHEK) -f77=no-long-name,no-name-underscore do_enddo.f > rc.fcl 2>&1 @$(COMPARE) rc.fcl @$(RM) $(RCFILE) @-echo "done" # Check the interpretation of wildcards in warn-option lists checkwildcard: @-echo |$(AWK) '{printf("%s","checking interpreting wildcards:");}' @$(FTNCHEK) '-port=mixed*' -port=help > wildcard.fc1 2>&1 @$(COMPARE) wildcard.fc1 @$(RM) wildcard.fc1 @$(FTNCHEK) '-usage=no-*var*' -usage=help > wildcard.fc2 2>&1 @$(COMPARE) wildcard.fc2 @$(RM) wildcard.fc2 @$(FTNCHEK) '-usage=no-var*' -usage=help > wildcard.fc3 2>&1 @$(COMPARE) wildcard.fc3 @$(RM) wildcard.fc3 @$(FTNCHEK) '-f77=*array*,format*' -f77=help > wildcard.fc4 2>&1 @$(COMPARE) wildcard.fc4 @$(RM) wildcard.fc4 @$(FTNCHEK) '-pretty=*ugly*' -pretty=help > wildcard.fc5 2>&1 @$(COMPARE) wildcard.fc5 @$(RM) wildcard.fc5 @-echo "done" # Check the generation of declarations files. Listing goes to /dev/null. # The values in MAKEDCLS_VALS are used as 3rd char in .fc? suffix. They # are converted to -makedcls=num values by raising 2 to the power. Thus # file.dc0 contains -makedcls=1, ... file.dca contains -makedcls=1024. # There is also a test to be sure that empty .dcl files are removed # automatically as they should be. MAKEDCLS_VALS = 0 1 2 3 4 5 6 7 8 9 a checkmakedcls: @-echo |$(AWK) '{printf("%s","checking -makedcls setting:");}' @-for n in $(MAKEDCLS_VALS) ; \ do \ dcl=dc$$n ;\ val=`echo $$n|$(SED) -e 's/a/10/'|\ $(AWK) '{x=$$1;p=1;while(x>0){x--;p*=2;}print p;}'` ;\ for f in $(MAKEDCLS) ;\ do \ stem=`echo $$f|$(SED) 's/[.][^.]*//'` ;\ $(FTNCHEK) -nocheck -makedcls=$$val $$f 1>/dev/null 2>/dev/null ; \ if [ -f $$stem.dcl ] ; \ then \ if [ `wc -c $$stem.dcl | $(AWK) '{printf("%s",$$1);}'` -eq 0 ] ; \ then \ $(CP) $$stem.dcl $(VARY)/$$stem.$$dcl ; \ echo ; echo "Empty declarations file" \ $(VARY)/$$stem.$$dcl "should have been deleted" ; \ fi ; \ else \ touch $$stem.dcl ; \ fi ; \ $(MV) $$stem.dcl $$stem.$$dcl ; \ $(COMPARE) $$stem.$$dcl ; \ done ; \ done @echo "done" # The first part of this target tests -mkhtml on a multi-file program, # generating the CallTree.html file as well as a separate .html file # for each component of the program. # The next part of the target tests the various sub-options, and treats # each input file separately, generating only its .html file. It is # similar to checkmakedcls, using the same set of source files, but # not all powers of two are meaningful for -mkhtml. MKHTML_VALS = 0 2 3 4 5 6 9 a checkmkhtml: @-echo |$(AWK) '{printf("%s","checking -mkhtml setting:");}' @$(FTNCHEK) -mkhtml -call=tree $(MKHTML) > mkhtml.fcl 2>&1 @$(COMPARE) mkhtml.fcl @$(COMPARE) CallTree.html @-for f in $(MKHTML:.f=.html) ; \ do \ $(COMPARE) $$f ; \ done @-for n in $(MKHTML_VALS) ; \ do \ html=htm$$n ;\ val=`echo $$n|$(SED) -e 's/a/10/'|\ $(AWK) '{x=$$1;p=1;while(x>0){x--;p*=2;}print p;}'` ;\ for f in $(MAKEDCLS:.f=) ;\ do \ stem=`echo $$f|$(SED) 's/[.][^.]*//'` ;\ $(FTNCHEK) -nocheck -mkhtml=$$val $$f 1>/dev/null 2>/dev/null ; \ $(MV) $$stem.html $$stem.$$html ; \ $(COMPARE) $$stem.$$html ; \ done ; \ done @echo "done" checkvcg: @-echo |$(AWK) '{printf("%s","checking -vcg setting:");}' @-for f in $(VCGLIST:.f=) ; \ do \ $(FTNCHEK) -vcg $$f.f 1>/dev/null 2>/dev/null ; \ $(COMPARE) $$f.vcg ; \ done @echo "done" # CheckSetting is a "subroutine" with parameters SETTING=name of setting, # RANGE=list of setting values, FLIST=list of files to check, and # FLAGS=set of ftnchek flags to use for each case. "Call" this routine # by invoking make with appropriate macro definitions on command line. CheckSetting: @for val in $(RANGE) ; \ do \ for f in $(FLIST:.f=) ; \ do \ $(FTNCHEK) $(SETTING)=$$val $(FLAGS) $$f.f > $$f.fc$$val ; \ $(COMPARE) $$f.fc$$val ; \ done ; \ done # The following targets produce the variant Okay files needed for checking on # MS-DOS systems. dosokay: doshelp dosinclude doswildcard doshelp: $(DOSOKAY)/help.fcl $(DOSOKAY)/help.fcx HELPSUB= -e 's,^ -, /,' -e 's,^ Use -, Use /,' \ -e 's/intrinsic=str \[unix\]/intrinsic=str [common]/' -e '/mkhtml/'d $(DOSOKAY)/help.fcl: $(OKAY)/help.fcl $(SED) $(HELPSUB) $(OKAY)/help.fcl > $(DOSOKAY)/help.fcl $(DOSOKAY)/help.fcx: $(OKAY)/help.fcx $(SED) $(HELPSUB) $(OKAY)/help.fcx > $(DOSOKAY)/help.fcx dosinclude: $(DOSOKAY)/include.fcl $(DOSOKAY)/include.fcx INCLUDESUB= -e 's,/Include/,\\Include\\,' $(DOSOKAY)/include.fcl: $(OKAY)/include.fcl $(SED) $(INCLUDESUB) $(OKAY)/include.fcl > $(DOSOKAY)/include.fcl $(DOSOKAY)/include.fcx: $(OKAY)/include.fcx $(SED) $(INCLUDESUB) $(OKAY)/include.fcx > $(DOSOKAY)/include.fcx doswildcard: $(DOSOKAY)/wildcard.fc1 $(DOSOKAY)/wildcard.fc2 \ $(DOSOKAY)/wildcard.fc3 $(DOSOKAY)/wildcard.fc4 WILDCARDSUB= -e 's,equivalent to -,equivalent to /,' $(DOSOKAY)/wildcard.fc1: $(OKAY)/wildcard.fc1 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc1 > $(DOSOKAY)/wildcard.fc1 $(DOSOKAY)/wildcard.fc2: $(OKAY)/wildcard.fc2 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc2 > $(DOSOKAY)/wildcard.fc2 $(DOSOKAY)/wildcard.fc3: $(OKAY)/wildcard.fc3 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc3 > $(DOSOKAY)/wildcard.fc3 $(DOSOKAY)/wildcard.fc4: $(OKAY)/wildcard.fc4 $(SED) $(WILDCARDSUB) $(OKAY)/wildcard.fc4 > $(DOSOKAY)/wildcard.fc4 ftnchek-3.3.1/test/Vary/0000755000031000002260000000000010201533467015457 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/cray-pointers.f0000644000031000002260000000401307643332266017514 0ustar moniotstaff00000000000000C From: USER NOTES ON FORTRAN PROGRAMMING (UNFP) C http://www.ibiblio.org/pub/languages/fortran/ch2-16.html Copyright (C) 1996-1998 to the contributors. All rights are reserved. program cyrptr integer i real array1(10), array2(5), & pointee1(10), pointee2(5), pointee3(*) pointer (ptr1, pointee1), & (ptr2, pointee2), & (ptr3, pointee3) data array1 /0,1,2,3,4,5,6,7,8,9/, & array2 /5,5,5,5,5/ c ------------------------------------------------------------------ write(*,*) write(*,'(1x,a,10f6.1)') 'array1= ', array1 write(*,'(1x,a,10f6.1)') 'array2= ', array2 c ------------------------------------------------------------------ write(*,*) ptr1 = loc(array1) ptr2 = loc(array1) ptr3 = loc(array1) write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 10) c ------------------------------------------------------------------ write(*,*) ptr1 = loc(array2) ptr2 = loc(array2) ptr3 = loc(array2) write(*,'(1x,a,10f6.1)') 'pointee1= ', pointee1 write(*,'(1x,a,10f6.1)') 'pointee2= ', pointee2 write(*,'(1x,a,10f6.1)') 'pointee3= ', (pointee3(i), i = 1, 5) c ------------------------------------------------------------------ end c The result of this program on a VMS machine was: c c array1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 c array2= 5.0 5.0 5.0 5.0 5.0 c c pointee1= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 c pointee2= 0.0 1.0 2.0 3.0 4.0 c pointee3= 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 c c pointee1= 5.0 5.0 5.0 5.0 5.0 0.0 0.0 0.0 0.0 0.0 c pointee2= 5.0 5.0 5.0 5.0 5.0 c pointee3= 5.0 5.0 5.0 5.0 5.0 c c ftnchek-3.3.1/test/array.bat0000644000031000002260000000016607070277240016353 0ustar moniotstaff00000000000000rem Batch file for checking -array setting. ..\ftnchek.exe -array=%2 -port %1.f > %1.fc%2 call compare.bat %1.fc%2 ftnchek-3.3.1/test/check.bat0000644000031000002260000003205707755777436016344 0ustar moniotstaff00000000000000@echo off rem CHECK.BAT - batch file for smoke-testing ftnchek. rem gunnar.duus@airbus.dasa.de, 12-May-01 rem moniot@fordham.edu silencing initialization of Vary 16-Nov-03 rem rem See Readme.txt for details. rem Make sure that the Vary folder exists if not exist Vary mkdir Vary rem Make sure that the Vary folder is empty. if exist Vary\*.fc? del Vary\*.fc? if exist Vary\*.dc? del Vary\*.dc? echo. echo "==========================================================" echo There should be no file differences reported by these tests. echo Output files matching master output files will be removed, echo leaving any erroneous output files in directory Vary echo for manual examination. If you built ftnchek with non- echo standard compilation options, there may be some differences. echo "==========================================================" pause set CHECK_STATUS=OK rem PRECHECK.BAT looks out for situations that will cause the check to rem fail: ftnchek not built or ini file present in current directory. call precheck.bat rem LISTOUT programs are simple, and all use the default options or else the rem options given in their .opt file. These produce listing files *.fcl rem Note: Those with .opt files may have associated routines in other rem files that do not appear here. echo checking listing output: if exist *.fcl del *.fcl set DEFAULT_FLAGS=-list -symt -port set FTNCHEK_F77=YES call listout.bat fcl echo done rem Do the LISTOUT group again, but in expert mode (-nonovice switch). echo checking listing output in expert mode: call listout.bat fcx -nonovice set FTNCHEK_F77=NO echo done rem Check free source form set FTNCHEK_F90=YES echo checking freeform: ..\ftnchek.exe %DEFAULT_FLAGS% blockcheck.f90 > blockcheck.fcl call compare.bat blockcheck.fcl ..\ftnchek.exe %DEFAULT_FLAGS% model.f90 > model.fcl call compare.bat model.fcl set FTNCHEK_F90=NO rem Next series of targets checks variations of output as options change. rem The output files are named *.fc[1-9A-F] for different cases. Note that rem in some instances the same source file is also in a set that is used rem to check source listing as usual, with output file named *.fcl rem Check standard-compliance warnings. echo checking standard-compliance warnings: for %%f in (iokeywords f95deleted) do call checkf90.bat %%f echo done rem Check listing output for various size & type clashes in expressions rem and assignment statements. echo checking size and type mismatch: for %%f in (assign wordsize mixed-equiv) do call checkexpr.bat %%f echo done rem Check the -args=n setting. echo checking -args setting: echo -args=0 for %%f in (args01 args02 args03 args04 args05) do call checkargs.bat %%f 0 for %%f in (args06 args07 args08 args09 args10) do call checkargs.bat %%f 0 for %%f in (args11 args12 args13 args14 args15) do call checkargs.bat %%f 0 echo -args=1 for %%f in (args01 args02 args03 args04 args05) do call checkargs.bat %%f 1 for %%f in (args06 args07 args08 args09 args10) do call checkargs.bat %%f 1 for %%f in (args11 args12 args13 args14 args15) do call checkargs.bat %%f 1 echo -args=2 for %%f in (args01 args02 args03 args04 args05) do call checkargs.bat %%f 2 for %%f in (args06 args07 args08 args09 args10) do call checkargs.bat %%f 2 for %%f in (args11 args12 args13 args14 args15) do call checkargs.bat %%f 2 echo -args=3 for %%f in (args01 args02 args03 args04 args05) do call checkargs.bat %%f 3 for %%f in (args06 args07 args08 args09 args10) do call checkargs.bat %%f 3 for %%f in (args11 args12 args13 args14 args15) do call checkargs.bat %%f 3 echo done rem Check the -array=n setting. echo checking -array setting: for %%v in (0 1 2 3) do call array.bat arrayclash %%v echo done rem Check the -common=n setting. echo checking -common setting: echo -common=0 for %%f in (comcmp comusage) do call common.bat %%f 0 echo -common=1 for %%f in (comcmp comusage) do call common.bat %%f 1 echo -common=2 for %%f in (comcmp comusage) do call common.bat %%f 2 echo -common=3 for %%f in (comcmp comusage) do call common.bat %%f 3 echo done echo checking -intrinsic setting: ..\ftnchek.exe -intrinsic=none intrinstest.f > intrinstest.fc0 call compare.bat intrinstest.fc0 ..\ftnchek.exe -intrinsic=none,extra intrinstest.f > intrinstest.fc1 call compare.bat intrinstest.fc1 ..\ftnchek.exe -intrinsic=none,unix intrinstest.f > intrinstest.fc2 call compare.bat intrinstest.fc2 ..\ftnchek.exe -intrinsic=none,vms intrinstest.f > intrinstest.fc3 call compare.bat intrinstest.fc3 ..\ftnchek.exe -intrinsic=extra,unix,no-vms,no-rand-no-arg intrinstest.f > intrinstest.fc4 call compare.bat intrinstest.fc4 ..\ftnchek.exe -intrinsic=extra,unix,no-vms,no-rand-one-arg intrinstest.f > intrinstest.fc5 call compare.bat intrinstest.fc5 ..\ftnchek.exe -intrinsic=extra,unix,no-vms,no-iargc-no-arg intrinstest.f > intrinstest.fc6 call compare.bat intrinstest.fc6 ..\ftnchek.exe -intrinsic=extra,unix,no-vms,no-iargc-one-arg intrinstest.f > intrinstest.fc7 call compare.bat intrinstest.fc7 ..\ftnchek.exe -intrinsic=all intrinstest.f > intrinstest.fc8 call compare.bat intrinstest.fc8 echo done rem Check the -output=file string setting. rem average.fc2 can't be created because redirecting stderr does not work rem on MSDOS/Windows 9x systems. So skip this part of the test. echo checking -output setting: ..\ftnchek.exe -symt -list -port -out=average.out average.f call compare.bat average.out echo done rem Check the -usage=options setting. echo checking -usage setting: ..\ftnchek.exe -usage=none usage.f > usage.fc0 call compare.bat usage.fc0 ..\ftnchek.exe -usage=none,com-var-uninitialized,var-uninitialized usage.f > usage.fc1 call compare.bat usage.fc1 ..\ftnchek.exe -usage=none,com-block-unused,com-var-set-unused,com-var-unused,ext-unused,var-set-unused,var-unused usage.f > usage.fc2 call compare.bat usage.fc2 ..\ftnchek.exe -usage=all usage.f > usage.fc3 call compare.bat usage.fc3 echo done rem Check creation and use of project files. rem Note that correct.f is used in LISTOUT also, but with default rem compilation options. So we make listing file suffix .fc1 here. rem Skip the comparison of correct.fc1. It will produce differences because rem stdout and stderr can't be combined on MSDOS/Windows 9x systems. echo checking project files: if exist correct.prj del correct.prj if exist correct.fc1 del correct.fc1 if exist correct.pcl del correct.pcl ..\ftnchek.exe -project correct.f > correct.fc1 ..\ftnchek.exe correct.prj > correct.pcl for %%f in (correct.prj correct.pcl) do call compare.bat %%f if exist correct.fc1 del correct.fc1 echo done rem Check the reading of startup file. echo checking reading rc file: echo f77=all > ftnchek.ini echo symtab >> ftnchek.ini ..\ftnchek.exe -f77=no-long-name,no-name-underscore do_enddo.f > rc.fcl call compare.bat rc.fcl if exist ftnchek.ini del ftnchek.ini echo done rem The 'wildcard' tests require that the UNIX result files be replaced with rem the special MSDOS ones. Otherwise, they will report differences because rem the standard command-line option prefix for MSDOS/Win32 is '/' instead of rem '-'. rem Check the interpretation of wildcards in warn-option lists echo checking interpreting wildcards: ..\ftnchek.exe -port=mixed* -port=help > wildcard.fc1 call compare.bat wildcard.fc1 ..\ftnchek.exe -usage=no-*var* -usage=help > wildcard.fc2 call compare.bat wildcard.fc2 ..\ftnchek.exe -usage=no-var* -usage=help > wildcard.fc3 call compare.bat wildcard.fc3 ..\ftnchek.exe -f77=*array*,format* -f77=help > wildcard.fc4 call compare.bat wildcard.fc4 rem Skip wildcard.fc5. This test will produce differences because stdout rem and stderr can't be combined on MSDOS/Windows 9x systems. echo done rem Check the generation of declarations files. Listing goes to NUL. rem The values in VAL are used as 3rd char in .fc? suffix. They are rem converted to -makedcls=num values by raising 2 to the power. Thus rem file.dc0 contains -makedcls=1, ... file.dca contains -makedcls=1024. rem There is also a test to be sure that empty .dcl files are removed rem automatically as they should be. echo checking -makedcls setting: echo -makedcls=1 (=2**0) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 1 dc0 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 1 dc0 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 1 dc0 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 1 dc0 echo -makedcls=2 (=2**1) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 2 dc1 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 2 dc1 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 2 dc1 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 2 dc1 echo -makedcls=4 (=2**2) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 4 dc2 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 4 dc2 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 4 dc2 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 4 dc2 echo -makedcls=8 (=2**3) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 8 dc3 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 8 dc3 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 8 dc3 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 8 dc3 echo -makedcls=16 (=2**4) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 16 dc4 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 16 dc4 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 16 dc4 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 16 dc4 echo -makedcls=32 (=2**5) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 32 dc5 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 32 dc5 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 32 dc5 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 32 dc5 echo -makedcls=64 (=2**6) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 64 dc6 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 64 dc6 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 64 dc6 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 64 dc6 echo -makedcls=128 (=2**7) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 128 dc7 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 128 dc7 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 128 dc7 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 128 dc7 echo -makedcls=256 (=2**8) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 256 dc8 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 256 dc8 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 256 dc8 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 256 dc8 echo -makedcls=512 (=2**9) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 512 dc9 for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 512 dc9 for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 512 dc9 for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 512 dc9 echo -makedcls=1024 (=2**10) for %%f in (builtin dcltest dims namelist params) do call makedcls.bat %%f 1024 dca for %%f in (t208a t208b t208c t208d t208e t208f t208g t208h) do call makedcls.bat %%f 1024 dca for %%f in (t208i t208j t208k t208l t208m t208n t208o t208p) do call makedcls.bat %%f 1024 dca for %%f in (t208q t208r t208s t208t t208u t208v t208w t208x) do call makedcls.bat %%f 1024 dca echo done rem Check -vcg switch. echo checking -vcg setting: for %%f in (comcmp comusage) do call vcg.bat %%f echo done rem Check of dcl2inc processing is not possible under MSDOS/Windows. rem Print test results. if %CHECK_STATUS%==OK goto CHECK_OK echo "==============================================" echo "== There were differences. Check failed. ==" echo "==============================================" set CHECK_STATUS= goto END :CHECK_OK echo No differences found. Check successful. :END ftnchek-3.3.1/test/empty.f0000644000031000002260000000000007711033122016024 0ustar moniotstaff00000000000000ftnchek-3.3.1/test/keyvars.f0000644000031000002260000000205507647555136016414 0ustar moniotstaff00000000000000 dimension common(10,10),entry(3,4),read(5,6) logical save, stop, program character integer, data, endif, format(10) integer external,implicit, intrinsic, pause, write(5,6) real complex external complex data data /'!'/ implicit = none assign = block exit = assign pointer = pointee double = precision precision = double common(9,0) = continue ** dimension do = double*else-end+enddo entry(external,implicit) = intrinsic - pause program = stop .and. save if(character .lt. close) then equivalence = endfile else if (rewind - backspace .lt. common(1,2)) then goto = do if = logical end if if( print .eq. if) then = to include = inquire open = accept read(5,6) write(1,2) read(5,6) = write(1,2) 6 format(i10) format(i10) = data return = real subroutine = then call call(complex,endif) integer = data end subroutine call (function, character) external function character character real = 2.3 complex = function(real) return end function complex(do) dimension = do + 1 external = 1 complex = dimension/external return end ftnchek-3.3.1/test/checkargs.bat0000644000031000002260000000015607070272036017164 0ustar moniotstaff00000000000000rem Batch file for checking -args setting. ..\ftnchek.exe -args=%2 %1.f > %1.fc%2 call compare.bat %1.fc%2 ftnchek-3.3.1/test/checkexpr.bat0000644000031000002260000000247207070272650017213 0ustar moniotstaff00000000000000rem Batch file for checking listing output for various size & type rem clashes in expressions and assignment statements. echo %1 ..\ftnchek.exe -notrun -noport -nof77 -lis %1.f > %1.fc1 call compare.bat %1.fc1 ..\ftnchek.exe -notrun -noport -f77 %1.f > %1.fc2 call compare.bat %1.fc2 ..\ftnchek.exe -notrun -port -nof77 %1.f > %1.fc3 call compare.bat %1.fc3 ..\ftnchek.exe -notrun -port -f77 %1.f > %1.fc4 call compare.bat %1.fc4 ..\ftnchek.exe -trun -noport -nof77 %1.f > %1.fc5 call compare.bat %1.fc5 ..\ftnchek.exe -trun -noport -f77 %1.f > %1.fc6 call compare.bat %1.fc6 ..\ftnchek.exe -trun -port -nof77 %1.f > %1.fc7 call compare.bat %1.fc7 ..\ftnchek.exe -trun -port -f77 %1.f > %1.fc8 call compare.bat %1.fc8 ..\ftnchek.exe -trun -port -nof77 -word=2 %1.f > %1.fcA call compare.bat %1.fcA ..\ftnchek.exe -trun -port -nof77 -word=4 %1.f > %1.fcB call compare.bat %1.fcB ..\ftnchek.exe -trun -port -nof77 -word=8 %1.f > %1.fcC call compare.bat %1.fcC ..\ftnchek.exe -trun -noport -nof77 -word=2 %1.f > %1.fcD call compare.bat %1.fcD ..\ftnchek.exe -trun -noport -nof77 -word=4 %1.f > %1.fcE call compare.bat %1.fcE ..\ftnchek.exe -trun -noport -nof77 -word=8 %1.f > %1.fcF call compare.bat %1.fcF ftnchek-3.3.1/test/checkf90.bat0000644000031000002260000000056607070272524016635 0ustar moniotstaff00000000000000rem Batch file for checking standard-compliance warnings. echo %1 ..\ftnchek.exe -nof77 -nof90 -nof95 %1.f > %1.fc0 call compare.bat %1.fc0 ..\ftnchek.exe -f77 -nof90 -nof95 %1.f > %1.fc1 call compare.bat %1.fc1 ..\ftnchek.exe -nof77 -f90 -nof95 %1.f > %1.fc2 call compare.bat %1.fc2 ..\ftnchek.exe -nof77 -nof90 -f95 %1.f > %1.fc3 call compare.bat %1.fc3 ftnchek-3.3.1/test/common.bat0000644000031000002260000000017107070276770016530 0ustar moniotstaff00000000000000rem Batch file for checking -common setting. ..\ftnchek.exe -common=%2 -nof77 %1.f > %1.fc%2 call compare.bat %1.fc%2 ftnchek-3.3.1/test/compare.bat0000644000031000002260000000112607755777370016703 0ustar moniotstaff00000000000000rem Batch file to compare File in the current directory with rem master file in directory .\Okay. If there are differences, rem CHECK_STATUS is set to FAILED, and the file is moved to rem .\Vary. rem Note: if master file is found in Okay.dos, use that instead rem of the one in Okay. set OKAY_DIR=Okay if exist Okay.dos\%1 set OKAY_DIR=Okay.dos cmp %OKAY_DIR%\%1 %1 if errorlevel 1 goto FAIL if exist %1 del %1 goto END :FAIL set CHECK_STATUS=FAILED echo -------------------------------------------------- echo Differences in %OKAY_DIR%\%1 Vary\%1 move %1 Vary\%1 > NUL :END ftnchek-3.3.1/test/listout.bat0000644000031000002260000000521607277345250016747 0ustar moniotstaff00000000000000rem Batch file for processing the LISTOUT group. rem The first set uses DEFAULT_FLAGS. for %%f in (average comclash comtest correct iffy labeltest) do call listout2.bat %%f %1 %2 for %%f in (sequence substr autoarray cycle-exit quad relops) do call listout2.bat %%f %1 %2 for %%f in (embedded-space arg-alias common-alias primes) do call listout2.bat %%f %1 %2 for %%f in (dec-parameter pure-function case allkeywords) do call listout2.bat %%f %1 %2 rem These files all use individual flags (see *.opt). echo backslash ..\ftnchek.exe -nof77 -source=4 -wrap=65 %2 backslash.f > backslash.%1 call compare.bat backslash.%1 echo blockerrors ..\ftnchek.exe -list -nof77 -style %2 blockerrors.f > blockerrors.%1 call compare.bat blockerrors.%1 echo chestnuts ..\ftnchek.exe -nopretty %2 chestnuts.f > chestnuts.%1 call compare.bat chestnuts.%1 echo comcmp ..\ftnchek.exe -common:3 -nof77 -port -quiet %2 comcmp.f -ref > comcmp.%1 call compare.bat comcmp.%1 echo complex ..\ftnchek.exe -sym %2 complex.f > complex.%1 call compare.bat complex.%1 echo comusage ..\ftnchek.exe -common=volatile %2 comusage.f > comusage.%1 call compare.bat comusage.%1 echo dectab ..\ftnchek.exe -source=dec-tab -sym -div %2 dectab.f > dectab.%1 call compare.bat dectab.%1 rem Skip dims.f/dims.opt. This test will produce differences because stdout rem and stderr can't be combined on MSDOS/Windows 9x systems. echo do_enddo ..\ftnchek.exe -port %2 do_enddo.f > do_enddo.%1 call compare.bat do_enddo.%1 rem The 'help' test requires that the UNIX result files be replaced with the rem special MSDOS ones. Otherwise, it will report differences because the rem standard command-line option prefix for MSDOS/Win32 is '/' instead of '-'. echo help ..\ftnchek.exe %2 -help > help.%1 call compare.bat help.%1 rem The 'include' test requires that the UNIX result files be replaced with rem the special MSDOS ones. Otherwise, it will report differences because rem the directory separator for MSDOS/Win32 is '\' instead of '/'. echo include ..\ftnchek.exe -list -symt -port -include=.\Include %2 include.f > include.%1 call compare.bat include.%1 echo namelist ..\ftnchek.exe -sym -lis %2 namelist.f > namelist.%1 call compare.bat namelist.%1 echo noblanks ..\ftnchek.exe -nopretty %2 noblanks.f > noblanks.%1 call compare.bat noblanks.%1 echo strings ..\ftnchek.exe -port %2 strings.f > strings.%1 call compare.bat strings.%1 echo t208f ..\ftnchek.exe -list -symt -sixchar %2 t208f.f > t208f.%1 call compare.bat t208f.%1 echo unixincluded ..\ftnchek.exe %2 unixincluded.f > unixincluded.%1 call compare.bat unixincluded.%1 ftnchek-3.3.1/test/listout2.bat0000644000031000002260000000023407071010304017001 0ustar moniotstaff00000000000000rem Batch file for checking listing output (in novice and expert mode). echo %1 ..\ftnchek.exe %DEFAULT_FLAGS% %3 %1.f > %1.%2 call compare.bat %1.%2 ftnchek-3.3.1/test/makedcls.bat0000644000031000002260000000200307606165760017020 0ustar moniotstaff00000000000000rem Batch file for checking the generation of declarations files. rem Please note that, for various reasons, this is not an exact rem representation of the corresponding makefile code. ..\ftnchek.exe -nocheck -makedcls=%2 %1.f > NUL if exist %1.dcl goto DCL_EXIST if exist Okay\%1.%3 goto MISSING goto END :DCL_EXIST rem is %1.dcl empty? dir %1.dcl | find " 0 " > NUL if not errorlevel 1 goto EMPTY goto ELSE :EMPTY move %1.dcl Vary\%1.%3 > NUL echo Empty declarations file Vary\%1.%3 should have been deleted. set CHECK_STATUS=FAILED goto END :ELSE if exist Okay\%1.%3 goto COMPARE move %1.dcl Vary\%1.%3 echo No master file to compare to. Presumably, Vary\%1.%3 echo should not have been created. set CHECK_STATUS=FAILED goto END :COMPARE move %1.dcl %1.%3 > NUL call compare.bat %1.%3 goto END :MISSING rem is Okay\%1.dci empty? dir Okay\%1.%3 | find " 0 %1" > NUL if not errorlevel 1 goto END echo Non-empty declarations file %1.%3 is missing. set CHECK_STATUS=FAILED :END ftnchek-3.3.1/test/precheck.bat0000644000031000002260000000127107163457116017024 0ustar moniotstaff00000000000000rem Batch file for looking out for situations that will cause the check to fail. if not exist ..\ftnchek.exe goto NOEXE rem It would be a good idea to check if CMP.EXE is present somewhere on the rem search path. But how to do this? rem No need to check for .ftnchekrc since this name is illegal under MSDOS/Win32. if exist ftnchek.ini goto INI if exist ..\ftnchek.ini goto INI goto END :NOEXE echo ERROR === Cannot run checks: no ftnchek found === echo Use CTRL-C to quit batch processing. pause goto END :INI echo WARNING === ftnchek.ini exists === echo Delete or rename it before running check. echo Use CTRL-C to quit batch processing. pause goto END :END ftnchek-3.3.1/test/Okay.dos/0000755000031000002260000000000010147524207016226 5ustar moniotstaff00000000000000ftnchek-3.3.1/test/Okay.dos/help.fcl0000644000031000002260000000711310201523521017633 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Patch Level 1 Copyright (C) 1994, 1997, 2000, 2004 by Robert K. Moniot This program is free software. Permission is granted to modify it and/or redistribute it, retaining this notice. No guarantees accompany this software. Commandline options [default]: /[no]brief [no]: briefer form of error messages /[no]check [yes]: perform checking /[no]declare [no]: list undeclared variables /[no]division [no]: catch possible div by 0 /[no]extern [yes]: check if externals defined /[no]help [no]: print help screen /[no]library [no]: treat next files as library /[no]list [no]: print program listing /[no]novice [yes]: extra help for novices /[no]pure [yes]: functions have no side effects /[no]quiet [no]: less verbose output /[no]reference [no]: print who-calls-who reference list /[no]resources [no]: show info on resource usage /[no]sixchar [no]: catch nonunique names /[no]sort [no]: prerequisite-order sort of modules /[no]symtab [no]: print symbol table info /[no]vcg [no]: print call graph in vcg format /[no]version [no]: print version number /[no]volatile [no]: assume volatile common blocks /arguments=str [all]: check subprogram argument agreement Use /arguments=help for list of options /array=str [all]: check subprogram argument arrayness agreement Use /array=help for list of options /calltree=str [none]: subprogram call graph options Use /calltree=help for list of options /common=str [dimensions,exact,length,type]: check for common block mismatches Use /common=help for list of options /crossref=str [none]: cross-ref printing options Use /crossref=help for list of options /f77=str [all]: warn about non-F77 extensions Use /f77=help for list of options /f90=str [none]: warn about non-F90 syntax Use /f90=help for list of options /f95=str [none]: warn about non-F95 syntax Use /f95=help for list of options /identifier-chars=str [$_]: non-alphabetic chars allowed in identifiers /include=str [NONE]: include-file directory /intrinsic=str [common]: specify intrinsic function options Use /intrinsic=help for list of options /makedcls=str [none]: make type declaration statements Use /makedcls=help for list of options /mkhtml=str [none]: create html documents Use /mkhtml=help for list of options /output=str [NONE]: output file name /portability=str [none]: warn about portability problems Use /portability=help for list of options /pretty=str [all]: warn about deceiving appearances Use /pretty=help for list of options /project=str [none]: create project file Use /project=help for list of options /source=str [none]: select source format options Use /source=help for list of options /style=str [none]: catch violations of structured style Use /style=help for list of options /truncation=str [all]: check for truncation pitfalls Use /truncation=help for list of options /usage=str [all]: warn about variable and common block usage problems Use /usage=help for list of options Settings (legal range) [default]: /columns=dd (72 to 132) [72]: max fixed-form line length processed /errors=dd (0 to 999) [3]: max number of error messages per cascade /pointersize=dd (1 to 16) [4]: standard pointer size in bytes /wordsize=dd (0 to 16) [4]: standard wordsize in bytes (0=no default) /wrap=dd (0 to 999) [79]: width of page to wrap error messages (First 3 chars of option name significant) ftnchek-3.3.1/test/Okay.dos/help.fcx0000644000031000002260000000711210201523521017646 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 Patch Level 1 Copyright (C) 1994, 1997, 2000, 2004 by Robert K. Moniot This program is free software. Permission is granted to modify it and/or redistribute it, retaining this notice. No guarantees accompany this software. Commandline options [default]: /[no]brief [no]: briefer form of error messages /[no]check [yes]: perform checking /[no]declare [no]: list undeclared variables /[no]division [no]: catch possible div by 0 /[no]extern [yes]: check if externals defined /[no]help [no]: print help screen /[no]library [no]: treat next files as library /[no]list [no]: print program listing /[no]novice [no]: extra help for novices /[no]pure [yes]: functions have no side effects /[no]quiet [no]: less verbose output /[no]reference [no]: print who-calls-who reference list /[no]resources [no]: show info on resource usage /[no]sixchar [no]: catch nonunique names /[no]sort [no]: prerequisite-order sort of modules /[no]symtab [no]: print symbol table info /[no]vcg [no]: print call graph in vcg format /[no]version [no]: print version number /[no]volatile [no]: assume volatile common blocks /arguments=str [all]: check subprogram argument agreement Use /arguments=help for list of options /array=str [all]: check subprogram argument arrayness agreement Use /array=help for list of options /calltree=str [none]: subprogram call graph options Use /calltree=help for list of options /common=str [dimensions,exact,length,type]: check for common block mismatches Use /common=help for list of options /crossref=str [none]: cross-ref printing options Use /crossref=help for list of options /f77=str [all]: warn about non-F77 extensions Use /f77=help for list of options /f90=str [none]: warn about non-F90 syntax Use /f90=help for list of options /f95=str [none]: warn about non-F95 syntax Use /f95=help for list of options /identifier-chars=str [$_]: non-alphabetic chars allowed in identifiers /include=str [NONE]: include-file directory /intrinsic=str [common]: specify intrinsic function options Use /intrinsic=help for list of options /makedcls=str [none]: make type declaration statements Use /makedcls=help for list of options /mkhtml=str [none]: create html documents Use /mkhtml=help for list of options /output=str [NONE]: output file name /portability=str [none]: warn about portability problems Use /portability=help for list of options /pretty=str [all]: warn about deceiving appearances Use /pretty=help for list of options /project=str [none]: create project file Use /project=help for list of options /source=str [none]: select source format options Use /source=help for list of options /style=str [none]: catch violations of structured style Use /style=help for list of options /truncation=str [all]: check for truncation pitfalls Use /truncation=help for list of options /usage=str [all]: warn about variable and common block usage problems Use /usage=help for list of options Settings (legal range) [default]: /columns=dd (72 to 132) [72]: max fixed-form line length processed /errors=dd (0 to 999) [3]: max number of error messages per cascade /pointersize=dd (1 to 16) [4]: standard pointer size in bytes /wordsize=dd (0 to 16) [4]: standard wordsize in bytes (0=no default) /wrap=dd (0 to 999) [79]: width of page to wrap error messages (First 3 chars of option name significant) ftnchek-3.3.1/test/Okay.dos/include.fcl0000644000031000002260000002446510147524207020352 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File include.f: 1 C Derived from Brian Downing's WC program, replacing common decls by INCLUDEs 2 C 3 C main(){ Get a file, open it, read and determine semi-useful 4 C statistics, print them to screen, and exit quietly. 5 C }; 6 C 7 C This program is an example word counter that makes use of several 8 C Fortran intrinsic functions and data structures, such as; 9 C common, sub-routines, functions, inplied do loops, and much, much more. 10 C 11 Program WC 12 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 13 C Program: Word_Count_And_Other_Stuff C 14 C Written_By: Brian Downing C 15 C Fordham University C 16 C Date: October 1st-16th, 1990 C 17 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 18 Character Fname*80 19 20 Call Initialize 21 Call GetFileName(Fname) 22 Call GetStats(Fname) 23 Call PrintStats 24 End Module WC: prog External subprograms referenced: GETFILENAME: subr GETSTATS: subr INITIALIZE: subr PRINTSTATS: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 Warning in module WC: Names longer than 6 chars (nonstandard): GETFILENAME referenced at line 21 GETSTATS referenced at line 22 INITIALIZE referenced at line 20 PRINTSTATS referenced at line 23 25 C 26 C SubRoutine to get all kinds of neat statistics. 27 C 28 SubRoutine GetStats(Fname) 29 Include 'stats.h' ^ Warning near line 29 col 7: Nonstandard syntax Including file .\Include\stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 30 Character Inline*82, Fname*80, Ch 31 32 Open (Unit=8,File=Fname,Err=999) 33 Do While (.TRUE.) ^ Warning near line 33 col 7: Nonstandard syntax 34 Read(8,10,End=888)InLine 35 NL = NL + 1 36 LastPos = INDEX(InLine,' ') 37 Do J = 1,LastPos ^ Warning near line 37 col 11: Nonstandard syntax 38 Ch = InLine(J:J) 39 L = IntUpCase(ICHAR(Ch)) 40 NEC(L) = NEC(L) + 1 41 If ((Ch.NE.' ').AND.(Ch.NE.'.')) Then 42 NC = NC + 1 43 ElseIf (Ch.EQ.'.') Then 44 NP = NP + 1 45 Else 46 NW = NW + 1 47 EndIf 48 EndDo ^ Warning near line 48 col 11: Nonstandard syntax 49 EndDo ^ Warning near line 49 col 7: Nonstandard syntax 50 888 Continue 51 ACPW = REAL(NC)/REAL(NW) 52 AWPS = REAL(NW)/REAL(NP) 53 Return 54 10 Format(a) 55 999 Print*,'Error opening file, please verify filename and try again.' 56 C 57 C In the event of improper filename exit abruptly. 58 C 59 STOP 60 End Module GETSTATS: subr External subprograms referenced: ICHAR: intrns INDEX: intrns INTUPCASE: intg* REAL: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* CH char FNAME char80 INLINE char82 J intg* L intg* LASTPOS intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. Warning in module GETSTATS: Names longer than 6 chars (nonstandard): GETSTATS declared at line 28 INTUPCASE referenced at line 39 LASTPOS first occurrence at line 36 I/O Operations: Unit ID Unit No. Access Form Operation Line 8 SEQ FMTD OPEN 32 8 SEQ FMTD READ 34 * SEQ FMTD PRINT 55 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 54 format <888> 50 exec <999> 55 exec 61 C 62 C SubRoutine to print to terminal all of these neat statistics. 63 C 64 SubRoutine PrintStats 65 Include 'stats.h' ^ Warning near line 65 col 7: Nonstandard syntax Including file .\Include\stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 66 67 Write(5,10)ACPW,AWPS,NW,NP,NL,NC 68 Write(5,20) 69 Do J = 65,90 ^ Warning near line 69 col 7: Nonstandard syntax 70 Write(5,40)(CHAR(J),NEC(J),('@',K=1,(NEC(J)/10)), 71 1 ('*',K=1,MOD(NEC(J),10))) ^ Error near line 71 col 43: syntax error, unexpected ')', expecting ',' 72 EndDo ^ Warning near line 72 col 7: Nonstandard syntax 73 Write(5,50) 74 10 Format('1'30X'Word Statistics'/1x,80('*')/ 75 1 1X'Average characters per word = 'F6.2/ 76 2 1X'Average words per sentence = 'F6.2/ 77 3 1X'Total number of words = 'I5/ 78 4 1X'Total number of sentences = 'I5/ 79 5 1X'Total number of lines = 'I5/ 80 6 1X'Total number of characters = 'I5/) 81 20 Format(29x'Character Statistics'/1x,80('*')/) 82 30 Format(1X,A) 83 40 Format(1X,A','I3,1x,125(A)) 84 50 Format(1X'Legend:'/9x'@ equals ten characters', 85 1 ', * equals one character.') 86 Return 87 End Module PRINTSTATS: subr External subprograms referenced: CHAR: intrns MOD: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* J intg* K intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. Warning in module PRINTSTATS: Names longer than 6 chars (nonstandard): PRINTSTATS declared at line 64 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD WRITE 67 68 73 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 74 format <20> 81 format <30> 82 format <40> 83 format <50> 84 format Warning in module PRINTSTATS: Labels defined but not used: <30> defined at line 82 88 C 89 C SubRoutine to prompt for and return a filename. 90 C 91 SubRoutine GetFileName(Fname) 92 Character Fname*80, Prompt*7 93 94 Prompt = '_File: ' 95 Write(5,10)Prompt 96 Read(5,20)Fname 97 10 Format(1XA$) ^ Warning near line 97 col 17: Nonstandard syntax 98 20 Format(A) 99 Return 100 End Module GETFILENAME: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 PROMPT char7 Warning in module GETFILENAME: Names longer than 6 chars (nonstandard): GETFILENAME declared at line 91 I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 96 5 SEQ FMTD WRITE 95 Statement labels defined: Label Line StmtType Label Line StmtType <10> 97 format <20> 98 format 101 C 102 C SubRoutine to initailize globally used variables. 103 C 104 SubRoutine Initialize 105 Common /Stats/A,B,J,K,L,M,N(26) 106 Do O = 1,26 ^ Warning near line 106 col 10: DO index is not integer ^ Warning near line 106 col 7: Nonstandard syntax 107 N(O) = 0 ^ Warning near line 107 col 11: subscript is not integer 108 EndDo ^ Warning near line 108 col 7: Nonstandard syntax 109 A = 0.0 110 B = 0.0 111 J = 0 112 K = 0 113 L = 0 114 M = 0 115 Return 116 End Module INITIALIZE: subr Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* J intg* K intg* L intg* M intg* N intg* 1 O real* * Variable not declared. Type has been implicitly defined. Warning in module INITIALIZE: Names longer than 6 chars (nonstandard): INITIALIZE declared at line 104 117 C 118 C Function to return integer value of a character in range of uppercase. 119 C 120 Function IntUpCase (I) 121 122 If ((I.LE.ICHAR('z')).AND.(I.GE.ICHAR('a'))) Then 123 IntUpCase = I - ICHAR(' ') 124 Else 125 IntUpCase = I 126 EndIf 127 Return 128 End Module INTUPCASE: func: intg* External subprograms referenced: ICHAR: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* INTUPCASE intg* * Variable not declared. Type has been implicitly defined. Warning in module INTUPCASE: Names longer than 6 chars (nonstandard): INTUPCASE declared at line 120 1 syntax error detected in file include.f 24 warnings issued in file include.f Warning: Common block STATS array dimen/size mismatch at position 7: Variable NEC in module GETSTATS line 1 file .\Include\stats.h (included at line 29 in include.f) has size 255 Variable N in module INITIALIZE line 105 file include.f has size 26 ftnchek-3.3.1/test/Okay.dos/include.fcx0000644000031000002260000002541310147524207020360 0ustar moniotstaff00000000000000 FTNCHEK Version 3.3 November 2004 File include.f: 1 C Derived from Brian Downing's WC program, replacing common decls by INCLUDEs 2 C 3 C main(){ Get a file, open it, read and determine semi-useful 4 C statistics, print them to screen, and exit quietly. 5 C }; 6 C 7 C This program is an example word counter that makes use of several 8 C Fortran intrinsic functions and data structures, such as; 9 C common, sub-routines, functions, inplied do loops, and much, much more. 10 C 11 Program WC 12 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 13 C Program: Word_Count_And_Other_Stuff C 14 C Written_By: Brian Downing C 15 C Fordham University C 16 C Date: October 1st-16th, 1990 C 17 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 18 Character Fname*80 19 20 Call Initialize 21 Call GetFileName(Fname) 22 Call GetStats(Fname) 23 Call PrintStats 24 End Module WC: prog External subprograms referenced: GETFILENAME: subr GETSTATS: subr INITIALIZE: subr PRINTSTATS: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 "include.f", line 21: Warning in module WC: Names longer than 6 chars (nonstandard): "include.f", line 21: GETFILENAME referenced "include.f", line 22: GETSTATS referenced "include.f", line 20: INITIALIZE referenced "include.f", line 23: PRINTSTATS referenced 25 C 26 C SubRoutine to get all kinds of neat statistics. 27 C 28 SubRoutine GetStats(Fname) 29 Include 'stats.h' ^ "include.f", line 29 col 7: Warning: Nonstandard syntax Including file .\Include\stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 30 Character Inline*82, Fname*80, Ch 31 32 Open (Unit=8,File=Fname,Err=999) 33 Do While (.TRUE.) ^ "include.f", line 33 col 7: Warning: Nonstandard syntax 34 Read(8,10,End=888)InLine 35 NL = NL + 1 36 LastPos = INDEX(InLine,' ') 37 Do J = 1,LastPos ^ "include.f", line 37 col 11: Warning: Nonstandard syntax 38 Ch = InLine(J:J) 39 L = IntUpCase(ICHAR(Ch)) 40 NEC(L) = NEC(L) + 1 41 If ((Ch.NE.' ').AND.(Ch.NE.'.')) Then 42 NC = NC + 1 43 ElseIf (Ch.EQ.'.') Then 44 NP = NP + 1 45 Else 46 NW = NW + 1 47 EndIf 48 EndDo ^ "include.f", line 48 col 11: Warning: Nonstandard syntax 49 EndDo ^ "include.f", line 49 col 7: Warning: Nonstandard syntax 50 888 Continue 51 ACPW = REAL(NC)/REAL(NW) 52 AWPS = REAL(NW)/REAL(NP) 53 Return 54 10 Format(a) 55 999 Print*,'Error opening file, please verify filename and try again.' 56 C 57 C In the event of improper filename exit abruptly. 58 C 59 STOP 60 End Module GETSTATS: subr External subprograms referenced: ICHAR: intrns INDEX: intrns INTUPCASE: intg* REAL: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* CH char FNAME char80 INLINE char82 J intg* L intg* LASTPOS intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. "include.f", line 28: Warning in module GETSTATS: Names longer than 6 chars (nonstandard): "include.f", line 28: GETSTATS declared "include.f", line 39: INTUPCASE referenced "include.f", line 36: LASTPOS first occurrence I/O Operations: Unit ID Unit No. Access Form Operation Line 8 SEQ FMTD OPEN 32 8 SEQ FMTD READ 34 * SEQ FMTD PRINT 55 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 54 format <888> 50 exec <999> 55 exec 61 C 62 C SubRoutine to print to terminal all of these neat statistics. 63 C 64 SubRoutine PrintStats 65 Include 'stats.h' ^ "include.f", line 65 col 7: Warning: Nonstandard syntax Including file .\Include\stats.h: 1 Common /Stats/ACPW,AWPS,NW,NP,NL,NC,NEC(255) Resuming file include.f: 66 67 Write(5,10)ACPW,AWPS,NW,NP,NL,NC 68 Write(5,20) 69 Do J = 65,90 ^ "include.f", line 69 col 7: Warning: Nonstandard syntax 70 Write(5,40)(CHAR(J),NEC(J),('@',K=1,(NEC(J)/10)), 71 1 ('*',K=1,MOD(NEC(J),10))) ^ "include.f", line 71 col 43: Error: syntax error, unexpected ')', expecting ',' 72 EndDo ^ "include.f", line 72 col 7: Warning: Nonstandard syntax 73 Write(5,50) 74 10 Format('1'30X'Word Statistics'/1x,80('*')/ 75 1 1X'Average characters per word = 'F6.2/ 76 2 1X'Average words per sentence = 'F6.2/ 77 3 1X'Total number of words = 'I5/ 78 4 1X'Total number of sentences = 'I5/ 79 5 1X'Total number of lines = 'I5/ 80 6 1X'Total number of characters = 'I5/) 81 20 Format(29x'Character Statistics'/1x,80('*')/) 82 30 Format(1X,A) 83 40 Format(1X,A','I3,1x,125(A)) 84 50 Format(1X'Legend:'/9x'@ equals ten characters', 85 1 ', * equals one character.') 86 Return 87 End Module PRINTSTATS: subr External subprograms referenced: CHAR: intrns MOD: intrns Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims ACPW real* AWPS real* J intg* K intg* NC intg* NEC intg* 1 NL intg* NP intg* NW intg* * Variable not declared. Type has been implicitly defined. "include.f", line 64: Warning in module PRINTSTATS: Names longer than 6 chars (nonstandard): "include.f", line 64: PRINTSTATS declared I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD WRITE 67 68 73 Statement labels defined: Label Line StmtType Label Line StmtType Label Line StmtType <10> 74 format <20> 81 format <30> 82 format <40> 83 format <50> 84 format "include.f", line 82: Warning in module PRINTSTATS: Labels defined but not used: "include.f", line 82: <30> defined 88 C 89 C SubRoutine to prompt for and return a filename. 90 C 91 SubRoutine GetFileName(Fname) 92 Character Fname*80, Prompt*7 93 94 Prompt = '_File: ' 95 Write(5,10)Prompt 96 Read(5,20)Fname 97 10 Format(1XA$) ^ "include.f", line 97 col 17: Warning: Nonstandard syntax 98 20 Format(A) 99 Return 100 End Module GETFILENAME: subr Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims FNAME char80 PROMPT char7 "include.f", line 91: Warning in module GETFILENAME: Names longer than 6 chars (nonstandard): "include.f", line 91: GETFILENAME declared I/O Operations: Unit ID Unit No. Access Form Operation Line 5 SEQ FMTD READ 96 5 SEQ FMTD WRITE 95 Statement labels defined: Label Line StmtType Label Line StmtType <10> 97 format <20> 98 format 101 C 102 C SubRoutine to initailize globally used variables. 103 C 104 SubRoutine Initialize 105 Common /Stats/A,B,J,K,L,M,N(26) 106 Do O = 1,26 ^ "include.f", line 106 col 10: Warning: DO index is not integer ^ "include.f", line 106 col 7: Warning: Nonstandard syntax 107 N(O) = 0 ^ "include.f", line 107 col 11: Warning: subscript is not integer 108 EndDo ^ "include.f", line 108 col 7: Warning: Nonstandard syntax 109 A = 0.0 110 B = 0.0 111 J = 0 112 K = 0 113 L = 0 114 M = 0 115 Return 116 End Module INITIALIZE: subr Common blocks referenced: STATS Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims A real* B real* J intg* K intg* L intg* M intg* N intg* 1 O real* * Variable not declared. Type has been implicitly defined. "include.f", line 104: Warning in module INITIALIZE: Names longer than 6 chars (nonstandard): "include.f", line 104: INITIALIZE declared 117 C 118 C Function to return integer value of a character in range of uppercase. 119 C 120 Function IntUpCase (I) 121 122 If ((I.LE.ICHAR('z')).AND.(I.GE.ICHAR('a'))) Then 123 IntUpCase = I - ICHAR(' ') 124 Else 125 IntUpCase = I 126 EndIf 127 Return 128 End Module INTUPCASE: func: intg* External subprograms referenced: ICHAR: intrns Variables: Name Type Dims Name Type Dims Name Type Dims Name Type Dims I intg* INTUPCASE intg* * Variable not declared. Type has been implicitly defined. "include.f", line 120: Warning in module INTUPCASE: Names longer than 6 chars (nonstandard): "include.f", line 120: INTUPCASE declared 1 syntax error detected in file include.f 24 warnings issued in file include.f ".\Include\stats.h", line 1: Warning: Common block STATS array dimen/size mismatch at position 7: ".\Include\stats.h", line 1: (location of error) "include.f", line 29: (where included) Variable NEC in module GETSTATS has size 255 "include.f", line 105: Variable N in module INITIALIZE has size 26 ftnchek-3.3.1/test/Okay.dos/wildcard.fc10000644000031000002260000000131210147524207020407 0ustar moniotstaff00000000000000 Portability Warning Options: backslash [no]: Backslash in standard-conforming strings common-alignment [no]: COMMON not in descending size order hollerith [no]: Hollerith constants (except in FORMAT) long-string [no]: Strings over 255 chars long mixed-equivalence [yes]: Different data types equivalenced mixed-size [yes]: Default and explicit size types mixed real-do [no]: Non-integer DO loops param-implicit-type [no]: Implicit type of PARAMETER differs from default type tab [no]: Tabs in source code Prefix option name with no- to turn off option If no options given, equivalent to /portability=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay.dos/wildcard.fc20000644000031000002260000000302510147524207020413 0ustar moniotstaff00000000000000 Usage Warning Options: arg-alias [yes]: scalar argument same as another is modified arg-array-alias [yes]: argument in same array as another is modified arg-common-alias [yes]: scalar argument same as common variable, either is modified arg-common-array-alias [yes]: array argument same as common variable, either is modified arg-const-modified [yes]: constant or expression argument is modified arg-unused [yes]: dummy argument declared but not used com-block-unused [yes]: whole common block declared but not used com-block-volatile [yes]: common block may lose definition if volatile com-var-set-unused [no]: common variable set but not used com-var-uninitialized [no]: common variable used but not set com-var-unused [no]: common variable declared but not used do-index-modified [yes]: active DO index variable modified ext-multiply-defined [yes]: external multiply defined ext-declared-only [yes]: name declared EXTERNAL but not defined or used ext-undefined [yes]: external declared or used but not defined (= -external) ext-unused [yes]: external defined but not used label-undefined [yes]: label used but undefined label-unused [yes]: label defined but unused var-set-unused [no]: local variable set but not used var-uninitialized [no]: local variable used before set var-unused [no]: local variable declared but not used Prefix option name with no- to turn off option If no options given, equivalent to /usage=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay.dos/wildcard.fc30000644000031000002260000000303010147524207020410 0ustar moniotstaff00000000000000 Usage Warning Options: arg-alias [yes]: scalar argument same as another is modified arg-array-alias [yes]: argument in same array as another is modified arg-common-alias [yes]: scalar argument same as common variable, either is modified arg-common-array-alias [yes]: array argument same as common variable, either is modified arg-const-modified [yes]: constant or expression argument is modified arg-unused [yes]: dummy argument declared but not used com-block-unused [yes]: whole common block declared but not used com-block-volatile [yes]: common block may lose definition if volatile com-var-set-unused [yes]: common variable set but not used com-var-uninitialized [yes]: common variable used but not set com-var-unused [yes]: common variable declared but not used do-index-modified [yes]: active DO index variable modified ext-multiply-defined [yes]: external multiply defined ext-declared-only [yes]: name declared EXTERNAL but not defined or used ext-undefined [yes]: external declared or used but not defined (= -external) ext-unused [yes]: external defined but not used label-undefined [yes]: label used but undefined label-unused [yes]: label defined but unused var-set-unused [no]: local variable set but not used var-uninitialized [no]: local variable used before set var-unused [no]: local variable declared but not used Prefix option name with no- to turn off option If no options given, equivalent to /usage=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/Okay.dos/wildcard.fc40000644000031000002260000000525710147524207020426 0ustar moniotstaff00000000000000 Fortran 77 Warning Options: accept-type [no]: ACCEPT and TYPE I/O statements array-bounds [yes]: array bounds expressions assignment-stmt [no]: assignment involving array attribute-based-decl [no]: attribute-based (:: -style) variable declaration automatic-array [yes]: local array of variable size backslash [no]: Unix backslash escape in strings byte [no]: BYTE data type case-construct [no]: CASE construct character [no]: Character variable defined length <= 0 common-subprog-name [no]: Common block & subprog with same name construct-name [no]: Construct names on DO statements continuation [no]: More than 19 continuation lines cpp [no]: Unix C preprocessor directives cray-pointer [no]: Cray pointer syntax cycle-exit [no]: CYCLE or EXIT statement d-comment [no]: Debug comments starting with D dec-tab [no]: DEC Fortran tab-formatted source do-enddo [no]: DO loop extensions double-complex [no]: Double complex datatype format-dollarsign [yes]: $ control code in FORMAT format-edit-descr [yes]: Nonstandard edit descriptors function-noparen [no]: FUNCTION defined without parens implicit-none [no]: IMPLICIT NONE statement include [no]: INCLUDE statement initializer [no]: Variable initializer in declaration inline-comment [no]: Inline comments starting with ! internal-list-io [no]: List-directed I/O to internal file intrinsic [no]: Nonstandard intrinsic functions io-keywords [no]: Nonstandard I/O keywords long-line [no]: Statements with code past 72 columns long-name [no]: Identifiers over 6 chars mixed-common [no]: Mixed char and nonchar data in common mixed-expr [no]: Incompatible type combinations in exprs name-dollarsign [no]: $ or other nonalnum (except _) in identifiers name-underscore [no]: Underscores in identifiers namelist [no]: NAMELIST statement param-implicit-type [no]: implicit typing of PARAMETERs param-intrinsic [no]: Intrinsics and **real in PARAMETER defns param-noparen [no]: PARAMETER statement without parens pointer [no]: Fortran 90 pointer syntax quad-constant [no]: Quad precision constants like 1.23Q4 quotemark [no]: Strings delimited by "quote marks" relops [no]: Relational operators < <= == /= > >= semicolon [no]: Semicolon as statement separator statement-order [no]: Statement out of order typeless-constant [no]: Typeless constants like Z'19AF' type-size [no]: Sized type declarations like REAL*8 variable-format [no]: Variable format repeat spec or field size vms-io [no]: Nonstandard I/O keywords Prefix option name with no- to turn off option If no options given, equivalent to /f77=all Special keywords: help: Print this list all: Set all options none: Clear all options ftnchek-3.3.1/test/cmp.c0000666000031000002260000000667307071771034015506 0ustar moniotstaff00000000000000/* cmp.c: Simple replacement for Unix cmp, for use with the check.bat script. This program lacks options such as -l and -s. */ /* Copyright (c) 2000 by Robert K. Moniot. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ROBERT K. MONIOT OR FORDHAM UNIVERSITY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of ftnchek shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the author. */ #include #include #define MAXLINE 1024 /* Big enough for present purposes */ long char_count, line_count; /* Total byte and line counts */ char *myname; /* For error messages */ /* Prototypes */ FILE *fopen_or_fail( char *path, char *mode ); int cmp_lines( char *line1, char *line2); /* Open file or fail with error message. */ FILE *fopen_or_fail( char *path, char *mode ) { FILE *fd; fd = fopen(path,mode); if( fd == NULL ) { fprintf(stderr,"%s: ",myname); perror(path); exit(2); } return fd; } /* Compare two lines, return 0 if equal and 1 if different. Also keep track of line & char count. */ int cmp_lines( char *line1, char *line2) { int i; for(i=0; line1[i] != '\0' && line2[i] != '\0'; i++) { if(line1[i] != line2[i]) return 1; char_count++; if(line1[i] == '\n') line_count++; } return 0; } int main( int argc, char *argv[] ) { FILE *fd1, *fd2; /* input file descriptors */ char line1[MAXLINE], line2[MAXLINE]; /* buffers for input */ char *read1, *read2; /* return status from fgets */ int status = 0; /* exit status */ myname = argv[0]; /* Make sure exactly 2 args are present */ if( argc != 3 ) { fprintf(stderr,"Usage: %s file1 file2\n", myname); exit(2); } /* Open files, die if cannot */ fd1 = fopen_or_fail( argv[1], "r" ); fd2 = fopen_or_fail( argv[2], "r" ); /* Read files and compare line by line */ line_count = char_count = 1; for(;;) { read1 = fgets(line1, sizeof(line1), fd1); read2 = fgets(line2, sizeof(line2), fd2); if( read1 == NULL || read2 == NULL ) { if(read1 != NULL || read2 != NULL) { printf("%s: EOF on %s\n", myname, read1 == NULL? argv[1]: argv[2]); status = 1; } break; } /* Compare the two lines */ if( (status = cmp_lines(line1, line2)) != 0 ) { printf("%s %s differ: char %ld, line %ld\n",argv[1],argv[2], char_count,line_count); break; } } fclose(fd1); fclose(fd2); exit(status); } ftnchek-3.3.1/test/cmp.exe0000644000031000002260000002143007206343416016024 0ustar moniotstaff00000000000000MZ@ !L!This program cannot be run in DOS mode. $PELr:   @`P0X.text$$ `.bss .rdataX0X @.data@ @.idataP`1@L$AtD$T$SVWD$Pjh@d5d%D$ Xp t ;t$$t4v L$H |uTd _^[USVWUjjh@u]_^[]USVWU] E0@@4@@@urEEE4@@ECs {tb v|t:VUkT]^] t(x1{SukVS vC T{ v41qUkjS j@@ j  u!j@@j u't*P5@@5@@r]_^[]Ã=,@@u,@@j XdUjh@@h@Pd%SVWeh(@@h$@@h @@5(@@5$@@5 @@%@@1ɉMPdUQWu uE}u25 @h@@=P@@Wv uwj1E_UQSVWE7}]4;] <;9t5 @}u<> u @E}u<>t u <>u_^[USWDž} <== @}t'5 @hk@@=P@@W jshi@@} whi@@} w @ @hW+ hW  t uIu t~u} _} _S5 @hZ@@ DžGWWT@5 @5 @} wwh8@@I;!_[%P@%P@%P@%P@%P@%P@%P@%P@%P@%Q@%Q@r:Cr:#0H @ @%s %s differ: char %ld, line %ld %s: EOF on %s rUsage: %s file1 file2 %s: P@ntPQPPQP QQ Q0Q8QDQLQTQ`QlQxQQ QQ Q0Q8QDQLQTQ`QlQxQQRtlUnwind_iob__GetMainArgsexitfclose efgetsfopenfprintfOTperrornVprintfEr[raiseesignal _KERNEL32.DLLmeP@CRTDLL.DLLP@P@P@P@P@P@P@P@P@P@P@trlwr sprintf  &.fileglcccrt0.c.data@8@@__fmode@ @+@7@F@___argc @___argv$@Y(@c,@t0@4@.bss .text<.file%glcccrt0.cz1"- )4.idata$3 `.idata$6(P.rdataQX.file1gd:\ftnchek-3.0.1\test\cmp.c.data8@P.bss _myname7C.text<d.fileDgd:\ftnchek-3.0.1\test\cmp.cO< ^ _main .text.data@.bss .idata$7Q.idata$4P.idata$5P$tkernelQ.filemg1.objhnamePfthunkP.text.data@.bss .idata$2P.idata$5P.idata$4P$hkernelP.text .idata$7Q.idata$5P.idata$4P.idata$6 Q i.text.data@.bss .idata$7Q .idata$4P.idata$5P$tcrtdllQ.fileg1.objhnamePfthunkP.text.data@.bss .idata$2P.idata$5P.idata$4P$hcrtdllP.text .idata$7Q.idata$5P.idata$4P.idata$6 Qw.text .idata$7Q.idata$5P.idata$4P.idata$60Q_exit.text .idata$7Q.idata$5P.idata$4P.idata$68Q _fclose.text .idata$7Q.idata$5P.idata$4P.idata$6DQ_fgets.text .idata$7Q.idata$5P.idata$4P.idata$6LQ_fopen.text .idata$7Q.idata$5P.idata$4P.idata$6TQ _fprintf.text .idata$7Q.idata$5P.idata$4P.idata$6`Q _perror.text .idata$7Q.idata$5P.idata$4P.idata$6lQ _printf.text  .idata$7Q.idata$5Q.idata$4P.idata$6xQ_raise .text .idata$7Q.idata$5Q.idata$4P.idata$6Q _signal.data@ .idata$7Q.idata$5P.idata$4P.idata$6Q__iob@__bss_base____bss_end____ShadowStack__errorcode__InitialStack__lastKnownGoodEBP__environ__plccStackTrace__CurrentException__CurrentContext__global_unwind2__except_handler3exceptionHandler3label2exceptionHandler3label3exceptionHandler3label4exceptionHandler3Exit_mainCRTStartup_NtCurrentTeb_char_count_line_count_fopen_or_fail_cmp_lines_RtlUnwind@16__GetMainArgscmp.exeftnchek-3.3.1/test/pointer_alloc.f900000644000031000002260000000124407713241404017712 0ustar moniotstaff00000000000000! Example of allocating and using an array via a pointer program pointer_alloc real, pointer, dimension(:, :) :: A integer :: M, N integer :: alloc_err, dealloc_err read *, M, N allocate ( A(M, N) , stat=alloc_err) if( alloc_err /= 0 ) then print *, "Error allocating real array of size", & M, "x", N else read *, A print *, A deallocate (A, stat = dealloc_err) if( dealloc_err /= 0 ) then print *, "Error deallocating array" else print *, "Array deallocated" end if end if if( associated(A) ) then print *, "Pointer is still associated" nullify(A) end if end program pointer_alloc ftnchek-3.3.1/test/DOS-README.TXT0000666000031000002260000000310007755772404016535 0ustar moniotstaff00000000000000DOS/Win32 test suite for ftnchek CHECK.BAT and its associated files provide some checking of FTNCHEK compiled for DOS/Win32 similar to the Unix makefile. Some tests had to be skipped, mostly because stderr cannot be redirected on DOS/Win9x systems and, in particular, cannot be combined with stdout (at least I don't know how to do this - hints welcome). Note that some tests require that the HELP.*, INCLUDE.*, and WILDCARD.* files provided in OKAY.DOS be used instead of the ones in OKAY. COMPARE.BAT looks to see if the master file exists in OKAY.DOS and if so, uses that. This avoids error messages due to different standard command-line option prefixes on DOS and UNIX ('/' instead of '-') and different directory separators ('\' instead of '/'). Furthermore, I left out the DCL2INC test since this uses AWK which is not available on stock DOS/Windows systems (although ports of GAWK to Win32 are available on the net). For the same reason, I avoided using TOUCH. The CMP program to compare the contents of two files was kindly provided by Robert Moniot. Make sure CMP.EXE is in the test folder (or compile and link CMP.C) before starting the test if you do not have a CMP program on your path. The test scripts require that FTNCHEK.EXE be located in the main ftnchek folder (i.e. one level above the TEST folder). Unfortunately, MSDOS doesn't support GOSUB and RETURN in batch files like DRDOS6 did. To avoid proliferating batch files, I decided to use GOTO and write "spaghetti" code occasionally (in particular in makedcls.bat). -- Gunnar Duus