
/*  @(#)CHANGES 1.31 94/01/27
 *
 *  Copyright (C) 1990 - 1994 - Rich Burridge & Yves Gallot.
 *  All rights reserved.
 *
 *  Permission is granted to copy this source, for redistribution
 *  in source form only, provided the news headers in "substantially
 *  unaltered format" are retained, the introductory messages are not
 *  removed, and no monies are exchanged.
 *
 *  Permission is also granted to copy this source, without the
 *  news headers, for the purposes of making an executable copy by
 *  means of compilation, provided that such copy will not be used
 *  for the purposes of competition in any othello tournaments, without
 *  prior permission from the authors.
 *
 *  No responsibility is taken for any errors on inaccuracies inherent
 *  either to the comments or the code of this program, but if reported
 *  (see README file), then an attempt will be made to fix them.
 */

Reve v2.0 change history.
=========================

v2.0 - patchlevel 1. 27th January 1994.

* Further changes to try to restore reve functionality to the equivalent of
  the v1.3.1 X11 version.

* Incorporated fixes from Richard Lloyd <RKL@anduin.compsci.liverpool.ac.uk>

v2.0 - patchlevel 0. 20th January 1994.

* Restructed the reve distribution into several separate sub-directories.
  Updated the FILES file, and removed the MANIFEST file.

* Adjusted the Makefile.dist definitions so that for the default (Solaris
  v2.3), a minimum number has to be uncommented.

* The only version now is a Motif version. This was built using the TeleUse
  application builder. This has dramatically simplified the code.

* Made snapshot of code available to people on the reve mailing list.


Reve v1.4 change history.
=========================

v1.4 - patchlevel 0. 29th March 1993.

* Updated copyright messages, README information and various other files.
  Removed X11R3 definition from Makefile.dist. Changed -DSYSV to -DSVR4.

* Added a HASNETWORK definition to the Makefile.dist which if uncommented,
  enables the -opponent user@host networking code.

* Added a HASREVEPROC definition to the Makefile.dist which if uncommented,
  causes reve to start a separate process (reve_proc) to play the computer
  moves.

* Adjusted the graphics for the X11 version to be similar to the xv program.


Reve v1.3 change history.
=========================

v1.3 - patchlevel 1. 13th November 1991.

       * From Norbert Jung <jung@dia.informatik.uni-stuttgart.de>
         Need to include <ctype.h> in get.c for toupper() and tolower().

       * From Brett Carver <brett@hpnmd.sr.hp.com>
         Various small changes to get reve V1.3 to compile on HP machines.

       * From Brett Carver <brett@hpnmd.sr.hp.com>
         From Norbert Jung <jung@dia.informatik.uni-stuttgart.de>
         If I am forced to pass, the color is nevertheless changed and the
         computer plays with the wrong color.

       * From Valerie Haecky <vmh@Eng.Sun.COM>
         Display the time left for the user[s] and computer. There is an
         option on the property sheet that enables clock timers. New -clock
         command line option and reve.showClocks X resource.

v1.3 - patchlevel 0. 8th November 1991.

       * The XView version is now generated from a devGuide .G file. Some
         changes to the GUI.

       * The images and cursors have been converted to the portable XBM
         format. A routine has been added to the SunView version to read
         the images and cursors in this format.

       * All versions of reve can now play across the network. There is a
         "-opponent user@host" command line argument, and there is an
         in.reved daemon (almost identical to the BSD talk daemon), which
         establishs the connection. See the README file for details of how
         to install the in.reved daemon.

         Removed the "-black display" and "-white display" command line
         options, and the -c command line option. Manuals pages have been
         updated.

       * Removed all references to the color reve icon. All graphics
         versions (even the color ones) now use the monochrome reve icon.

       * The X11 driver no longer tries to handle two screens.

       * The SunView version now terminates correctly if quit via the
         pull-down frame menu.

       * Divided the TODO file into two sections; known problems and
         possible enhancements.


Reve v1.2 change history.
=========================

v1.2 - patchlevel 9. 22nd July 1991.

       * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
         You've updated the Makefile for the -DNOGETDTAB flag, but didn't
         do the same for the Imakefile. HP-UX 7.0 and 8.0 needs this flag
         set to compile OK.

       * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
         I couldn't resize the main reve board to fill the whole screen
         (1280 by 1024 colour). There appears to be a hard-coded limit to
         the size of the board.

       * Ran the Xlib version through Saber-C and fixed up the inconsistencies.

       * The Xlib version of reve now correctly reads the -display <display>
         command line option, to determine which display to initially open
         to get X resource preferences. This wasn't a problem when you were
         displaying reve on the same screen as the server was running on, but
         was a problem for X terminals.

       * Implemented the "two screens on two machines" version for the Xlib
         interface. If it's not your turn, then the hourglass cursor will be
         turned on, and if you attempt to do anything, you get the message,
         "It's not your turn". The "Computer plays:", "Difficulty:" and "Set
         search depth:" options are ignored when in two player mode; the other
         options on the property sheet should hopefully be just applicable to
         the local screen. Note the one known remaining problem, which is
         described near the beginning of the TODO file.

v1.2 - patchlevel 8. 1st July 1991.

       * From Michael Glad <glad@daimi.aau.dk>
         As a possible alternative solution to the getdtablesize() problem,
         perhaps there should be a 'GETDTABLESIZEMISSING' clause in the
         makefiles.

       * Reve has been ported to Sun's SVR4 development platform. The X11,
         XView and tty versions all work. A list of the Makefile definitions
         that need to be uncommented is included in the example section of
         the README file.

       * Compiled reve with an ANSI C compiler, fixing up any discrepancies.

       * Added in ANSI C function prototypes for each reve routine.

       * Added a paragraph to the README file, to describe the anonymous ftp
         sites now available for reve.

       * From Martin Boyer <gamin@ireq-robot.hydro.qc.ca>

         - The README file has been modified to give the patchlevel as part
           of the version number, and the date adjusted accordingly.

         - Yves Gallot no longer works at CERN. The README file and the manual
           pages have been adjusted to reflect that he is currently has no
           email address.

         - Fixed up the Makefile.dist to correctly shar up the fifteenth part
           of the reve distribution.

v1.2 - patchlevel 7. 25th March 1991.

       * From Andreas Zins <zins@forwiss.uni-erlangen.de>
         From Michael Glad <glad@daimi.aau.dk>
         From Brett Carver <brett@hpsrbkc.hp.com>
         From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk> 
         The routine raise() is already defined under HP_UX and Ultrix.
         All occurances of raise() in the reve program have been replaced
         with raise_reve().

       * The raise_reve() routine hadn't been written for the SunView version;
         it was just a stub. Minor nit really, as there is currently no way of
         calling it.

       * From Brett Carver <brett@hpsrbkc.hp.com>
         Addition Makefile sample configuration for the README file.

v1.2 - patchlevel 6. 20th March 1991.

       * From Norbert Jung < jung@dia.informatik.uni-stuttgart.de>
         The "moves?" and "suggest" symbols weren't being displayed or
         toggled correctly on monochrome screens.

       * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
         "make install" compiles reve_proc, which has a reference to the
         BSD-only index routine. I did a dirty fix in the Imakefile to get
         round this:

         DEFINES = $(CDEFS) -DX11 -Dindex=strchr

         I suspect that some #ifdef check for System V should be in there
         somewhere.

       * From Michael Glad <glad@daimi.aau.dk>
         HP-UX misses the 'index' function. I believe there ought to be a
         'NOINDEX' clause in the Imakefile as in the ordinary Makefile.dist.

       * From Robert Cohen <robert@anucsd.anu.oz.au>
         It would be nice to be able to close down (iconise) the reve window
         while it was thinking and do something else. Then know when it was
         done so you could make your move. So an option to choose between it
         doing nothing on move or suggestion completion, beeping on completion,
         or autoraising on completion would be nice. It should probably also
         do something to the icon although that isnt sufficient by itself as
         not every one uses the icons.

         [I've added three new X resources:

          reve.iconiseForOpponentMove:	false
          reve.bellAfterOpponentMove:	false
          reve.raiseAfterOpponentMove:	false

          combinations of these three should give everything that's desired.
          Manual pages and Reve.ad updated - Rich.]

       * From Michael Glad <glad@daimi.aau.dk>
         Reve_proc has a sad tendency to coredump. This makes 'reve' enter
         some infinite loop of read system calls making my kernel eat 90% of
         the CPU time. Some check might be missing somewhere.

         As far as I can figure out, the crash is provoked when the alarm
         signal in rev_ip.c goes off. This causes a longjmp around line #107.
         Unfortunately, the routine calling setjmp (play_reve) has not taken
         any provision to protect its local variables from being clobbered
         upon return from setjmp.  Code relying upon set/long jmp to preserve
         any local variable must be considered nonportable. Using adb I've
         traced the crashed to a index violation in line 276:

                  cpk[k] = cpk2[k] ;

       * From Brett K. Carver <brett@hpsrbkc.hp.com>
         Perhaps some recommended settings for various computers, or a bit
         more help in determining how to set the makefile stuff would help.

         [So far I only have settings for a Sun 4/65 and an HP Series 9000
          model 3[67]0 - Rich.]

       * From Michael Glad <glad@daimi.aau.dk>
         Changes to the Makefile.dist and Imakefile files to specify where
         the reve_proc program can be found. There is also a new command line
         option, -r <reve_pathname>, to allow this to be overridden at run
         time. The manual pages have been updated to reflect these changes.

v1.2 - patchlevel 5. 14th March 1991.
 
       * From Norbert Jung < jung@dia.informatik.uni-stuttgart.de>
         In procs.c is in do_suggest the parameter 'player' is declared in
         the routines arguments and internal to the routine.
 
       * From Norbert Jung < jung@dia.informatik.uni-stuttgart.de>
         Choose 'Computer plays black' in the property sheet.
         Computer plays d-3.  Put a white stone on c-3.
         Computer puts a black stone on c-4 AND THEN ON f-5 (!!!).

       * From Brett Carver <brett@hpsrbkc.hp.com>
         I'm playing a game, and it's saying the computer is forced to pass
         when I can clearly see moves.

v1.2 - patchlevel 4. 13th March 1991.

       * From Norbert Jung < jung@dia.informatik.uni-stuttgart.de>
         - a typo in items.c, which corrects board labling.
         - a #include needs to be added in trans/trans.c for <ctype.h>

       * In order to try to fix up the display of stones on a board that has
         been resized, the second XSetFunction() call in make_pieces() in
         x11.c has been changed to use GXset.

       * Changed the symbols displayed for legal moves and suggest. This is
         to produce a consistent interface for mono and color. Two new image
         files have been created:

         images/move8.icon
         images/suggest8.icon

         I'm not very happy with the images, but they can easily be improved
         without affecting the rest of the program.

         The Makefile.dist, images.h, MANIFEST and FILES files have been
         updated, plus the routines that display legal moves and suggestions.

       * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
         There is a slight inconsistency in the display of the legal moves and
         the suggested move:

         A click on "Moves ?"  results in   Addition of "+"'s to show legal
                               moves followed by...
         A click on "Suggest"  results in   Addition of a "X" on top of one
                               of the "+"'s to show suggested move
                               followed by...
         A click on "Moves ?"  results in   ALL "+"'s AND "X"'s removed from
                               the display.
                    
         I feel that:     
         1) The second click of the "Moves ?" button should leave the "X"
            intact and, failing that,
         2) The "Suggest" button should toggle the "X" on and off, since a
            second click on that just recomputes the same suggested move
            anyway.

       * From Soren Hein <shein@ferdowsi.berkeley.edu>
         "moves?" could show, within each circle, how many stones that move
         would conquer.

v1.2 - patchlevel 3. 19th February 1991.

       * Added missing X resource entries to the Reve.ad file, and the manual
         pages.

       * From Brett K. Carver <brett@hpsrbkc.hp.com>
         You allow the stone colors to be changed (I like red and blue), but
         the control panel refers to players 'white' and 'black'. It would be
         nice if they used the color names specified so the players would
         match the stones.

        [Rather then use the color name, which could be something like
         firebrick red, I've added in a couple more X resources:

         reve.whiteStoneName:
         reve.blackStoneName:

         to allow you to specify alternate strings than Black or White].

       * The help text was being drawn in the normal font, not the help font.

       * From Thomas K. Bischoff <bisc@zellweger.ch>
         When clicking on a illegal square, display the legal squares like the
         Moves? button does. So you don't have to move the mouse to the control
         panel. You could even discard the moves? button.
         Idea from the "Smart Game Board" of Anders Kierulf.

         [I have put this in as a new toggle option on the property sheet.
          There is also, yet another X resource:

          reve.showLegalMoves:

          which can be used to initialise this option].

       * From Thomas K. Bischoff <bisc@zellweger.ch>
         Various modification to the trans program and it's integration into
         the X11, SunView and XView versions:

         - had to make some patches to makefiles to make them work.

         - changed trans to act as filter which reads from standard input
           and writes to standard output as default. 

         - created a print button which calls trans to print the game.

         - added another X resource:

           reve.printCommand:

           which allows you to specify an alternate print command.

         - the manual pages have been updated.

v1.2 - patchlevel 2. 18th February 1991.

       * The make_pieces() routines in x11.c and xview.c have been modified
         to clear the black and white piece image areas in a slightly
         different way. Hopefully this fixes up the problems seen on HP-UX
         systems.

       * From Valerie Haecky (vmh@Eng.Sun.COM)
         Added in the ability to print a transcript of a reve game to a
         PostScript printer. This is currently a standalone utility in the
         trans directory, but will be directly interfaced to a reve button
         in the graphical versions of reve, in a future version.

       * From Robert Cohen <robert@anucsd.anu.edu.au>
         Small patch to shut up the optimiser on HP-UX systems, which
         complains about variables being un-initialised.

v1.2 - patchlevel 1. 11th February 1991.

       * From Brett K. Carver <brett@hpnmd.hp.com>
         Needed #include <signal.h> in x11.c

       * From Brett K. Carver <brett@hpnmd.hp.com>
         The XSetWMProtocols call is not available with X11 R3. These have
         now been surronded with #ifndef X11R3 definitions.

       * From Mike Wexler <mikew@neptune.fx.com>
         The distributed Imakefile didn't work.

       * From Thomas K. Bischoff <bisc@zellweger.ch>
         The version number in the README file is wrong.

       * From Thomas K. Bischoff <bisc@zellweger.ch>
         The Load button with the XView version saves a game. This has now
         been changed to use XV_KEY_DATA.

       * From Martin Boyer <gamin@ireq-robot.hydro.qc.ca>
         From Thomas K. Bischoff <bisc@zellweger.ch
         After a game has been loaded, there needs to be a check to see if
         the next person can move. If they  can't, and the opponent is the
         computer, then the computer must make a "move".

       * From Martin Boyer <gamin@ireq-robot.hydro.qc.ca>
         From Thomas K. Bischoff <bisc@zellweger.ch>
         From Valerie Haecky <vmh@Eng.Sun.COM>
         The program can hang if one player is forced to pass, and the
         opponent is the computer.

       * From Thomas K. Bischoff <bisc@zellweger.ch>
         From Valerie Haecky <vmh@Eng.Sun.COM>
         With the XView version, the game board icon wasn't being set
         correctly.

       * Under Open Windows, the InputHint needed to be given to the olwm
         window for the control panel, to allow the keyboard to be used to
         enter a load/save file name.

       * With the XView version, if the computer is making a move (or a
         suggestion), and there is an event other than a repaint event, then
         the bell is no longer sounded, it just displays the message "It's
         not your turn". This needs to be improved. There will be certain
         actions you can do while the computer is making a move.

       * Added sections into the event handling routines for the tty, x11
         and sunview drivers, to better handle events when the computer is
         making a move.

       * Setting the difficulty with the tty version caused a core dump
         because some of the pseudo items dimensions had not been setup.

       * Doing a ^L to redraw the screen with the tty version didn't work.

       * The -debug and -log options weren't working. These flags are now
         passed across to the reve_proc program. Debug messages are now
         written out to a file called reve.debug.

       * Selection "computer plays neither" with the X11 version caused the
         program to core dump.

       * Setting a certain cursor, will not set it for all visible windows.

       * Redo was incorrect for situations where one player had to pass.

       * From Thomas K. Bischoff <bisc@zellweger.ch>   
         With the X11 version, only the board window could be iconified. The
         control pane stayed open.

       * From Michael Glad <glad@daimi.aau.dk>
         Removed the '#ifndef X11' code around the NOINDEX definition in
         reve.h.

       * From Michael Glad <glad@daimi.aau.dk>
         Problems with getdtablesize() under HP-UX.
         I've using the stdio-defined constant _NFILE instead of the call
         in makemove.c.

       * From Michael Glad <glad@daimi.aau.dk>
         Reve should check the return value of XOpenDisplay() in x11.c. It
         core dumps if access to the server is denied.

v1.2 - patchlevel 0. 5th February 1991.

       * From Martin Boyer <gamin%ireq-robot.UUCP@Larry.McRCIM.McGill.EDU>
         I found a few bugs with the SunView version of reve, at patchlevel 7.
         They all have to do with the color handling.

         1. The color array used to set the colormap segment should not be an
            array of integers, but rather an array of unsigned characters
            (main.c and sunview.c).

         2. Sunview doesn't allow the first and last entries of the colormap to
            be equal (i.e. foreground and background colors must be different)
            (color.h).

         3. The colormap segment should be a power of two (by extending it from
            10 to 16, this also solves 2. above) (color.h).
 
         4. The props and help frames should have the same colormap as the main
            frame, in order to display text correctly (sunview.c).
 
         5. The help frame should be created before the colors are loaded, in
            order to apply 4. above (main.c).

       * From robert@anucsd.anu.edu.au (Robert Cohen)
         While analysing the tree search code for reve (in rev_ip.c) and
         reading the literature on the subject, preparatory to parallelising
         it I had some ideas for improving the serial search. I havent changed
         the board evaluation function or anything like that, just improved the
         tree pruning so it visits less useless positions. One of the
         techniques came from the article "parallel search of strongly ordered
         game trees" in December 82 ACM computing surveys. This gives a good
         overview of game tree search techniques both serial and parallel.

         Anyway I have prepared a number of patches incorporparating these that
         speed up the search reasonably considerably. Something like 20% less
         nodes visited to reach a given depth. Practically speaking at a given
         difficulty level it searches usually 1 and sometimes 2 ply deeper.

       * Set the stdout debug printing in the new rev_ip.c, to be displayed
         only if you use the -D command line option. This needs to be improved.

       * Further work on the X11 graphics version:
         - Separated the control panel from the game board.
         - The game board is now totally resizable. There is a minimum size
           of 200x200.
         - Condensed Creve.icon to half the size, and adjusted the routine
           that turns this into the color reve icon, so that it can read the
           condensed format.

       * Adjusted the SunView driver so that the control panel is separate
         from the game board.

       * Adjusted the XView version. The control panel is now separate from
         the games board, and the games board is resizable.

       * Adjusted the tty version to work with the new code.

       * All four versions now run the reve computer strategy as a separate
         process that gets initially forked off. This now requires the
         select system call.

       * Removed the undocumented -D (debug) command line option, and replaced
         it with:
         -debug  -  for printing debug messages to stdout.
         -xdebug -  for debugging the X11 graphics driver (synchronous mode).

       * Created a new file called Reve.ad which gives all the X resource
         application defaults for reve.

       * Added new X resources:
         - reve.boardSize: which takes an integer value for the initial size
                           of the reve game board.
         - reve.boardFont: which takes the name of a font to use to display
                           the numbers and letters on the game board.

       * From Robert Cohen <robert@anucsd.anu.edu.au>
         The save game button does not work properly in the X11 version. Both
         the load and save buttons seem to end up calling the routine
         load_game.

       * From Robert Cohen <robert@anucsd.anu.edu.au>
         One problem I noticed for example in the present version is that
         there was no one terribly clear exit point.

         [The routine destroy_frame() should always be called during exiting.
          This routine is in the individual graphics files - Rich.]

       * From Norbert Jung <jung@dia.informatik.uni-stuttgart.de>
         If I use xreve (compiled on a SUN4) together with a DECstation 2100 as
         X11-display, the bytes of the images get flipped vertically so that a
         white piece looks like this:

         ...........oooo..........
         .......ooo......ooo......
         ...o......o....o......o..
         ....o................o...
         .....o..............o....
         .....o..............o....
         .....o..............o....
         .....o..............o....
         ....o................o...
         ...o......o....o......o..
         .......ooo......ooo......
         ...........oooo..........
