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() ;