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