ChangeLog 36 KB
Newer Older
Oskar Skog's avatar
Oskar Skog committed
1 2 3 4 5 6 7 8 9 10 11
2016-07-16      Oskar Skog      <[email protected]>
    0.2.16
        * anonymine_engine.py (hiscores): Force UTF-8 on the file.
            - Functions may return unicode objects as strings on Python 2, but
              that's no problem as unicode and str can be combined as long as
              the str only contains bytes in the ASCII range.
            - add_entry, will decode the str object on Python 2 using
              locale.getprefferedencoding() as encoding
            - The maxsize key now refers to the number of bytes on both
              Pythons.

12
2016-07-15      Oskar Skog      <[email protected]>
13 14 15
    0.2.15
        * Makefile.static (print-destinations): \t doesn't work on FreeBSD;
            indented manually with normal whitespace instead.
16 17 18 19 20
    0.2.14
        * Makefile.static: Undo change in 0.2.9 causing configuration files
            to not be installed in clean environments:
            - install-dirs now installs CFG_DIR and $(DESTDIR)$(vargamesdir)
            Apparently, install
21 22 23 24 25
    0.2.13
        * configure.py: BUGFIX in many find_ functions:
            Don't use Makefile[var] for checking the existence of directories,
            use expand(var, Makefile) instead.  Detected on FreeBSD where
            $(prefix)/var both exists and doesn't.
26 27 28 29 30 31 32
    0.2.12
        * INSTALL:
            - Tidying.
            - Wrote a section on srcdir, builddir and DESTDIR.
        * Makefile.static (print-destinations):
            - Highscores file
            - Append (directory) on directory lines.
Oskar Skog's avatar
Oskar Skog committed
33 34
    0.2.11
        *: Tidied up lots of files.
Oskar Skog's avatar
Oskar Skog committed
35 36 37 38
        * BUGS:
            - Updated #6 to match current versions of Anonymine.
            - Tidied
            - Removed #0
39
        * configure.py:  Wrote missing doc-strings.
Oskar Skog's avatar
Oskar Skog committed
40
        * configure.py:  Moved default Makefile variables from getargs to main.
41 42 43 44 45 46 47 48
    0.2.10
        * anonymine_engine.py (init_field2):
            - Use SIGTERM to kill children if SIGCONT is unavailable.
            - Allow fork() to fail.
            - Use signal.alarm() in a more elegant way.
            - Add 64 bits of entropy to the tempfiles, just in case
              open(file, 'wx') fails to do its trick.

49
2016-07-14      Oskar Skog      <[email protected]>
Oskar Skog's avatar
Oskar Skog committed
50 51 52 53 54 55 56 57 58
    0.2.9
        * INSTALL: Updated
        * enginecfg.default: Added the hiscores key.
        * cygwin-sshd:
            - Added "Things that will be done:" to avoid confusion.
            - exit 0 instead of fatal if the user aborts.
        * Makefile.static:
            - Added DESTDIR to HISCORE_FILE
            - install-dirs now installs CFG_DIR and $(DESTDIR)$(vargamesdir)
Oskar Skog's avatar
Oskar Skog committed
59 60 61 62 63 64 65 66
    0.2.8
        * configure.py: New functions: find_sysconfdir and find_vargamesdir.
        * anonymine.py, configure.py, Makefile.static: Place configuration
            files in $(sysconfdir)/anonymine
        * Makefile.static: enginecfg calibration message updated.
        * mkenginecfg, Makefile.static: Install highscore file.
        * mkenginecfg: time and pprint modules are no longer needed.
        * mkenginecfg: Write out the configuration file manually.
Oskar Skog's avatar
Oskar Skog committed
67 68 69 70 71 72 73
    0.2.7
        * anonymine_engine.py anonymine.py: Python 3 fixes:
            - anonymine_engine.hiscores.display.format_deltatime formatted
              the ms part as gibberish. [Fixed]
            - anonymine.play_game, anonymine.highscores_add_entry did not
              flush. [Fixed]
        * anonymine_engine.py (hiscores (display)): "/\T" -> "/\T time"
74 75 76 77 78
    0.2.6
        * anonymine.py: New functions highscores_display and
            highscores_add_entry.  Highscores are now displayed
            almost properly.
        * anonymine_engine.py (hiscores_dummy (display)): Title no longer empty.
79 80 81 82
    0.2.5
        * anonymine_engine.py (hiscores.add_entry): Reload the hiscores file
            after retrieving the nickname to avoid overwriting potential
            changes.
83 84 85 86 87 88 89
    0.2.4
        * anonymine_engine.py (hiscores):  Get the nickname only if the player
            actually made it to the list.
        * anonymine_engine.py (hiscores (add_entry)):  The input callback MUST
            now take two arguments: title, prompt
        * anonymine.py: Input callback updated.

90
2016-07-13      Oskar Skog      <[email protected]>
91
    0.2.3
92 93
        * anonymine.py: Primitive highscores interface for debugging purposes.
        * anonymine_engine.py: New classes: hiscores, hiscores_dummy
94 95 96 97 98 99 100 101 102
        * anonymine_engine.py (game_engine (play_game)): Create a `hiscores`
            object.
            Second return argument is now a `hiscores` object, previously
            it was a float representing the time it took to win or lose.
        * anonymine_engine.py (game_engine (__init__)): Added self.dimensions
            and self.flagcount to allow `play_game` to create a proper
            paramstring for hiscores.__init__.


Oskar Skog's avatar
Oskar Skog committed
103
2016-07-07      Oskar Skog      <[email protected]>
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
    0.2.2
        * mkenginecfg: Bugfix:
            `nonexisting-cpulister | wc -l` returns 0 processors
            and succeeds.
            - Fixed the pipelines.
            - Added a sanity check.
        * configure.py: Fix verbosity setting for Makefile.
            Give Makefile verbose=false as default and verbose=true
            if the -v flag was used.
        * Makefile.static (overwrite-cfg):
            Use $(info) instead of echo.
        * Makefile.static (dist, tarballs, zip):
            Don't bother writing out the "Depends on tarballs and zip"
            message as that itself depends on those two targets.
            Messages are now printed by zip and tarballs.
Oskar Skog's avatar
Oskar Skog committed
119 120
    0.2.1
        * NEWS: Changes from 0.1.0 to 0.2.0
121
        * Makefile.static: FILES gone; LICENSE back
Oskar Skog's avatar
Oskar Skog committed
122

Oskar Skog's avatar
0.2.0  
Oskar Skog committed
123 124 125 126 127 128
2016-06-15      Oskar Skog      <[email protected]>
    0.2.0
        *: Well, it's fast enough.
        * README: Minor changes
        * test.py, testcfg: Something I did a long time ago.

129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
2016-03-20      Oskar Skog      <[email protected]>
    0.1.21
        *:
            - DoS prevention by field area and initialization time.
                (Raises new class security_alert).
            - Removed timeout from initialization slaves to improve
                initialization on larger (emphasis on comparative) fields.
        * anonymine_engine.py: New class: security_alert.
        * anonymine_engine.py (game_engine.init_field2):
            Added DoS prevention timeout.
        * anonymine_engine.py (game_engine.init_field2.child):
            - Removed the time limitation for each attempt.
            - Moved os._exit() from `child`, to the spawn loop.
        * enginecfg.*, mkenginecfg:
            - Removed key: 'init-field'.'maxtime' (and the code for it)
            - Added keys: 'init-field'.'sec-maxarea' and
                'init-field'.'sec-maxtime'

147
2016-02-29      Oskar Skog      <[email protected]>
148
    0.1.20
149 150 151 152
        * cygwin-sshd: Tested, fixed and improved.
        * Windows-admin.bat:
            - Invoke cygwin-sshd
            - Use '&&' in bash rather than ';'.
153 154 155
        * mkenginecfg:
            - Rewrote processor counting part.
            - Bugfix: Used speed instead of time for time.
Oskar Skog's avatar
Oskar Skog committed
156 157 158 159 160
        * Makefile.static:
            - `$(builddir)enginecfg.out` depends on `$(srcdir)mkenginecfg`.
            - `clean` cleans up `$(builddir)enginecfg.out` and
                `$(builddir)enginecfg.py`.
            - Removed commented old rule for `all`.
161

Oskar Skog's avatar
Oskar Skog committed
162 163 164 165 166 167 168 169 170 171 172 173 174 175
2016-02-26      Oskar Skog      <[email protected]>
    0.1.19
        *: Removed vm-README.md, update-anonymine, vmsetup and addplayer.
        * calibrate-anonymine: Repurposed and renamed to mkenginecfg.
        * Makefile.static:
            - Use mkenginecfg
            - Split up `all` and use Makefile properly.
            - Move quotes from variable definitions to rules.
            - mkenginecfg and check.sh should be in PKG_NOCONV.
            - Added $(info) as a shutupable wrapper for verbose messages.
                (Not the gmake function.)
        * check.sh: Fixed to choose the appropriate enginecfg.
        * INSTALL: updated

176 177 178 179 180 181
2016-02-21      Oskar Skog      <[email protected]>
    0.1.18
        * anonymine.py: Code clean up.
        * VM-README.md: Added four scripts for a dedicated Anonymine virtual
            machine. (Playing over SSH).

Oskar Skog's avatar
Oskar Skog committed
182
2016-02-17      Oskar Skog      <[email protected]>
Oskar Skog's avatar
Oskar Skog committed
183 184
    0.1.17
        * README: Various changes.
Oskar Skog's avatar
Oskar Skog committed
185
        * ., Makefile.static: Removed perkele/.
186
        * Makefile.static: Lots of renamed variables.
Oskar Skog's avatar
Oskar Skog committed
187 188 189 190 191
    0.1.16
        * Makefile.static (clean): Added $(DESKTOP_STAGE) and corrected
            $(OSX_INFO_PLIST) to $(INFO_PLIST).
        * desktop/FILES: No such file: anonymine.desktop (auto-generated)

192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
2016-02-14      Oskar Skog      <[email protected]>
    0.1.15
        * configure.py (check_variables):
            - Prohibit quotes in variables and $() in their names.
            - [Windows]: Check for quotes in $USERPROFILE.
        * configure.py (getargs): Less misleading error messages when
            arguments don't make sense.
        * configure.py (main): - Don't crash when there were errors in
            verbose mode.
        * Windows.txt:
            - The serious issue seemed to be a false alarm.
            - Using mkshortcut works.
        * FAQ: New entry.
        * Makefile.static (uninstall) [Windows]: Remove the shortcuts from
            the desktop.
        * Makefile.static (print-destinations):
            - Forgot to change $(ICON_DEST) printing code.
            - Much better layout.
        * Makefile.static (install): Symlinking can probably be done in
            $(NORMAL_INSTALL).
        * Makefile.static:
            - Introduced $(ICON_SIZES)
            - Forgot to append $(PERKELE) to $(PKG_NOCONV).
            - Removed old commented windoze related stuff.
            - Forgot to prepend $(srcdir) to $(MK_DESKTOP).
            - Put the $$size in $(ICON_SRC).
            - New target: clean
            - Comments and order of variable definitions and targets have been
                changed.
            - Removed $(INSTALL_MODULE) and $(INSTALL_MODULE_OTHERVER)
        * configure:
            - Use $PAGER and pager(1) if available.
            - Changed [email protected] to "[email protected]" to fix a bug when variables contain
              whitespace.
        * Windows-admin.bat, Windows-user.bat: No need to tell ./configure
            what to use as prefix.

2016-02-13      Oskar Skog      <[email protected]>
    0.1.14
        * Windows.txt: Important notes.
        * desktop/README, desktop/FILES: Written.
        * desktop/desktop.sh: Generate "anonymine.desktop". Added Comment=.
        * desktop/icon.icns.py: Head and tail magic
        * Makefile.static (all) [Windows], Windows-*.bat: Gave up trying to
            create those cursed .lnk files from hell.  Use mkshortcut(1)
            from Cygwin instead.
238
https://cygwin.com/git/gitweb.cgi?p=cygwin-cygutils.git;a=tree;f=src/mkshortcut
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756
        *: Added perkele subdirectory.

2016-02-12      Oskar Skog      <[email protected]>
    0.1.13
        * desktop/anonymine.lnk.py: The old .lnk didn't work.
            Added location information.  Perkele.

2016-02-11      Oskar Skog      <[email protected]>
    0.1.12
        * Makefile.static (all, install) [Windows]:$(ICON_DEST) had been
            changed to support multiple icons on freedesktop.org.
        * desktop/anonymine.lnk.py: Unicode support and hidden message.
        * Makefile.static (all) [Windows], desktop/anonymine.lnk.py: Take
            description string and command (unix side) as arguments.

2016-02-10      Oskar Skog      <[email protected]>
    0.1.11
        * Makefile.static (uninstall) [freedesktop.org]: Remove the icons
            of various sizes.
    0.1.10
        * desktop/anonymine.lnk.py, desktop/icon.icns.py: Python 3 support.
    0.1.9
        * desktop/*: New icons in multiple sizes: 16x16, 32x32, 64x64, 256x256
        * Makefile.static (install) [freedesktop.org]:  Install icons to
            $(prefix)/icons/hicolor/*/apps/anonymine.png of various sizes.
        * Makefile.static (all, install), desktop/icon.icns.py: Make icns icons
            for Mac OS X.

2016-02-09      Oskar Skog      <[email protected]>
    0.1.8
        * configure.py (get_module_dir) [Mac OS X]: Changes to the directory
            list.
        * configure.py (getargs, check_variables): Wrote doc-string.
        * README: Updated list of tested platforms.
    0.1.7
        * configure.py (get_module_dir) [Mac OS X]: Added more directories.
        * cursescfg, FAQ: Changing colors.
        * cursescfg, BUGS, anonymine.py (curses_game.output): Changed the
            characters for 'free' and 'background' to be less confusing
            when color is unavailable.
            - Found a new bug and added a workaround

2016-02-08      Oskar Skog      <[email protected]>
    0.1.6
        * configure.py (find_prefix): Ignore the sys.path test on macs.
        * configure.py (get_module_dir): Added module_dirs_outside with
            '/Library/Python/X.Y/site-packages' for macs.
    0.1.5
        * Makefile.static (dist): Forgot "desktop/Info.plist".
    0.1.4
        * desktop/Info.plist: Forgot to set the category.
        * Makefile.static (uninstall): Uninstall DE files.
    0.1.3
        * configure.py, INSTALL, Makefile.static:
            UNTESTED Mac OS X fake-bundle.
        * Makefile.static, *: Moved desktop related files into new
            directory 'desktop'.
        * Makefile.static (dist): Four files have been removed:
            "portability", "GOALS", "LICENSE" and "check.py".
            * INSTALL, README, BUGS: Removed the file portability.
                The contents were spread out into three different files.
            * README: README ate GOALS and LICENSE.
            * check.sh, Makefile.static: Send $(builddir) to check.sh
                and have check.sh write out the check.py script.
        * FILES: updated.

2016-02-05      Oskar Skog      <[email protected]>
    0.1.2
        * configure.py, Makefile.static: Install menu shortcuts.
            New variables:
                freedesktop=""      .desktop with .png icon
                windows=""          .lnk with .ico icon
        * anonymine.lnk.py: Takes arguments, more sources.
        * Makefile.static: New target: install-dirs

2016-02-03      Oskar Skog      <[email protected]>
    0.1.1
        * Makefile.static (dist): Bash doesn't understand CRLF line endings.
            -> Rename $(PKG_WINDOWS_FILES) to $(PKG_NOCONV_FILES) and append
            'configure'.
        * Windows-admin.bat: Add --wait option to the Cygwin installer to
            prevent race-condition.
        * Windows.txt: Clarified the installation instructions a bit.
        * anonymine_engine.py (game_engine.init_field2), BUGS:
            Found and fixed BUG#6.
        * configure.py: I forgot about these doc-strings, and now I got
            interrupted with the Windoze fix.
        *: New files: 'anonymine.lnk.py' and 'anonymine.lnk'.
        * FAQ: New question.

2016-02-02      Oskar Skog      <[email protected]>
    0.1.0
        *: New file: NEWS
        * test.py (runmoore): anonymine_fields.generic_field2 does not exist
            anymore.
        * Windows.txt: Mention the lack of testing.
        * Windows.txt: Mention extraction of the directory.
        * ChangeLog (0.0.43): Zip creation bug had been fixed.
        * anonymine.py (convert_param, play_game): Minimal value for
            dimensions is now 4, due to the possibility of making an
            unwinnable 3 by 3 field.
        ----------------------------------------------------------------------
        * anonymine.py: Unimportant fix to top level doc-string
        * anonymine.py: Mention gametypes in top level doc-string
        * anonymine_engine.py: Unimportant fix to top level doc-string
        * anonymine_fields.py: Moved FreeBSD license to top.
        ----------------------------------------------------------------------
        * anonymine.py (curses_game.curses_output_cfg): Doc-string fix
        * anonymine.py (arg_input): Doc-string fix
        * anonymine.py (ask): 'converter' -> 'paramtype'
        * anonymine.py (curses_game): The doc-string didn't work due to
            '''<doc-string>'''.format(...).
            + minor fixes.
        * anonymine.py (play_game): Doc-string fix
        ----------------------------------------------------------------------
        * anonymine_engine.py (game_engine): Doc-string fix
        * anonymine_engine.py (game_engine.__init__): Min-dim: 4
        * anonymine_engine.py (game_engine.init_field2): Doc-string fix
        * anonymine_engine.py (game_engine.init_field2): Doc-string fix
        ----------------------------------------------------------------------
        * anonymine_fields.py (generic_field): Doc-string fix
        ----------------------------------------------------------------------
        * anonymine_solver.py: Various doc-strings.

2016-02-01      Oskar Skog      <[email protected]>
    0.0.43
        *: New files: FAQ, FILES
        * Windows-user.bat: LF->CRLF
        * Makefile.static (dist): New targets: dist, release, tarballs, zip
            Creation of zips no longer buggy.
        * INSTALL: Updated the section on Makefile targets.
     
    0.0.42
        * anonymine_solver.py: Deprecated the statistics methods.
        * configure.py (find_prefix): Added two one-liners that should make
            it choose a prefix that will work.
        * Windows.bat -> (Windows-admin.bat, Windows-user.bat):  Made a
            separate bitch file for non-admin installation.
        * Windows.txt: Updated the documentation.

2016-01-31      Oskar Skog      <[email protected]>
    0.0.41
        * Windows.bat, Windows.txt: Wrote an installer for Windoze.
        * BUGS: P(BUG#2) < 1/717708
        * INSTALL: Refer to Windows.txt for windoze users.
        * Makefile.static: Make zip archives (buggy).

2016-01-30      Oskar Skog      <[email protected]>
    0.0.40
        * Makefile.static (check), check.sh, check.py:
            Added a 'check' target and made it a dependency of 'dist'.
            This should prevent embarrassing releases.
    0.0.39
        * anonymine_engine.py (game_engine.init_field2):
            0.0.38 didn't work on Python 2.
            The tempfile need to be opened in 'wx' mode on Python 2
            and 'x' mode on Python 3.

2016-01-29      Oskar Skog      <[email protected]>
    0.0.38
        * anonymine_engine.py, anonymine_fields.py, anonymine_solver.py:
            root shouldn't be playing games.
        * anonymine_engine.py (game_engine.init_field2):
            Open files with 'x', and assert that they are not symlinks.
            (To avoid mktemp(3)ish race-conditions.)

2016-01-24      Oskar Skog      <[email protected]>
    0.0.37
        * anonymine_fields.py (hexagonal_field): Made the doc-string
            a raw string.
        * anonymine_solver.py:
            - s/dame/same/.
            - Added `solver.cumulated_levels_failure`.
            - Completed the doc-strings.
            - Added the 'T' level for the time it took.
        * test.py: Added a doc-string and removed some crap.
        * cursescfg: Fixed some forgotten comments. (0.0.36)
    0.0.36
        * cursescfg: Changed the foreground of 'background' to BLUE
            to hide the remaining effects of BUG#3
        * ChangeLog (0.0.28): No such file: engine.py
        * anonymine_engine.py (game_engine): Removed init_field1.
        * enginecfg: Removed the 'wait' key and wrapped long lines.
        * anonymine.py (user_input), cursescfg: Key bindings:
            Merged 'doc-moore' and 'doc-neumann' into 'doc-square'.
        * anonymine.py: Fixed the fix for the fix for the interesting
            NetBSD bug.  The game will now always exit with the
            appropriate exit code.
        * anonymine_fields.py:
            - Why the hell would these classes need a '__hash__' method?
            - Eliminated empty doc-strings from `hexagonal_field`.
            - Wrote the empty doc-strings for `generic_field`.
            - Wrote a main doc-string for the module.
        * anonymine_engine.py:
            Moved the first doc-string above the 'import' statements to
            prevent displaying some boring FreeBSD license as doc-string.
    0.0.35
        * anonymine (curses_game) (__init__, input, travel):
            It is now possible to move diagonally in the von Neumann mode.
        * BUGS:
            P(BUG#2) < 1/470289, mentioned version numbers.
            BUG#5 from cursescfg
        * Makefile.static (dist): Added -f to gzip.
        * portability: Removed the "Terminals" section.

2016-01-18      Oskar Skog      <[email protected]>
    0.0.34
        * anonymine_fields.py, anonymine_engine.py: Python 3 bugfixes:
            Forgot to wrap map() in list() causing the game to crash
            when it places the mines and of some reason integer arithmetic
            became floating point in the fields module.
    
    0.0.33
        * BUGS: BUG#4 was rejected. P(BUG#2) < 1/250250
        * anonymine.py: The fix for for the interesting Python bug on
            NetBSD causes exceptions to be raised when ^Cing the game
            on Python 3.
            Change:
                - Python 3 on NetBSD will always exit 0.
                - Python 3 on other systems that hang on exit will hang.
                - Python 2 on other systems that hang on exit will exit
                    appropriately.
                - Will exit appropriately on systems that don't hang
                    on exit.
        * configure.py: Fixed the fix for the NetBSD related bug:
            Don't raise SystemExit(1) on error, use os._exit() instead.
        * anonymine_fields.py: Renewed the `generic_field` class as
            _deref caused some confusion if used more than once.
            Performance is about the same.
        * anonymine_fields.py: Completed the doc-strings.
        * INSTALL: Added some important notes about python symlinks.
        *: New file: GOALS.

2016-01-13      Oskar Skog      <[email protected]>
    0.0.32
        * Makefile.static: Commented out the $(PRE_INSTALL), $(NORMAL_INSTALL)
            and $(POST_INSTALL) lines as they caused trouble on NetBSD and
            OpenBSD.
        * cursescfg (curses-output/free): Create visual difference between
            free cells and background when color is disabled.
        * configure.py, anonymine: Use os._exit(0) at the end of all "running"
            code to work around an interesting Python bug on NetBSD.
        * BUGS: Removed #4 (0.0.30), added #4 (Not finding Python 3 on
            Open- and NetBSD.)
            Update status on BUG#2. P(bug) < 1/103697
        * configure.py:
            Added $(prefix) as a variable to print in verbose mode.
    0.0.31
        * Makefile.static, configure.py, install-cfg: Try to use
            /usr/ucb/install when available for compatibility with
            openindiana and probably other Solares.
        * anonymine.py: Allow `curses.curs_set(0)` to fail for compatibility
            with Minix 3.
        * configure.py: Change $(prefix) to something appropriate.
        * INSTALL, configure.py: Implement a -w option to use the old/wrong
            prefix.

2016-01-12      Oskar Skog      <[email protected]>
    0.0.30
        * portability:
            Added openindiana as problematic.
            Added PyPy as problematic.
            Added a list of untested, but important, platforms.
        * BUGS:
            Added a bug#4 which occurs on Minix 3.3.
    0.0.29
        * Makefile.static (overwrite-cfg): Bugfix: initcfg to enginecfg.
            `grep initcfg -- ./*` confirms that this bug is finally solved.
        *: Introduced crapfile 'LICENSE'.
        * BUGS: Made a small correction to BUG#3 and added defined "since"
            as >=77818 fields.
        * anonymine_solver.py: Removed the "-1 frequency of diffifculty"
            profiling code.
        * anonymine_fields.py (generic_field):
            Added a description of the coordinate system to the doc-string.
        * portability: Added OpenSUSE as properly behaving, removed Debian 8
            as problematic. Learned the alphabet.
    0.0.28
        * anonymine_engine.py (game_engine):
            * (init_field, init_field1, init_field2):
                `init_field` now takes care of the traditional/stupid mode.
                And the method of generating guessless minefields has been
                improved.
        * anonymine_engine.py (game_engine.place_mines):
            REMOVED as it is no longer needed.
        * enginecfg:
            Reconfigured to work better with init_field2.
        * INSTALL:
            Bugfix "-i initcfg" to "-e enginecfg".

2016-01-09      Oskar Skog      <[email protected]>
    0.0.27
        * BUGS, portability:
        * anonymine.py (curses_game.__init__):
        * anonymine.py (curses_game.input):
        * anonymine.py (curses_game.output):
            Fixed a platform specific bug. (#3).

2016-01-08      Oskar Skog      <[email protected]>
    0.0.26
        * anonymine_solver.py (solver.number_neighbours):
            Only add cells to the list that are not already in it.
            Makes the solver 4x as fast.
        * anonymine_solver.py, anonymine_fields.py:
            Closer inspection of the caching of neighbours gives a speed
            multiplier of 2.5.
            The solver is now approx 10x as fast as in version 0.0.23.
    0.0.25
        * anonymine_solver.py (solver.rule9bf): The bug found at 0.0.24
            might have been found.  It was checking if a free cell was a
            neighbour to EACH unsolved cell rather than to ANY unsolved
            cell.
            I will run a bugcatcher to verify that the bug that may or may
            not exist, is very improbable to occur.

2016-01-07      Oskar Skog      <[email protected]>
    0.0.24
        * anonymine_fields.py (generic_field):
            Cache the lists returned by `generic_field.get_neighbours`.
            Seems to be 2x as fast.
        * BUGS:
            While profiling, a bug was found: the solver made a mistake

2016-01-06      Oskar Skog      <[email protected]>
    0.0.23
        * configure.py (getargs): Now works on Python 2.5.5 (which is too
            old for this game).
        * configure.py, INSTALL: Allow three flags/short options:
            -f force
            -v verbose
    0.0.22
        * configure.py, configure, INSTALL: Installation is more customisable
            with directory variables now being supported by the configure.py
            script.  srcdir, builddir, DESTDIR, prefix, bindir, gamesdir,
            libdir, EXECUTABLES, MODULES, MODULES_OTHERVER
        * configure.py: Try to get this to work on Python 2.5.
        * Makefile.static: Have 'check-install-cfg' as a dependency of
            'install' in the hope of that this will prevent installing
            if the pre-existing configuration files are incompatible.
        * Makefile.static: Cosmetic changes at the top comments.
        * Makefile.static: Renamed 'to-where' to 'print-destinations'.
        * Makefile.static (dist): cd into $(builddir) and use relative paths
            when making the tar.

2016-01-06      Oskar Skog      <[email protected]>
    0.0.21
        * Makefile.static: Silence is golden. Use more variables.
            New target: uninstall
            New target: to-where
            Made the dist target work on FreeBSD.
2016-01-05      Oskar Skog      <[email protected]>
    0.0.20
        * anonymine_engine.py (game_engine.__init__): Code clean up.
        * anonymine_engine.py: Wrote some doc-strings.
        * anonymine.py: Removed `maindoc`.
        * anonymine_engine.py (game_engine): `interface.anykey_cont` is no
            longer required.  It is still used if it exists.
        * Makefile.static: Don't rename /etc/anonymine/initcfg to
            /etc/anonymine/enginecfg as this will cause confusion when
            combined with $(DESTDIR) and is not needed.
        * Makefile.static: $(PRE_INSTALL) and $(NORMAL_INSTALL) have been
            inserted.
    0.0.19
        * ChangeLog (0.0.17): Oops: It was modified, but I forgot to save.
        * : "initcfg" has been renamed to "enginecfg" to allow for more
            directives in the future.
        * anonymine.py: Global replace "initcfg" with "enginecfg".
        * anonymine.py (play_game), anonymine_engine.py (game_engine.__init__):
            Send the configuration file's path as a positional argument
            instead.
        * anonymine.py (arg_input): -i to -e.
        * anonymine.py (play_game): Corrected the doc-string's description
            of enginecfg. (Previously specific to field initialization.)
        * Makefile.static: Attempt to rename a pre-existing "initcfg" to
            "enginecfg"
        * anonymine.py (arg_input): Improved help text for the -e and -c
            options.

2016-01-04      Oskar Skog      <[email protected]>
    0.0.18
        * ChangeLog (0.0.17): Oops: It was modified, but I forgot to save.
    0.0.17
        * anonymine.py (curses_game.leave): Set the SIGWINCH handler to
            SIG_IGN, to fix a bug.  (Documented in the source.)
        * test.py: Added function `bug1` to demonstrate the bug that has been
            fixed.
        * Makefile.static: New files: "BUGS" and "portability".
        * anonymine.py:
            * The "time" module wasn't used.
            * "traceback" WILL exist; no need for try/except.
            * "signal" WILL exist; no need for try/except.
            * The warning about "argparse" not being available was hard to
              read as it was on the top of the screen.
    0.0.16
        * ChangeLog (0.0.15): str.format is new in Python 2.6, no lower version
            possible.
        * cursescfg: A_BLINK was annoying on the cursor for square fields.
        * anonymine.py (ask): Quit immediately on ^C, don't ask.
        * configure.py: Check dependencies.
        * INSTALL: Mention dependencies.
        * Makefile.static: Print out MODULES_OTHERVER on make install.
        * Makefile.static: Changed $(DEST) to $(DESTDIR) in many places.

2016-01-03      Oskar Skog      <[email protected]>
    0.0.15
        * anonymine.py, anonymine_engine.py, anonymine_fields.py, configure.py:
        * install-cfg, initcfg:
            Put an index in all '{}'s in all format strings to be compatible
            with Python 2.6.
        * anonymine.py: Allow the modules "argparse" and "traceback" to be
            missing.
        * anonymine.py (arg_input): Implemented dummy mode when argparse
            is unavailable.
    0.0.14
        * anonymine.py (curses_game.__init__): Minimal allowed resolution is
            now 10x8 for hexagonal fields.
        * anonymine.py: Gave the doc-strings a summary line. (PEP 0257)
        * install-cfg: BUGFIX: Forgot to import os.
    0.0.13
        * anonymine.py (curses_game): Extended the main doc-string.
        * anonymine.py, anonymine.py (maindoc): Added a doc-string for the
            whole module, currently empty.
        * anonymine.py (ask, convert_param): Wrote the doc-strings.
        * anonymine.py (convert_params): Renamed to convert_param as it takes
            one parameter.
        * anonymine.py (convert_param):
            * Allow '4', '6', '8' and 'hexagonal' as `s` when
                paramtype == "gametype".
            * Moved the 'yesno' block to the top as it is probably the most
                usable for re-use.
            * Improved the Easter egg for paramtype=='dimension'.
    0.0.12
        * anonymine.py (curses_game): Wrote the remaining doc-strings.
        * anonymine.py (curses_game.print_hex, curses_game.print_square):
            The area mentioned in the doc-strings accidentally included the
            bottom line (currently used for the flags left text).
        * anonymine.py (curses_game): Replaced `self.coordinate` with
            `self.cursor` to remove some confusion.
        * anonymine.py (curses_game.print_hex): Made the doc-string a
            raw string due to the backslashes.
        * ChangeLog (0.0.9): `convert_params` did already exist, the new thing
            was 'reverse-minecount'.
    0.0.11
        * anonymine.py (curses_game): Wrote some doc-strings.
        * anonymine.py: Fixed the "printing of traceback without fucking
            up terminal".
            Previous behaviour: complain about curses.endwin() before
            initialization.

2016-01-03      Oskar Skog      <[email protected]>
    0.0.10
        * anonymine.py (arg_input): Changed "epilog" to "description" in the
            call to `argparse.ArgumentParser` as it would be more appropriate.
        * anonymine.py (play_game, arg_input, main): Clearer handling of
            the configuration filepath parameters.
        * anonymine.py (main, play_game, user_input, arg_input):
            Created the doc-strings.
    0.0.9
        * anonymine.py (game_engine), anonymine_engine.py: Moved the
            game engine class into its own module.
        * anonymine.py (arg_input): Wrote epilog added default markers.
        * anonymine.py (curses_game): Not inherited from the game_engine class.
        * anonymine.py: Added global GAME_FILENAME to clean up some more code.
        * anonymine.py (user_input, convert_params): Added 'reverse-minecount'
            to the function `convert_params` to fix bug in `user_input`.
            The default number of mines is now the actual default (at the time
            20%) rather than the hard coded 16%.
2016-01-02      Oskar Skog      <[email protected]>
    0.0.8
        * configure.py, Makefile.static: The modules will now be installed
            for both versions of Python.
        * Makefile.static: Added quotation to prevent disaster if someone
            puts spaces in srcdir, builddir or DESTDIR.
    0.0.7
        * anonymine_solver.py, anonymine_fields.py, anonymine.py: Wrapped each
            call to `filter` in a list, due to incompatibilities with Python 3.
            run2, run6 and run9 in test.py now works in Py3.  Further resizing
            tests should be done.  Modules only available in the default
            version of Python.
    0.0.6
        * anonymine.py (user_input), cursescfg: Provide in-game documentation
            on the key bindings.
        * Makefile.static (install):
            Moved the configuration installation lines higher up to prevent
            installing something that can't use the available configuration.
    0.0.5
        * cursescfg: Various improvements including compacting, documenting,
            notifying about potential future incompatibility and rethinking
            hexagonal steering.
    0.0.4
        * anonymine.py (curses_game.message): Bugfix: messages will now
            be split into many lines if it doesn't fit in one.
            Previous behaviour: crash.
        * anonymine.py (curses_game.__init__): Limit screen sizes to a minimum
            of 7 columns and 4 rows.
        * anonymine.py (curses_game.output): Always decrease the available
            height, not only when the flags left message doesn't fit.
            Seems to fix a resizing bug that traces to curses_game.print_char.
    0.0.3
        * Makefile, Makefile.static, configure, configure.py:
            A simple configure script has been written.
            Manual modification of the Makefile no longer needed.
        * INSTALL: Updated to match the current installation procedure.
    0.0.2
        * Makefile, install-cfg: Created a small python script to prevent
            overwriting potentially modified configuration files.
            Added the rule "overwrite-cfg" to the Makefile.
        * Makefile: @ed out all lines; added echo(1)es to tell what is being
            done.
        * INSTALL: Mentioning the install-cfg script and the overwrite-cfg
            rule.
    0.0.1
        * Makefile: Avoiding the use of `install -t` as it doesn't work on
            at least FreeBSD.

2016-01-02      Oskar Skog      <[email protected]>
    0.0.0
        * Initial release.