




                      Ratfiv Version 2


     Ratfiv is a structured Fortran  preprocessor  providing
SWITCH,  IF  - ELSE, WHILE, FOR, DO, REPEAT - UNTIL, STRING,
and BREAK and NEXT constructs.  Also supported  are  INCLUDE
files,   DEFINE  for  symbolic  constants  and  macros  with
arguments, conditional compilation, formats in read,  write,
encode, and decode statements, use of >, <, etc.  instead of
.GT.,  .LT.,  etc,  and  the  RETURN  VALUE   construct   in
functions.

     Ratfiv  was  developed   from   the   Ratfor   compiler
distributed   by   Lawrence   Berkley  Labs;   versions  are
available for  VAX  VMS  and  RSX/IAS  systems.   The  major
enhancements in Ratfiv are:

      1. Ability to specify a format statement inside  READ,
         WRITE, ENCODE, and DECODE statements;

      2. Consistent line continuation  using  the  underline
         character;

      3. Production of properly indented upper case  Fortran
         code with comments passed through;

      4. Optional output of Fortran 77 code  with  the  /F77
         switch;

      5. Addition of a /SYMBOLS switch to the  command  line
         to optionally read the SYMBOLS file;

      6. Output of quoted strings  or  optionally  hollerith
         strings  (quoted  string output allows Ratfiv to be
         used with DEC Fortran OPEN statements, the  Fortran
         77 CHARACTER data type, etc.);

      7. Evaluated and unevaluated arguments in macros;

      8. Correct line number reporting;

      9. Exit with error status if an  error  occurs  during
         compilation;

     10. Use of character constants in case labels;

     11. Numerous bug fixes;

     12. Comprehensive documentation;

     13. Ratfiv keywords need not appear at the beginning of
         a source line in order to be recognized.



                                                      Page 2



     This version of Ratfiv may  be  used  if  you  want  to
compile  the  Ratfiv source to the other programs written in
Ratfiv on this tape.  

     Version 2 of Ratfiv has a few enhancements, bug  fixes,
and changes since Version 1.  The enhancements are:

      1. The documentation has  been  revised,  particularly
         the section on defining macros;

      2. Hollerith  strings  may  be  optionally   outputted
         instead of quoted strings;

      3. The initialization and increment parts of FOR loops
         may have more than one statement in them;

      4. Macro definitions may have commas in them;

      5. Arguments to the _len and _include macros may  have
         commas in them;

      6. The special macro arguments $& and %& are  replaced
         by ALL the arguments passed to the macro;

      7. Octal  constants  may   be   inserted   in   STRING
         variables;

      8. The number of special  escaped  characters  in  the
         STRING  statement  has  been  increased  and  these
         characters  may  also  be  used   with   the   CASE
         statement;

      9. Quoted strings are consistent in  that  double  and
         single  quoted  strings  may  both  have  double or
         single quotes in them, even in the STRING and  CASE
         statements;

     10. Macros may be defined  which  emulate  the  _ifdef,
         _ifndef, _enddef, and _elsedef macros (see the file
         RATFOR.SYM for an example of this);

     11. Some unused  CONTINUE  statements  in  the  Fortran
         output have been eliminated.



A few changes were made  that  could  cause  incompatibility
with Version 1.  I am sorry for these changes, but they were
necessary for my peace of mind.  I expect this version to be
pretty stable.  The changes are:

      1. The dot (.) character is not allowed in macro names
         anymore.   This  change  was  made because it could


                                                      Page 3



         cause problems when a macro name appeared next to a
         valid dot character, as in "if (status.eq.EOF)".

      2. The BREAK statement may not be used to break from a
         SWITCH statement anymore.  This change was made for
         compatibility with Ratfor preprocessors and to make
         BREAK consistent with the NEXT statement.  It was a
         bad idea in the first place  to  have  BREAK  break
         from a SWITCH statement.

      3. Brackets ([]) have no special meaning within  macro
         definitions anymore.  The use of brackets in macros
         was too obscure to justify them.  In any case there
         was little need for them.

      4. The   NEWLINE   character    was    changed    from
         carriage-return to line feed for compatibility with
         Ratfor preprocessors.



Some of the bug fixes are (there weren't too many bugs):

      1. include statements  insert  their  input  into  the
         input stream correctly when they appear in a macro;

      2. Error line number reporting is REALLY correct  this
         time;

      3. Literal Fortran code is allowed in macros.




     The file "RATFOR.SYM" contains some  macro  definitions
which,  if  placed  at  the  front  of  the  Software  Tools
"SYMBOLS." file, make Ratfiv  largely  compatible  with  the
latest  (Spring 1981 VAX sig tape) version of Software Tools
Ratfor available from Joe Sventek.  I have compiled about 15
thousand  lines  of  his code with Ratfiv;  the only problem
was that some variables named "string" ("string" is a Ratfiv
keyword)  had  to  be  renamed.   Software Tools Ratfor code
should be compiled with Ratfiv's "/SYMBOLS" switch, and with
Ratfiv's  "/HOLLERITH"  switch for compatibility on the VAX.
This is the only place where  the  "/HOLLERITH"  switch  has
been  needed  so far.  Note that shortening of long names is
not available in Ratfiv;  I have not  checked  whether  long
names are used in the RSX/IAS version of the Software Tools.
Also, the "$(" and "$)" brackets for use with macros are not
available  in Ratfiv;  there seems to be little use for them
in Ratfiv.




                                                      Page 4



     I expect that Ratfiv will be fairly stable from now on,
although  it's  possible  I  will  add  enhancements.   I am
interested in hearing about and fixing bugs, however.  




To build Ratfiv, do

@BUILD

Documentation is in the file RATFIV.DOC.


     The "@BUILD" file builds Ratfiv and also  Macro,  which
is  just  the  macro  preprocessor portion of Ratfiv.  Input
passes through the macro  processor  unchanged  except  that
macros  are  expanded.  There is no documentation for Macro,
however the form of the command line is  like  Ratfiv's  and
the   macros  are  the  same,  except  that  "define"  isn't
available;  use "_macro" instead.

     There is a system-wide file called "SYMBOLS." which can
be  read by specifying "/SYMBOLS" on the Ratfiv command line
(see the section,  "USING  RATFIV"  in  "RATFIV.DOC").   The
default location of this file may be changed by changing the
define for "USER$BIN" in the "SYMBOLS." file and  rebuilding
the  compiler  from  scratch.   Most  people won't need this
file, however, so you can just leave  it  on  the  directory
where  Ratfiv  is  located,  since  Ratfiv  first checks the
default directory for the "SYMBOLS." file before looking for
the system-wide file.  



     If you are using the FOR compiler instead of F4P  on  a
PDP11,  be  sure to compile the Fortran sources with the -SN
switch.  Ignore the errors in IO.FTN;  they are  in  modules
which  aren't  used by Ratfiv.  You will also have to change
the RATFIV.TKB file as follows:

      1. Delete the MAXBUF=512 option.

      2. Change ACTFIL=8 to ACTFIL=7

      3. Change UNITS=10 to UNITS=9

These changes reduce the number  of  file  inclusion  levels
allowed  by  Ratfiv  by one, but the task would be too large
otherwise.  If the task is still too large, you  can  reduce
ACTFIL  to  6 and UNITS to 8, but don't reduce them any more
as then you will not be able to include any files.


                                                      Page 5



     After reducing the number  of  file  inclusion  levels,
then  after  successfully  building Ratfiv you should change
the define for NFILES in the file "MACSYM." to  reflect  the
changes  (i.e  subtract  1  or  2  from the defined value of
NFILES), and then rebuild the compiler from scratch.


Send comments, problems, etc.  to:

       William P. Wood, Jr.
       Institute For Cancer Research
       7701 Burholme Ave.
       Philadelphia, PA. 19111
       (215) 728 2760



