home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume11 / reve / patch1a / patches01a next >
Text File  |  1990-12-11  |  44KB  |  1,243 lines

  1.  
  2. ------- patchlevel.h -------
  3. Prereq: 0
  4. *** /tmp/da28531    Fri Nov  9 10:13:21 1990
  5. --- patchlevel.h    Mon Nov  5 09:06:16 1990
  6. ***************
  7. *** 6,16 ****
  8.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  9.    *  All rights reserved.
  10.    *
  11. !  *  Permission is given to distribute these sources, as long as the
  12. !  *  introductory messages are not removed, and no monies are exchanged.
  13.    *
  14. !  *  You are forbidden from using Reve as is, or in a modified state, in
  15. !  *  any tournaments, without the permission of the authors.
  16.    *
  17.    *  No responsibility is taken for any errors on inaccuracies inherent
  18.    *  either to the comments or the code of this program, but if reported
  19. --- 6,21 ----
  20.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  21.    *  All rights reserved.
  22.    *
  23. !  *  Permission is granted to copy this source, for redistribution
  24. !  *  in source form only, provided the news headers in "substantially
  25. !  *  unaltered format" are retained, the introductory messages are not
  26. !  *  removed, and no monies are exchanged.
  27.    *
  28. !  *  Permission is also granted to copy this source, without the
  29. !  *  news headers, for the purposes of making an executable copy by
  30. !  *  means of compilation, provided that such copy will not be used
  31. !  *  for the purposes of competition in any othello tournaments, without
  32. !  *  prior permission from the authors.
  33.    *
  34.    *  No responsibility is taken for any errors on inaccuracies inherent
  35.    *  either to the comments or the code of this program, but if reported
  36. ***************
  37. *** 17,20 ****
  38.    *  (see README file), then an attempt will be made to fix them.
  39.    */
  40.   
  41. ! #define  PATCHLEVEL  0
  42. --- 22,25 ----
  43.    *  (see README file), then an attempt will be made to fix them.
  44.    */
  45.   
  46. ! #define  PATCHLEVEL  1
  47. *** /dev/null    Fri Nov  9 10:01:02 1990
  48. --- Imakefile    Fri Nov  9 10:15:13 1990
  49. ***************
  50. *** 0 ****
  51. --- 1,88 ----
  52. + /*  @(#)Imakefile 1.2 90/11/09
  53. +  *
  54. +  *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  55. +  *  All rights reserved.
  56. +  *
  57. +  *  Permission is granted to copy this source, for redistribution
  58. +  *  in source form only, provided the news headers in "substantially
  59. +  *  unaltered format" are retained, the introductory messages are not
  60. +  *  removed, and no monies are exchanged.
  61. +  *
  62. +  *  Permission is also granted to copy this source, without the
  63. +  *  news headers, for the purposes of making an executable copy by
  64. +  *  means of compilation, provided that such copy will not be used
  65. +  *  for the purposes of competition in any othello tournaments, without
  66. +  *  prior permission from the authors.
  67. +  *
  68. +  *  No responsibility is taken for any errors inherent either
  69. +  *  to the comments or the code of this program, but if reported
  70. +  *  (see README file), then an attempt will be made to fix them.
  71. +  *
  72. +  *------------------------------------------------------------------------
  73. +  *  There are various small changes needed when compiling reve on
  74. +  *  different systems. These have been isolated here, and should be
  75. +  *  uncommented if needed.
  76. +  *
  77. +  *
  78. +  *  Not every version of Unix (in particular System V derivitives) has the
  79. +  *  select() system call. If your machine doesn't have this call, then you
  80. +  *  need to uncomment the following definition.
  81. +  *
  82. +  *NOSELECT        = -DNOSELECT
  83. +  *
  84. +  *
  85. +  *  Some machines do not have the usleep library function. If this is
  86. +  *  true, then you will need to uncomment this definition.
  87. +  *
  88. +  *NO_USLEEP      = -DNO_USLEEP
  89. +  */
  90. + #ifdef UltrixArchitecture
  91. + NO_USLEEP    = -DNO_USLEEP
  92. + #endif
  93. + /*  If you not running under a BSD4.3 derived system, the parameters
  94. +  *  to the select call are different, and this definition should be
  95. +  *  uncommented. You need to uncomment this for SunOS v3.x.
  96. +  *
  97. +  *SELTYPE        = -DNO_43SELECT
  98. +  */
  99. + /*  YOU SHOULD NOT NEED TO MODIFY ANYTHING BELOW HERE.  */
  100. +      
  101. + #if HasVoidSignalReturn == NO
  102. + SIGRET    =    -DINT_SIGNAL
  103. + #endif
  104. +      
  105. + /*  Compilation flags and standard macro definitions.  */
  106. + SYS_LIBRARIES    = $(XLIB)     
  107. + CDEFS        = $(NOSELECT) $(NO_USLEEP) $(EDGENAME) $(SELTYPE) \
  108. +           $(SIGRET)
  109. + DEFINES         = $(CDEFS) -DX11
  110. + ETABLE        = reve.edgetable
  111. + LIBDIR        = $(USRLIBDIR)/reve
  112. +      
  113. + /*
  114. +  *  Full pathname of the reve edge table file. This can also be overridden
  115. +  *  with a command line option.
  116. +  */
  117. + EDGENAMEFILE    = $(LIBDIR)/$(ETABLE)
  118. + EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
  119. +      
  120. + SRCS        = boardstuff.c events.c items.c makemove.c main.c \
  121. +           procs.c rev_eval.c rev_ip.c rev_iycp.c x11.c
  122. + OBJS        = boardstuff.o events.o items.o makemove.o main.o \
  123. +           procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
  124. + ComplexProgramTarget(reve)
  125. + MakeDirectories(install,$(LIBDIR))
  126. + InstallNonExec($(ETABLE),$(LIBDIR))
  127. + install:: install.man
  128. + $(ETABLE): reve.edge1 reve.edge2
  129. +     cat reve.edge1 reve.edge2 > $(ETABLE)
  130.  
  131. ------- CHANGES -------
  132. *** /tmp/da28687    Fri Nov  9 10:24:57 1990
  133. --- CHANGES    Fri Nov  9 10:17:27 1990
  134. ***************
  135. *** 4,14 ****
  136.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  137.    *  All rights reserved.
  138.    *
  139. !  *  Permission is given to distribute these sources, as long as the
  140. !  *  introductory messages are not removed, and no monies are exchanged.
  141.    *
  142. !  *  You are forbidden from using Reve as is, or in a modified state, in
  143. !  *  any tournaments, without the permission of the authors.
  144.    *
  145.    *  No responsibility is taken for any errors on inaccuracies inherent
  146.    *  either to the comments or the code of this program, but if reported
  147. --- 4,19 ----
  148.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  149.    *  All rights reserved.
  150.    *
  151. !  *  Permission is granted to copy this source, for redistribution
  152. !  *  in source form only, provided the news headers in "substantially
  153. !  *  unaltered format" are retained, the introductory messages are not
  154. !  *  removed, and no monies are exchanged.
  155.    *
  156. !  *  Permission is also granted to copy this source, without the
  157. !  *  news headers, for the purposes of making an executable copy by
  158. !  *  means of compilation, provided that such copy will not be used
  159. !  *  for the purposes of competition in any othello tournaments, without
  160. !  *  prior permission from the authors.
  161.    *
  162.    *  No responsibility is taken for any errors on inaccuracies inherent
  163.    *  either to the comments or the code of this program, but if reported
  164. ***************
  165. *** 17,22 ****
  166. --- 22,144 ----
  167.   
  168.   Reve change history.
  169.   ====================
  170. + v1.1 - patchlevel 1. 9th November 1990.
  171. +        * Time allocation function was out by 1. All the levels are shifted
  172. +          by 1. This explains why computer move selection at level 1 is so
  173. +          "slow".
  174. +        * The sandwich routine in makemove.c, was accessing out of bounds
  175. +          elements in the square array.
  176. +        * The play_reve routine in rev_ip.c, was accessing out-of bounds
  177. +          elements in the cpi, cpj and cpk arrays.
  178. +        * black_dpy and white_dpy were declared inconsistently in main.c and
  179. +          extern.h
  180. +        * If you select White->human, then Black->computer, Reve correctly
  181. +          plays the black computer move. If you then select Black->human
  182. +          followed by White->computer, Reve incorrectly made another move
  183. +          for black. There was a similar problem when starting a new game
  184. +          with Black being played by computer.
  185. +        * Fixed up a few other inconsistencies found by Saber-C.
  186. +        * Extraction of the optional X11 display names for the -b and -w
  187. +          options in get_options() was incorrect.
  188. +        * If you used the suggest button, to get the computer to suggest a
  189. +          move, it was decrementing the time allowed for the computer.
  190. +        * Adjusted entries 2191 and 2917 of the Reve edge stability table
  191. +          (in reve.edge2).
  192. +        * Added in the code for a new tree algorithm from Yves (rev_eval.c
  193. +          and rev_ip.c).
  194. +        * Added a -r command line option, which will write some computer
  195. +          move information to a reve.res file after each computer move. This
  196. +          is probably only of use to people trying to improve the computer
  197. +          algorithm. The manual pages has been updated.
  198. +        * The computer move timing function in rev_ip.c now uses an alarm and
  199. +          signal, so should be independent of the machine it's running on.
  200. +        * Changed the variable "depth" to "level". As Reve now uses a timing
  201. +          function to calculate it's computer moves, "depth" is not a true
  202. +          indication of depth.
  203. +        * Changed all #include <strings.h> to #include string.h or strings.h
  204. +          depending upon whether SYSV was defined.
  205. +        * The amount of computer time left for moves is now stored for each
  206. +          move, so that if a move is undone against the computer, the previous
  207. +          time left value is restored.
  208. +        * Added in a -m command line line, which will start up Reve in
  209. +          monochrome only, even on a color screen.
  210. +        * The last move made is now shown by putting a black square around
  211. +          the piece on the board. This is updated when a new move is made. The
  212. +          manual pages have been changed to mention this.
  213. +        * The "last" panel button has been replaced with a "moves?" panel
  214. +          button (and rearranged to be alphabetical), which displays all the
  215. +          valid moves at any particular time. This is very useful for
  216. +          beginners and for teaching purposes. The manual pages have been
  217. +          updated to reflect these changes.
  218. +        * Added in more hooks for two screen support for the X11 version.
  219. +        * From Jonathan I. Kamens <jik@pit-manager.MIT.EDU>
  220. +          - Supplied a standard Imakefile for use with the X11 version of reve.
  221. +            The Imakefile expects the manual pages in (nroff'able format) to
  222. +            be in a file called reve.man, so reve.man needs to be renamed to
  223. +            reve.man.text, and reve.6 needs to be renamed to reve.man. This is
  224. +            detailed explicitly at the beginning of the instructions on how to
  225. +            apply this patch.
  226. +          - If X11 is defined (It's defined in the Imake-generated Makefile),
  227. +            then include <X11/Xos.h>. That file does the index/strchr frobbing
  228. +            automatically. Affects boardstuff.c and main.c
  229. +          - Removed the definition of FREAD in reve.h. Some systems use
  230. +            FREAD as a constant in /usr/include/sys/file.h. Incidentally,
  231. +            it was no longer needed.
  232. +          - Only do the index/strchr frobbing if X11 isn't defined. Change
  233. +            to reve.h
  234. +          - As far as I know, void-returning signal handlers are NOT part of
  235. +            standard BSD4.3, so your #ifdef name for that is a bit wrong.
  236. +            This name has been changed to INT_SIGNAL, and all the appropriate
  237. +            files updated.
  238. +        * Included a new XView version of Reve from Valerie Haecky. Adjusted
  239. +          the "generic" sources to handle this. This involved moving
  240. +          draw_piece and draw_rect into boardstuff.c, and *not* including
  241. +          items.c when compiling the XView version. The XView version needs a
  242. +          -DXVIEW flag to correct setup five #defines in reve.h. The
  243. +          Makefile.dist has been updated to handle all this.
  244. +        * The introductory messages in each file have been changed to try to
  245. +          state our wishes in the correct manner.
  246. +        * From Krishnamurthy Ganesan <ganesan@cs.fau.edu>
  247. +          The processing of the readmask in the Xselect_input() routine in
  248. +          x11.c was incorrect for the non-BSD4.3 option. The parentheses
  249. +          were misplaced in two lines.
  250. +        * From Gordon C. Galligher <telxon!ping!source@uunet.UU.NET>
  251. +          Several icons in the images sub-directory have had their names
  252. +          changed to less than 14 characters, so that they can work on
  253. +          System V machines.
  254. +        * There was an offset problem when drawing the inverted piece
  255. +          for the first time on a mouse down. This was before it was
  256. +          dragged around.
  257.   
  258.   v1.1 - patchlevel 0. 22nd October 1990.
  259.   
  260.  
  261. ------- Makefile.dist -------
  262. *** /tmp/da28690    Fri Nov  9 10:24:58 1990
  263. --- Makefile.dist    Thu Nov  8 10:35:39 1990
  264. ***************
  265. *** 6,16 ****
  266.   #  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  267.   #  All rights reserved.
  268.   #
  269. ! #  Permission is given to distribute these sources, as long as the
  270. ! #  introductory messages are not removed, and no monies are exchanged.
  271.   #
  272. ! #  You are forbidden from using Reve as is, or in a modified state, in
  273. ! #  any tournaments, without the permission of the authors.
  274.   #
  275.   #  No responsibility is taken for any errors inherent either
  276.   #  to the comments or the code of this program, but if reported
  277. --- 6,21 ----
  278.   #  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  279.   #  All rights reserved.
  280.   #
  281. ! #  Permission is granted to copy this source, for redistribution
  282. ! #  in source form only, provided the news headers in "substantially
  283. ! #  unaltered format" are retained, the introductory messages are not
  284. ! #  removed, and no monies are exchanged.
  285.   #
  286. ! #  Permission is also granted to copy this source, without the
  287. ! #  news headers, for the purposes of making an executable copy by
  288. ! #  means of compilation, provided that such copy will not be used
  289. ! #  for the purposes of competition in any othello tournaments, without
  290. ! #  prior permission from the authors.
  291.   #
  292.   #  No responsibility is taken for any errors inherent either
  293.   #  to the comments or the code of this program, but if reported
  294. ***************
  295. *** 52,63 ****
  296.   #
  297.   #SELTYPE        = -DNO_43SELECT
  298.   #-----------------------------------------------------------------------
  299. ! #  If you are not running under a BSD4.3 derived system, then the
  300. ! #  second parameter to a signal call is a pointer to an integer function,
  301. ! #  and this definition needs to be uncommented. You need to uncomment this
  302. ! #  for SunOS v3.x.
  303.   #
  304. ! #SIGRET         = -DNO_4_3SIGNAL
  305.   #-----------------------------------------------------------------------
  306.   #  If you are running on a 80286 machine, Microport's 5.2 port of SYSV,
  307.   #  SVAT, or Xenix286, then you will need to uncomment this definition.
  308. --- 57,67 ----
  309.   #
  310.   #SELTYPE        = -DNO_43SELECT
  311.   #-----------------------------------------------------------------------
  312. ! #  If you are running on a system, where the second parameter to a signal
  313. ! #  call is a pointer to an integer function, then this definition needs
  314. ! #  to be uncommented.
  315.   #
  316. ! #SIGRET         = -DINT_SIGNAL
  317.   #-----------------------------------------------------------------------
  318.   #  If you are running on a 80286 machine, Microport's 5.2 port of SYSV,
  319.   #  SVAT, or Xenix286, then you will need to uncomment this definition.
  320. ***************
  321. *** 75,81 ****
  322.   #  If you are compiling the XView version, then the following two lines
  323.   #  should be uncommented, and set appropriately.
  324.   #
  325. ! #XVIEWINCDIR      = -I$(OPENWINHOME)/include
  326.   #XVIEWLIBDIR      = -L$(OPENWINHOME)/lib
  327.   #
  328.   #===========================================================================
  329. --- 79,85 ----
  330.   #  If you are compiling the XView version, then the following two lines
  331.   #  should be uncommented, and set appropriately.
  332.   #
  333. ! #XVIEWINCDIR      = -I$(OPENWINHOME)/include -DXVIEW
  334.   #XVIEWLIBDIR      = -L$(OPENWINHOME)/lib
  335.   #
  336.   #===========================================================================
  337. ***************
  338. *** 96,109 ****
  339.   #
  340.   #==========================================================================
  341.   
  342.   BINARIES        = sv_reve tty_reve xreve xv_reve
  343.   ETABLE        = reve.edgetable
  344.   
  345.   CC              = cc
  346.   
  347. ! STDSRCS         = boardstuff.c events.c items.c makemove.c main.c \
  348.             procs.c rev_eval.c rev_ip.c rev_iycp.c
  349. ! STDOBJS         = boardstuff.o events.o items.o makemove.o main.o \
  350.             procs.o rev_eval.o rev_ip.o rev_iycp.o
  351.   
  352.   GSRCS           = sunview.c tty.c x11.c xview.c
  353. --- 100,115 ----
  354.   #
  355.   #==========================================================================
  356.   
  357. + .KEEP_STATE:
  358.   BINARIES        = sv_reve tty_reve xreve xv_reve
  359.   ETABLE        = reve.edgetable
  360.   
  361.   CC              = cc
  362.   
  363. ! STDSRCS         = boardstuff.c events.c makemove.c main.c \
  364.             procs.c rev_eval.c rev_ip.c rev_iycp.c
  365. ! STDOBJS         = boardstuff.o events.o makemove.o main.o \
  366.             procs.o rev_eval.o rev_ip.o rev_iycp.o
  367.   
  368.   GSRCS           = sunview.c tty.c x11.c xview.c
  369. ***************
  370. *** 111,125 ****
  371.   IDIR        = images
  372.   IMAGES          = $(IDIR)/black.icon \
  373.             $(IDIR)/reve.icon \
  374. !           $(IDIR)/reve.color.icon \
  375.             $(IDIR)/white.icon \
  376. !           $(IDIR)/button.invert.icon \
  377. !           $(IDIR)/button.normal.icon \
  378. !           $(IDIR)/button.stencil.icon \
  379. !           $(IDIR)/cycle.glyph.icon \
  380. !           $(IDIR)/cycle.linvert.icon \
  381. !           $(IDIR)/cycle.rinvert.icon \
  382. !           $(IDIR)/cycle.stencil.icon \
  383.             $(IDIR)/hglass.cursor \
  384.             $(IDIR)/nocur.cursor
  385.   
  386. --- 117,131 ----
  387.   IDIR        = images
  388.   IMAGES          = $(IDIR)/black.icon \
  389.             $(IDIR)/reve.icon \
  390. !           $(IDIR)/Creve.icon \
  391.             $(IDIR)/white.icon \
  392. !           $(IDIR)/Ibutton.icon \
  393. !           $(IDIR)/Nbutton.icon \
  394. !           $(IDIR)/Sbutton.icon \
  395. !           $(IDIR)/Ncycle.icon \
  396. !           $(IDIR)/Lcycle.icon \
  397. !           $(IDIR)/Rcycle.icon \
  398. !           $(IDIR)/Scycle.icon \
  399.             $(IDIR)/hglass.cursor \
  400.             $(IDIR)/nocur.cursor
  401.   
  402. ***************
  403. *** 130,136 ****
  404.   SFILES2        = boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  405.   SFILES3         = $(OTHERS)
  406.   SFILES4         = tty.c x11.c xview.c
  407. ! SFILES5        = sunview.c $(IDIR)
  408.   SFILES6        = reve.edge1
  409.   SFILES7        = reve.edge2
  410.   
  411. --- 136,142 ----
  412.   SFILES2        = boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  413.   SFILES3         = $(OTHERS)
  414.   SFILES4         = tty.c x11.c xview.c
  415. ! SFILES5        = sunview.c $(IDIR) Imakefile
  416.   SFILES6        = reve.edge1
  417.   SFILES7        = reve.edge2
  418.   
  419. ***************
  420. *** 156,171 ****
  421.   
  422.   all:            $(BINARIES)
  423.   
  424. ! sunview:        $(STDOBJS) sunview.o
  425. !         $(CC) -o sv_reve $(CFLAGS) $(STDOBJS) sunview.o $(SVIEWLIBS)
  426.           -cp sv_reve reve
  427.   
  428. ! tty:            $(STDOBJS) tty.o
  429. !         $(CC) -o tty_reve $(CFLAGS) $(STDOBJS) tty.o $(TTYLIBS)
  430.           -cp tty_reve reve
  431.   
  432. ! x11:            $(STDOBJS) x11.o
  433. !         $(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) x11.o \
  434.                      $(X11LIBS)
  435.           -cp xreve reve
  436.   
  437. --- 162,180 ----
  438.   
  439.   all:            $(BINARIES)
  440.   
  441. ! sunview:        $(STDOBJS) items.o sunview.o
  442. !         $(CC) -o sv_reve $(CFLAGS) $(STDOBJS) \
  443. !                 items.o sunview.o $(SVIEWLIBS)
  444.           -cp sv_reve reve
  445.   
  446. ! tty:            $(STDOBJS) items.o tty.o
  447. !         $(CC) -o tty_reve $(CFLAGS) $(STDOBJS) \
  448. !                 items.o tty.o $(TTYLIBS)
  449.           -cp tty_reve reve
  450.   
  451. ! x11:            $(STDOBJS) items.o x11.o
  452. !         $(CC) -o xreve $(X11LIBDIR) $(CFLAGS) $(STDOBJS) \
  453. !                 items.o x11.o \
  454.                      $(X11LIBS)
  455.           -cp xreve reve
  456.   
  457. ***************
  458. *** 187,199 ****
  459.   clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
  460.   
  461.   lint:        lint-sunview lint-tty lint-xview lint-x11
  462. ! lint-sunview:;    lint $(CDEFS) $(STDSRCS) sunview.c $(SVIEWLIBS)
  463. ! lint-tty:;    lint $(CDEFS) $(STDSRCS) tty.c $(TTYLIBS)
  464.   lint-xview:;    lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS) 
  465. ! lint-x11:;    lint $(CDEFS) $(STDSRCS) x11.c $(X11LIBS) 
  466.   
  467.   saber:        $(STDSRCS) x11.c
  468. !         #load $(LDFLAGS) $(CDEFS) $(STDSRCS) x11.c $(X11LIBS)
  469.   
  470.   shar:;          shar.script $(SFILES1) > Part1
  471.           shar.script $(SFILES2) > Part2
  472. --- 196,208 ----
  473.   clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
  474.   
  475.   lint:        lint-sunview lint-tty lint-xview lint-x11
  476. ! lint-sunview:;    lint $(CDEFS) $(STDSRCS) items.c sunview.c $(SVIEWLIBS)
  477. ! lint-tty:;    lint $(CDEFS) $(STDSRCS) items.c tty.c $(TTYLIBS)
  478.   lint-xview:;    lint $(CDEFS) $(STDSRCS) xview.c $(XVIEWLIBS) 
  479. ! lint-x11:;    lint $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS) 
  480.   
  481.   saber:        $(STDSRCS) x11.c
  482. !         #load $(LDFLAGS) $(CDEFS) $(STDSRCS) items.c x11.c $(X11LIBS)
  483.   
  484.   shar:;          shar.script $(SFILES1) > Part1
  485.           shar.script $(SFILES2) > Part2
  486. ***************
  487. *** 204,210 ****
  488.           shar.script $(SFILES7) > Part7
  489.   
  490.   create:         SCCS
  491. !         -sccs create $(STDSRCS) $(GSRCS) $(HDRS) $(IMAGES) $(OTHERS)
  492.   
  493.   SCCS:
  494.           mkdir SCCS
  495. --- 213,220 ----
  496.           shar.script $(SFILES7) > Part7
  497.   
  498.   create:         SCCS
  499. !         -sccs create $(STDSRCS) items.c $(GSRCS) $(HDRS) \
  500. !                  $(IMAGES) $(OTHERS)
  501.   
  502.   SCCS:
  503.           mkdir SCCS
  504.  
  505. ------- README -------
  506. *** /tmp/da28693    Fri Nov  9 10:24:59 1990
  507. --- README    Wed Nov  7 11:41:54 1990
  508. ***************
  509. *** 4,14 ****
  510.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  511.    *  All rights reserved.
  512.    *
  513. !  *  Permission is given to distribute these sources, as long as the
  514. !  *  introductory messages are not removed, and no monies are exchanged.
  515.    *
  516. !  *  You are forbidden from using Reve as is, or in a modified state, in
  517. !  *  any tournaments, without the permission of the authors.
  518.    *
  519.    *  No responsibility is taken for any errors on inaccuracies inherent
  520.    *  either to the comments or the code of this program, but if reported
  521. --- 4,19 ----
  522.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  523.    *  All rights reserved.
  524.    *
  525. !  *  Permission is granted to copy this source, for redistribution
  526. !  *  in source form only, provided the news headers in "substantially
  527. !  *  unaltered format" are retained, the introductory messages are not
  528. !  *  removed, and no monies are exchanged.
  529.    *
  530. !  *  Permission is also granted to copy this source, without the
  531. !  *  news headers, for the purposes of making an executable copy by
  532. !  *  means of compilation, provided that such copy will not be used
  533. !  *  for the purposes of competition in any othello tournaments, without
  534. !  *  prior permission from the authors.
  535.    *
  536.    *  No responsibility is taken for any errors on inaccuracies inherent
  537.    *  either to the comments or the code of this program, but if reported
  538. ***************
  539. *** 187,193 ****
  540.   Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
  541.   Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
  542.   Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
  543. ! John Eras and Heather Rose for bug reports and/or bug fixes plus suggested
  544.   enhancements.
  545.   
  546.   Suggestions for furthur improvement would be most welcome, plus bugs,
  547. --- 192,199 ----
  548.   Steve Misrack, Hugues Leroy, Linton Miller, Mike Stump, D. Hugh Redelmeier,
  549.   Scott W. Danielson, Gary D. Kline, Kjetil Torgrim Homme, Peter Johansson,
  550.   Alfred Nathaniel, Arnold Gill, Martin Chudley, W Mat Waites, Keith Moore,
  551. ! John Eras, Heather Rose, Jonathan I. Kamens, Krishnamurthy Ganesan and
  552. ! Gordon C. Galligher for bug reports and/or bug fixes plus suggested
  553.   enhancements.
  554.   
  555.   Suggestions for furthur improvement would be most welcome, plus bugs,
  556.  
  557. ------- TODO -------
  558. *** /tmp/da28696    Fri Nov  9 10:24:59 1990
  559. --- TODO    Fri Nov  9 09:38:18 1990
  560. ***************
  561. *** 4,14 ****
  562.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  563.    *  All rights reserved.
  564.    *
  565. !  *  Permission is given to distribute these sources, as long as the
  566. !  *  introductory messages are not removed, and no monies are exchanged.
  567.    *
  568. !  *  You are forbidden from using Reve as is, or in a modified state, in
  569. !  *  any tournaments, without the permission of the authors.
  570.    *
  571.    *  No responsibility is taken for any errors on inaccuracies inherent
  572.    *  either to the comments or the code of this program, but if reported
  573. --- 4,19 ----
  574.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  575.    *  All rights reserved.
  576.    *
  577. !  *  Permission is granted to copy this source, for redistribution
  578. !  *  in source form only, provided the news headers in "substantially
  579. !  *  unaltered format" are retained, the introductory messages are not
  580. !  *  removed, and no monies are exchanged.
  581.    *
  582. !  *  Permission is also granted to copy this source, without the
  583. !  *  news headers, for the purposes of making an executable copy by
  584. !  *  means of compilation, provided that such copy will not be used
  585. !  *  for the purposes of competition in any othello tournaments, without
  586. !  *  prior permission from the authors.
  587.    *
  588.    *  No responsibility is taken for any errors on inaccuracies inherent
  589.    *  either to the comments or the code of this program, but if reported
  590. ***************
  591. *** 20,37 ****
  592.   
  593.   1/ Finish off the X11 "two screens on two machines" version. The hooks are
  594.      all in place, but not enough spare time...
  595.   
  596.   2/ Allow the computer to play itself. Currently this option is disabled,
  597.      because of the inability with some of the graphics versions to interrupt
  598.      it, once it's started.
  599.   
  600. ! 3/ From Valerie Haecky <vmh@Eng>
  601. !    It might be nice to have an additional button for <help>. It pops up an
  602. !    alert, giving a short summary of the rules and explaining things, like
  603. !    how Difficulty is measured.
  604.   
  605. ! 4/ With the XView version, disable MS_LEFT whilst the computer is having
  606. !    its move. At the moment, if you press the left mouse button while the
  607. !    computer is doing something, the server will hang.
  608.   
  609. ! 5/ The color icon doesn't display properly with the XView version.
  610. --- 25,143 ----
  611.   
  612.   1/ Finish off the X11 "two screens on two machines" version. The hooks are
  613.      all in place, but not enough spare time...
  614. +    ~ The cursors in x11.c will need to be allocated for each screen
  615. +      separately.
  616. +    ~ In the process_event routine, only allow the FRAME_REPAINT event
  617. +      through if it's now this persons go. Otherwise output a panel message
  618. +      telling the user to wait her/his turn.
  619. +    ~ Changing the Black: and White: cyclic items should have a null effect
  620. +      if dtype is XTWO. Output a message to this effect.
  621. +    ~ If dtype is XTWO, then message and draw_piece should output to both
  622. +      screens. There are probably other routines where this should be the case.
  623. +    ~ There will be a few other places where certain routines will need to
  624. +      output to both displays if dtype is XTWO.
  625.   
  626.   2/ Allow the computer to play itself. Currently this option is disabled,
  627.      because of the inability with some of the graphics versions to interrupt
  628.      it, once it's started.
  629.   
  630. ! 3/ From Valerie Haecky <vmh@Eng.Sun.COM>
  631. !    It might be nice to have an additional button for <help>.
  632. !    It pops up an alert, giving a short summary of the rules
  633. !    and explaining non-obvious things, like how Difficulty is measured.
  634.   
  635. ! 4/ There are several problems outstanding with the XView version:
  636. !    ~ **IMPORTANT** Need to find some way to disable MS_LEFT whilst the
  637. !                    computer is having its move. At the moment, if you press
  638. !                    the left mouse button while the computer is doing something,
  639. !                    the server will hang.
  640. !    ~ The game panel doesn't correct repaint itself. You need to select
  641. !      "Refresh" from the frame menu.
  642. !    ~ The hourglass cursor should be drawn in XOR mode.
  643. !    ~ The board window should not have a window menu.
  644. !    ~ The game board isn't correctly painted with the -m command line option.
  645. !    ~ When you click to get the panel window to the top, the game board should
  646. !      also be raised.
  647. !    ~ The alignment and size of some of the items needs to be adjusted to be
  648. !      more consistent.
  649. !    ~ The color icon doesn't get displayed properly.
  650. !    ~ Would be nice to be able to close the game panel and leave the board
  651. !      window open. Status information could be written to a title line and a
  652. !      window footer (messages such as the number of stones each player
  653. !      currently has; whose turn it is to move could be placed in the title
  654. !      line, and panel messages such as invalid move could be written to the
  655. !      footer.
  656.   
  657. ! 5/ There appears to be a bug with the X11 implementation on an IBM RS6000.
  658. !    When the computer moves a piece from the upper-left border to its place,
  659. !    a "trace" appears along its path. The color of this trace is the color of
  660. !    the background of the screen.
  661. ! 6/ Need to allow options like -scale through on the command line. This can
  662. !    be done by have an init_graphics() routine that gets called right at
  663. !    the start, which strips off graphics specific options.
  664. ! 7/ Need to add in the ability to show the last move, and show all moves to
  665. !    the tty version.
  666. ! 8/ From Valerie Haecky <vmh@Eng.Sun.COM>
  667. !    Display the time left for the user[s] and computer.
  668. ! 9/ From Valerie Haecky <vmh@Eng.Sun.COM>
  669. !    Showing the last move could be optional.
  670. ! 10/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  671. !     ~ Provide an option or button to toggle the animation of the computer
  672. !       piece from the top-left corner onto the board. On slow workstations,
  673. !       this is embarrassingly flickery and quite distracting.
  674. !     ~ Ditto for the flash of the turned over pieces - it slows down the game
  675. !       when you just want a quick game.
  676. !     ~ Add the ability to change the default background colour of the board to
  677. !       a (not too bright !) green colour. After all, that's the colour of the
  678. !       othello sets you buy in the shops!
  679. !  
  680. !     [I'll do these with settable resources. I'll allow you to set some of
  681. !      them on the command line, and I'll add a .reverc file, which will be read
  682. !      from the users home directory. For the X11/XView versions, I'll allow the
  683. !      resources to be set in all the standard X places, and the .reverc file can
  684. !      superceed them - Rich.]
  685. ! 11/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  686. !     Supply a way of forcing the computer to move before its search is complete.
  687. !     This would be very handy at the higher levels.
  688. ! 12/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  689. !     Allow the player to go forwards through a game as well as backwards (Undo
  690. !     only performs the latter and not the former). In other words, "undo the
  691. !     Undo" !
  692. ! 13/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  693. !     As the computer is making it's move, highlight the best square found so
  694. !     far during the computer search and display its rating in the Notes section.
  695. ! 14/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  696. !     What about a 'Play Next Best' option? This would undo the last computer
  697. !     move and play the second best move found rather than the best one. If
  698. !     selected again, there would be another undo and the third best move would
  699. !     be made instead and so on, until the move list is exhausted. It's great
  700. !     for trying out different moves in the same position.
  701. ! 15/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  702. !     Countdown clocks for blitz games (first to hit 00:00:00 loses if the game
  703. !     is still in progress).
  704. ! 16/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  705. !     Board editing.
  706. ! 17/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  707. !     A display of the full tree for the best move rather than just the best
  708. !     move itself.
  709. ! 18/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  710. !     A resign feature if the search shows a completely lost endgame.
  711. ! 19/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  712. !     A 'I will win/lose in x moves' announcement if a forced win/loss is
  713. !     detected.
  714.  
  715. ------- boardstuff.c -------
  716. *** /tmp/da28701    Fri Nov  9 10:25:30 1990
  717. --- boardstuff.c    Fri Nov  9 08:57:42 1990
  718. ***************
  719. *** 7,17 ****
  720.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  721.    *  All rights reserved.
  722.    *
  723. !  *  Permission is given to distribute these sources, as long as the
  724. !  *  introductory messages are not removed, and no monies are exchanged.
  725.    *
  726. !  *  You are forbidden from using Reve as is, or in a modified state, in
  727. !  *  any tournaments, without the permission of the authors.
  728.    *
  729.    *  No responsibility is taken for any errors on inaccuracies inherent
  730.    *  either to the comments or the code of this program, but if reported
  731. --- 7,22 ----
  732.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  733.    *  All rights reserved.
  734.    *
  735. !  *  Permission is granted to copy this source, for redistribution
  736. !  *  in source form only, provided the news headers in "substantially
  737. !  *  unaltered format" are retained, the introductory messages are not
  738. !  *  removed, and no monies are exchanged.
  739.    *
  740. !  *  Permission is also granted to copy this source, without the
  741. !  *  news headers, for the purposes of making an executable copy by
  742. !  *  means of compilation, provided that such copy will not be used
  743. !  *  for the purposes of competition in any othello tournaments, without
  744. !  *  prior permission from the authors.
  745.    *
  746.    *  No responsibility is taken for any errors on inaccuracies inherent
  747.    *  either to the comments or the code of this program, but if reported
  748. ***************
  749. *** 18,35 ****
  750.    *  (see README file), then an attempt will be made to fix them.
  751.    */
  752.   
  753. ! #include <stdio.h>
  754.   #include <ctype.h>
  755. - #ifndef SYSV
  756.   #include <sys/time.h>
  757. - #endif /*SYSV*/
  758.   
  759. ! #include "color.h"
  760. ! #include "reve.h"
  761. ! #include "extern.h"
  762.   
  763.   void
  764.   animate_move(move)
  765.   int move ;
  766. --- 23,38 ----
  767.    *  (see README file), then an attempt will be made to fix them.
  768.    */
  769.   
  770. ! #include "reve.h"
  771. ! #include "color.h"
  772. ! #include "extern.h"
  773.   #include <ctype.h>
  774.   #include <sys/time.h>
  775.   
  776. ! #ifdef X11
  777. ! #include <X11/Xos.h>
  778. ! #endif /*X11*/
  779.   
  780.   void
  781.   animate_move(move)
  782.   int move ;
  783. ***************
  784. *** 50,56 ****
  785.           {
  786.   #ifndef SYSV
  787.             set_timer() ;
  788. ! #endif /*SYSV*/
  789.             x0 = x ;
  790.             y0 = y ;
  791.             x += move_delta ;
  792. --- 53,59 ----
  793.           {
  794.   #ifndef SYSV
  795.             set_timer() ;
  796. ! #endif /*!SYSV*/
  797.             x0 = x ;
  798.             y0 = y ;
  799.             x += move_delta ;
  800. ***************
  801. *** 63,69 ****
  802.             draw_piece(WHITE, x0, CY+y0, RINV) ;
  803.   #ifndef SYSV
  804.             nap_upto(1) ;
  805. ! #endif /*SYSV*/
  806.           }
  807.         draw_piece(WHITE, x, CY+y, RINV) ;
  808.       }
  809. --- 66,72 ----
  810.             draw_piece(WHITE, x0, CY+y0, RINV) ;
  811.   #ifndef SYSV
  812.             nap_upto(1) ;
  813. ! #endif /*!SYSV*/
  814.           }
  815.         draw_piece(WHITE, x, CY+y, RINV) ;
  816.       }
  817. ***************
  818. *** 77,83 ****
  819.           {
  820.   #ifndef SYSV
  821.             set_timer() ;
  822. ! #endif /*SYSV*/
  823.             x0 = x ;
  824.             y0 = y ;
  825.             y += move_delta ;
  826. --- 80,86 ----
  827.           {
  828.   #ifndef SYSV
  829.             set_timer() ;
  830. ! #endif /*!SYSV*/
  831.             x0 = x ;
  832.             y0 = y ;
  833.             y += move_delta ;
  834. ***************
  835. *** 90,96 ****
  836.             draw_piece(WHITE, x0, CY+y0, RINV) ;
  837.   #ifndef SYSV
  838.             nap_upto(1) ;
  839. ! #endif /*SYSV*/
  840.           }
  841.         draw_piece(WHITE, x, CY+y, RINV) ;
  842.       }
  843. --- 93,99 ----
  844.             draw_piece(WHITE, x0, CY+y0, RINV) ;
  845.   #ifndef SYSV
  846.             nap_upto(1) ;
  847. ! #endif /*!SYSV*/
  848.           }
  849.         draw_piece(WHITE, x, CY+y, RINV) ;
  850.       }
  851. ***************
  852. *** 112,118 ****
  853.         who_wins() ;
  854.         last_cmode = cmode ;     /* Save previous value in case of undo. */
  855.         cmode = GAME_OVER ;
  856. !       message(PANEL_MES, "Game over") ;
  857.         return(FALSE) ;
  858.       }
  859.     if ((move = valid_move(&board, player)) == FALSE)
  860. --- 115,121 ----
  861.         who_wins() ;
  862.         last_cmode = cmode ;     /* Save previous value in case of undo. */
  863.         cmode = GAME_OVER ;
  864. !       message(PANEL_MES, "***GAME OVER***") ;
  865.         return(FALSE) ;
  866.       }
  867.     if ((move = valid_move(&board, player)) == FALSE)
  868. ***************
  869. *** 126,132 ****
  870.             who_wins() ;
  871.             last_cmode = cmode ;
  872.             cmode = GAME_OVER ;
  873. !           message(PANEL_MES, "Game over") ;
  874.           }
  875.         return(FALSE) ;
  876.       }
  877. --- 129,135 ----
  878.             who_wins() ;
  879.             last_cmode = cmode ;
  880.             cmode = GAME_OVER ;
  881. !           message(PANEL_MES, "***GAME OVER***") ;
  882.           }
  883.         return(FALSE) ;
  884.       }
  885. ***************
  886. *** 148,153 ****
  887. --- 151,157 ----
  888.       else
  889.         { 
  890.           if (cmode != GAME_OVER) cmode = (enum cantype) ((int) cmode - 1) ;
  891. +         next_player = OPPONENT(next_player) ;
  892.           return ;
  893.         }
  894.   }
  895. ***************
  896. *** 180,185 ****
  897. --- 184,216 ----
  898.   }
  899.   
  900.   
  901. + void
  902. + draw_piece(piece, x, y, op)    /* Draw an othello piece on the board. */
  903. + int piece, x, y ;
  904. + enum optype op ;
  905. + {
  906. +   switch (piece)
  907. +     {
  908. +       case BLACK : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK,
  909. +                                 P_BLACK, P_BLACK) ;
  910. +                    break ;
  911. +       case WHITE : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK,
  912. +                                 P_BLACK, P_WHITE) ;
  913. +     }
  914. + }
  915. +    
  916. +  
  917. + void
  918. + draw_rect(x1, y1, x2, y2, op, color)
  919. + int x1, y1, x2, y2, op, color ;
  920. + {
  921. +   draw_line(x1, y1, x2, y1, op, color) ;
  922. +   draw_line(x1, y1, x1, y2, op, color) ;
  923. +   draw_line(x2, y1, x2, y2, op, color) ;
  924. +   draw_line(x1, y2, x2, y2, op, color) ;
  925. + }
  926.   formfliplist(move, player)
  927.   int move, player ;
  928.   {        
  929. ***************
  930. *** 196,201 ****
  931. --- 227,233 ----
  932.     moves[n].move = move ;
  933.     moves[n].note = note ;
  934.     moves[n].player = player ;
  935. +   moves[n].timeleft = timeleft ;
  936.   
  937.     cnt = count(&board, player) ;
  938.     return(cnt - old_cnt - 1) ;
  939. ***************
  940. *** 263,269 ****
  941.     initboard() ;
  942.     last_move = -1 ;
  943.     init_canvas() ;
  944. !   message(NOTES_MES, "") ;
  945.     while (fgets(buf, MAXLINE, fp) != NULL)
  946.       {
  947.         if (buf[0] == '\n' || buf[0] == '#') continue ;
  948. --- 295,301 ----
  949.     initboard() ;
  950.     last_move = -1 ;
  951.     init_canvas() ;
  952. !   message(EVAL_MES, "") ;
  953.     while (fgets(buf, MAXLINE, fp) != NULL)
  954.       {
  955.         if (buf[0] == '\n' || buf[0] == '#') continue ;
  956. ***************
  957. *** 286,292 ****
  958.         if (lptr < mptr) next_player = BLACK ;    /* Black move? */
  959.         else             next_player = WHITE ;
  960.         SSCANF(lptr, "<%c-%c>", &row, &col) ;
  961. !       if (load_move(moveno, row, col) == 0)
  962.           {
  963.             SPRINTF(buf, "Load error: invalid move <%c-%c> on line %d",
  964.                                       row, col, move) ;
  965. --- 318,324 ----
  966.         if (lptr < mptr) next_player = BLACK ;    /* Black move? */
  967.         else             next_player = WHITE ;
  968.         SSCANF(lptr, "<%c-%c>", &row, &col) ;
  969. !       if (load_move(row, col) == 0)
  970.           {
  971.             SPRINTF(buf, "Load error: invalid move <%c-%c> on line %d",
  972.                                       row, col, move) ;
  973. ***************
  974. *** 309,318 ****
  975.   }
  976.   
  977.   
  978. ! load_move(n, col, row)
  979. ! int n, col, row ;
  980.   {
  981. !   int i, taken, x, y ;
  982.   
  983.     if (row < '1' || row > '8') return(0) ;
  984.     if (isupper(col)) col = tolower(col) ;
  985. --- 341,350 ----
  986.   }
  987.   
  988.   
  989. ! load_move(col, row)
  990. ! int col, row ;
  991.   {
  992. !   int i, x, y ;
  993.   
  994.     if (row < '1' || row > '8') return(0) ;
  995.     if (isupper(col)) col = tolower(col) ;
  996. ***************
  997. *** 319,325 ****
  998.     if (col < 'a' || col > 'h') return(0) ;
  999.     move = (row - '1') * BOARD_SIZE + (col - 'a') ;
  1000.     if (legal(move, next_player, &board) == FALSE) return(0) ;
  1001. !   taken = formfliplist(move, next_player) ;
  1002.     batch(IS_ON) ;
  1003.     FOR_BOARD(i)
  1004.       if (board.square[i] != old_board.square[i])
  1005. --- 351,357 ----
  1006.     if (col < 'a' || col > 'h') return(0) ;
  1007.     move = (row - '1') * BOARD_SIZE + (col - 'a') ;
  1008.     if (legal(move, next_player, &board) == FALSE) return(0) ;
  1009. !   (void) formfliplist(move, next_player) ;
  1010.     batch(IS_ON) ;
  1011.     FOR_BOARD(i)
  1012.       if (board.square[i] != old_board.square[i])
  1013. ***************
  1014. *** 347,353 ****
  1015.     if (elapsed > n) return ;
  1016.     usleep((unsigned) (n - elapsed)) ;
  1017.   }
  1018. ! #endif /*SYSV*/
  1019.   
  1020.   
  1021.   void
  1022. --- 379,385 ----
  1023.     if (elapsed > n) return ;
  1024.     usleep((unsigned) (n - elapsed)) ;
  1025.   }
  1026. ! #endif /*!SYSV*/
  1027.   
  1028.   
  1029.   void
  1030. ***************
  1031. *** 399,405 ****
  1032.   void
  1033.   set_score()
  1034.   {
  1035. !   SPRINTF(line, "Black: %2d, White: %2d",
  1036.                    count(&board, BLACK), count(&board, WHITE)) ;
  1037.     message(SCORE_MES, line) ;
  1038.   }
  1039. --- 431,437 ----
  1040.   void
  1041.   set_score()
  1042.   {
  1043. !   SPRINTF(line, "Stones: Black: %2d  White: %2d",
  1044.                    count(&board, BLACK), count(&board, WHITE)) ;
  1045.     message(SCORE_MES, line) ;
  1046.   }
  1047. ***************
  1048. *** 422,431 ****
  1049.   
  1050.     GETTIMEOFDAY(&tp, &tzp) ;
  1051.   }
  1052. ! #endif /*SYSV*/
  1053.   
  1054.   
  1055.   void
  1056.   show_suggestion()
  1057.   {
  1058.     enum optype rop ;
  1059. --- 454,528 ----
  1060.   
  1061.     GETTIMEOFDAY(&tp, &tzp) ;
  1062.   }
  1063. ! #endif /*!SYSV*/
  1064.   
  1065.   
  1066.   void
  1067. + show_all(state)
  1068. + enum bltype state ;
  1069. + {
  1070. +   int color, d, i, x, y ;
  1071. +   d = (int) cur_dpyno ;
  1072. +   batch(IS_ON) ;
  1073. +   if (state == IS_ON)
  1074. +     {
  1075. +       FOR_BOARD(i) s_all.square[i] = FREE ;
  1076. +       FOR_BOARD(i)
  1077. +         if (board.square[i] == FREE && legal(i, next_player, &board))
  1078. +           {
  1079. +             s_all.square[i] = next_player ;
  1080. +             if (iscolor[d])
  1081. +               {
  1082. +                 get_xy(i, &x, &y) ;
  1083. +                 draw_stencil(x, CY+y, PSIZE, PSIZE, RSRC, C_BLACK,
  1084. +                              P_WHITE, P_WHITE) ;
  1085. +               }
  1086. +             else
  1087. +               {
  1088. +                 x = BBORDER + ((i & 7)  + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1089. +                 y = BBORDER + ((i >> 3) + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1090. +                 draw_line(x-5, CY+y,   x+5, CY+y,   RSRC, C_BLACK) ;
  1091. +                 draw_line(x,   CY+y+5, x,   CY+y-5, RSRC, C_BLACK) ;
  1092. +               }
  1093. +           }
  1094. +     }
  1095. +   else
  1096. +     {
  1097. +       FOR_BOARD(i)
  1098. +         if (s_all.square[i] != FREE)
  1099. +           {
  1100. +             s_all.square[i] = FREE ;
  1101. +             x = (i & 7)  * CELL_SIZE + BBORDER + 1 ;
  1102. +             y = (i >> 3) * CELL_SIZE + BBORDER + 1 ;  
  1103. +             color = (iscolor[d]) ? C_LBROWN : C_WHITE ;
  1104. +             color_area(x, CY + y, CELL_SIZE - 2, CELL_SIZE - 2, color) ;
  1105. +           }
  1106. +     }    
  1107. +   batch(IS_OFF) ;
  1108. +   show_moves = (int) state ;
  1109. + }
  1110. + void
  1111. + show_last(move, state)
  1112. + int move ;
  1113. + enum bltype state ;
  1114. + {
  1115. +   int color, x, y ;
  1116. +   if (move == -1) return ;
  1117. +   if (iscolor[(int) cur_dpyno]) color = (state == IS_ON) ? C_BLACK : C_LBROWN ;
  1118. +   else                          color = (state == IS_ON) ? C_BLACK : C_WHITE ;
  1119. +   x = (move & 7)  * CELL_SIZE + BBORDER ;
  1120. +   y = (move >> 3) * CELL_SIZE + BBORDER ;
  1121. +   draw_rect(x + 2,             CY + y + 2,
  1122. +             x + CELL_SIZE - 2, CY + y + CELL_SIZE - 2, RSRC, color) ;
  1123. + }
  1124. + void
  1125.   show_suggestion()
  1126.   {
  1127.     enum optype rop ;
  1128. ***************
  1129. *** 450,455 ****
  1130. --- 547,554 ----
  1131.   {
  1132.     int flips, i, piece, x, y ;
  1133.    
  1134. +   show_all(IS_OFF) ;
  1135. +   show_last(last_move, IS_OFF) ;
  1136.     show_suggestion() ;
  1137.     for (flips = 0; flips < 4; flips++)
  1138.       {
  1139. ***************
  1140. *** 468,473 ****
  1141. --- 567,574 ----
  1142.         batch(IS_OFF) ;
  1143.         PAUSE ;
  1144.       }
  1145. +   show_last(move, IS_ON) ;
  1146. +   last_move = move ;
  1147.     set_score() ;
  1148.     set_turn(OPPONENT(player)) ;
  1149.     message(TURN_MES, line) ;
  1150. ***************
  1151. *** 475,484 ****
  1152.       if ((player == BLACK && items[(int) BLACK_PLAYS].value == COMPUTER) ||
  1153.           (player == WHITE && items[(int) WHITE_PLAYS].value == COMPUTER))
  1154.         {
  1155. !         SPRINTF(line, "%s: <%c-%c> note : %ld",
  1156.                   (player == BLACK) ? "Black" : "White",
  1157.                   (move & 7) + 'a', (move >> 3) + '1', note) ;
  1158. !         message(NOTES_MES, line) ;
  1159.         }
  1160.   }
  1161.   
  1162. --- 576,585 ----
  1163.       if ((player == BLACK && items[(int) BLACK_PLAYS].value == COMPUTER) ||
  1164.           (player == WHITE && items[(int) WHITE_PLAYS].value == COMPUTER))
  1165.         {
  1166. !         SPRINTF(line, "%s: <%c-%c> eval : %ld",
  1167.                   (player == BLACK) ? "Black" : "White",
  1168.                   (move & 7) + 'a', (move >> 3) + '1', note) ;
  1169. !         message(EVAL_MES, line) ;
  1170.         }
  1171.   }
  1172.   
  1173.  
  1174.  
  1175.