18 December 1995

Twiddled the colour palette swapping logic some more in an
attempt to fix the bleaching that occurred when the screen
saver ran.  I now repaint the window on both WM_PALETTEISCHANGING
and WM_ACTIVATE of our window.  This seems to behave reasonably
when switching to other palette-using applications and back.

Added movie creation using the Video for Windows AVI file
output mechanism.  There's no need for movie playback inside
the program, since you can use Media Player or any other
MCI application to view an AVI file.

Got population history log files working, and made history
logging behave much more rationally if you change the
rule or do something else that resets the generation count
while running automatic logging every so many generations.
The new TOOLS directory contains a program that analyses
population history log files which works on both MS-DOS
and Unix machines.

Fixed a goof in RULE.CPP that caused totalistic algorithmic
rules to have a double dash in their canonical name.

Changed the interface to DLL user evaluators to pass in the
generation number for those who want to do some special
initialisation the first time they see a map.  This requires
an incompatible change in all DLL user evaluators (but doesn't
affect old-style .COM own code).

19 December 1995

Some of Rudy's own code routines were using scratch storage
based on CS.  Unfortunately, under protected-mode Windows,
the code segment is always read-only, so this resulted in a
GPF.  I modified the own code call routine, ownc() in CA8.ASM,
to load the 386 FS segment register with the data segment
alias to the code segment, which is now passed in when the
own code is run in RULE.H.  This allows existing own code
that uses CS-based data to work usually just by changing the
"cs:" overrides to "fs:" and (if required by the assembler,
as is the case with TASM), assembling in .386 mode with the
code segment specified as USE16.

I added a "Close Sound Track" item to the File menu so you
don't have to use the trick of canceling the Load Sound Track
dialogue to get rid of a loaded track.   

31 December 1995

Modified JCMAKER.C to attempt to generate a default rule file name
from the executable name passed in as argv[0].  This allows users
who use Windows-hosted development environments to build rules without
having to specify the rule name as a program argument or run the
executable from DOS.  This is virtually certain not to work with some
compilers, as there is absolutely no standard as to what MS-DOS
and Windows compilers pass as argv[0].

13 February 1997

Fixed the problem which broke 1D rules.  Microsoft's linker,
unless told not to with the "/NOPACKC" option, combines
separate code segments into one large segment and fudges the
entry addresses to compensate.  Unfortunately, CA8.ASM assumes
all its functions are called with the value in CS pointing
to the lookup table in the start of the function's declared
segment.  When called with CS, in fact, pointing to the start
of the first function in the file, the table was mis-addressed.
The only evaluators which worked was the 2D evaluator, which happens
to be first in the file and the own-code evaluator, which does
not use the table in CS trick.  I added the /NOPACKC option
to the linker and the 1D rules now work correctly.  I tested
all the sample 1D rules and they produced the same output as
the DOS program.  The problem did not occur in the DOS version
because it is linked with Borland TLINK, which doesn't fiddle
around with your segment declarations.
 