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