2012-09-19 4.3.1

Fixed some 64-bit errors.

Dropped use of non-standard VLAs in structs in favour of portable(?)
alignment computation.

Oops - trailing comma in enum is not compatible with C++.

Added operations to adjust puzzle data.


2007-08-24 4.3.0

Implemented fast-complete (fcomp) algorithm.  Added AFCOMP for this on
its own, and AFFCOMP for this backing the fast algo.


2006-06-23 4.2.0

The number of algorithm levels can be read from a solver object.


2006-06-22 4.1.2

Updated 'oddones' to be simpler, and reflect the Olsaks' algorithm.

'Oddones' and 'Olsak' have been split, so 'oddones' can pursue an
alternative.


2006-01-28

Added fast completion line solver 'oddones' which augments the fast
line solver to give the same results as the complete line solver, but
hopefully much faster.

Also allowed a line solver to indicate that it was able to find
information, but itself and higher-level line solvers may benefit from
a rerun.


2005-12-14 4.1.1

Renamed nonogram_size to nonogram_sizetype, since it otherwise
confuses C++.

Version exposition changed.


2005-11-26 4.1.0

Renamed POSIX-clashing types.


2003-12-03 4.0.1-2

Fixes applied to RISC OS and Unix archive generation.


2003-02-02 4.0.1

* Generates RISC OS application directory.


2002-05-26

* Error messages added (returned?) for puzzle format.


2001-06-03 4.0.0

* Signed/unsigned comparisons removed.

* Rectangles, points and display functions use size_t instead of int
for co-ordinates. Rectangles and ranges are semi-exclusive.


2000-10-15 3.1.4

* Stored negative error code returned from nonogram_parseline in unsigned
before testing.

* No, NOW  use of function pointers is ISO standard.

* Fixed line-solver selection: solver_t::levels was never decreased!


2000-09-10 3.1.3

* realloc misused in conf.c - failure not detected

* Don't interpret nonogram_solver::status if there's no puzzle!

* Passed va_list to fprintf instead of vfprintf - oops!


2000-05-19 3.1.2

* NOW use of function pointers is ISO standard.

* Made freepuzzle idempotent.

* Defined empty puzzle macro.

* Comparison function added for on-line gallery.

* Added functions to read puzzle data.

* Added puzzle-copy function.


1999-11-14 3.1.1

* Use of function pointers is now ISO standard.


1999-09-12 3.1.0

* Puzzle now holds arbitrary notes.


1999-06-05 3.0.0

* Tidied up interface. Some old names deprecated.

* Grid I/O removed.

* Puzzle input from stream or string.

* Puzzle stream I/O renamed: fprint, fscan.


1999-05-19 2.8.0

* Logging can be disabled at compile time.

* Line-solvers configurable at run time.

* Fixed error in nonogram_checkline: didn't assume a trailing dot.

* Fixed reading rule '0': it produced a rule of length 1, rule[0] = 0,
instead of length = 0.

* Fixed initialisation of complete line solver: assumes rule length is
at least 1.


1999-01-24 2.7.0

* Added title-processing.


1998-12-13 2.6.0

* Hybrid mode improved: fast algorithm on a completed line will skip
* check with complete algorithm.

* Logging detail specified by log level.


1998-12-10 2.5.0

* Judgement function added.

* More sensible guesses?: solid tried first.


1998-08-29 2.4.2

* Bug fix for Easy C.

* Superfluous code removed from fast algorithm.

* Fixed fast algorithm to cope with zero-length rules.


1998-08-14 2.4.1

* Just made sure the new algorithm had its own workspace to avoid
* memory leaks.


1998-08-13 2.4.0

* Possibly improved line solver - very fast, though not complete, but
* the guessing algorithm should cover for it. The choice of algorithm
* (fast, complete, hybrid) is controlled through a flag in the solver
* context. The hybrid algorithm is simply an automatic choice per
* line, fast first, then complete if fast has been tried on all lines.


1998-06-13 2.3.1

* Corrected bug which assumed that an already completed line was
* correct.


1998-05-31 2.3.0

* Additional functions nonogram_runlines and nonogram_runcycles to
* replace nonogram_runsolver_n.

* Use of nonogram_checkgrid removed; slightly improved algorithm does
* not need it.

* nonogram_LINE return value to indicate a line or similar step
* completed.


1998-02-24 2.2.0

* Added functions to load grid with unspecified size, and to generate
* a puzzle from a grid.


1998-01-17 2.1.0

* Line scoring is now dynamic: when a dot is added, a count of
* required dots for that line is decremented, and on reaching 0, the
* line's score is set to its length, giving high priority to the lines
* easiest to solve. Similarly, a count of required solids is kept for
* each line. This knocked about 13% off the time to solve
* humpback.non.

* Bug-fix: the algorithm to minimise the amount of grid pushed to the
* stack when guessing started searching for blank cells just beyond
* the last, where it could find one arbitrarily, and try to copy a
* subgrid beyond the whole grid. Subtracting 1 from 'last' in
* 'findminrect' cured this.


1997-10-26 2.0.4

* Possible future error with reversed rules in setupstep() (didn't use
* rulestep); fixed.


1997-10-25 2.0.3

* Oops! In runsolver_n(): *tries-- instead of --*tries or (*tries)--;
* fixed.


1997-10-19 2.0.2

* Improved line scoring function and line selection algorithm.

* Line solving can execute concurrently. If a line takes too long to
* solve, it is stopped, and will be resumed in the next cycle of
* nonogram_runsolver_n().

* Configuration of line cycles per solver cycle is now possible.


1997-10-05 2.0.1

* Oops! No way to access a puzzle's width and height without breaking
* its abstraction - fixed.


1997-09-10 2.0.0

* Interface changed: row and column marks are upcalled as ranges rather than
* for each one individually.

* When guessing, a smaller subset of the grid is chosen to be pushed and
* restored.

* Interface changed: puzzle input now calls user-defined function on error.


1.1.1

* Bug fix: macros to read focus flags didn't work.


1.1.0

* Distinction between "solution found" and "finished" in returning
* from nonogram_runsolver_n().

* Title in puzzle: interface defined.


1997-07-01 1.0.0

* A nonogram_solver context can now be executed concurrently. It can
* be made to solve n lines, and then return to allow the caller to do
* some other processing.

* Interface altered again, separating the user-configurable display
* component from the user-configurable solution-processing component.

* And again to allow strings to be passed as cell representations in
* text output of a grid.


1997-06-08

* Library can produce HTML without tables, relying on image components
* being the same size.

* HTML generation corrected (there was a missing closing ">" on the
* IMG tag) and improved (IMG tag uses BORDER=0 etc; <BR> at the end of
* each row for non-table browsers).


1997-04-22 0.7

* Elimination of incorrect solutions.


1997-03-21 0.6

* Row/column balance verification added.


1997-03-16 0.5

* Brute-force algorithm can now solve lines in reverse.


1997-03-12 0.4

* Routine to print license added.


1997-03-11

* File format extended to allow rows <n> and columns <n> instead of
* width and height.


1997-03-09 0.3

* Interface altered to separate user functions from user data - should
* make things simpler when you have multiple objects of a class
* derived from nonogram_solver.


1997-02-26 0.1

* First version with a number - wow!
