[comp.sources.games] v12i004: reve - an othello game, Patch3d

billr@saab.CNA.TEK.COM (Bill Randle) (12/22/90)

Submitted-by: Rich Burridge <rburridge@sun.COM>
Posting-number: Volume 12, Issue 4
Archive-name: reve/Patch3d
Patch-To: reve: Volume 11, Issue 52-58
Environment: SunView, XView, X11R4, termcap



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 4 (of 9)."
# Contents:  patches03a
# Wrapped by billr@saab on Fri Dec 21 11:26:53 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches03a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches03a'\"
else
echo shar: Extracting \"'patches03a'\" \(52474 characters\)
sed "s/^X//" >'patches03a' <<'END_OF_FILE'
X
X------- patchlevel.h -------
X*** /tmp/da07463	Sun Dec  9 15:07:15 1990
X--- patchlevel.h	Thu Nov 29 06:17:17 1990
X***************
X*** 22,25 ****
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X! #define  PATCHLEVEL  2
X--- 22,25 ----
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X! #define  PATCHLEVEL  3
X
X------- README -------
X*** /tmp/da07466	Sun Dec  9 15:07:15 1990
X--- README	Thu Dec  6 10:23:57 1990
X***************
X*** 43,48 ****
X--- 43,57 ----
X  levels 4-6 would satisfy amateurs, and the higher levels will give experts a
X  good game. Level 8 (30 minutes) is the tournament level.
X  
X+ The address where people can get information about tournaments, Othello
X+ Quarterly, and "Othello Brief and Basic' is:
X+  
X+         Othello Quarterly
X+         c/o C.Hewlett
X+         920 Northgate Ave.
X+         Waynesboro, VA 22980
X+         USA
X+ 
X  2. Getting started.
X  -------------------
X  
X***************
X*** 78,83 ****
X--- 87,93 ----
X  SELTYPE      - uncomment for old select(2) calls.
X  SIGRET       - uncomment if your signal function expects an integer function.
X  SYSV         - uncomment if you are running Unix System V.
X+ X11R3        - uncomment if you are building the X11 version under X11R3.
X  X11INCDIR    - X11 only: location of the X11 #include files.
X  X11LIBDIR    - X11 only: location of the X11 libraries.
X  XVIEWINCDIR  - XView only: location of the XView #include files.
X***************
X*** 215,223 ****
X  Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
X  Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
X  Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
X! John Eras, Heather Rose, Jonathan I. Kamens, Krishnamurthy Ganesan and
X! Gordon C. Galligher for bug reports and/or bug fixes plus suggested
X! enhancements.
X  
X  Suggestions for furthur improvement would be most welcome, plus bugs,
X  comments and flames.
X--- 225,234 ----
X  Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
X  Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
X  Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
X! John Eras, Heather Rose, Jonathan I. Kamens, Krishnamurthy Ganesan, Gordon C.
X! Galligher, Soren Hein, Rod Whitby Daniel Edward Lovinger, Richard K. Lloyd,
X! Jacob E. Goodman and John Eldredge for bug reports and/or bug fixes plus
X! suggested enhancements.
X  
X  Suggestions for furthur improvement would be most welcome, plus bugs,
X  comments and flames.
X
X------- Makefile.dist -------
X*** /tmp/da07469	Sun Dec  9 15:07:16 1990
X--- Makefile.dist	Thu Dec  6 10:21:47 1990
X***************
X*** 75,80 ****
X--- 75,85 ----
X  #
X  #SYSV  = -DSYSV
X  #-----------------------------------------------------------------------
X+ #  If you are compiling the X11 version under MIT X11R3, you will need to
X+ #  uncomment the following definition:
X+ #
X+ #X11R3 = -DX11R3
X+ #-----------------------------------------------------------------------
X  #  If you are compiling the X11 version and the X11 include and
X  #  library files are not in a standard place, then the following
X  #  two lines should be uncommented, and set appropriately.
X***************
X*** 102,108 ****
X  #
X  CDEFS		= $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(NO_TIMEVAL) \
X  		  $(EDGENAME) $(SELTYPE) $(SIGRET) $(SYSV) \
X! 		  $(X11INCDIR) $(XVIEWINCDIR)
X  CFLAGS          = -O $(CDEFS)
X  #
X  #==========================================================================
X--- 107,113 ----
X  #
X  CDEFS		= $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(NO_TIMEVAL) \
X  		  $(EDGENAME) $(SELTYPE) $(SIGRET) $(SYSV) \
X! 		  $(X11R3) $(X11INCDIR) $(XVIEWINCDIR)
X  CFLAGS          = -O $(CDEFS)
X  #
X  #==========================================================================
X***************
X*** 114,125 ****
X  
X  CC              = cc
X  
X! STDSRCS         = boardstuff.c events.c makemove.c main.c \
X! 		  procs.c rev_eval.c rev_ip.c rev_iycp.c
X! STDOBJS         = boardstuff.o events.o makemove.o main.o \
X! 		  procs.o rev_eval.o rev_ip.o rev_iycp.o
X  
X  GSRCS           = sunview.c tty.c x11.c xview.c
X  HDRS            = color.h extern.h images.h reve.h patchlevel.h
X  IDIR		= images
X  IMAGES          = $(IDIR)/black.icon \
X--- 119,131 ----
X  
X  CC              = cc
X  
X! REVESRCS        = rev_eval.c rev_ip.c rev_iycp.c
X! STDSRCS         = boardstuff.c events.c makemove.c main.c procs.c
X! REVEOBJS        = rev_eval.o rev_ip.o rev_iycp.o
X! STDOBJS         = boardstuff.o events.o makemove.o main.o procs.o
X  
X  GSRCS           = sunview.c tty.c x11.c xview.c
X+ OSRCS           = common.c items.c reve_proc.c 
X  HDRS            = color.h extern.h images.h reve.h patchlevel.h
X  IDIR		= images
X  IMAGES          = $(IDIR)/black.icon \
X***************
X*** 133,138 ****
X--- 139,146 ----
X  		  $(IDIR)/Lcycle.icon \
X  		  $(IDIR)/Rcycle.icon \
X  		  $(IDIR)/Scycle.icon \
X+ 		  $(IDIR)/Sch_off.icon \
X+ 		  $(IDIR)/Sch_on.icon \
X  		  $(IDIR)/hglass.cursor \
X  		  $(IDIR)/nocur.cursor
X  
X***************
X*** 139,145 ****
X  OTHERS          = CHANGES README TODO reve.man MANIFEST FILES \
X  		  reve.man.text Makefile.dist
X  
X! SFILES1         = events.c items.c makemove.c main.c procs.c
X  SFILES2		= boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
X  SFILES3         = $(OTHERS)
X  SFILES4         = tty.c x11.c xview.c
X--- 147,153 ----
X  OTHERS          = CHANGES README TODO reve.man MANIFEST FILES \
X  		  reve.man.text Makefile.dist
X  
X! SFILES1         = $(OSRCS) events.c makemove.c main.c procs.c
X  SFILES2		= boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
X  SFILES3         = $(OTHERS)
X  SFILES4         = tty.c x11.c xview.c
X***************
X*** 169,194 ****
X  
X  all:            $(BINARIES)
X  
X! sunview:        $(STDOBJS) items.o sunview.o
X! 		$(CC) -o sv_reve $(CFLAGS) $(STDOBJS) \
X! 				items.o sunview.o $(SVIEWLIBS)
X  		-cp sv_reve reve
X  
X! tty:            $(STDOBJS) items.o tty.o
X! 		$(CC) -o tty_reve $(CFLAGS) $(STDOBJS) \
X! 				items.o tty.o $(TTYLIBS)
X  		-cp tty_reve reve
X  
X! x11:            $(STDOBJS) items.o x11.o
X! 		$(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) \
X! 				items.o x11.o \
X! 			       $(X11LIBS)
X  		-cp xreve reve
X  
X! xview:          $(STDOBJS) xview.o
X  		$(CC) -o xv_reve $(XVIEWLIBDIR) $(CFLAGS) $(STDOBJS) \
X  				xview.o $(XVIEWLIBS)
X  		-cp xv_reve reve
X  
X  install:
X  		-cp reve $(BINDIR)
X--- 177,202 ----
X  
X  all:            $(BINARIES)
X  
X! sunview:        $(STDOBJS) $(REVEOBJS) common.o items.o sunview.o
X! 		$(CC) -o sv_reve $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
X! 				common.o items.o sunview.o $(SVIEWLIBS)
X  		-cp sv_reve reve
X  
X! tty:            $(STDOBJS) $(REVEOBJS) common.o items.o tty.o
X! 		$(CC) -o tty_reve $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
X! 				common.o items.o tty.o $(TTYLIBS)
X  		-cp tty_reve reve
X  
X! x11:            $(STDOBJS) $(REVEOBJS) common.o items.o x11.o
X! 		$(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) $(REVEOBJS) \
X! 				common.o items.o x11.o $(X11LIBS)
X  		-cp xreve reve
X  
X! xview:          $(STDOBJS) $(REVEOBJS) common.o reve_proc.o xview.o
X  		$(CC) -o xv_reve $(XVIEWLIBDIR) $(CFLAGS) $(STDOBJS) \
X  				xview.o $(XVIEWLIBS)
X  		-cp xv_reve reve
X+ 		$(CC) -o reve_proc $(CFLAGS) common.o reve_proc.o $(REVEOBJS)
X  
X  install:
X  		-cp reve $(BINDIR)
X***************
X*** 200,215 ****
X  		-cp reve.man $(MANDIR)/reve.$(MANSECT)
X  		-chmod 644 $(MANDIR)/reve.$(MANSECT)
X  
X! clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
X  
X  lint:		lint-sunview lint-tty lint-xview lint-x11
X! lint-sunview:;	lint $(CDEFS) $(STDSRCS) items.c sunview.c $(SVIEWLIBS)
X! lint-tty:;	lint $(CDEFS) $(STDSRCS) items.c tty.c $(TTYLIBS)
X! lint-xview:;	lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS) 
X! lint-x11:;	lint $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS) 
X  
X  saber:		$(STDSRCS) x11.c
X! 		#load $(LDFLAGS) $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS)
X  
X  shar:;          shar.script $(SFILES1) > Part1
X  		shar.script $(SFILES2) > Part2
X--- 208,228 ----
X  		-cp reve.man $(MANDIR)/reve.$(MANSECT)
X  		-chmod 644 $(MANDIR)/reve.$(MANSECT)
X  
X! clean:;         rm -f *.o *.Z *.uu Part* *~ reve reve_proc $(BINARIES) core
X  
X  lint:		lint-sunview lint-tty lint-xview lint-x11
X! lint-sunview:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
X! 			common.c items.c sunview.c $(SVIEWLIBS)
X! lint-tty:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
X! 			common.c items.c tty.c $(TTYLIBS)
X! lint-xview:;	lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS)
X! 		lint $(CDEFS) reve_proc.c common.c $(REVESRCS)
X! lint-x11:;	lint $(CDEFS) $(STDSRCS) $(REVESRCS) \
X! 			common.c items.c x11.c $(X11LIBS) 
X  
X  saber:		$(STDSRCS) x11.c
X! 		#load $(LDFLAGS) $(CDEFS) $(STDSRCS) $(REVESRCS) \
X! 			common.c items.c x11.c $(X11LIBS)
X  
X  shar:;          shar.script $(SFILES1) > Part1
X  		shar.script $(SFILES2) > Part2
X***************
X*** 220,227 ****
X  		shar.script $(SFILES7) > Part7
X  
X  create:         SCCS
X! 		-sccs create $(STDSRCS) items.c $(GSRCS) $(HDRS) \
X! 			     $(IMAGES) $(OTHERS)
X  
X  SCCS:
X  		mkdir SCCS
X--- 233,240 ----
X  		shar.script $(SFILES7) > Part7
X  
X  create:         SCCS
X! 		-sccs create $(STDSRCS) $(REVESRCS) items.c reve_proc.c \
X! 			     $(GSRCS) $(HDRS) $(IMAGES) $(OTHERS)
X  
X  SCCS:
X  		mkdir SCCS
X***************
X*** 228,233 ****
X--- 241,247 ----
X  		chmod 755 SCCS
X  
X  boardstuff.o:   boardstuff.c color.h reve.h extern.h
X+ common.o:       common.c reve.h
X  events.o:       events.c reve.h color.h extern.h
X  items.o:        items.c color.h reve.h extern.h
X  makemove.o:     makemove.c reve.h extern.h
X***************
X*** 236,241 ****
X--- 250,256 ----
X  rev_eval.o:     rev_eval.c reve.h
X  rev_ip.o:       rev_ip.c reve.h
X  rev_iycp.o:     rev_iycp.c reve.h
X+ reve_proc.o:	reve_proc.c reve.h
X  sunview.o:      sunview.c reve.h color.h extern.h images.h $(IMAGES)
X  tty.o:          tty.c reve.h color.h extern.h
X  x11.o:          x11.c reve.h color.h extern.h images.h $(IMAGES)
X
X------- Imakefile -------
X*** /tmp/da07472	Sun Dec  9 15:07:17 1990
X--- Imakefile	Thu Nov 29 16:54:47 1990
X***************
X*** 63,75 ****
X  		  $(SIGRET)
X  DEFINES         = $(CDEFS) -DX11
X  ETABLE		= reve.edgetable
X- LIBDIR		= $(USRLIBDIR)/reve
X       
X  /*
X   *  Full pathname of the reve edge table file. This can also be overridden
X   *  with a command line option.
X   */
X! EDGENAMEFILE    = $(LIBDIR)/$(ETABLE)
X  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
X  
X       
X--- 63,74 ----
X  		  $(SIGRET)
X  DEFINES         = $(CDEFS) -DX11
X  ETABLE		= reve.edgetable
X       
X  /*
X   *  Full pathname of the reve edge table file. This can also be overridden
X   *  with a command line option.
X   */
X! EDGENAMEFILE    = $(USRLIBDIR)$(PATHSEP)reve$(PATHSEP)$(ETABLE)
X  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
X  
X       
X***************
X*** 79,86 ****
X  		  procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
X  
X  ComplexProgramTarget(reve)
X! MakeDirectories(install,$(LIBDIR)$(PATHSEP)reve)
X! InstallNonExec($(ETABLE),$(LIBDIR)$(PATHSEP)reve)
X  
X  install:: install.man
X  
X--- 78,85 ----
X  		  procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
X  
X  ComplexProgramTarget(reve)
X! MakeDirectories(install,$(USRLIBDIR)$(PATHSEP)reve)
X! InstallNonExec($(ETABLE),$(USRLIBDIR)$(PATHSEP)reve)
X  
X  install:: install.man
X  
X
X------- FILES -------
X*** /tmp/da07475	Sun Dec  9 15:07:17 1990
X--- FILES	Tue Dec  4 21:30:23 1990
X***************
X*** 7,17 ****
X--- 7,19 ----
X  --------------------------------
X  
X  boardstuff.c                - various board manipulation routines.
X+ common.c                    - common routines between reve and reve_proc.
X  events.c                    - event handling procedures.
X  items.c                     - procedures for manipulating reve panel items.
X  makemove.c                  - interface to the computer strategy routines.
X  main.c                      - includes variable declarations and main().
X  procs.c                     - procedures associated with the panel items.
X+ reve_proc.c                 - separate reve process for the XView version.
X  
X  rev_eval.c                  - reve evaluation function.
X  rev_ip.c                    - return a move and a note for a given color.
X***************
X*** 53,57 ****
X--- 55,61 ----
X  images/Lcycle.icon          - cycle panel item with left side inverted.
X  images/Rcycle.icon          - cycle panel item with right side inverted.
X  images/Scycle.icon          - stencil for normal/inverted cycle panel items.
X+ images/Sch_off.icon         - single choice panel item (off).
X+ images/Sch_on.icon          - single choice panel item (on).
X  images/hglass.cursor        - hour glass cursor for computer move.
X  images/nocur.cursor         - no cursor when piece is being dragged.
X
X------- MANIFEST -------
X*** /tmp/da07478	Sun Dec  9 15:07:18 1990
X--- MANIFEST	Tue Dec  4 21:29:17 1990
X***************
X*** 6,16 ****
X--- 6,18 ----
X  
X  Filename.                              |  Part #
X  --------------------------------------------------
X+ common.c                               |    1
X  events.c                               |    1
X  items.c                                |    1
X  makemove.c                             |    1
X  main.c                                 |    1
X  procs.c                                |    1
X+ reve_proc.c                            |    1
X  boardstuff.c                           |    2
X  rev_eval.c                             |    2
X  rev_ip.c                               |    2
X***************
X*** 44,49 ****
X--- 46,53 ----
X  images/Lcycle.icon                     |    5
X  images/Rcycle.icon                     |    5
X  images/Scycle.icon                     |    5
X+ images/Sch_off.icon                    |    5
X+ images/Sch_on.icon                     |    5
X  images/hglass.cursor                   |    5
X  images/nocur.cursor                    |    5
X  reve.edge1                             |    6
X
X------- CHANGES -------
X*** /tmp/da07481	Sun Dec  9 15:07:18 1990
X--- CHANGES	Sun Dec  9 14:42:32 1990
X***************
X*** 23,28 ****
X--- 23,214 ----
X  Reve change history.
X  ====================
X  
X+ v1.1 - patchlevel 3. 9th December 1990.
X+ 
X+        * Added a description of the -bestmove command line option to the
X+          manual pages.
X+ 
X+        * If you were using the -last option, and the window was iconified,
X+          and there was only the initial four stones on the board, then
X+          opening Reve, would incorrectly show the "last" square.
X+ 
X+        * If you were using the -number option, and the window was iconified,
X+          then when Reve was opened again, the number was not being displayed
X+          on the last stone.
X+ 
X+        * The display of a single digit on a stone (with the -number option)
X+          was not centered correctly.
X+ 
X+        * From Jonathan I. Kamens <jik@pit-manager.MIT.EDU>
X+          Problems with the Imakefile. The line that says
X+          "LIBDIR=$(USRLIBDIR)/reve" should be deleted, and both of the rules
X+          that say "$(LIBDIR)$(PATHSEP)reve" should actually say
X+          "$(USRLIBDIR)$(PATHSEP)reve".
X+ 
X+          Also, the EDGENAMEFILE should be changed to
X+          $(USRLIBDIR)$(PATHSEP)reve$(PATHSEP)$(ETABLE)
X+ 
X+        * Added in X resources support for the X11(Xlib) and XView versions.
X+          Currently, the resources read are:
X+ 
X+            reve.animate:        (boolean) show animation.
X+            reve.bestmove:       (boolean) show computer best move so far.
X+            reve.difficulty:     (integer) computer difficulty level.
X+            reve.last:           (boolean) show last move (with a square).
X+            reve.log:            (boolean) write computer info to log file.
X+            reve.notes:          (boolean) show computer notes.
X+            reve.number:         (boolean) show last move (number on stone).
X+            reve.quick:          (boolean) play quick game (don't flip stones).
X+ 
X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
X+          Undo'ing is incorrect at the end game if the computer is playing
X+          black.
X+ 
X+        *  Need to allow options like -scale through on the command line. This
X+           can be done by have an init_graphics() routine that gets called
X+           right at the start, which strips off graphics specific options.
X+ 
X+        *  The hourglass/watch cursor is turned on, when the computer is
X+           suggesting a move.
X+ 
X+        * If the bestmove option is on, and the computer suggested a move,
X+          the last bestmove square wasn't being removed.
X+ 
X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
X+          The show notes now also shows the current maximum depth for the
X+          computer move.
X+ 
X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
X+          Added to the README file, the address where people can get
X+          information about tournaments, Othello Quarterly, and "Othello
X+          Brief and Basic'
X+ 
X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X+          Because the default is now set not to show the last square, and
X+          notes is initially set off, I think that a status message such as
X+          'Black has moved on square <c-5>' should be displayed, otherwise
X+          you've no idea where the computer moved.
X+ 
X+        * Stones are numbered and the last square shown when a game is
X+          being loaded, if these settings are on.
X+ 
X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
X+          More work on the XView version. The control panel layout has been
X+          rearranged, and a property window added. The Help button has been
X+          removed from the control panel. Several options can now be set via
X+          the property sheet. A new difficulty value has been added; the
X+          ability to set a maximum computer search depth rather than the
X+          computer doing a timed move.
X+ 
X+        * A new XView version has been created. This forks off a separate
X+          process to do the computer moves. This is to try to get around
X+          the server hanging problem. This still can happen, but not so
X+          frequently.
X+ 
X+          Two new files have been created:
X+ 
X+          common.c and reve_proc.c.
X+ 
X+          The Makefile.dist, MANIFEST and FILES files have been updated.
X+ 
X+        * From: robert@anucsd.anu.oz.au (Robert Cohen)
X+          It would be nice to have some idea of how far reve was looking ahead.
X+          So in the notes section for example you could report on the ply used
X+          to find the solution. If the bestmove option was set it could be shown
X+          dynamically as new solutions were found.
X+ 
X+        * For the SunView and X11 versions the Done button has been replaced by
X+          a Props button. Clicking on this will toggle the display of a property
X+          window. The property window looks something like:
X+ 
X+          Computer plays:  White | Black | Neither | Both
X+          Difficulty:      1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
X+ 
X+          Options: [ ]    Animate Move
X+                   [ ]    Show Current Best Move
X+                   [ ]    Show Last Move
X+                   [ ]    Show Evaluation Info.
X+                   [ ]    Number Last Move
X+                   [ ]    Don't Show Flip
X+  
X+          This introduce two new type of "panel" item, the toggle item
X+          (P_TOGGLE) and the choice item (P_CHOICE). The cycle item has been
X+          removed.
X+  
X+          Selecting the Both field on the Computer plays: option, will display
X+          the message that this option is currently not implemented.
X+  
X+          The following changes have occured in the main reve window:
X+  
X+          The Black: and White: items are messages. The Difficulty: and
X+          Show Notes: items will disappear, freeing up a row.
X+  
X+          Setting the Computer plays: option, alters the Black: and White:
X+          options.
X+  
X+          The iteminfo structure will have five new fields:
X+  
X+            int lx ;              /* X position of the label. */
X+            int ly ;              /* Y position of the label. */
X+            char label[60] ;      /* Panel item label. */
X+            char *options ;       /* Pointer to list of string choices. */
X+            int nopts ;           /* Number of options in list. */
X+ 
X+          Only certain fields are used with each type of panel "item". All
X+          items are initialised in main.c.
X+ 
X+          Two new files have been added to the images directory:
X+ 
X+          images/Sch_off.icon
X+          images/Sch_on.icon
X+ 
X+          This solves the following problems:
X+ 
X+        * From: robert@anucsd.anu.oz.au (Robert Cohen)
X+          It would be nice to be able to change all the program parameters from
X+          inside the game. For example being able to pull down a menu and turn
X+          the bestmove option on or off.
X+ 
X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X+          I, and most of the users here, use a combination of X11R4, twm and
X+          1024 by 768 colour or mono displays. The new Reve window now exceeds
X+          the height of the screen minus the height of the twm title bar of the
X+          window! Hence the bottom of half of row 8 and the a to h labelling
X+          are no longer visible, even if the top of the twm title bar for the
X+          Reve window is at the top of the screen!
X+ 
X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
X+          Why double switches for White, Black and Notes? Both halves of the
X+          switches do the same thing.
X+ 
X+        * Incorporated a new version of the rev_eval.c evaluation fuction from
X+          Yves. There is also a complete new edge table to go with this. This
X+          should be faster on RISC systems.
X+ 
X+        * XResourceManagerString, which is now used as part of the X resources
X+          support in the X11 and XView versions, appears to be an X11R4
X+          functions. If you are trying to get the X11 version working with
X+          X11R3, then there is a new definition in the Makefile[.dist] file
X+          that you'll have to uncomment. The README file has been updated to
X+          mention this.
X+ 
X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X+          Using the X11 interface, when I click on Suggest and get a cross
X+          marking the suggested square, then the cross does not disappear when
X+          I click on Undo (the position is different, so the suggested square
X+          is no longer valid). This gets a bit confusing when you do a Suggest,
X+          Undo and Suggest again sequence - you end up with 2 crosses on the
X+          board.
X+ 
X+        *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X+           When compiling rev_ip.c on an HP-UX 9000 Series 300 machine (68020 or
X+           68030), the HP-UX 7.0 C compiler crashes out with the following error:
X+ 
X+           C1 internal error in "tuplonges": invalid OREG in recognize_array()
X+ 
X+           This problem has now been found, and the appropriate code is
X+           #ifdef'ed in rev_ip.c.
X+ 
X  v1.1 - patchlevel 2. 28th November 1990.
X  
X         * Adjusted Makefile.dist to correctly install and shar reve.man and
X
X------- TODO -------
X*** /tmp/da07484	Sun Dec  9 15:07:19 1990
X--- TODO	Sun Dec  9 13:22:51 1990
X***************
X*** 27,38 ****
X     System is a Sun 2/170 running SunOS 4.0, using the TTY version on a
X     TVI-925. Reve makes a mess on so called "magic-cookie" terminals.
X  
X- *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X-    When compiling rev_ip.c on an HP-UX 9000 Series 300 machine (68020 or
X-    68030), the HP-UX 7.0 C compiler crashes out with the following error:
X-   
X-    C1 internal error in "tuplonges": invalid OREG in recognize_array()
X-   
X  
X  Reve TODO list.
X  ===============
X--- 27,32 ----
X***************
X*** 61,93 ****
X     non-obvious things, like how Difficulty is measured.
X  
X  *  There are several problems outstanding with the XView version:
X!    ~ **IMPORTANT** Need to find some way to disable MS_LEFT whilst the
X!                    computer is having its move. At the moment, if you press
X!                    the left mouse button while the computer is doing something,
X!                    the server will hang.
X!    ~ The game panel doesn't correct repaint itself. You need to select
X       "Refresh" from the frame menu.
X     ~ The hourglass cursor should be drawn in XOR mode.
X-    ~ The board window should not have a window menu.
X     ~ The game board isn't correctly painted with the -m command line option.
X-    ~ When you click to get the panel window to the top, the game board should
X-      also be raised.
X-    ~ The alignment and size of some of the items needs to be adjusted to be
X-      more consistent.
X     ~ The color icon doesn't get displayed properly.
X-    ~ Would be nice to be able to close the game panel and leave the board
X-      window open. Status information could be written to a title line and a
X-      window footer (messages such as the number of stones each player
X-      currently has; whose turn it is to move could be placed in the title
X-      line, and panel messages such as invalid move could be written to the
X-      footer.
X     ~ It should be possible to start a load/save by just typing Return in the
X       Load/Save popup.
X  
X- *  Need to allow options like -scale through on the command line. This can
X-    be done by have an init_graphics() routine that gets called right at
X-    the start, which strips off graphics specific options.
X- 
X  *  Need to add in the ability to show the last move, and show all moves to
X     the tty version.
X  
X--- 55,75 ----
X     non-obvious things, like how Difficulty is measured.
X  
X  *  There are several problems outstanding with the XView version:
X!    ~ **IMPORTANT** It's still possible to hang the server, if the left
X!                    mouse button is clicked at the wrong time.
X!    ~ The various panels doesn't correct repaint themselves. You need to select
X       "Refresh" from the frame menu.
X     ~ The hourglass cursor should be drawn in XOR mode.
X     ~ The game board isn't correctly painted with the -m command line option.
X     ~ The color icon doesn't get displayed properly.
X     ~ It should be possible to start a load/save by just typing Return in the
X       Load/Save popup.
X+    ~ Need to add XV_HELP_DATA attributes to each item, and create a reve.info
X+      file with help information.
X+    ~ The initial position of the reve window is coming up randomly. If it's
X+      position isn't given on the command line, it should start at (0,0).
X+    ~ Should recognise the Props key, and bring up the property sheet.
X  
X  *  Need to add in the ability to show the last move, and show all moves to
X     the tty version.
X  
X***************
X*** 148,159 ****
X     A 'I will win/lose in x moves' announcement if a forced win/loss is
X     detected.
X  
X- *  From Valerie Haecky <vmh@Eng.Sun.COM>
X-    With the XView version, when you change the Black/White setting in the
X-    buttons, the default in the menu should change, too.
X-    Or: if the default in the menu stays the same, if you } hit the new menu
X-    button, and ask for the default, the buttons should update to reflect this.
X- 
X  *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X     When you click on Quit and have actually made some moves/changes, then
X     it would be nice to have a dialogue box pop up to say "Save game before
X--- 130,135 ----
X***************
X*** 218,223 ****
X--- 194,205 ----
X     Allow the board to be rotated 90 degrees. The movelist will also have
X     to be adjusted of course.
X  
X+    [Board rotation is only necessary, if we also support a printing
X+     facility fro transcripts. For publishing games usually start
X+     on c4. Also, if we want an opening library composed from
X+     played games, or other learning mechanisms, we would have to
X+     normalize the board. For a playing tool, this is not necessary - vmh.]
X+ 
X  *  Add in the ability for the Reve window[s] to be totally resized. This
X     would involve the black and white stone offscreen images being
X     generated "on-the-fly". Two things to note:
X***************
X*** 233,242 ****
X     move.
X  
X  *  From Soren Hein <shein@ferdowsi.berkeley.edu>
X-    Why double switches for White, Black and Notes? Both halves of the
X-    switches do the same thing.
X- 
X- *  From Soren Hein <shein@ferdowsi.berkeley.edu>
X     Possible to give some strength indication of the levels? Maybe by
X     analogy with chess ratings, if you're familiar enough with Elo-ratings
X     to make guesses/comparisons.
X--- 215,220 ----
X***************
X*** 264,269 ****
X--- 242,289 ----
X  *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
X     Add in a move list window, which would contain a scrollable list of all
X     the moves so far (plus evaluation for the computers moves).
X+ 
X+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
X+    In order to guage which of the machines you have available perform best as
X+    Reve servers, or to choose between different compilers or to choose which
X+    compiler switches to use, it would be useful to have a measure of how fast
X+    Reve runs. You could have a switch that makes reve evaluate a particular
X+    preset position to some set depth and then tells you how many positions a
X+    second it checked. You could call this a rhevestone :-).
X+ 
X+    Also by checking the answer it got against what it was supposed to get,
X+    you would have a simple regression test for checking for compiler bugs
X+    on new architectures.
X+ 
X+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
X+    It might be useful to have a way of setting the difficulty absolutely ie
X+    in a way not dependant on the machine being used as otherwise level 3 say
X+    is harder on a faster machine than a slower machine. Then you could say to 
X+    someone else as a measure of your Othello playing ability "I can beat reve
X+    on level a3" (a3 stands for absolute level 3).
X+ 
X+ *  From: robert@anucsd.anu.oz.au (Robert Cohen) 
X+    A cute feature I noticed in the standard X11r4 othello is that it thinks
X+    during the humans move time. If the person is a slow player this could make
X+    an appreciable difference if only in giving reve quicker responses.
X+ 
X+ *  From: robert@anucsd.anu.oz.au (Robert Cohen)
X+    It would be nice to add a bit of variety to reve's play. This could be
X+    done in a variety of ways. A simple approach would be to add some minor 
X+    randomness to the evaluation function (optionally of course).
X+    A more sophisticated approach would be to allow the user to tailor the
X+    evaluation function. This could be either done as a fixed set of play styles
X+    eg aggressive, cautious, unpredictable etc or by allowing the user to
X+    change some numerical constants eg the weighting put on mobility by slider.
X+    Of course there would be a "tournament" setting to make reve play as well as
X+    possible.
X+ 
X+ *  Add in a redraw request (^L for example) for the other versions (not just
X+    the tty one).
X+ 
X+ *  Now that reve has a property sheet, and some of the previous panel items
X+    no longer exist, the keyboard interface needed to be changed to include
X+    the new options, and alter some of the existing ones.
X  
X  
X  Items we're unlikely to implement.
X
X------- images.h -------
X*** /tmp/da07487	Sun Dec  9 15:07:20 1990
X--- images.h	Tue Dec  4 21:55:18 1990
X***************
X*** 66,71 ****
X--- 66,79 ----
X  #include "images/nocur.cursor"
X  } ;
X  
X+ unsigned short sch_off_image[] = {
X+ #include "images/Sch_off.icon"
X+ } ;
X+ 
X+ unsigned short sch_on_image[] = {
X+ #include "images/Sch_on.icon"
X+ } ;
X+ 
X  unsigned short white_image[]  = {
X  #include "images/white.icon"
X  } ;
X
X------- extern.h -------
X*** /tmp/da07490	Sun Dec  9 15:07:20 1990
X--- extern.h	Fri Dec  7 14:30:40 1990
X***************
X*** 22,38 ****
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X- extern int animation ;     /* If set, show computer glide and piece drag. */
X  extern int best_cmove ;    /* Best computer move so far. */
X  extern int bfont_height ;  /* Height in pixels for bold font. */
X  extern int but_inverted ;  /* Value of panel item inverted. */
X  extern int color ;         /* Current color value. */
X  extern int cur_ch ;        /* Current character pressed. */
X  extern int curx ;          /* Current mouse X position. */
X  extern int cury ;          /* Current mouse Y position. */
X- extern int do_bestmove ;   /* If set, continuously update best move. */
X- extern int do_last ;       /* If set, don't show last move. */
X- extern int do_number ;     /* If set, the last stone placed is numbered. */
X  extern int down ;          /* Indicates is a mouse button is down. */
X  extern int first_move ;    /* Set if computer plays first move. */
X  extern int iconic ;        /* Start as an icon if set. */
X--- 22,35 ----
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X  extern int best_cmove ;    /* Best computer move so far. */
X  extern int bfont_height ;  /* Height in pixels for bold font. */
X  extern int but_inverted ;  /* Value of panel item inverted. */
X+ extern int cmove_depth ;   /* Depth of the current best computer move. */
X  extern int color ;         /* Current color value. */
X  extern int cur_ch ;        /* Current character pressed. */
X  extern int curx ;          /* Current mouse X position. */
X  extern int cury ;          /* Current mouse Y position. */
X  extern int down ;          /* Indicates is a mouse button is down. */
X  extern int first_move ;    /* Set if computer plays first move. */
X  extern int iconic ;        /* Start as an icon if set. */
X***************
X*** 47,52 ****
X--- 44,50 ----
X  extern int level ;         /* Current difficulty level for computer moves. */
X  extern int loadgame ;      /* Set if there is a game file to load. */
X  extern int lsval ;         /* Set to 'l' or 's', if loading or saving. */
X+ extern int max_depth ;     /* Computer strategy - maximum depth. */
X  extern int monochrome ;    /* If set, display will be in monochrome. */
X  extern int move ;          /* Current move being evaluated. */
X  extern int move_delta ;    /* Delta for piece animation. */
X***************
X*** 57,63 ****
X  extern int piece_y ;       /* Current Y position of moving piece */
X  extern int play_computer ; /* Set if playing against the computer. */
X  extern int posspec ;       /* Set if -Wp or -g option is present (for X11) */
X! extern int quickgame ;     /* If set, don't flash turning stones. */
X  extern int s_flip ;
X  extern int s_move ;
X  extern int s_opponent ;
X--- 55,63 ----
X  extern int piece_y ;       /* Current Y position of moving piece */
X  extern int play_computer ; /* Set if playing against the computer. */
X  extern int posspec ;       /* Set if -Wp or -g option is present (for X11) */
X! extern int processing ;    /* If set, computer is procesing a move. */
X! extern int profmax ;       /* Current maximum depth. */
X! extern int props_showing ; /* If set, the property window is visible. */
X  extern int s_flip ;
X  extern int s_move ;
X  extern int s_opponent ;
X***************
X*** 65,71 ****
X  extern int s_row ;
X  extern int s_col ;
X  extern int show_moves ;    /* If set, all possible moves are being shown. */
X- extern int show_notes ;    /* If set, display notes value from play_reve. */
X  extern int suggestion ;    /* Positive if a suggested move. */
X  extern int suggest_x ;     /* X position of suggested move. */
X  extern int suggest_y ;     /* Y position of suggested move. */
X--- 65,70 ----
X***************
X*** 77,92 ****
X  extern int wy ;            /* Initial Y position of the window. */ 
X  
X  extern time_t timeleft ;   /* Amount of time left for computer moves. */
X  extern long note ;         /* Note value for current computer move. */
X  
X  extern char *diff_values[] ;     /* Values for cyclic difficulty button. */
X  extern char *comp_values[] ;     /* Values for computer plays button. */
X  extern char gamefile[] ;         /* Name of file for load/save. */
X  extern char geometry[MAXDPY][MAXLINE] ;   /* X11 geometry information. */
X  extern char line[] ;
X! extern char *notes_values[] ;    /* Values for cyclic notes item. */
X  extern char *player_values[] ;   /* Values for cyclic black/white item. */
X  extern char progname[] ;         /* The name of this program. */
X  extern char revtable[] ;         /* Table for reversing bits in a byte. */
X  
X  extern char *black_dpy ;         /* Black piece display information. */
X--- 76,94 ----
X  extern int wy ;            /* Initial Y position of the window. */ 
X  
X  extern time_t timeleft ;   /* Amount of time left for computer moves. */
X+ extern long edges[] ;      /* Edges Stability Table */
X  extern long note ;         /* Note value for current computer move. */
X  
X  extern char *diff_values[] ;     /* Values for cyclic difficulty button. */
X  extern char *comp_values[] ;     /* Values for computer plays button. */
X+ extern char edgefile[] ;         /* Location of the reve edge table file. */
X  extern char gamefile[] ;         /* Name of file for load/save. */
X  extern char geometry[MAXDPY][MAXLINE] ;   /* X11 geometry information. */
X  extern char line[] ;
X! extern char *notes_values[] ;    /* Values for cyclic notes button. */
X  extern char *player_values[] ;   /* Values for cyclic black/white item. */
X  extern char progname[] ;         /* The name of this program. */
X+ extern char *resources[] ;       /* Reve X resources read. */
X  extern char revtable[] ;         /* Table for reversing bits in a byte. */
X  
X  extern char *black_dpy ;         /* Black piece display information. */
X***************
X*** 106,109 ****
X  extern enum cantype cmode, last_cmode ;
X  extern enum disp_type dtype ;
X  extern enum dpy_type cur_dpyno ;
X! extern enum set_type direction ;  /* Incremental direction for cycle item. */
X--- 108,112 ----
X  extern enum cantype cmode, last_cmode ;
X  extern enum disp_type dtype ;
X  extern enum dpy_type cur_dpyno ;
X! extern enum set_type direction ;   /* Incremental direction for cycle item. */
X! extern enum win_type curwin ;      /* Window the current event for in. */
X
X------- reve.h -------
X*** /tmp/da07493	Sun Dec  9 15:07:21 1990
X--- reve.h	Sun Dec  9 13:53:16 1990
X***************
X*** 25,38 ****
X--- 25,51 ----
X  #include <stdio.h>
X  #include <sys/types.h>
X  
X+ #ifdef SYSV
X+ #include <string.h>
X+ #include <sys/times.h>
X+ #else
X+ #include <strings.h>
X+ #include <sys/time.h>
X+ #endif /*SYSV*/
X+ 
X  #define  ALARM         (void) alarm       /* To make lint happy. */
X+ #define  CLOSE         (void) close
X+ #define  DUP2          (void) dup2
X  #define  FCLOSE        (void) fclose
X  #define  FFLUSH        (void) fflush
X  #define  FGETS         (void) fgets
X  #define  FSEEK         (void) fseek
X  #define  FPRINTF       (void) fprintf
X+ #define  GETHOSTNAME   (void) gethostname
X  #define  GETTIMEOFDAY  (void) gettimeofday
X  #define  IOCTL         (void) ioctl
X+ #define  KILL          (void) kill
X+ #define  PIPE          (void) pipe
X  #define  PUTC          (void) putc
X  #define  READ          (void) read
X  #define  SSCANF        (void) sscanf
X***************
X*** 51,58 ****
X--- 64,73 ----
X  #define  BHEIGHT       32       /* Height of a reve button item. */
X  #define  BWIDTH        64       /* Width of a reve button item. */
X  #define  CHEIGHT       20       /* Height of a reve cycle item. */
X+ #define  CHOICEGAP     5        /* Gap between choices in a choice item. */
X  #define  CWIDTH        32       /* Width of a reve cycle item. */
X  #define  NOBUTS        6        /* Number of reve buttons. */
X+ #define  NOPROWS       9        /* Number of rows of items on property win. */
X  #define  PIECE_MARGIN  8
X  #define  PIECE_RAD     (CELL_SIZE / 2 - PIECE_MARGIN)
X  
X***************
X*** 65,71 ****
X  #else
X  #define  CELL_SIZE     (int) ((TOTAL_WIDTH-(2*BBORDER)) / BOARD_SIZE)
X  #define  CY            ((NOROWS*BHEIGHT) + ((NOROWS-1)*BGAP) + (2*BBORDER))
X! #define  NOROWS        7        /* Number of rows of reve items. */
X  #define  TOTAL_HEIGHT  CY + (8 * CELL_SIZE) + (2 * BBORDER)
X  #define  TOTAL_WIDTH   ((NOBUTS*BWIDTH) + ((NOBUTS-1)*BGAP) + (2*BBORDER))
X  #endif /*XVIEW*/
X--- 80,86 ----
X  #else
X  #define  CELL_SIZE     (int) ((TOTAL_WIDTH-(2*BBORDER)) / BOARD_SIZE)
X  #define  CY            ((NOROWS*BHEIGHT) + ((NOROWS-1)*BGAP) + (2*BBORDER))
X! #define  NOROWS        6        /* Number of rows of reve items. */
X  #define  TOTAL_HEIGHT  CY + (8 * CELL_SIZE) + (2 * BBORDER)
X  #define  TOTAL_WIDTH   ((NOBUTS*BWIDTH) + ((NOBUTS-1)*BGAP) + (2*BBORDER))
X  #endif /*XVIEW*/
X***************
X*** 103,116 ****
X  #define  MAXDIFF       9       /* Number of levels of difficulty. */
X  #define  MAXDPY        2       /* Maximum possible number of displays. */
X  #define  MAXFONTS      2       /* Maximum number of font types. */
X! #define  MAXIMAGES     9       /* Maximum number of image types. */
X! #define  MAXITEMS      17      /* Number of buttons, cyclics and messages. */
X  
X  #ifndef  MAXLINE
X  #define  MAXLINE       80      /* Length of character strings. */
X  #endif /*!MAXLINE*/
X  
X! #define  MAXMENUS      4       /* Maximum number of popup menus. */
X  #define  NIVEAUMAX     25      /* Maximum possible depth. */
X  
X  #ifndef X11
X--- 118,131 ----
X  #define  MAXDIFF       9       /* Number of levels of difficulty. */
X  #define  MAXDPY        2       /* Maximum possible number of displays. */
X  #define  MAXFONTS      2       /* Maximum number of font types. */
X! #define  MAXIMAGES     11      /* Maximum number of image types. */
X! #define  MAXITEMS      24      /* Number of different panel items. */
X  
X  #ifndef  MAXLINE
X  #define  MAXLINE       80      /* Length of character strings. */
X  #endif /*!MAXLINE*/
X  
X! #define  MAX_PROFMAX   60      /* Maximum search depth. */
X  #define  NIVEAUMAX     25      /* Maximum possible depth. */
X  
X  #ifndef X11
X***************
X*** 131,138 ****
X--- 146,158 ----
X  #define  PAUSE         usleep(500000)    /* 0.5 second. */
X  #endif /*SYSV*/
X  
X+ #define  PROPS_HEIGHT  ((NOPROWS*BHEIGHT) + ((NOPROWS-1)*BGAP) + (2*BBORDER))
X+ #define  PROPS_WIDTH   ((NOBUTS*BWIDTH)   + ((NOBUTS-1)*BGAP)  + (2*BBORDER))
X  #define  PSIZE         40      /* Diameter of playing piece. */
X  
X+ #define  TICKHEIGHT    16      /* Height of the tick toggle box. */
X+ #define  TICKWIDTH     16      /* Width of the tick toggle box. */
X+ 
X  #ifndef  EDGENAME
X  #define  EDGENAME      "reve.edgetable"
X  #endif /*!EDGENAME*/
X***************
X*** 145,150 ****
X--- 165,183 ----
X  
X  #define  VINVUL        50
X  
X+ #define  CP_WHITE           0          /* Computer plays: choices. */
X+ #define  CP_BLACK           1
X+ #define  CP_NEITHER         2
X+ #define  CP_BOTH            3
X+ 
X+ /* Aliases for the property sheet item values. */
X+ #define  ANIMATION        items[(int) OPT_ANIM].value
X+ #define  DO_BESTMOVE      items[(int) OPT_BEST].value
X+ #define  DO_LAST          items[(int) OPT_LAST].value
X+ #define  SHOW_NOTES       items[(int) OPT_EVAL].value
X+ #define  DO_NUMBER        items[(int) OPT_NUM].value
X+ #define  QUICKGAME        items[(int) OPT_FLIP].value
X+ 
X  /* Various pseudo events used by the Reve program. */
X  #define  FRAME_REPAINT    100    /* Reve window needs repainting. */
X  #define  ENTER_WINDOW     101    /* Mouse has entered the reve window. */
X***************
X*** 157,163 ****
X  #define  RIGHT_UP         108    /* Right mouse button was debounced. */
X  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
X  #define  MOUSE_MOVING     110    /* Mouse is moving. */
X! #define  IGNORE_EVENT     111    /* No interest in this event. */
X  
X  /* Batch, last move, locking or show all direction (ON or OFF). */
X  enum bltype   { IS_OFF, IS_ON } ;
X--- 190,197 ----
X  #define  RIGHT_UP         108    /* Right mouse button was debounced. */
X  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
X  #define  MOUSE_MOVING     110    /* Mouse is moving. */
X! #define  PROPS_REPAINT    111    /* Property window needs repainting. */
X! #define  IGNORE_EVENT     112    /* No interest in this event. */
X  
X  /* Batch, last move, locking or show all direction (ON or OFF). */
X  enum bltype   { IS_OFF, IS_ON } ;
X***************
X*** 180,196 ****
X  /* Different types of graphic images. */
X  enum image_type { BUT_NORMAL, BUT_INVERT, BUT_STENCIL,
X                    CY_NORMAL, CY_LINVERT, CY_RINVERT, CY_STENCIL,
X!                   P_WHITE, P_BLACK } ;
X  
X  /* Different types of panel items. */
X! enum item_type { P_BUTTON, P_CYCLE, P_MESSAGE } ;
X  
X  /* Different panel items. */
X! enum panel_type { LOAD_BUT, NEW_GAME_BUT, SAVE_BUT, SHOW_ALL_BUT,
X!                   SUGGEST_BUT, UNDO_BUT, DONE_BUT, CANCEL_BUT, QUIT_BUT,
X!                   BLACK_PLAYS, WHITE_PLAYS, DIFFICULTY, NOTES,
X!                   PANEL_MES, EVAL_MES, SCORE_MES, TURN_MES } ;
X  
X  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
X  
X  enum optype   { RCLR, RINV, RSRC } ;       /* Rasterop codes. */
X--- 214,238 ----
X  /* Different types of graphic images. */
X  enum image_type { BUT_NORMAL, BUT_INVERT, BUT_STENCIL,
X                    CY_NORMAL, CY_LINVERT, CY_RINVERT, CY_STENCIL,
X!                   TOGGLE_ON, TOGGLE_OFF, P_WHITE, P_BLACK } ;
X  
X  /* Different types of panel items. */
X! enum item_type { P_BUTTON, P_CHOICE, P_CYCLE, P_MESSAGE, P_TOGGLE } ;
X  
X+ /* XView reve_proc move operations. */
X+ enum move_type { M_BEST, M_MOVE, M_PROFMAX, M_SUGGESTION, M_TIME } ;
X+ 
X  /* Different panel items. */
X! enum panel_type { LOAD_BUT,    MOVES_BUT,    NEW_GAME_BUT, SAVE_BUT,
X!                   SUGGEST_BUT, UNDO_BUT,     PROPS_BUT,    CANCEL_BUT,
X!                   QUIT_BUT,    BLACK_PLAYS,  WHITE_PLAYS,  PANEL_MES,
X!                   EVAL_MES,    SCORE_MES,    TURN_MES,     COMP_CHOICE,
X!                   DIFF_CHOICE, MAX_DEPTH,    OPT_ANIM,     OPT_BEST,
X!                   OPT_LAST,    OPT_EVAL,     OPT_NUM,      OPT_FLIP } ;
X  
X+ enum res_type { R_ANIMATE, R_BESTMOVE, R_DIFFICULTY, R_LAST,  /* Resources. */
X+                 R_LOG,     R_NOTES,    R_NUMBER,     R_QUICK } ;
X+ 
X  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
X  
X  enum optype   { RCLR, RINV, RSRC } ;       /* Rasterop codes. */
X***************
X*** 197,202 ****
X--- 239,246 ----
X  
X  enum playtype { PLAY_BLACK, PLAY_WHITE } ; /* What the computer is playing. */
X  
X+ enum win_type { W_MAIN, W_PROPS } ;        /* Window types. */
X+ 
X  extern char *getenv() ;
X  extern void exit() ;
X  
X***************
X*** 211,217 ****
X--- 255,265 ----
X  
X  struct iteminfo               /* Item information record. */
X    {
X+     enum win_type wtype ;     /* Which window the item goes in. */
X      enum item_type type ;     /* Item type. */
X+     int lx ;                  /* X position of the label for this item. */
X+     int ly ;                  /* Y position of the label for this item. */
X+     char label[30] ;          /* Label for this item (possibly NULL). */
X      int x ;                   /* X position of this panel item. */
X      int y ;                   /* Y position of this panel item. */
X      int width ;               /* Width of this panel item. */
X***************
X*** 218,255 ****
X      int height ;              /* Height of this panel item. */
X      char text[60] ;           /* Text string associated with this item. */
X      int value ;               /* Current value of item. */
X      void (*func)() ;          /* Function to obey for this panel item. */
X    } ;
X  
X! char *index() ;
X  
X! void animate_move(),       batch() ;
X! void check_button_down(),  check_cycle_down(),   check_item_down() ;
X! void check_item_up(),      close_frame(),        color_area() ;
X! void computer_move(),      computer_plays() ;
X! void create_menu(),        destroy_frame(),      difficulty() ;
X! void do_action(),          do_cycle_key(),       do_key_move() ;
X! void do_move(),            do_selection(),       domove() ;
X! void done(),               draw_button(),        draw_cycle() ;
X! void draw_cycle_item(),    draw_image(),         draw_line() ;
X! void draw_outline(),       draw_piece(),         draw_rect() ;
X! void draw_square(),        draw_stencil(),       draw_text() ;
X! void draw_textfield(),     generate_graphics(),  get_filename() ;
X  void get_options(),        get_xy(),             getparam() ;
X  void handle_board_event(), handle_event(),       handle_item() ;
X  void handle_key(),         init_canvas(),        init_edge_table() ;
X! void init_fonts(),         init_notes(),         init_player() ;
X! void initboard(),          initialise() ;
X! void load_colors(),        load_game(),          lock_screen() ;
X  void make_canvas(),        make_frame(),         make_icon() ;
X  void make_message(),       make_move(),          make_panel() ;
X  void message(),            nap_upto(),           new_game() ;
X! void position_popup(),     process_event(),      quit() ;
X! void remove_textfield(),   save_game(),          set_cursor() ;
X  void set_cycle(),          set_display_types(),  set_eval() ;
X! void set_score(),          set_timer(),          set_turn() ;
X! void show_all(),           show_all_moves(),     show_best() ;
X! void show_last(),          show_number() ;
X  void show_suggestion(),    start_tool() ;
X  void suggest(),            think(),              undo() ;
X  void update_board_image(), usage(),              who_wins() ;
X--- 266,329 ----
X      int height ;              /* Height of this panel item. */
X      char text[60] ;           /* Text string associated with this item. */
X      int value ;               /* Current value of item. */
X+     char **options ;          /* Pointer to list of choice strings. */
X+     int nopts ;               /* Number of options in list. */
X      void (*func)() ;          /* Function to obey for this panel item. */
X    } ;
X  
X! struct reve_in       /* Input supplied on standard input to reve_proc. */
X!   {
X!     enum move_type type ;
X!     int board[64] ;
X!     int player ;
X!     int level ;
X!     time_t timeleft ;
X!   } ;
X  
X! struct reve_out      /* Results written to standard output by reve_proc. */
X!   {
X!     enum move_type type ;
X!     int move ;
X!     int note ;
X!     int depth ;
X!   } ;
X! 
X! char *getenv(), *index() ;
X! char *get_resource() ;
X! 
X! void animate_move(),       batch(),              check_button_down() ;
X! void check_choice_down(),  check_cycle_down(),   check_item_down() ;
X! void check_item_up(),      check_toggle_down(),  close_frame() ;
X! void color_area() ;
X! void computer_move(),      computer_plays(),     connect_to_reve() ;
X! void create_menu(),        destroy_frame() ;
X! void do_action(),          do_computer_move(),   do_cycle_key() ;
X! void do_key_move(),        do_move(),            do_props() ;
X! void do_selection(),       do_suggest(),         domove() ;
X! void done(),               draw_button(),        draw_choice() ;
X! void draw_cycle(),         draw_cycle_item(),    draw_image() ;
X! void draw_line(),          draw_outline(),       draw_piece() ;
X! void draw_rect(),          draw_square(),        draw_stencil() ;
X! void draw_text(),          draw_textfield(),     draw_toggle() ;
X! void generate_graphics(),  get_filename() ;
X  void get_options(),        get_xy(),             getparam() ;
X  void handle_board_event(), handle_event(),       handle_item() ;
X  void handle_key(),         init_canvas(),        init_edge_table() ;
X! void init_fonts(),         initboard(),          initialise() ;
X! void load_colors(),        load_game() ;
X! void load_resources(),     lock_screen() ;
X  void make_canvas(),        make_frame(),         make_icon() ;
X  void make_message(),       make_move(),          make_panel() ;
X  void message(),            nap_upto(),           new_game() ;
X! void open_frame(),         paint_prop_sheet(),   position_popup() ;
X! void process_event(),      quit() ;
X! void read_resources(),     remove_textfield(),   reset_time() ;
X! void save_game(),          set_computer(),       set_cursor() ;
X  void set_cycle(),          set_display_types(),  set_eval() ;
X! void set_option(),         set_score(),          set_timer() ;
X! void set_turn(),           show_all(),           show_all_moves() ;
X! void show_best(),          show_last(),          show_number() ;
X  void show_suggestion(),    start_tool() ;
X  void suggest(),            think(),              undo() ;
X  void update_board_image(), usage(),              who_wins() ;
X+ void write_to_reve() ;
X
END_OF_FILE
if test 52474 -ne `wc -c <'patches03a'`; then
    echo shar: \"'patches03a'\" unpacked with wrong size!
fi
# end of 'patches03a'
fi
echo shar: End of archive 4 \(of 9\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 9 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0