eForth programmed in C
cEF is a FORTH implementation based on eForth Model, and compiled by a C
compiler, gcc in Cygwin.  It is by far the simplest FORTH system described in C
language.

It is released in two versions:

cEF Version 1.0
The underlying Virtual FORTH Machine has the standard 33 machine instructions
defined in the original eForth Model.  It is target to microprocessor without
floating point coprocessor, and uses only integer arithmetic operations.




cEF Version 2.0
The Virtual FORTH Machine has 64 machine instructions.  Multiplication and
division are implemented using double floating arithmetic operations.  It is highly
optimized to take advantages of recent microprocessors with floating point
coprocessors.




The most difficult task in coding FORTH in C is that the C compiler is
extremely protective in its code memory.  The user generally does not
have access to the code memory, and you are absolutely prohibited from
modifying the code memory.  In FORTH, it is assumed that code and data
coexist in the same memory, and one can freely read from and write into
this memory.  It is very easy to implement an interpretive system in C,
but very difficult to implement a self compiling system in C, because
C would not execute code you writing into a data memory.

cEF solves this problem by implementing a dictionary in data memory.  
The primitive machine instructions are pseudo instructions which are
pointers pointing into an array of pointers to actual C routines.

The dictionary is a byte addressed data memory, which is very easy to
store sequences of pseudo instructions in bytes.  This data memory is
aliased to a cell pointer, which is used to read and write information
in 4 byte cells, like link addresses, word addresses, and numeric data
in 32-bit integers.

FORTH dictionary is a linked list of FORTH records.  A word record starts
with a cell of link address, then a variable length name field, then a code
field of at least 4 bytes, and finally a variable length parameter field
with as many cells as needed.  This kind of variable length records are
very difficult to implement in C, with byte information and cell information
freely intermixed.  Prior FORTH implementations in C tried various ways
to solve this problem, but the results were always complicated and almost
impossible to decipher.

A FORTH metacompiler can be programmed to general such a dictionary, which
will be imported to an array in a C program.  A Virtual FORTH Machine VFM
can be written easily in C to interpret the information stored in the
dictionary and bring up an interactive FORTH system.  New word records
can be easily added to the record list, and accord compilative behavior
to the FORTH system.

VFM only executes pseudo machine instructions in the code fields
of FORTH words.  Primitive FORTH words have sequences of these machine
instructions in bytes and they are executed by the inner interpreter
in VFM.  High level colon FORTH words are 'interpreted' by the address
interpreter in VFM, as it scans address lists and calls addressed FORTH
words.