+-------------------------------------------------------------------------+
| Compiler                                                                |
+-------------------------------------------------------------------------+

V2.14
-----

- Removed two HALT commands executed whenever LONG or SHORT was used with
  an argument which did not exist
- The automatic optimizing switch off for assembler statements (introduced
  in V2.13) removed again. Did not work properly.
- A statement of the form var[const] := longreal with var being an array of
  longreal now also works with global variables.
- An expression like var[i] with var being an array of longreal should
  work now.
- MIN and MAX for REAL and LONGREAL are fixed.
- Replaced FSGLMUL by FMUL
- Writing ARRAY [0..9] OF CHAR will not cause bombs anymore.


V2.13
-----

- A procedure parameter of formal type ARRAY OF SYSTEM.BYTE got the wrong
  number of elements when called with an array of something greater than
  one byte.
- Constant expressions now receive the smallest possible type (previously
  the biggest appearing type)
- Comparison of type CHAR now uses unsigned comparison as it should
- A statement of the form var[const] := real with var being an array of
  real now works.
- Register optimization was always performed even if optimization was not
  desired
- Extension of integer types to real types did not work
  (fixed by H. Kleinschmidt)
- SHORT did not work properly on some long real values (e.g. 3.999999D0)
  (fixed by H. Kleinschmidt)
- Marks an error if local variable size exceeds 32K


V2.12
-----

- MIN and MAX for REAL and LONGREAL implemented
- The shift and rotate assembler commands now also work with just one
  operand which must be the destination in memory (e.g. ASL #1,(A0) can be
  written as ASL (A0) )
- The shift left and shift right operators << and >> can be used in extended
  mode
- Stack correction after procedure calls did not work if optimization was
  switched off


V2.11
-----

- LONGREAL constants were not scanned correctly


V2.10
-----

- Bug removed which caused the optimizer to regard all strings as being
  equal


V2.09
-----

- Creates info files for debugger


V2.08
-----

- Bugfixes


V2.07
-----

- One character strings accepted in ORD, CAP, ODD, CASE

- Two pointers were not deleted after termination. This caused the GC to
  not dispose memory which was not used anymore.


V2.06
-----

- Finalize in GC introduced

- Key combinations with alternate are accepted in terminal windows

- Mechanism for removing procedure variables on module removal in Task

- Used this mechanism to remove windows with a viewer which is removed.
  Also used it to remove procedure variables in Task, Application, GemApp,
  XCoroutines and WinView.

- O2Modules now refuses to unload Chatwin.

- few minor bugfixes


V2.05
-----

- Bug in address comparison removed

- additional information for GC required

- HALT is now available in standard mode

- lots of other bugs removed


V2.04
-----

- Compiler about factor 2 faster

- Bug in register optimization fixed; Algorithm improved

- ASSERT introduced

- Forward defined TBPs caused a compiler error message

- Lots of other bugfixes


V2.03
-----

- Null terminated strings assumed - improved code for COPY and string
  compare

- Import when needed: Unused imports will not be loaded but will be linked.

- Forward definition not needed anymore, but still supported

- Export of constant strings is now possible.

- Return values of TBPs could have been ignored in complex expressions

- Function calls could destroy local variables

- Procedure calls of functions was not detected

- Errors at the very beginning of a module were not output and the compiler
  crashed

- RETURN in Assembler now works

- Certain changes to parameter lists did not lead to new symbol files

- Assignment of empty strings to dynamic arrays did not work

- Language extensions are switched off by default (Oakwood guidelines)

- String comparison and string copy assume null terminated strings
  (Oakwood guidelines). This simplified code.

- Length of open arrays was not read correctly

- Procedure calls inside other calls caused problems

- Type comparison / check was incorrect

- Short cutted import names could cause new symbol files on every
  compilation

- An optimizer bug caused local procedures to use wrong addresses
  when accessing local variables of the parent procedure

- Strange error reports like "Incompatible assignment" with perfectly
  compatible operands occured rarely.

- A call of an inherited method which is not defined in the inherited
  record but in the current one, was not detected as error.

- Type guard was buggy

- Setting an environment variable for the search paths with less than
  7 characters did not work because the terminating 0 byte was forgotten

- Defining a destination for object and symbol file using the search paths
  is available again

- Assigning a real number comparison to a boolean did not work


V2.02
-----

- Disabling the optimization should not lead to malfunctioning code
  anymore.

- Disabling the language extensions should now be possible.


V2.01
-----

- An illegal opcode could occur due to an optimizer error.

- A new symbol file could occur without any change to a source.

- I forgot a copyright message.

- A forward procedure definition caused wrong branching.

- The type descriptor of a VAR RECORD parameter was not used, instead the
  static type was used. This caused the new compilation of GemApp.

- There was an error in the export function leading to random errors.

- Format of compiler messages changed. There are messages for the different
  processes anymore, because they are not separated anymore. This is due to
  the

- Reduction of memory usage. The compiler used to process the whole source
  before starting the next process. Therefore a lot of memory was needed
  for the pseudo code. Now it translates each procedure as far as possible
  before processing the next procedure.


+-------------------------------------------------------------------------+
| Linker                                                                  |
+-------------------------------------------------------------------------+

V2.02
-----

- Linker can produce segment relative symbol table

V2.01
-----

- minor bugfix


+-------------------------------------------------------------------------+
| Make                                                                    |
+-------------------------------------------------------------------------+

V2.03
-----

- Does not stop after one compilation anymore

- Calls garbage collector after each compilation


V2.02
-----

- Reduced memory waste by diposing it

- Integrated version (imports compiler/linker)


+-------------------------------------------------------------------------+
| Optimizer                                                               |
+-------------------------------------------------------------------------+

V2.00
-----

- first version


+-------------------------------------------------------------------------+
| PShell                                                                  |
+-------------------------------------------------------------------------+

V2.10
-----

- knows message VA_START: Install O2LOAD.PRG for *.OBJ, double click an
  object file and it will be executed by the loader even if the loader is
  already running PShell.


+-------------------------------------------------------------------------+
| General                                                                 |
+-------------------------------------------------------------------------+

V2.14
-----

- Bugfixes by H. Kleinschmidt in NumStr and EmuFpu
- New AES 4.1 and MagiC 3.0 constants and functions in the GEM library.
  By Christian Felsch
- GEMIO and ChatIO recompiled - reading of german "Umlaute" possible
- Calling GEMIO.ReadString as first procedure in GEMIO is now possible
- Corrected documentation: To replace IO with GEMIO, do not define
  LINK_IO=GEMIO, but define LINKALSO=GEMIO
- changes to freeware math modules by H. Kleinschmidt
- New modules In and Out almost Oakwood compatible (by H. Kleinschmidt)


V2.13
-----

- New modules by Holger Kleinschmidt: Conversion between REAL and strings
  and between LONGREAL and strings
- The load time linking system checks for version conflicts
- Bug fix for opening work stations: Graf.Handle ist used to get a
  previously opened workstation
- Some calls of Wind procedures were done before the window was created.
  This should be fixed.
- Limitation of environment variables to 100 characters removed


V2.12
-----

- NumStr.LRealTo() fixed by H. Kleinschmidt
- New bugfixed longreal division function by H. Kleinschmidt
  (no errors in longreal constants anymore)
- new math modules by H. Kleinschmidt:
  . LowReal
  . LowLong
  . RealSupport
  . LongSupport
  . Math
  . MathL


V2.11
-----

- EmuFPU.CmpLReal fixed by H. Kleinschmidt
- EmuFPU.DivLReal fixed (divisor and dividend exchanged)


V2.10
-----

- Bug in EmuFPU removed; caused translation from integer to long real to
  malfunction


V2.07
-----

- a stack overflow will only be reported once instead of twice and the exit
  procedures should work afterwards. The problem was that the execution of
  exit procedures caused another stack overflow and they were removed as
  being unsafe.

- Storage automatically reduces reserved memory if no garbage collect or
  anything could return enough memory.

- The garbage collector now searches the stack memory for pointers.


V2.05
-----

- introduction of garbage collector

- Strings improved for null terminated strings

- Definition modules updated

- lots of additional modules


V2.04
-----

- Different folder layout


V2.03
-----

- GemApp changed completely

- Additional modules: ListView, Application, Program, Halt, Break...
  See also DIFF_124.TXT


