============================================================================

                   EPP V0.12b - Beta.  E Preprocessor.
             Copyright ©1993 Barry Wills.  All rights reserved.


============================================================================


HISTORY.
~~~~~~~

    V0.02a and previous.
    ~~~~~~
    1.  This version reads a "makefile" containing PMODULE directives.  The
        module names and filehandles are stored in a linked list in order of
        dependence.  The list is then used to determine the method of
        processing the modules.  It works, but is very slow and inelegant.

    2.  Redundant occurrences of modules are ignored.

    3.  Superfluous PROC main () procedures are omitted in all but the main
        module whose name is supplied as the command-line argument.  An E
        comment is inserted wherever this occurs.

    4.  Other changes too various and turbulent to mention.


    V0.03a - Released 11 May 93.
    ~~~~~~
    1.  Ditched storing filehandles in list in favor of recursion.  The list
        is now used to store module names to check for redundant inclusion.

    2.  Modified procedure getModule () to use a project's main program
        file as the starting point (instead of the separate directives
        file.)  The procedure then recursively descends into module
        declarations parsing the global declaration sections from the
        procedural sections into separate files.  The first file (specified
        on the command line) gets all the definitions and declarations, the
        second (temporary) file gets all procedures.  At the end of the
        program the temporary file is appended to the specified output file
        and deleted.

    3.  Runtime progress is sent to stdout.  The final output file is
        stripped of all comments (except those within procedure bodies), and
        some EPP module information is inserted at strategic locations.


    V0.04a - Released 13 May 93.
    ~~~~~~
    1.  Comment stripping did not work in all cases, leaving dangling open-
        and close-comments.  Decided to copy all comments since I had to
        track them anyway.

    2.  Quoted open- and close-comment symbols were being erroneous counted.
        Implemented open- and close-string and -character trackers to fix
        this.  (Could have led to shitloads of misread literals.  Eesh!)


    V0.10b - Released 15 May 93.
    ~~~~~~
    1.  Removed from alpha status.


    V0.11b - Released 21 May 93.
    ~~~~~~
    1.  Optimized appendProcsToDefs () for speed.  Immense gain in speed
        achieved using buffered I/O instead of String I/O.


    V0.12b - Released 26 May 93.
    ~~~~~~
    1.  EPP did not recognize RAISE as a defs keyword.  Consequently, all
        modules beginning with a RAISE declaration aborted the process.

    2.  Removed the offending section that said "I don't know what to do
        with *token name*".  Now if EPP doesn't recognize a keyword in the
        defs section the line will just be written as is.

    3.  Tweeked procedures getModule () and copyDefs () to check for the
        two-character string ';\n' after returning from getModule ().  The
        sourceLine is trimmed after a return from getModule () because only
        a partial line would be processed (say, if we had the line:

            PMODULE 'mod1'; PMODULE 'mod2';

        the two statements are processed by calls to getModule ().  This
        would leave a semicolon at the end of the line, which was being
        printed alone on a line when the call to getModule () returned.
        (!@#$%)

    4.  Corrected serious oversight in copyProc () and getModule () that
        allowed quoted keyword 'PROC' to be erroneously recognized as the
        keyword PROC.  This surfaced while I was attempting to convert EPP
        to use PMODULE statements.

    5.  Converted EPP to use PMODULES.  This actually reduced the size of
        the executable since I had some duplication of code.

    6.  Prettied up comments a little.

