We are making available three versions of
the F compiler--for Linux, Solaris, and Windows.

This new version is produced quite differently from
the older versions: it is a modification to the
NAG (Numerical Algorithms Group) compiler to enforce
as many restrictions as could be done in a resonably
short time with our limited resources.  This means
there will be some notable differences between this
version and the old versions, but we think the
advantages are far greater.  They include:

 o all features new in Fortran 95

 o implementation of the two technical reports
   dealing with IEEE arithmetic and allocatable
   arrays

 o some POSIX utilities such as the "system" call,
   command line arguments, "sleep", etc.

 o much better facilities for calling procedures
   in other languages, such as C and Fortran 77.

The big downsides are that we have no way of
producing a Mac version, somewhat
less informative error messages, and a few
incompatibilities (see below).  These characteristics
are due in part by my (Walt) inability to easily
modify the NAG compiler to conform, but we have
purposely added a few features requested by you,
our users (internal procedures in the main program
and go to statements that may branch forward to a
continue statement, for example).

As the compilers are free, we hope you will help us with
the testing and report any bugs to walt@fortran.com.

Please note that there are some incompatibilities with
previous versions of F, there are restrictions in the
previous versions that have been removed, and there
are F restrictions which are not being diagnosed in
the current versions.  These are described below, so
please check this list before reporting an error.

All versions of the F compiler are available free by
downloading them:

ftp://ftp.swcp.com/~walt/pub/F

However, we are suggesting a contribution to the develop-
ment of F (a la "freeware").  Something like $50 for a
nonstudent academic user and $100 for a nonacademic user
would help us return some of the money to those who have
invested in the development of F.

The latest Linux version has been built and tested on
Red Hat 7.1, but should work on other Linux systems.

The latest Solaris version has been built and tested on
Solaris 2.

The latest Windows version has been built and tested on
Windows ME.

You can purchase a book with a CD for $40 containing all
of the versions, example code, the book in electronic form,
etc.  from

   http://www.fortran.com/F

You can purchase just the CD for $20.

Or you can purchase just the book for $30.

===

Status of modifying NAG f95 compiler to F.

New Features Added on Purpose:

  Fortran 95 features
  two sets of tech report features
  eliminate requirements related to case of letters
  allow use of reserved words (e.g., as a variable)
  a name may end with "_"
  & allowed as first nonblank on line for continuation
  internal procedures in main program
  IF statement
  WHERE statement
  HPF directive and intrinsics
  impliled-DO in I/O list
  blanks allowed in edit descriptors
  EN edit descriptor
  f95 subscript bounds in dummy array decl
  a function may contain anything allowed in a pure function
  initialized variables in the main program
  initialized variables in a procedure without
      explicit SAVE
  scalar constant parent string
  relaxed statement ordering
  forward GO TO to a labeled CONTINUE statement (only)
  optional arguments do not have to come last

F Restrictions Enforced (I think):

  no fixed source form
  no nonF statements
  no ";"
  require PROGRAM statement
  full form of END statement required
  only IMPLICIT is IMPLICIT NONE
  IMPLICIT NONE may be in main or module only
  all variables must be declared
  enforce F declaration syntax
  no default character length
  no specification of character kind
  all KINDs must be named constants
  derived type definitions must be in main or module
  all dummy arrays must be assumed shape
  no "." form relational operators (e.g., .EQ.)
  no "'" as character delimiter
  digits required before and after "." in reals
  no double precision type (syntax)
  no D exponent for reals
  no BOZ constants
  no labels except in GOTO and on CONTINUE stmt
  no optional comma in DO
  no DO WHILE
  DO and FORALL variable must not be a dummy
  DO and FORALL variables must be local
  no type spec in FUNCTION statement
  implement public/private module concept
  all entities in a module must have explicit access
    except those imported by USE
  no external procedures
  no internal procedures in module procedures
  no BLOCK DATA subprogram
  no type spec in function heading
  function RESULT required
  () required on all procedure headings and calls
  no alternate return
  no intrinsic procedure actual arguments
  require keywords on all I/O list items
  no nonF edit descriptors
  require comma between edit descriptors
  no END=, ERR=, or EOR= spec
  no DELIM=, PAD=, NML= I/O keywords
  require keywords in read(unit=*,fmt=*, ...)
  no reOPEN of connected file
  require STATUS and ACTION in OPEN
  enforce restrictions on OPEN specifiers:
    STATUS must not be UNKNOWN
    if STATUS is SCRATCH, ACTION must be READWRITE
    if STATUS is NEW or REPLACE,
        ACTION must not be READ
    if ACCESS is SEQUENTIAL and STATUS is OLD,
        POSITION must be REWIND or APPEND
    must be a POSITION specifier
  only () versions of BACKSPACE, ENDFILE, REWIND
  require INTENT for all procedure dummies
  no INCLUDE
  no assumed size arrays
  no logical SELECT CASE
  no construct name on IF, ELSE IF, ELSE, END IF
  no construct name on SELECT, CASE, END SELECT
  no construct name on WHERE, ELSEWHERE, END WHERE
  no construct name on FORALL, END FORALL
  require * as length of character dummy or parameter
  no nonF intrinsic functions

Features Removed (Incompatibilities):

  no -X compiler option
  allowed suffixes are .f90, .f95, .F90, .F95
  eliminate NULLIFY statement
  INTRINSIC statement must have ::
  a function must have properties of PURE
      except that a PRINT stmt is allowed
    For example:
      may call only a pure subroutine,
        even via defined assignment
  require * as length of character parameter

To Do:
  no characters except blanks after ")" in format
  restrict form of bounds in dummy array decl ???
  each appearance of a name must use the same case
       letters
  each dummy procedure argument must be declared
       by an interface block
  the parts of complex constant must be the same
       kind of real
  a DO variable must not be used for anything else
  kind arguments to intrinsic functions must be
       paramaters
