[comp.sources.games.bugs] Official patch #3 to reve v1.1 - part 4 of 9.

richb@sunaus.oz (Rich Burridge) (12/10/90)

------CUT HERE---- patch3 - part4 ------CUT HERE------

------- patchlevel.h -------
*** /tmp/da07463	Sun Dec  9 15:07:15 1990
--- patchlevel.h	Thu Nov 29 06:17:17 1990
***************
*** 22,25 ****
   *  (see README file), then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  2
--- 22,25 ----
   *  (see README file), then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  3

------- README -------
*** /tmp/da07466	Sun Dec  9 15:07:15 1990
--- README	Thu Dec  6 10:23:57 1990
***************
*** 43,48 ****
--- 43,57 ----
  levels 4-6 would satisfy amateurs, and the higher levels will give experts a
  good game. Level 8 (30 minutes) is the tournament level.
  
+ The address where people can get information about tournaments, Othello
+ Quarterly, and "Othello Brief and Basic' is:
+  
+         Othello Quarterly
+         c/o C.Hewlett
+         920 Northgate Ave.
+         Waynesboro, VA 22980
+         USA
+ 
  2. Getting started.
  -------------------
  
***************
*** 78,83 ****
--- 87,93 ----
  SELTYPE      - uncomment for old select(2) calls.
  SIGRET       - uncomment if your signal function expects an integer function.
  SYSV         - uncomment if you are running Unix System V.
+ X11R3        - uncomment if you are building the X11 version under X11R3.
  X11INCDIR    - X11 only: location of the X11 #include files.
  X11LIBDIR    - X11 only: location of the X11 libraries.
  XVIEWINCDIR  - XView only: location of the XView #include files.
***************
*** 215,223 ****
  Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
  Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
  Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
! John Eras, Heather Rose, Jonathan I. Kamens, Krishnamurthy Ganesan and
! Gordon C. Galligher for bug reports and/or bug fixes plus suggested
! enhancements.
  
  Suggestions for furthur improvement would be most welcome, plus bugs,
  comments and flames.
--- 225,234 ----
  Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
  Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
  Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
! John Eras, Heather Rose, Jonathan I. Kamens, Krishnamurthy Ganesan, Gordon C.
! Galligher, Soren Hein, Rod Whitby Daniel Edward Lovinger, Richard K. Lloyd,
! Jacob E. Goodman and John Eldredge for bug reports and/or bug fixes plus
! suggested enhancements.
  
  Suggestions for furthur improvement would be most welcome, plus bugs,
  comments and flames.

------- Makefile.dist -------
*** /tmp/da07469	Sun Dec  9 15:07:16 1990
--- Makefile.dist	Thu Dec  6 10:21:47 1990
***************
*** 75,80 ****
--- 75,85 ----
  #
  #SYSV  = -DSYSV
  #-----------------------------------------------------------------------
+ #  If you are compiling the X11 version under MIT X11R3, you will need to
+ #  uncomment the following definition:
+ #
+ #X11R3 = -DX11R3
+ #-----------------------------------------------------------------------
  #  If you are compiling the X11 version and the X11 include and
  #  library files are not in a standard place, then the following
  #  two lines should be uncommented, and set appropriately.
***************
*** 102,108 ****
  #
  CDEFS		= $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(NO_TIMEVAL) \
  		  $(EDGENAME) $(SELTYPE) $(SIGRET) $(SYSV) \
! 		  $(X11INCDIR) $(XVIEWINCDIR)
  CFLAGS          = -O $(CDEFS)
  #
  #==========================================================================
--- 107,113 ----
  #
  CDEFS		= $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(NO_TIMEVAL) \
  		  $(EDGENAME) $(SELTYPE) $(SIGRET) $(SYSV) \
! 		  $(X11R3) $(X11INCDIR) $(XVIEWINCDIR)
  CFLAGS          = -O $(CDEFS)
  #
  #==========================================================================
***************
*** 114,125 ****
  
  CC              = cc
  
! STDSRCS         = boardstuff.c events.c makemove.c main.c \
! 		  procs.c rev_eval.c rev_ip.c rev_iycp.c
! STDOBJS         = boardstuff.o events.o makemove.o main.o \
! 		  procs.o rev_eval.o rev_ip.o rev_iycp.o
  
  GSRCS           = sunview.c tty.c x11.c xview.c
  HDRS            = color.h extern.h images.h reve.h patchlevel.h
  IDIR		= images
  IMAGES          = $(IDIR)/black.icon \
--- 119,131 ----
  
  CC              = cc
  
! REVESRCS        = rev_eval.c rev_ip.c rev_iycp.c
! STDSRCS         = boardstuff.c events.c makemove.c main.c procs.c
! REVEOBJS        = rev_eval.o rev_ip.o rev_iycp.o
! STDOBJS         = boardstuff.o events.o makemove.o main.o procs.o
  
  GSRCS           = sunview.c tty.c x11.c xview.c
+ OSRCS           = common.c items.c reve_proc.c 
  HDRS            = color.h extern.h images.h reve.h patchlevel.h
  IDIR		= images
  IMAGES          = $(IDIR)/black.icon \
***************
*** 133,138 ****
--- 139,146 ----
  		  $(IDIR)/Lcycle.icon \
  		  $(IDIR)/Rcycle.icon \
  		  $(IDIR)/Scycle.icon \
+ 		  $(IDIR)/Sch_off.icon \
+ 		  $(IDIR)/Sch_on.icon \
  		  $(IDIR)/hglass.cursor \
  		  $(IDIR)/nocur.cursor
  
***************
*** 139,145 ****
  OTHERS          = CHANGES README TODO reve.man MANIFEST FILES \
  		  reve.man.text Makefile.dist
  
! SFILES1         = events.c items.c makemove.c main.c procs.c
  SFILES2		= boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  SFILES3         = $(OTHERS)
  SFILES4         = tty.c x11.c xview.c
--- 147,153 ----
  OTHERS          = CHANGES README TODO reve.man MANIFEST FILES \
  		  reve.man.text Makefile.dist
  
! SFILES1         = $(OSRCS) events.c makemove.c main.c procs.c
  SFILES2		= boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  SFILES3         = $(OTHERS)
  SFILES4         = tty.c x11.c xview.c
***************
*** 169,194 ****
  
  all:            $(BINARIES)
  
! sunview:        $(STDOBJS) items.o sunview.o
! 		$(CC) -o sv_reve $(CFLAGS) $(STDOBJS) \
! 				items.o sunview.o $(SVIEWLIBS)
  		-cp sv_reve reve
  
! tty:            $(STDOBJS) items.o tty.o
! 		$(CC) -o tty_reve $(CFLAGS) $(STDOBJS) \
! 				items.o tty.o $(TTYLIBS)
  		-cp tty_reve reve
  
! x11:            $(STDOBJS) items.o x11.o
! 		$(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) \
! 				items.o x11.o \
! 			       $(X11LIBS)
  		-cp xreve reve
  
! xview:          $(STDOBJS) xview.o
  		$(CC) -o xv_reve $(XVIEWLIBDIR) $(CFLAGS) $(STDOBJS) \
  				xview.o $(XVIEWLIBS)
  		-cp xv_reve reve
  
  install:
  		-cp reve $(BINDIR)
--- 177,202 ----
  
  all:            $(BINARIES)
  
! sunview:        $(STDOBJS) $(REVEOBJS) common.o items.o sunview.o
! 		$(CC) -o sv_reve $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
! 				common.o items.o sunview.o $(SVIEWLIBS)
  		-cp sv_reve reve
  
! tty:            $(STDOBJS) $(REVEOBJS) common.o items.o tty.o
! 		$(CC) -o tty_reve $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
! 				common.o items.o tty.o $(TTYLIBS)
  		-cp tty_reve reve
  
! x11:            $(STDOBJS) $(REVEOBJS) common.o items.o x11.o
! 		$(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
! 				common.o items.o x11.o $(X11LIBS)
  		-cp xreve reve
  
! xview:          $(STDOBJS) $(REVEOBJS) common.o reve_proc.o xview.o
  		$(CC) -o xv_reve $(XVIEWLIBDIR) $(CFLAGS) $(STDOBJS) \
  				xview.o $(XVIEWLIBS)
  		-cp xv_reve reve
+ 		$(CC) -o reve_proc $(CFLAGS) common.o reve_proc.o $(REVEOBJS)
  
  install:
  		-cp reve $(BINDIR)
***************
*** 200,215 ****
  		-cp reve.man $(MANDIR)/reve.$(MANSECT)
  		-chmod 644 $(MANDIR)/reve.$(MANSECT)
  
! clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
  
  lint:		lint-sunview lint-tty lint-xview lint-x11
! lint-sunview:;	lint $(CDEFS) $(STDSRCS) items.c sunview.c $(SVIEWLIBS)
! lint-tty:;	lint $(CDEFS) $(STDSRCS) items.c tty.c $(TTYLIBS)
! lint-xview:;	lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS) 
! lint-x11:;	lint $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS) 
  
  saber:		$(STDSRCS) x11.c
! 		#load $(LDFLAGS) $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS)
  
  shar:;          shar.script $(SFILES1) > Part1
  		shar.script $(SFILES2) > Part2
--- 208,228 ----
  		-cp reve.man $(MANDIR)/reve.$(MANSECT)
  		-chmod 644 $(MANDIR)/reve.$(MANSECT)
  
! clean:;         rm -f *.o *.Z *.uu Part* *~ reve reve_proc $(BINARIES) core
  
  lint:		lint-sunview lint-tty lint-xview lint-x11
! lint-sunview:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
! 			common.c items.c sunview.c $(SVIEWLIBS)
! lint-tty:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
! 			common.c items.c tty.c $(TTYLIBS)
! lint-xview:;	lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS)
! 		lint $(CDEFS) reve_proc.c common.c $(REVESRCS)
! lint-x11:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
! 			common.c items.c x11.c $(X11LIBS) 
  
  saber:		$(STDSRCS) x11.c
! 		#load $(LDFLAGS) $(CDEFS) $(STDSRCS) $(REVESRCS) \
! 			common.c items.c x11.c $(X11LIBS)
  
  shar:;          shar.script $(SFILES1) > Part1
  		shar.script $(SFILES2) > Part2
***************
*** 220,227 ****
  		shar.script $(SFILES7) > Part7
  
  create:         SCCS
! 		-sccs create $(STDSRCS) items.c $(GSRCS) $(HDRS) \
! 			     $(IMAGES) $(OTHERS)
  
  SCCS:
  		mkdir SCCS
--- 233,240 ----
  		shar.script $(SFILES7) > Part7
  
  create:         SCCS
! 		-sccs create $(STDSRCS) $(REVESRCS) items.c reve_proc.c \
! 			     $(GSRCS) $(HDRS) $(IMAGES) $(OTHERS)
  
  SCCS:
  		mkdir SCCS
***************
*** 228,233 ****
--- 241,247 ----
  		chmod 755 SCCS
  
  boardstuff.o:   boardstuff.c color.h reve.h extern.h
+ common.o:       common.c reve.h
  events.o:       events.c reve.h color.h extern.h
  items.o:        items.c color.h reve.h extern.h
  makemove.o:     makemove.c reve.h extern.h
***************
*** 236,241 ****
--- 250,256 ----
  rev_eval.o:     rev_eval.c reve.h
  rev_ip.o:       rev_ip.c reve.h
  rev_iycp.o:     rev_iycp.c reve.h
+ reve_proc.o:	reve_proc.c reve.h
  sunview.o:      sunview.c reve.h color.h extern.h images.h $(IMAGES)
  tty.o:          tty.c reve.h color.h extern.h
  x11.o:          x11.c reve.h color.h extern.h images.h $(IMAGES)

------- Imakefile -------
*** /tmp/da07472	Sun Dec  9 15:07:17 1990
--- Imakefile	Thu Nov 29 16:54:47 1990
***************
*** 63,75 ****
  		  $(SIGRET)
  DEFINES         = $(CDEFS) -DX11
  ETABLE		= reve.edgetable
- LIBDIR		= $(USRLIBDIR)/reve
       
  /*
   *  Full pathname of the reve edge table file. This can also be overridden
   *  with a command line option.
   */
! EDGENAMEFILE    = $(LIBDIR)/$(ETABLE)
  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
  
       
--- 63,74 ----
  		  $(SIGRET)
  DEFINES         = $(CDEFS) -DX11
  ETABLE		= reve.edgetable
       
  /*
   *  Full pathname of the reve edge table file. This can also be overridden
   *  with a command line option.
   */
! EDGENAMEFILE    = $(USRLIBDIR)$(PATHSEP)reve$(PATHSEP)$(ETABLE)
  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
  
       
***************
*** 79,86 ****
  		  procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
  
  ComplexProgramTarget(reve)
! MakeDirectories(install,$(LIBDIR)$(PATHSEP)reve)
! InstallNonExec($(ETABLE),$(LIBDIR)$(PATHSEP)reve)
  
  install:: install.man
  
--- 78,85 ----
  		  procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
  
  ComplexProgramTarget(reve)
! MakeDirectories(install,$(USRLIBDIR)$(PATHSEP)reve)
! InstallNonExec($(ETABLE),$(USRLIBDIR)$(PATHSEP)reve)
  
  install:: install.man
  

------- FILES -------
*** /tmp/da07475	Sun Dec  9 15:07:17 1990
--- FILES	Tue Dec  4 21:30:23 1990
***************
*** 7,17 ****
--- 7,19 ----
  --------------------------------
  
  boardstuff.c                - various board manipulation routines.
+ common.c                    - common routines between reve and reve_proc.
  events.c                    - event handling procedures.
  items.c                     - procedures for manipulating reve panel items.
  makemove.c                  - interface to the computer strategy routines.
  main.c                      - includes variable declarations and main().
  procs.c                     - procedures associated with the panel items.
+ reve_proc.c                 - separate reve process for the XView version.
  
  rev_eval.c                  - reve evaluation function.
  rev_ip.c                    - return a move and a note for a given color.
***************
*** 53,57 ****
--- 55,61 ----
  images/Lcycle.icon          - cycle panel item with left side inverted.
  images/Rcycle.icon          - cycle panel item with right side inverted.
  images/Scycle.icon          - stencil for normal/inverted cycle panel items.
+ images/Sch_off.icon         - single choice panel item (off).
+ images/Sch_on.icon          - single choice panel item (on).
  images/hglass.cursor        - hour glass cursor for computer move.
  images/nocur.cursor         - no cursor when piece is being dragged.

------- MANIFEST -------
*** /tmp/da07478	Sun Dec  9 15:07:18 1990
--- MANIFEST	Tue Dec  4 21:29:17 1990
***************
*** 6,16 ****
--- 6,18 ----
  
  Filename.                              |  Part #
  --------------------------------------------------
+ common.c                               |    1
  events.c                               |    1
  items.c                                |    1
  makemove.c                             |    1
  main.c                                 |    1
  procs.c                                |    1
+ reve_proc.c                            |    1
  boardstuff.c                           |    2
  rev_eval.c                             |    2
  rev_ip.c                               |    2
***************
*** 44,49 ****
--- 46,53 ----
  images/Lcycle.icon                     |    5
  images/Rcycle.icon                     |    5
  images/Scycle.icon                     |    5
+ images/Sch_off.icon                    |    5
+ images/Sch_on.icon                     |    5
  images/hglass.cursor                   |    5
  images/nocur.cursor                    |    5
  reve.edge1                             |    6

------- CHANGES -------
*** /tmp/da07481	Sun Dec  9 15:07:18 1990
--- CHANGES	Sun Dec  9 14:42:32 1990
***************
*** 23,28 ****
--- 23,214 ----
  Reve change history.
  ====================
  
+ v1.1 - patchlevel 3. 9th December 1990.
+ 
+        * Added a description of the -bestmove command line option to the
+          manual pages.
+ 
+        * If you were using the -last option, and the window was iconified,
+          and there was only the initial four stones on the board, then
+          opening Reve, would incorrectly show the "last" square.
+ 
+        * If you were using the -number option, and the window was iconified,
+          then when Reve was opened again, the number was not being displayed
+          on the last stone.
+ 
+        * The display of a single digit on a stone (with the -number option)
+          was not centered correctly.
+ 
+        * From Jonathan I. Kamens <jik@pit-manager.MIT.EDU>
+          Problems with the Imakefile. The line that says
+          "LIBDIR=$(USRLIBDIR)/reve" should be deleted, and both of the rules
+          that say "$(LIBDIR)$(PATHSEP)reve" should actually say
+          "$(USRLIBDIR)$(PATHSEP)reve".
+ 
+          Also, the EDGENAMEFILE should be changed to
+          $(USRLIBDIR)$(PATHSEP)reve$(PATHSEP)$(ETABLE)
+ 
+        * Added in X resources support for the X11(Xlib) and XView versions.
+          Currently, the resources read are:
+ 
+            reve.animate:        (boolean) show animation.
+            reve.bestmove:       (boolean) show computer best move so far.
+            reve.difficulty:     (integer) computer difficulty level.
+            reve.last:           (boolean) show last move (with a square).
+            reve.log:            (boolean) write computer info to log file.
+            reve.notes:          (boolean) show computer notes.
+            reve.number:         (boolean) show last move (number on stone).
+            reve.quick:          (boolean) play quick game (don't flip stones).
+ 
+        * From Valerie Haecky <vmh@Eng.Sun.COM>
+          Undo'ing is incorrect at the end game if the computer is playing
+          black.
+ 
+        *  Need to allow options like -scale through on the command line. This
+           can be done by have an init_graphics() routine that gets called
+           right at the start, which strips off graphics specific options.
+ 
+        *  The hourglass/watch cursor is turned on, when the computer is
+           suggesting a move.
+ 
+        * If the bestmove option is on, and the computer suggested a move,
+          the last bestmove square wasn't being removed.
+ 
+        * From Valerie Haecky <vmh@Eng.Sun.COM>
+          The show notes now also shows the current maximum depth for the
+          computer move.
+ 
+        * From Valerie Haecky <vmh@Eng.Sun.COM>
+          Added to the README file, the address where people can get
+          information about tournaments, Othello Quarterly, and "Othello
+          Brief and Basic'
+ 
+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
+          Because the default is now set not to show the last square, and
+          notes is initially set off, I think that a status message such as
+          'Black has moved on square <c-5>' should be displayed, otherwise
+          you've no idea where the computer moved.
+ 
+        * Stones are numbered and the last square shown when a game is
+          being loaded, if these settings are on.
+ 
+        * From Valerie Haecky <vmh@Eng.Sun.COM>
+          More work on the XView version. The control panel layout has been
+          rearranged, and a property window added. The Help button has been
+          removed from the control panel. Several options can now be set via
+          the property sheet. A new difficulty value has been added; the
+          ability to set a maximum computer search depth rather than the
+          computer doing a timed move.
+ 
+        * A new XView version has been created. This forks off a separate
+          process to do the computer moves. This is to try to get around
+          the server hanging problem. This still can happen, but not so
+          frequently.
+ 
+          Two new files have been created:
+ 
+          common.c and reve_proc.c.
+ 
+          The Makefile.dist, MANIFEST and FILES files have been updated.
+ 
+        * From: robert@anucsd.anu.oz.au (Robert Cohen)
+          It would be nice to have some idea of how far reve was looking ahead.
+          So in the notes section for example you could report on the ply used
+          to find the solution. If the bestmove option was set it could be shown
+          dynamically as new solutions were found.
+ 
+        * For the SunView and X11 versions the Done button has been replaced by
+          a Props button. Clicking on this will toggle the display of a property
+          window. The property window looks something like:
+ 
+          Computer plays:  White | Black | Neither | Both
+          Difficulty:      1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+ 
+          Options: [ ]    Animate Move
+                   [ ]    Show Current Best Move
+                   [ ]    Show Last Move
+                   [ ]    Show Evaluation Info.
+                   [ ]    Number Last Move
+                   [ ]    Don't Show Flip
+  
+          This introduce two new type of "panel" item, the toggle item
+          (P_TOGGLE) and the choice item (P_CHOICE). The cycle item has been
+          removed.
+  
+          Selecting the Both field on the Computer plays: option, will display
+          the message that this option is currently not implemented.
+  
+          The following changes have occured in the main reve window:
+  
+          The Black: and White: items are messages. The Difficulty: and
+          Show Notes: items will disappear, freeing up a row.
+  
+          Setting the Computer plays: option, alters the Black: and White:
+          options.
+  
+          The iteminfo structure will have five new fields:
+  
+            int lx ;              /* X position of the label. */
+            int ly ;              /* Y position of the label. */
+            char label[60] ;      /* Panel item label. */
+            char *options ;       /* Pointer to list of string choices. */
+            int nopts ;           /* Number of options in list. */
+ 
+          Only certain fields are used with each type of panel "item". All
+          items are initialised in main.c.
+ 
+          Two new files have been added to the images directory:
+ 
+          images/Sch_off.icon
+          images/Sch_on.icon
+ 
+          This solves the following problems:
+ 
+        * From: robert@anucsd.anu.oz.au (Robert Cohen)
+          It would be nice to be able to change all the program parameters from
+          inside the game. For example being able to pull down a menu and turn
+          the bestmove option on or off.
+ 
+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
+          I, and most of the users here, use a combination of X11R4, twm and
+          1024 by 768 colour or mono displays. The new Reve window now exceeds
+          the height of the screen minus the height of the twm title bar of the
+          window! Hence the bottom of half of row 8 and the a to h labelling
+          are no longer visible, even if the top of the twm title bar for the
+          Reve window is at the top of the screen!
+ 
+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
+          Why double switches for White, Black and Notes? Both halves of the
+          switches do the same thing.
+ 
+        * Incorporated a new version of the rev_eval.c evaluation fuction from
+          Yves. There is also a complete new edge table to go with this. This
+          should be faster on RISC systems.
+ 
+        * XResourceManagerString, which is now used as part of the X resources
+          support in the X11 and XView versions, appears to be an X11R4
+          functions. If you are trying to get the X11 version working with
+          X11R3, then there is a new definition in the Makefile[.dist] file
+          that you'll have to uncomment. The README file has been updated to
+          mention this.
+ 
+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
+          Using the X11 interface, when I click on Suggest and get a cross
+          marking the suggested square, then the cross does not disappear when
+          I click on Undo (the position is different, so the suggested square
+          is no longer valid). This gets a bit confusing when you do a Suggest,
+          Undo and Suggest again sequence - you end up with 2 crosses on the
+          board.
+ 
+        *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
+           When compiling rev_ip.c on an HP-UX 9000 Series 300 machine (68020 or
+           68030), the HP-UX 7.0 C compiler crashes out with the following error:
+ 
+           C1 internal error in "tuplonges": invalid OREG in recognize_array()
+ 
+           This problem has now been found, and the appropriate code is
+           #ifdef'ed in rev_ip.c.
+ 
  v1.1 - patchlevel 2. 28th November 1990.
  
         * Adjusted Makefile.dist to correctly install and shar reve.man and

------- TODO -------
*** /tmp/da07484	Sun Dec  9 15:07:19 1990
--- TODO	Sun Dec  9 13:22:51 1990
***************
*** 27,38 ****
     System is a Sun 2/170 running SunOS 4.0, using the TTY version on a
     TVI-925. Reve makes a mess on so called "magic-cookie" terminals.
  
- *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
-    When compiling rev_ip.c on an HP-UX 9000 Series 300 machine (68020 or
-    68030), the HP-UX 7.0 C compiler crashes out with the following error:
-   
-    C1 internal error in "tuplonges": invalid OREG in recognize_array()
-   
  
  Reve TODO list.
  ===============
--- 27,32 ----
***************
*** 61,93 ****
     non-obvious things, like how Difficulty is measured.
  
  *  There are several problems outstanding with the XView version:
!    ~ **IMPORTANT** Need to find some way to disable MS_LEFT whilst the
!                    computer is having its move. At the moment, if you press
!                    the left mouse button while the computer is doing something,
!                    the server will hang.
!    ~ The game panel doesn't correct repaint itself. You need to select
       "Refresh" from the frame menu.
     ~ The hourglass cursor should be drawn in XOR mode.
-    ~ The board window should not have a window menu.
     ~ The game board isn't correctly painted with the -m command line option.
-    ~ When you click to get the panel window to the top, the game board should
-      also be raised.
-    ~ The alignment and size of some of the items needs to be adjusted to be
-      more consistent.
     ~ The color icon doesn't get displayed properly.
-    ~ Would be nice to be able to close the game panel and leave the board
-      window open. Status information could be written to a title line and a
-      window footer (messages such as the number of stones each player
-      currently has; whose turn it is to move could be placed in the title
-      line, and panel messages such as invalid move could be written to the
-      footer.
     ~ It should be possible to start a load/save by just typing Return in the
       Load/Save popup.
  
- *  Need to allow options like -scale through on the command line. This can
-    be done by have an init_graphics() routine that gets called right at
-    the start, which strips off graphics specific options.
- 
  *  Need to add in the ability to show the last move, and show all moves to
     the tty version.
  
--- 55,75 ----
     non-obvious things, like how Difficulty is measured.
  
  *  There are several problems outstanding with the XView version:
!    ~ **IMPORTANT** It's still possible to hang the server, if the left
!                    mouse button is clicked at the wrong time.
!    ~ The various panels doesn't correct repaint themselves. You need to select
       "Refresh" from the frame menu.
     ~ The hourglass cursor should be drawn in XOR mode.
     ~ The game board isn't correctly painted with the -m command line option.
     ~ The color icon doesn't get displayed properly.
     ~ It should be possible to start a load/save by just typing Return in the
       Load/Save popup.
+    ~ Need to add XV_HELP_DATA attributes to each item, and create a reve.info
+      file with help information.
+    ~ The initial position of the reve window is coming up randomly. If it's
+      position isn't given on the command line, it should start at (0,0).
+    ~ Should recognise the Props key, and bring up the property sheet.
  
  *  Need to add in the ability to show the last move, and show all moves to
     the tty version.
  
***************
*** 148,159 ****
     A 'I will win/lose in x moves' announcement if a forced win/loss is
     detected.
  
- *  From Valerie Haecky <vmh@Eng.Sun.COM>
-    With the XView version, when you change the Black/White setting in the
-    buttons, the default in the menu should change, too.
-    Or: if the default in the menu stays the same, if you } hit the new menu
-    button, and ask for the default, the buttons should update to reflect this.
- 
  *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
     When you click on Quit and have actually made some moves/changes, then
     it would be nice to have a dialogue box pop up to say "Save game before
--- 130,135 ----
***************
*** 218,223 ****
--- 194,205 ----
     Allow the board to be rotated 90 degrees. The movelist will also have
     to be adjusted of course.
  
+    [Board rotation is only necessary, if we also support a printing
+     facility fro transcripts. For publishing games usually start
+     on c4. Also, if we want an opening library composed from
+     played games, or other learning mechanisms, we would have to
+     normalize the board. For a playing tool, this is not necessary - vmh.]
+ 
  *  Add in the ability for the Reve window[s] to be totally resized. This
     would involve the black and white stone offscreen images being
     generated "on-the-fly". Two things to note:
***************
*** 233,242 ****
     move.
  
  *  From Soren Hein <shein@ferdowsi.berkeley.edu>
-    Why double switches for White, Black and Notes? Both halves of the
-    switches do the same thing.
- 
- *  From Soren Hein <shein@ferdowsi.berkeley.edu>
     Possible to give some strength indication of the levels? Maybe by
     analogy with chess ratings, if you're familiar enough with Elo-ratings
     to make guesses/comparisons.
--- 215,220 ----
***************
*** 264,269 ****
--- 242,289 ----
  *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
     Add in a move list window, which would contain a scrollable list of all
     the moves so far (plus evaluation for the computers moves).
+ 
+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
+    In order to guage which of the machines you have available perform best as
+    Reve servers, or to choose between different compilers or to choose which
+    compiler switches to use, it would be useful to have a measure of how fast
+    Reve runs. You could have a switch that makes reve evaluate a particular
+    preset position to some set depth and then tells you how many positions a
+    second it checked. You could call this a rhevestone :-).
+ 
+    Also by checking the answer it got against what it was supposed to get,
+    you would have a simple regression test for checking for compiler bugs
+    on new architectures.
+ 
+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
+    It might be useful to have a way of setting the difficulty absolutely ie
+    in a way not dependant on the machine being used as otherwise level 3 say
+    is harder on a faster machine than a slower machine. Then you could say to 
+    someone else as a measure of your Othello playing ability "I can beat reve
+    on level a3" (a3 stands for absolute level 3).
+ 
+ *  From: robert@anucsd.anu.oz.au (Robert Cohen) 
+    A cute feature I noticed in the standard X11r4 othello is that it thinks
+    during the humans move time. If the person is a slow player this could make
+    an appreciable difference if only in giving reve quicker responses.
+ 
+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
+    It would be nice to add a bit of variety to reve's play. This could be
+    done in a variety of ways. A simple approach would be to add some minor 
+    randomness to the evaluation function (optionally of course).
+    A more sophisticated approach would be to allow the user to tailor the
+    evaluation function. This could be either done as a fixed set of play styles
+    eg aggressive, cautious, unpredictable etc or by allowing the user to
+    change some numerical constants eg the weighting put on mobility by slider.
+    Of course there would be a "tournament" setting to make reve play as well as
+    possible.
+ 
+ *  Add in a redraw request (^L for example) for the other versions (not just
+    the tty one).
+ 
+ *  Now that reve has a property sheet, and some of the previous panel items
+    no longer exist, the keyboard interface needed to be changed to include
+    the new options, and alter some of the existing ones.
  
  
  Items we're unlikely to implement.

------- images.h -------
*** /tmp/da07487	Sun Dec  9 15:07:20 1990
--- images.h	Tue Dec  4 21:55:18 1990
***************
*** 66,71 ****
--- 66,79 ----
  #include "images/nocur.cursor"
  } ;
  
+ unsigned short sch_off_image[] = {
+ #include "images/Sch_off.icon"
+ } ;
+ 
+ unsigned short sch_on_image[] = {
+ #include "images/Sch_on.icon"
+ } ;
+ 
  unsigned short white_image[]  = {
  #include "images/white.icon"
  } ;

------- extern.h -------
*** /tmp/da07490	Sun Dec  9 15:07:20 1990
--- extern.h	Fri Dec  7 14:30:40 1990
***************
*** 22,38 ****
   *  (see README file), then an attempt will be made to fix them.
   */
  
- extern int animation ;     /* If set, show computer glide and piece drag. */
  extern int best_cmove ;    /* Best computer move so far. */
  extern int bfont_height ;  /* Height in pixels for bold font. */
  extern int but_inverted ;  /* Value of panel item inverted. */
  extern int color ;         /* Current color value. */
  extern int cur_ch ;        /* Current character pressed. */
  extern int curx ;          /* Current mouse X position. */
  extern int cury ;          /* Current mouse Y position. */
- extern int do_bestmove ;   /* If set, continuously update best move. */
- extern int do_last ;       /* If set, don't show last move. */
- extern int do_number ;     /* If set, the last stone placed is numbered. */
  extern int down ;          /* Indicates is a mouse button is down. */
  extern int first_move ;    /* Set if computer plays first move. */
  extern int iconic ;        /* Start as an icon if set. */
--- 22,35 ----
   *  (see README file), then an attempt will be made to fix them.
   */
  
  extern int best_cmove ;    /* Best computer move so far. */
  extern int bfont_height ;  /* Height in pixels for bold font. */
  extern int but_inverted ;  /* Value of panel item inverted. */
+ extern int cmove_depth ;   /* Depth of the current best computer move. */
  extern int color ;         /* Current color value. */
  extern int cur_ch ;        /* Current character pressed. */
  extern int curx ;          /* Current mouse X position. */
  extern int cury ;          /* Current mouse Y position. */
  extern int down ;          /* Indicates is a mouse button is down. */
  extern int first_move ;    /* Set if computer plays first move. */
  extern int iconic ;        /* Start as an icon if set. */
***************
*** 47,52 ****
--- 44,50 ----
  extern int level ;         /* Current difficulty level for computer moves. */
  extern int loadgame ;      /* Set if there is a game file to load. */
  extern int lsval ;         /* Set to 'l' or 's', if loading or saving. */
+ extern int max_depth ;     /* Computer strategy - maximum depth. */
  extern int monochrome ;    /* If set, display will be in monochrome. */
  extern int move ;          /* Current move being evaluated. */
  extern int move_delta ;    /* Delta for piece animation. */
***************
*** 57,63 ****
  extern int piece_y ;       /* Current Y position of moving piece */
  extern int play_computer ; /* Set if playing against the computer. */
  extern int posspec ;       /* Set if -Wp or -g option is present (for X11) */
! extern int quickgame ;     /* If set, don't flash turning stones. */
  extern int s_flip ;
  extern int s_move ;
  extern int s_opponent ;
--- 55,63 ----
  extern int piece_y ;       /* Current Y position of moving piece */
  extern int play_computer ; /* Set if playing against the computer. */
  extern int posspec ;       /* Set if -Wp or -g option is present (for X11) */
! extern int processing ;    /* If set, computer is procesing a move. */
! extern int profmax ;       /* Current maximum depth. */
! extern int props_showing ; /* If set, the property window is visible. */
  extern int s_flip ;
  extern int s_move ;
  extern int s_opponent ;
***************
*** 65,71 ****
  extern int s_row ;
  extern int s_col ;
  extern int show_moves ;    /* If set, all possible moves are being shown. */
- extern int show_notes ;    /* If set, display notes value from play_reve. */
  extern int suggestion ;    /* Positive if a suggested move. */
  extern int suggest_x ;     /* X position of suggested move. */
  extern int suggest_y ;     /* Y position of suggested move. */
--- 65,70 ----
***************
*** 77,92 ****
  extern int wy ;            /* Initial Y position of the window. */ 
  
  extern time_t timeleft ;   /* Amount of time left for computer moves. */
  extern long note ;         /* Note value for current computer move. */
  
  extern char *diff_values[] ;     /* Values for cyclic difficulty button. */
  extern char *comp_values[] ;     /* Values for computer plays button. */
  extern char gamefile[] ;         /* Name of file for load/save. */
  extern char geometry[MAXDPY][MAXLINE] ;   /* X11 geometry information. */
  extern char line[] ;
! extern char *notes_values[] ;    /* Values for cyclic notes item. */
  extern char *player_values[] ;   /* Values for cyclic black/white item. */
  extern char progname[] ;         /* The name of this program. */
  extern char revtable[] ;         /* Table for reversing bits in a byte. */
  
  extern char *black_dpy ;         /* Black piece display information. */
--- 76,94 ----
  extern int wy ;            /* Initial Y position of the window. */ 
  
  extern time_t timeleft ;   /* Amount of time left for computer moves. */
+ extern long edges[] ;      /* Edges Stability Table */
  extern long note ;         /* Note value for current computer move. */
  
  extern char *diff_values[] ;     /* Values for cyclic difficulty button. */
  extern char *comp_values[] ;     /* Values for computer plays button. */
+ extern char edgefile[] ;         /* Location of the reve edge table file. */
  extern char gamefile[] ;         /* Name of file for load/save. */
  extern char geometry[MAXDPY][MAXLINE] ;   /* X11 geometry information. */
  extern char line[] ;
! extern char *notes_values[] ;    /* Values for cyclic notes button. */
  extern char *player_values[] ;   /* Values for cyclic black/white item. */
  extern char progname[] ;         /* The name of this program. */
+ extern char *resources[] ;       /* Reve X resources read. */
  extern char revtable[] ;         /* Table for reversing bits in a byte. */
  
  extern char *black_dpy ;         /* Black piece display information. */
***************
*** 106,109 ****
  extern enum cantype cmode, last_cmode ;
  extern enum disp_type dtype ;
  extern enum dpy_type cur_dpyno ;
! extern enum set_type direction ;  /* Incremental direction for cycle item. */
--- 108,112 ----
  extern enum cantype cmode, last_cmode ;
  extern enum disp_type dtype ;
  extern enum dpy_type cur_dpyno ;
! extern enum set_type direction ;   /* Incremental direction for cycle item. */
! extern enum win_type curwin ;      /* Window the current event for in. */

------- reve.h -------
*** /tmp/da07493	Sun Dec  9 15:07:21 1990
--- reve.h	Sun Dec  9 13:53:16 1990
***************
*** 25,38 ****
--- 25,51 ----
  #include <stdio.h>
  #include <sys/types.h>
  
+ #ifdef SYSV
+ #include <string.h>
+ #include <sys/times.h>
+ #else
+ #include <strings.h>
+ #include <sys/time.h>
+ #endif /*SYSV*/
+ 
  #define  ALARM         (void) alarm       /* To make lint happy. */
+ #define  CLOSE         (void) close
+ #define  DUP2          (void) dup2
  #define  FCLOSE        (void) fclose
  #define  FFLUSH        (void) fflush
  #define  FGETS         (void) fgets
  #define  FSEEK         (void) fseek
  #define  FPRINTF       (void) fprintf
+ #define  GETHOSTNAME   (void) gethostname
  #define  GETTIMEOFDAY  (void) gettimeofday
  #define  IOCTL         (void) ioctl
+ #define  KILL          (void) kill
+ #define  PIPE          (void) pipe
  #define  PUTC          (void) putc
  #define  READ          (void) read
  #define  SSCANF        (void) sscanf
***************
*** 51,58 ****
--- 64,73 ----
  #define  BHEIGHT       32       /* Height of a reve button item. */
  #define  BWIDTH        64       /* Width of a reve button item. */
  #define  CHEIGHT       20       /* Height of a reve cycle item. */
+ #define  CHOICEGAP     5        /* Gap between choices in a choice item. */
  #define  CWIDTH        32       /* Width of a reve cycle item. */
  #define  NOBUTS        6        /* Number of reve buttons. */
+ #define  NOPROWS       9        /* Number of rows of items on property win. */
  #define  PIECE_MARGIN  8
  #define  PIECE_RAD     (CELL_SIZE / 2 - PIECE_MARGIN)
  
***************
*** 65,71 ****
  #else
  #define  CELL_SIZE     (int) ((TOTAL_WIDTH-(2*BBORDER)) / BOARD_SIZE)
  #define  CY            ((NOROWS*BHEIGHT) + ((NOROWS-1)*BGAP) + (2*BBORDER))
! #define  NOROWS        7        /* Number of rows of reve items. */
  #define  TOTAL_HEIGHT  CY + (8 * CELL_SIZE) + (2 * BBORDER)
  #define  TOTAL_WIDTH   ((NOBUTS*BWIDTH) + ((NOBUTS-1)*BGAP) + (2*BBORDER))
  #endif /*XVIEW*/
--- 80,86 ----
  #else
  #define  CELL_SIZE     (int) ((TOTAL_WIDTH-(2*BBORDER)) / BOARD_SIZE)
  #define  CY            ((NOROWS*BHEIGHT) + ((NOROWS-1)*BGAP) + (2*BBORDER))
! #define  NOROWS        6        /* Number of rows of reve items. */
  #define  TOTAL_HEIGHT  CY + (8 * CELL_SIZE) + (2 * BBORDER)
  #define  TOTAL_WIDTH   ((NOBUTS*BWIDTH) + ((NOBUTS-1)*BGAP) + (2*BBORDER))
  #endif /*XVIEW*/
***************
*** 103,116 ****
  #define  MAXDIFF       9       /* Number of levels of difficulty. */
  #define  MAXDPY        2       /* Maximum possible number of displays. */
  #define  MAXFONTS      2       /* Maximum number of font types. */
! #define  MAXIMAGES     9       /* Maximum number of image types. */
! #define  MAXITEMS      17      /* Number of buttons, cyclics and messages. */
  
  #ifndef  MAXLINE
  #define  MAXLINE       80      /* Length of character strings. */
  #endif /*!MAXLINE*/
  
! #define  MAXMENUS      4       /* Maximum number of popup menus. */
  #define  NIVEAUMAX     25      /* Maximum possible depth. */
  
  #ifndef X11
--- 118,131 ----
  #define  MAXDIFF       9       /* Number of levels of difficulty. */
  #define  MAXDPY        2       /* Maximum possible number of displays. */
  #define  MAXFONTS      2       /* Maximum number of font types. */
! #define  MAXIMAGES     11      /* Maximum number of image types. */
! #define  MAXITEMS      24      /* Number of different panel items. */
  
  #ifndef  MAXLINE
  #define  MAXLINE       80      /* Length of character strings. */
  #endif /*!MAXLINE*/
  
! #define  MAX_PROFMAX   60      /* Maximum search depth. */
  #define  NIVEAUMAX     25      /* Maximum possible depth. */
  
  #ifndef X11
***************
*** 131,138 ****
--- 146,158 ----
  #define  PAUSE         usleep(500000)    /* 0.5 second. */
  #endif /*SYSV*/
  
+ #define  PROPS_HEIGHT  ((NOPROWS*BHEIGHT) + ((NOPROWS-1)*BGAP) + (2*BBORDER))
+ #define  PROPS_WIDTH   ((NOBUTS*BWIDTH)   + ((NOBUTS-1)*BGAP)  + (2*BBORDER))
  #define  PSIZE         40      /* Diameter of playing piece. */
  
+ #define  TICKHEIGHT    16      /* Height of the tick toggle box. */
+ #define  TICKWIDTH     16      /* Width of the tick toggle box. */
+ 
  #ifndef  EDGENAME
  #define  EDGENAME      "reve.edgetable"
  #endif /*!EDGENAME*/
***************
*** 145,150 ****
--- 165,183 ----
  
  #define  VINVUL        50
  
+ #define  CP_WHITE           0          /* Computer plays: choices. */
+ #define  CP_BLACK           1
+ #define  CP_NEITHER         2
+ #define  CP_BOTH            3
+ 
+ /* Aliases for the property sheet item values. */
+ #define  ANIMATION        items[(int) OPT_ANIM].value
+ #define  DO_BESTMOVE      items[(int) OPT_BEST].value
+ #define  DO_LAST          items[(int) OPT_LAST].value
+ #define  SHOW_NOTES       items[(int) OPT_EVAL].value
+ #define  DO_NUMBER        items[(int) OPT_NUM].value
+ #define  QUICKGAME        items[(int) OPT_FLIP].value
+ 
  /* Various pseudo events used by the Reve program. */
  #define  FRAME_REPAINT    100    /* Reve window needs repainting. */
  #define  ENTER_WINDOW     101    /* Mouse has entered the reve window. */
***************
*** 157,163 ****
  #define  RIGHT_UP         108    /* Right mouse button was debounced. */
  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
  #define  MOUSE_MOVING     110    /* Mouse is moving. */
! #define  IGNORE_EVENT     111    /* No interest in this event. */
  
  /* Batch, last move, locking or show all direction (ON or OFF). */
  enum bltype   { IS_OFF, IS_ON } ;
--- 190,197 ----
  #define  RIGHT_UP         108    /* Right mouse button was debounced. */
  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
  #define  MOUSE_MOVING     110    /* Mouse is moving. */
! #define  PROPS_REPAINT    111    /* Property window needs repainting. */
! #define  IGNORE_EVENT     112    /* No interest in this event. */
  
  /* Batch, last move, locking or show all direction (ON or OFF). */
  enum bltype   { IS_OFF, IS_ON } ;
***************
*** 180,196 ****
  /* Different types of graphic images. */
  enum image_type { BUT_NORMAL, BUT_INVERT, BUT_STENCIL,
                    CY_NORMAL, CY_LINVERT, CY_RINVERT, CY_STENCIL,
!                   P_WHITE, P_BLACK } ;
  
  /* Different types of panel items. */
! enum item_type { P_BUTTON, P_CYCLE, P_MESSAGE } ;
  
  /* Different panel items. */
! enum panel_type { LOAD_BUT, NEW_GAME_BUT, SAVE_BUT, SHOW_ALL_BUT,
!                   SUGGEST_BUT, UNDO_BUT, DONE_BUT, CANCEL_BUT, QUIT_BUT,
!                   BLACK_PLAYS, WHITE_PLAYS, DIFFICULTY, NOTES,
!                   PANEL_MES, EVAL_MES, SCORE_MES, TURN_MES } ;
  
  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
  
  enum optype   { RCLR, RINV, RSRC } ;       /* Rasterop codes. */
--- 214,238 ----
  /* Different types of graphic images. */
  enum image_type { BUT_NORMAL, BUT_INVERT, BUT_STENCIL,
                    CY_NORMAL, CY_LINVERT, CY_RINVERT, CY_STENCIL,
!                   TOGGLE_ON, TOGGLE_OFF, P_WHITE, P_BLACK } ;
  
  /* Different types of panel items. */
! enum item_type { P_BUTTON, P_CHOICE, P_CYCLE, P_MESSAGE, P_TOGGLE } ;
  
+ /* XView reve_proc move operations. */
+ enum move_type { M_BEST, M_MOVE, M_PROFMAX, M_SUGGESTION, M_TIME } ;
+ 
  /* Different panel items. */
! enum panel_type { LOAD_BUT,    MOVES_BUT,    NEW_GAME_BUT, SAVE_BUT,
!                   SUGGEST_BUT, UNDO_BUT,     PROPS_BUT,    CANCEL_BUT,
!                   QUIT_BUT,    BLACK_PLAYS,  WHITE_PLAYS,  PANEL_MES,
!                   EVAL_MES,    SCORE_MES,    TURN_MES,     COMP_CHOICE,
!                   DIFF_CHOICE, MAX_DEPTH,    OPT_ANIM,     OPT_BEST,
!                   OPT_LAST,    OPT_EVAL,     OPT_NUM,      OPT_FLIP } ;
  
+ enum res_type { R_ANIMATE, R_BESTMOVE, R_DIFFICULTY, R_LAST,  /* Resources. */
+                 R_LOG,     R_NOTES,    R_NUMBER,     R_QUICK } ;
+ 
  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
  
  enum optype   { RCLR, RINV, RSRC } ;       /* Rasterop codes. */
***************
*** 197,202 ****
--- 239,246 ----
  
  enum playtype { PLAY_BLACK, PLAY_WHITE } ; /* What the computer is playing. */
  
+ enum win_type { W_MAIN, W_PROPS } ;        /* Window types. */
+ 
  extern char *getenv() ;
  extern void exit() ;
  
***************
*** 211,217 ****
--- 255,265 ----
  
  struct iteminfo               /* Item information record. */
    {
+     enum win_type wtype ;     /* Which window the item goes in. */
      enum item_type type ;     /* Item type. */
+     int lx ;                  /* X position of the label for this item. */
+     int ly ;                  /* Y position of the label for this item. */
+     char label[30] ;          /* Label for this item (possibly NULL). */
      int x ;                   /* X position of this panel item. */
      int y ;                   /* Y position of this panel item. */
      int width ;               /* Width of this panel item. */
***************
*** 218,255 ****
      int height ;              /* Height of this panel item. */
      char text[60] ;           /* Text string associated with this item. */
      int value ;               /* Current value of item. */
      void (*func)() ;          /* Function to obey for this panel item. */
    } ;
  
! char *index() ;
  
! void animate_move(),       batch() ;
! void check_button_down(),  check_cycle_down(),   check_item_down() ;
! void check_item_up(),      close_frame(),        color_area() ;
! void computer_move(),      computer_plays() ;
! void create_menu(),        destroy_frame(),      difficulty() ;
! void do_action(),          do_cycle_key(),       do_key_move() ;
! void do_move(),            do_selection(),       domove() ;
! void done(),               draw_button(),        draw_cycle() ;
! void draw_cycle_item(),    draw_image(),         draw_line() ;
! void draw_outline(),       draw_piece(),         draw_rect() ;
! void draw_square(),        draw_stencil(),       draw_text() ;
! void draw_textfield(),     generate_graphics(),  get_filename() ;
  void get_options(),        get_xy(),             getparam() ;
  void handle_board_event(), handle_event(),       handle_item() ;
  void handle_key(),         init_canvas(),        init_edge_table() ;
! void init_fonts(),         init_notes(),         init_player() ;
! void initboard(),          initialise() ;
! void load_colors(),        load_game(),          lock_screen() ;
  void make_canvas(),        make_frame(),         make_icon() ;
  void make_message(),       make_move(),          make_panel() ;
  void message(),            nap_upto(),           new_game() ;
! void position_popup(),     process_event(),      quit() ;
! void remove_textfield(),   save_game(),          set_cursor() ;
  void set_cycle(),          set_display_types(),  set_eval() ;
! void set_score(),          set_timer(),          set_turn() ;
! void show_all(),           show_all_moves(),     show_best() ;
! void show_last(),          show_number() ;
  void show_suggestion(),    start_tool() ;
  void suggest(),            think(),              undo() ;
  void update_board_image(), usage(),              who_wins() ;
--- 266,329 ----
      int height ;              /* Height of this panel item. */
      char text[60] ;           /* Text string associated with this item. */
      int value ;               /* Current value of item. */
+     char **options ;          /* Pointer to list of choice strings. */
+     int nopts ;               /* Number of options in list. */
      void (*func)() ;          /* Function to obey for this panel item. */
    } ;
  
! struct reve_in       /* Input supplied on standard input to reve_proc. */
!   {
!     enum move_type type ;
!     int board[64] ;
!     int player ;
!     int level ;
!     time_t timeleft ;
!   } ;
  
! struct reve_out      /* Results written to standard output by reve_proc. */
!   {
!     enum move_type type ;
!     int move ;
!     int note ;
!     int depth ;
!   } ;
! 
! char *getenv(), *index() ;
! char *get_resource() ;
! 
! void animate_move(),       batch(),              check_button_down() ;
! void check_choice_down(),  check_cycle_down(),   check_item_down() ;
! void check_item_up(),      check_toggle_down(),  close_frame() ;
! void color_area() ;
! void computer_move(),      computer_plays(),     connect_to_reve() ;
! void create_menu(),        destroy_frame() ;
! void do_action(),          do_computer_move(),   do_cycle_key() ;
! void do_key_move(),        do_move(),            do_props() ;
! void do_selection(),       do_suggest(),         domove() ;
! void done(),               draw_button(),        draw_choice() ;
! void draw_cycle(),         draw_cycle_item(),    draw_image() ;
! void draw_line(),          draw_outline(),       draw_piece() ;
! void draw_rect(),          draw_square(),        draw_stencil() ;
! void draw_text(),          draw_textfield(),     draw_toggle() ;
! void generate_graphics(),  get_filename() ;
  void get_options(),        get_xy(),             getparam() ;
  void handle_board_event(), handle_event(),       handle_item() ;
  void handle_key(),         init_canvas(),        init_edge_table() ;
! void init_fonts(),         initboard(),          initialise() ;
! void load_colors(),        load_game() ;
! void load_resources(),     lock_screen() ;
  void make_canvas(),        make_frame(),         make_icon() ;
  void make_message(),       make_move(),          make_panel() ;
  void message(),            nap_upto(),           new_game() ;
! void open_frame(),         paint_prop_sheet(),   position_popup() ;
! void process_event(),      quit() ;
! void read_resources(),     remove_textfield(),   reset_time() ;
! void save_game(),          set_computer(),       set_cursor() ;
  void set_cycle(),          set_display_types(),  set_eval() ;
! void set_option(),         set_score(),          set_timer() ;
! void set_turn(),           show_all(),           show_all_moves() ;
! void show_best(),          show_last(),          show_number() ;
  void show_suggestion(),    start_tool() ;
  void suggest(),            think(),              undo() ;
  void update_board_image(), usage(),              who_wins() ;
+ void write_to_reve() ;