[I] = Internal code change only; no extral effects should be present.
[O] = Change to Output or Viewer (no changes to functionality)
[F] = New Feature available for use, or feature removed (inactive by default)
[B] = Bug fix; something that used to work wrong will now be correct.
[M] = Major change; avida will function differently in certain circumstances.

For version 2.0 beta 7:

October, 03
[F] Implemented proportional merit with sex...

[F] Setup environment file with an extra command:

      SET_ACTIVE <type> <name> <active=true>

    Type can currently only be "reaction" (but soon I'll also get resources
    working, and eventually mutations).  Name is the name of the resource,
    and fitnally a true or false if you want that reaction turned on.
  
    THEN I also added a command to the analyze mode called "ENVIRONMENT"
    which will allow you to add extra commands to define the environment
    file on the fly.  For example, the analyze command:
  
      ENVIRONMENT SET_ACTIVE reaction NOT false
  
    Will turn off rewards for not.  They can be turned back on again
    trivially with:
  
      ENVIRONMENT SET_ACTIVE reaction NOT true

[B] Made changes to arrays in analyze mode so that they use tArray and
    tMatrix to make them easier to use with variable sizes.

[F] Added new functions "AnalyzeComplexity" and "AnalyzePopComplexity"
    to analyze source code.

[F] Added in three new events to modify the topology of a population:
    sever_column : sever a full column of cells
    connect_cells : connect two cells together
    disconnect_cells : disconnect two cells from each other.

[F] Added some info about the new AVERAGE_MODULARITY analyze command to
    the documentation files.

[F] After much tweaking, implemented a new analyze function,
    AVERAGE_MODULARITY.
    Usage:
    AVERAGE_MODULARITY output_file task.0 task.1 task.2 task.3 task.4 task.5 task.6 task.7 task.8

[B] Fixed the formula used to calculate Standard Error in various
    statistics parameters.


For version 2.0 beta 6:

September, 03
[B] Widened number display fields in CPU viewer so that data can be read
    correctly.

[F] Added buttons to select number format (binary, decimal, or
    hexadecimal) in Register, Inputs, and Stacks views of CPU viewer in
    GUI.

[B] Minor bugfixes in 4-stack cpu parasite code.

[F] Added option to count phenotypes based on tasks completed.

For version 2.0 beta 5:

August, 03
[B] Workaround for bug in Qt/Windows: setInsideSpacing can't be safely
    called, so removed those calls.

[F] Addition of CPU stats to instruction viewer in GUI.

[B] Organism inputs are no longer per-cell, but per-organism; resolved
    related problem of request of now nonexistent inputs.

[B] Restored missing initializations of subclass of cPopulationInterface
    class in qt-viewer.

[B] Added documentation for some existing events.  Changed some
    formatting of events.html documentation so file looks better with
    Safari web browser.

[B] Added missing files to visual studio project.

[B] Restored compatibility with older versions of gcc.

[F] Added parasite tracking for 4-stack cpus, added events
    "print_dom_parasite" and "detail_parasite_pop", added default
    organsisms and settings for the 4-stack cpu.

[F] Added Bounded Grid/Torus (world topology) switch to population.
    Leaving torus as the default.

[B] Fixed some problems in mutation mapping in analyze mode.

July, 03
[B] Text viewer Zoom Screen Mini-Map fixed; Modified Map screen now in
    color; Thread Map screen now shows number of threads used by each
    organism.

[F] Completion of 4 Stack Hardware.  Inject command and parasite
    abilities now implemented.  Text Viewer environment view mode in
    progress.

[I] Added integer version WriteBlockElement to file output routines.

[B] Correction of minor logical error in reaction handling.

For version 2.0 beta 3:

June, 03
[F] Avida now runs and builds on Windows.  Many minor changes were made for this, 
    .pro files were added to be used with qmake, the way the configure script searches
    for the ncurses library was modified, pdcurses was incorporated instead of ncurses,
    trio was added to fix some string problems, and some very minor code changes were
    implemented to allow for some differences in the visual studio compiler. 

[F] new 4 stack hardware is implemented but not yet fully functional.  It's compatible
    with primitive and ncurses modes, however will cause qt-viewer to crash if used. 
    No functionality associated with the original hardware has been changed.

[B] set up constant time slicer to skip over empty cells, this had been throwing an assert
    error in debug mode.

[B] removed Visual Studio.net support files as they are out of date and no longer work properly.

May, 03
[F] introduced new 4 Stack CPU model.  Removed 3 registers in CPU and replaced with
    4 stacks. Added 4th NOP which allows use of all 4 stacks.  Also changed complement system 
    for nops.  Pairs are now as follows: A,C; B,D; C,A; D,B;

[B] newer C++ compilers want scoping on templates defined inside class definition, event
    if they are only used inside the class.

[B] fixed problem with incorrect copying of instruction libraries when one instruction set was
    initialized to another one.

[F] set up Avida to pring out a genesis file if none exists.

[I] working on setting up Avida to generate an instruction set file in none exists.  Attached 
    60 character or less descriptions to each of the default instructions, and attached a flag to all 
    instructions declaring they are default.

[I] added default event files in C++ that are generated from perl so Avida can be compiled in Windows
    without running perl script by hand as long as no new events are created or modified.

[B] updated .pro files so don't have to change any properties in Visual Studio to compile

[B] The hardware factory has always been creating CPU's of type cHardwareCPU even if everything else
    was assuming cHardware4Stack.  This all works properly now.

[I] added pdcurses.h and curses.lib to Avida so one doesn't have to actually check out the whole 
    pdcurses suite to run on Windows.

[I] added third party suite "Public Domain Curses" for Win32 compatability.

[F] added event print_genotype_map that prints a Matlab file of the genotype IDs to a default file
    "genotype_map.m"

[B] added empty directory aclocal to CVS so don't have to create it by hand every time build Avida
    from scratch

[I] update .pri files for Windows builds

[F] added Visual Studio.net support files for ncurses viewer, primitive mode, and qt-viewer.

[I] cHardware4Stack now hooked into Avida and working properly

[I] added new hardware type cHardware4Stack.  Not hooked into rest of Avida yet...

[I] re-engineered cFile class to work based off of arrays instead of linked lists.  Each line is 
    now stored as part of a structure which has other info associated with it, such as line numbers
    for better error reporting.  Not being used yet, but available...

[I] added HARDWARE_TYPE to genesis file and setup config to load it into Avida, it's not being used yet.

[I] modified test_cup.cc to improve the default inputs in the test CPUs so they are more similar
    to those in the environment, and ideally give more accurate answers.
    Serup the default instruction set to be hooked in with a proper instruction library so that
    they can be used outside of a population (i.e. in analyze mode)

[B] fixed bug in testCPU

[I] changed cInstLib to cInstSet and cInstSuperLib to cInstLib.  Renamed inst_lib.{cc,hh} to 
    inst_set.{cc,hh} and inst_superlib.hh to inst_lib.hh.  Updated other files accordingly to 
    reflect this change

[I] included instruction which injects a parasite into it's own thread.  Also changed count.dat
    so that info regarding parasites is appended to the end of the file.  Removed previous parasite
    info which is now obsolete.

For version 2.0 beta 1:
[B] edited Makefile.am to reflect the fact that built event source file depends are build-tree relative
    but cpu source file depends are source-tree relative

[I] removed unused sourcecode from beneath qt subdirectory

[I] introduced cInstSuperLib to contain a complete library of available instructions corresponding to
    a given hardware class.  cInstLib now indexes into arrays provided by cInstSuperLib

[B] mkdir() is not defined in win32 so added win32_mkdir_hack.hh to define it as a macro so can
    use in windows version

[B] modified namespaces, adding 'using namespace std' appropriately throughout Avida to allow
    compilation on Windows

[I] set up qt builds to be performed using qmake on seperately maintained .pro files

[B] fixed error in new tasks, now cast int to double before taking log

[I] added code to allow spatial resources

[I] allow long lines in an input file to be split across multiple physical lines by use of
    a \ character at the end of the line as a continuation marker

[F] added two routines to aid the printing of spatial resource data:
    writeblock - allows for the output of individual grid points
    writeraw - allows any line to be written anywhere in an output file

April, 03
[F] added event kill_rectangle which allows user to kill all organisms in a rectangle
    described by points (X1, Y1) and (X2, Y2).

[B] no longer crashes when population dies out.

[I] added version of Max function with type double.  added function Neighbor
    that works with population and spatial resource arrays to find the current neighboring
    cells (even at edge of matrix).

[B] fixed time slicer problem where drastic drop in maximum merit would slow down a run 
    considerably.  Added warning when analyze mode tries to load in a string sequence
    thats supposed to represent a genome, but maximum char goes beyond instruction set size.

[I] previous runs can no longer be replicated even when a random seed used is known
    due to extensive reorganization of portions of code that handle divides.

[F] initial implementation of sex.  Now exists divide-sex and divide-asex commands,
    former facilitating recombination between two offspring by swapping a region of 
    their code.

[B] fixed hardware getting incorrect info as to if it lived through birth process.

[B] removed mutation rate drifting options and old style crossovers.

[I] assembled framework for sexual divides.  Mostly involved pushing some of the 
    final offspring creation to the population and out of the organism.

For version 2.0 beta 0:
[I][O][F][B][M]
    Avida has been almost entirely rewritten, and this NEWS file is
    woefully out of date.  In an upcoming beta this NEWS file will be
    brought up to date.
    
For version 1.6.1:
[B] Fixed a problem with CHILD_SIZE_RANGE in the genesis file -- it used to
    only compare the child size to the *new* parent size; now it will properly
    compare it to the original parent size (and make sure that the new parent
    size also falls into the same legal range)

[O] Added an Average Fitness output in the primitive viewer.

[O] Added a column 10 to the stats.dat output file that indicates the
    depth of the most recent coalescent genotype.

[I] Removed "defs.hh" dependency from assert; stay out of debug move by
    default -- only enter it when DEBUG is defined.

[I] Rebuilt data_file.??, simplifying the internal structure and using a
    proper linked list.  Also removed dependency on defs.hh.

[I] Removed dependencies in string.?? ; fixed some bugs in Compare()
    that didn't turn up before, but seem real.  Often '\0' was being
    saught when a cString was being compared to a char *, when the cString
    data does not end in a \0 (a seperate size measure is kept)

[I] Removed global memory object.  It was used throughout the code, but
    most allocations did *not* make use of it.  We should use some kind
    of solid memory tracking method, but this one was less than optimal.

[I] In the viewer, shifted the maps from being normal arrays to using the
    tArray object; also kept them all local to maps (rather than being
    allocated in one place and freed in another like they were)

[I] Shifted environment connection lists such that they are now part of
    the environment from the beginning and only initialize (not created)
    by the population.  Plus some general cleanup and organization in them.

[I] Moved all cList objectes over to the cleaner, templated tList.  This
    allowed for some standardization in our current way of doing things,
    a cleaner interface (and simplification of some code).  In the future
    we may want to move all of this over to the STL list template, but for
    the moment this was much easier.

[I] Cut down on the number of includes from tools.hh; most of them are
    not required.

[I] Converted all of the "TRUE" and "FALSE" occurances to "true" and "false"
    throughout the entire code.  Changed int to bool in most appropriate
    cases.

[I] Moved code_array.?? entirely over to assert from debug.

[I] Anihilated old geneology stuff.

[I] Went through header files in source/main/ and removed all non-required
    includes.

[F] Removed the very old [5+ years] resources implementation.

[F] Removed everything to do with redcode.

[F] Removed Block time slicer.

[I] Abstracted out the time slicer so it just keeps a collection of ints,
    each with their own merit, and a "GetNextID()" method which returns the
    int that goes next...   Moved both slice and merit into the tools
    directory.

[I] Adjusted the header files in the viewer so that the viewer takes
    virtually no time to compile in primitive mode.

[I] Added BENCHMARK file to keep track of timings of avida as changes
    are made.  Added MAP file to track #include's.  Add tMemTrack for
    potential tracking.

[I] Removed files:
	source/cpu/cpu.ii source/cpu/hardware.ii source/cpu/head.ii
    	source/cpu/interface.cc source/cpu/interface.hh
    	source/main/classes.hh source/main/geneology.cc
    	source/main/geneology.hh source/tools/include.hh
    	source/tools/lookup.cc source/tools/lookup.hh
    	source/tools/memory.cc source/tools/memory.hh
    	source/tools/memory.ii source/tools/memtrack.cc
    	source/tools/memtrack.hh source/tools/struct.cc
    	source/tools/struct.hh

[I] Moved functionality from inst_lib.hh into its code file...

[I] Removed cFlags object entirely; got rid of tools.ii.

[I] Removed debug.ii, random.ii, and string.ii

[I] Created a string_util.?? component to hold higher level string methods.

[I] Created a seperate inst_args.?? component to contain instructions that
    can have arguments.  Ideally this needs to be further compartmentalized
    in the futures.

[I] Created cGenome and cCPUMemory to replace cCodeArray; a *much* cleaner
    interface.  They are in main/genome.?? and cpu/cpu_memory.??
    respectively.  [This was a very serious, code-wide change!]  cGenome
    is a fixed length, doesn't have flags associated with each
    instruction, and is used for most of the old occurances of cCodeArray.
    cCPUMemory is more similar to the original cCodeArray, but is derived
    from cGenome (henece functions that that cGenome can use either) and has
    many fewer methods that should add up to the same functionality.

[I] Added main/genome_util.?? for static genome manipulation and
    comparison functions (like Hamming and Edit distances).

[I] Stripped out a lot of the redundent methods from cHardware.  More of this
    should be done.

[I] Moved tracking of stepping through organisms in the viewer over to
    population.  Got rid of all of the AltInstructionSet nonsense that
    used to handle it.  There are now two tight loops in DoUpdate() ; one
    of them is run if you're stepping, the other if your not, so there
    should be no speed loss.

[I] Continued to stip down the interface to cHardware.  Ideally we'll be
    able to shift instruction execution in there soon (from cBaseCPU) and
    rebuild cBaseCPU into cOrganism or somesuch.

[I] Re-vamped cInstLib.  Made cInstEntry a private object, and generally
    cleaned up the insides.  Inst libs might take longer to load at
    startup now (insignificant since its done only once, and we're talking
    miliseconds), but the interface is *much* cleaner.

[I] Created seperate inst_util.?? component to handle interations between
    inst_lib and genomes (such as printing) and initializations of
    inst libraries.

[F] Got rid of arg-based instruction set and binary instruction set entirely.
    This had remarkably far-reaching effects.

[F] Removed curses.?? [Its old enough that we shouldn't need it anymore,
    and the interface was out of date.]

[I] Created a tDictionary template that takes in strings with arbitrary
    data, and can lookup the data via the string.  Uses a hast table keyed
    off of the string.

[F] Avida will now warn you if you attempt to load an instruction in the
    inst library that doesn't exits.  It used to just ignore it.

[I] Merged cCreature into cBaseCPU.  Removed creature.hh

[I] Moved cCPUStack into its own component

[I] Separated out hardware and cpu into logical elements.  This is a huge
    change, and I'm not going into detail here about it.

[I] Setup memory allocation method Necrophelia to work more correctly -- it
    now uses the older memory that was lingering in the hardware the organism
    is in.

[I] Shifted cpu/cpu.?? to main/organism.?? and cleaned up dependencies.

[I] In genesis, changed the name of the RESET_* configuration variables, to
    the more acurate STERILIZE_*

[B] Added #include <string.h> in string.hh and debug.hh -- it was crashing on
    calls to strlen() on some newer compilers.

[B] Fixed templates in tDictionary; reuse of "T" as templated class crashed on
    some newer compilers.

[B] Fixed make_events.pl -- it was creating statments in the form of
     (test_input == "") variable=default : variable=input_value;
    This is a problem since the variable should always be on the outside of
    such statements.  Unfortunatly, that gives other errors, so I changed it
    to a proper if-else.  New format is:
     if (test_input == "") variable=default; else variable=input_value;

[B] Fixed some const problems in events.

[F] Added genesis option "REQUIRED_TASK", which lets the user set the id
    of a mandatory task for a divide to be successful.

Claus 08/11/01:

[I] Removed the cAvidaMain events files. All events are now defined in 
    events/cPopulation.events. I removed two events completely, the one to
    change the viewer and the one to print the event list. I think both
    are pretty unnecessary (and are in the way of cleaning up the code more).

Charles 08/15/01:

[F] Removed LINEAR_MEMORY option...

[I] Systematically shifted some includes to be more restrictive (in .cc
    rather than .hh)

[I] Removed class cCPUInfo entirely; placed most components into cPhenotype,
    and the rest directly into cOrganism.

[I] Created hardware_util.?? to handle loading of hardware methods into
    instruction libraries.

[I] Created lineage_util.?? to remove lineage printing (and hence all
    knowledge of lineages) from stats.

[I] Created organism_util.?? to provide a location for functions that act
    on organisms but require the use of both genotype & genebank.

[I] Lots of changes throughout viewer to get it up and running again with
    all the modifications from the rest of the code...

[F] Added more descriptive faults in the zoom mode of the viewer; helpful in
    debugging organism operation.

[B] Changed minimum executed and copied size so that at the minimum values,
    the organisms are legal, but not below (changed a '<=' to just a '<').
    This means that with a minimum copied size of 1.0, everything must be
    copied (as opposed to more than everything, which was causing this to
    break before.

[I] Generally did a lot of prep work to get the organisms well seperated from
    the population...  That'll be the next big step.

------------

[I] Created a population_cell.?? component; populations have a collection
    of cells instead of organisms -- the cells contain the organisms that
    make up the population.

[I] Created a seperate mutations.?? component, with a cMutationRates class
    to keep track of mutation rates, and handle basic functions dealing with
    them.  Each population cell has its own mutaiton rates, which get passed
    to any organism placed into that cell.  All traces of mutations have
    been removed from environments.

[I] Most of the system has been fully levelized -- all of the files in the
    tools/  main/ and cpu/ directories are set; only the viewer and events
    are left to be done, and they should be rather straigh-forward.  Take
    a look at current/source/tools/MAP and current/source/LEVELS for more
    info.

[I] Organisms are now unique entities for their entire existance; they used to
    be referred to as CPUs in the code, and would have new genomes regularly
    loaded into them.  A population is now a collection of cells, each of
    which can be occupied with an organism or not.  When an organism gives
    birth, it passes a fully constructed offspring organism to the population
    to be placed.

[I] The population object itself has been entirely overhauled.  Its streamlined
    to now have a minimal number of methods, including the key methods
    ActivateOrganism(), which is always called to place an organism in
    a population, and  KillOrganism() which must be called to remove an
    organism.  This allows central points for statistics to be done, though
    they haven't been moved there yet.

[I] Hardware construction and destruction has been centralized in a hardware
    factory object; this will allow recycling of hardware objects for a
    speed increase, though this optimization still needs to be finished.

[I] A number of utility classes have been created to more complex manipulation
    of objects that don't belong inside of them.  This has made the
    relevent classes cleaner and easier to understand.

[F] Added configure mode --enable-normal to compile without either debug or
    optimization.  Much faster for testing!

[I] Major re-engineering of cPhenotype -- the internals should be much
    cleaner now.

[I] Created symbol_util.?? component in viewers to remove all of the symbol
    handling from population_cell.??

[B] Got TestCPUs working properly at last.

[B] Got death working again.

[O] Tracing now provides registers in both decimal and hex formats.  Also,
    merit is broken down into initial (either constant or proportional to
    length) and earned bonuses.

[I] Removed a bunch of viewer related methods from cAvidaMain that were either
    unused or redundant.

[I] Cleaned up even more header files (in particular test_cpus were being
    included in some components they didn't need to be in any more.)

[B] The GetTest[...] methods in genotype had had some problems when a
    genotype wasn't viable; these should be fixed now.

[O] Surpressed output of warning that data files are bring over-written.
    Ideally, we'll put this back in properly at some point, but at the
    moment, its messes with the viewer.

[O] Improved output methods, and in particular "species.dat" for speciation
    measurements.

[I] Moved task_buffer.?? to the more generic template tBuffer.hh and placed
    it in tools.

[F] Removed all portions of current resource system throughout code
    (in preperation of setting up a new one).

[O] Renamed event_list to events.cfg

[I] Changed all "special" assert commands to the default assert.

[I] Moved inst_lib and mutation rates into environment.

[B] Repaired generation counting... it was always incrementing the generation
    of parent no matter what the genesis file said, and *then* it would
    increment the generation of the parent.  Obviously this was a bug all
    around and its now fixed.  I did, however, set the defaults to splitting
    and increasing the generation of both parent and child.

----------------

