This directory contains the FLECS translator. The manual may be found
in the files, flecsdoc.*.

When making FLECS on a new machine, you must first do a "make prepare"
before you do a "make install". If this fails, please review the Flecs
manual in flecsdoc.ps.

Some changes have been made to FLECS since it was distributed by
Terry Beyer. They are as follows:

1) The syntax of the FIN statement has been changed to allow arbitrary
comments after the FIN. The change was implemented in
ANALYZE-NEXT-STATEMENT by changing the call to SCAN-GARBAGE after (TFIN)
to CONTINUE. 

2) A new translator parameter, FAKEDO, was added to allow the translator
to generate DO loops using If statements and GOTO's rather than the
Fortran language DO loops. This feature is necessary for proper function
of FLECS generated code on the MIPS R2000 series machines because these
machine assume that branches into loops are forbidden. If FAKEDO is
true, then no do loops are generated, otherwise, the FORTRAN form will
be used. 

3) The implementation of character strings was changed to use Fortran
CHARACTER data types. The use of the upper part of stack for storing
internal procedure names was modified so that the linked lists now store
a pointer to a character string array which holds the names. 

4) FAKEDO was split into two variables, DFAKDO and FAKEDO. FAKEDO
applies to each subprogram, and is set from DFAKDO before each new
subprogram. A special comment statement has been added to set these
variables at translation time: 

C $FLECS {FAKEDO} {TRUE }
         {DFAKDO} {FALSE}
         {CPASS } {ON   }
                  {OFF  }

CPASS is used to control whether comments get passed through to
the Fortran program. By default, they are not.

5) A new FLECS directive, TRANSLATE, was added. TRANSLATE specifies that
the FLECS translator should translate FLECS into FORTRAN. It applies for
only one subprogram at a time. However, since FLECS syntax conflicts
with FORTRAN, it is useful to be able to turn off translation when
FORTRAN programs are imported into some FLECS code. Normally, TRANSLATE
is turned on, but it can be turned off using this directive. The
complete syntax is 

                   {TRUE }
C $FLECS TRANSLATE {FALSE}
                   {ON   }
                   {OFF  }

Also, FLECS was modified to ignored case when comparing keywords
or internal procedure names.

6) A new preprocessor variable, PORT, was added to generate a version of
translator that would be more easily portable. The variable controls the
default settings of internal variables.

7) The C Preprocessor (CPP) was incorporated into the translation
process of the FLECS translator. This allows me to maintain a single
source code for all the machines that FLECS runs on. If CPP is not
available to you, simply perform the substitutions by hand for the
machine you are interested in. Only a few statements are generated using
CPP. 

