===========================================
26/Jan/95 Released version V1.40 onto AmiNet
===========================================

New in V1.40:
------------

    Added overflow(-v), range(-r), stack(-s) & divide-by-0(-z) checking.
    Some of your old modules may fail. :)
    The stack checking routines require that atleast 2K of stack be always
    available.
    Overflow checking will only be performed on 32Bit multiplys if the
    the new -020 option is enabled.

    Added Raw module for setting the console to RAW mode.
    Added FIO.SetBuffer functions which will set a console to RAW in FIO/StdIO
    recognised way.

    Added CliArgs module, V36+ dosers may like to use Dos.ReadArgs instead.
    Do not use M2Lib.argc & M2Lib.argv anymore.

    Added FastStorage module.

    Pointer checking is no longer performed inline. So modules that use it are
    much smaller.

Bugs in V1.3, fixed in V1.40:
-----------------------------

    Registers d2 & d3 were sometimes not being protected by procedures which
    used LONGREAL floating point math.

    Assertion failures occured when the symbol file cache was turned
    off (M2SYMCACHE=OFF) and multiple filenames were passed to M2C.

    Assignments between BCPL pointer and normal pointers were not being
    converted correctly.

    FIO.mod was not using the result of StdIO.fprintf correcty, leading
    to bogus OpFailed results from functions like WriteInt, WriteReal ...

    Two disjointed subrange types such as [0..10] & [100..200] are no longer
    assignment compatible. VAL & CHR will also complain.

    Renamed module 'ModeID' to 'ModeKeys'.

    If a task created using Dos.CreateProc or AmigaLib.CreateTask ever hit a
    runtime error, it would abort using the main tasks exit code.
    Under 1.40 aborting tasks (execpt the main one) will be suspended
    (after the error requester is displayed). You should make sure that any
    created tasks never run into such trouble.

    Added new '-P' compiler flag because '-p' does not work on some Amigas.

    LONGCARD & ADDRESS are properly unsigned.
    If you mix ADDRESS expressions with integer (signed) expressions then the
    resultant expression will be signed. Use standard function VAL to keep the
    sign under control.

==========================================
6/Dec/94 Released version V1.3 onto AmiNet
==========================================

New in V1.3:
------------

    Added pointer range checking to procedure variables.

    For some unknown reason V1.2 never got uploaded onto AmiNet?
    V1.3 does not contain any major new features but does contain a few
    bug fixes:

Bugs in V1.2, fixed in V1.3:
----------------------------

    Changed Exec.MsgPort.mp_Flags from SHORTSET to SHORTCARD.

    Changed Intuition.IntuiMessage.Qualifier from CARDINAL to BITSET.

    INC & DEC were not coerceing their second arguments.

    RETURN did not like procedure (constant) results: (ST 1025 HALT).

    M2C should now run (most of the time) from a 4K stack.
    V1.1 used to run in 4K but V1.2 did not.
    Youll get a requester if stack space ever runs out.

    M2B,M2C,M2E,M2L now all print error messages to "*", the output of m2e
    still goes to Dos.Output(), so can be still be redirected.

=========================================
18/Nov/94 Version V1.2 (Never released??)
=========================================

New in V1.2:
------------

    Major new feature: Resident symbol files (see CACHE.DOC).
    This has probably introduced lots of new bugs :)

    Added crude object file caching (see CACHE.DOC).

    M2B no longer repeatedly invokes M2C, instead it passes a list of filenames
    to M2C. If you disable the symbol file cache, then loaded symbol files will
    still be shared between these files.

    M2B & M2L automatically invoke M2E.

    Added RealInOut module (see RealInOut.def).

    Added BIO & FIO modules
    The floating point functions in these modules can only be used with
    the full version of DICE. All other functions are perfectly useable
    with the (included) freeware version. (see M2/BIO.def M2/FIO.def).

    Added module CLOSE termination statement sequence to free allocated
    resources. Renamed Intuition.CLOSE constant to _CLOSE because it know
    clashes with the new CLOSE keyword (see EXTENSIONS.DOC).

    Added disable value open array copying (* @N *) comment switch
    (see EXTENSIONS.DOC).

    M2B & M2C & M2L now work just as well under OS 1.3 as 2.0+.
    Previouly (under 1.3) break detection was not propagated to sub programs.
    However 1.3 support increases the size of M2B, M2C & M2L by 4K.
    When running under 1.3 NewCli, EndCli & Run must be in youre path,
    I recommend you make them resident.

    MODULA:lib renamed to MODULA:mlib, MLIB: is assigned to MODULA:mlib.

    We no longer use the c.o supplied with DICE, instead MODULA:dice/dlib/
    contains a version that does not contain a bug that made it unsuitable
    for programs that used coroutines.

    Programs compiled with pointer checking enabled (-p) should run faster
    because pointer checking no longer needs to check VAR parameter accesses,
    instead any pointer deferenced to a formal VAR parameter is checked only
    once (that is when its pushed). The same goes for fields inside WITH
    statements (for pointers to records).

Bugs in V1.1, fixed in V1.2:
----------------------------

    NIL pointer tests in Storage.DE/ALLOCATE were missing.

    Removed unnessacary padding for byte fields declared in non-inteface
    modules. If you created any persistent file based data structures with M2C
    v1.1, then you may have trouble reading them back in!

    Fixed case sensitive file suffix comparisons in M2B & M2C.

    Made run time array index checking error location reports more accurate.

    Corrected StdIO.getc & Dos.DupLock function definitions.

    When longreal function procedures declared inside DEFINITION FOR * MODULE
    were begin treated as proper procedures (ie the result ignored, as allowed)
    the function result was being pushed onto the stack for no reason, resulting
    in address error failures.

    Fixed M2C TRAPV failures when going from large negative LONGREAL to REAL
    constant at compile time eg real := MIN(LONGREAL).

    M2C & M2L would sometimes forget to unlock directories specified using -M
    flag.

    M2C & M2L used to append "\" to -Mpaths that ended with ':'
    eg ram: into ram:\

    M2C used to a give requester: "function exit without return"
    in TC.mod (source module) on line 929, when set expressions contain
    out of range (0..31) values (eg {100}).

    Added overflow checks to internal memory table arrays.

    M2C did not check for cyclic importing in definition modules (M2B did)
    This was because M2C and M2B were originally merged, so the check inside M2C
    used to be redundant.

    Any files named 'obj','sym','bin' '/obj'... would be mistaken for
    directories.

    VAL on constants was converting to a compiler prefered type, rather than the
    type that was specified.

    Made some changes to InOut.mod.

    Imported identifier aliasing could not be applied to local modules.

    Linking with Coroutines used to fail, because the symbol '__Abort' could
    not be found. This reference should have been (re)named to '__m2_Abort'.

    When stack checking used to fail, the stack would be reset to that recorded
    in the m2_main.o code (m2_safeStack).This was required so that the Error
    Requester call would have enough stack. However this meant the stack would
    be overwritten, which in turn meant that any clean up code specified
    with StdLib.atexit, could not reliably access the stack (through any global
    pointers) if stack checking was used. If V1.2 M2Lib.CheckStack* fails a
    new stack is allocated for the Requestor call, so the old stack can be
    referenced by any atexit() or CLOSE clean up code.

====================================================
27/Sept/94 Released Initial version V1.1 onto AmiNet
====================================================


