home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume11 / reve / patch2a < prev    next >
Text File  |  1991-07-31  |  56KB  |  1,375 lines

  1. Subject:  v11i097:  reve - an othello game, Patch2a
  2. Newsgroups: comp.sources.games
  3. Approved: billr@saab.CNA.TEK.COM
  4.  
  5. Submitted-by: Rich Burridge <rburridge@sun.COM>
  6. Posting-number: Volume 11, Issue 97
  7. Archive-name: reve/Patch2a
  8. Patch-To: reve: Volume 11, Issue 52-58
  9. Environment: SunView, XView, X11R4, termcap
  10.  
  11.     [This was previously posted to comp.sources.games.bugs.
  12.      It is being reposted here so that it will get archived
  13.      with the original source. This may be unshared or directly
  14.      fed to patch(1), if you have the current version.  -br]
  15.  
  16.  
  17. /*
  18.  *  Official patch #2 for Reve v1.1.
  19.  *
  20.  *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  21.  *  All rights reserved.
  22.  *
  23.  *  Permission is granted to copy this patch, for redistribution
  24.  *  in patch 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 patch, without the news
  29.  *  headers, for the purposes of patching the Reve source and making
  30.  *  an executable copy by means of compilation, provided that such
  31.  *  copy will not be used for the purposes of competition in any othello
  32.  *  tournaments, without prior permission from the authors.
  33.  */
  34.  
  35. CONTENTS:
  36.  
  37. 1. What is reve?
  38. 2/ Changes made in this patch.
  39. 3/ How to install this patch.
  40. 4/ How to get previous patches.
  41.  
  42. ----------------
  43.  
  44. 1/ What is reve?
  45.  
  46. Reve is an othello game. It works under SunView, XView, X11 (Xlib) and on
  47. dumb tty terminals.
  48.  
  49. Reve has nine levels of difficulty. Levels 1-3 should be useful to beginners,
  50. levels 4-6 would satisfy amateurs, and the higher levels will give experts a
  51. good game. Level 8 (30 minutes) is the tournament level.
  52.  
  53. ----------------
  54.  
  55. 2/ Changes made in this patch.
  56.  
  57.        * Adjusted Makefile.dist to correctly install and shar reve.man and
  58.          reve.man.text.
  59.  
  60.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  61.          The message "Computer can't play both sides" or words to that
  62.          effect, almost extends into the "Notes" line--not pretty.
  63.          I've moved the notes panel message down below the display message.
  64.          The score and turn messages are below that. This will allow longer
  65.          display messages and evaluation information.
  66.  
  67.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  68.          From Jacob E. Goodman <JEGCC@CUNYVM.CUNY.EDU>
  69.          The "last move" square was not being removed when a new move was
  70.          made, with the monochrome SunView version.
  71.  
  72.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  73.          Stick with either "piece" or "stone" when outputting messages. The
  74.          manual pages have been changes to use stone[s].
  75.  
  76.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  77.          The mechanism for moving (pulling a circle around) is neat, but
  78.          slightly imprecise. How about making the square which is pointed to
  79.          be surrounded by a black box in addition?
  80.  
  81.        * From Rod Whitby <rwhitby@adl.austek.oz>
  82.          The redefinition of LIBDIR in the Reve Imakefile will override any
  83.          site customisation in site.def in the Imake config directory.
  84.  
  85.        * From Daniel Edward Lovinger <dl2n+@andrew.cmu.edu>
  86.          Use <X11/Xos.h> in x11.c and xview.c - it makes system transparent
  87.          code a considerable bit easier ... at least in terms of header file
  88.          stuff. In particular, it handles the {strings,string}.h bit
  89.          automagically.
  90.  
  91.        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  92.          The -animate command line option has been provided to show animation.
  93.          The computer's stone will glide in from the top left corner of the
  94.          board, and if you hold the left mouse button down, you can drag
  95.          your stone around.
  96.  
  97.        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  98.          The -quick command line option have been provided to prevent the
  99.          flash of the turned over stones, and thus provide a quicker game.
  100.  
  101.        * From Valerie Haecky <vmh@Eng.Sun.COM>
  102.          Showing the last move could be optional. The -last command line
  103.          option has been provided to do this.
  104.  
  105.        * The -b command line option has been changed to -black.
  106.          The -l command line option has been changed to -load.
  107.          The -n command line option has been changed to -notes.
  108.          The -w command line option has been changed to -white.
  109.  
  110.        * From Jacob E. Goodman <JEGCC@CUNYVM.CUNY.EDU>
  111.          With the SunView version on a monochrome screen, when I close Reve
  112.          up, the icon is invisible.
  113.  
  114.       *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  115.          The "Done" button always confuses me, I would have thought "Hide",
  116.          "Iconify" would have been a better label for it.
  117.  
  118.       *  Incorporated the game Reve game strategy routines from Yves that
  119.          were used in the University of Waterloo Othello competition. These
  120.          should increase the speed, and the quality of the notation of the
  121.          5 stones border. A bug detected on DecStation 5000 has been solved
  122.          too. The note is different for:
  123.  
  124.             . . o o o o o .        and        . . o o o o o .
  125.             ? ? o ? ? ? ? ?                   ? ? x ? ? ? ? ?
  126.  
  127.             Bad, because a real               "Good" ( note = 0 ),
  128.             5 stones border.                  because in fact a future
  129.             ( insertion problem )             6 stones border.
  130.  
  131.       *  To stop Saber-C from bitching, added continue's to all while and
  132.          for loops that had empty bodies.
  133.  
  134.       *  A call to draw_rect() in draw_textfield() in items.c had an incorrect
  135.          number of parameters.
  136.  
  137.       *  From John Eldredge <mtxinu!uunet.UU.NET!radar!eldredge@Sun.COM>
  138.          Added in changes to get Reve to compile on an AT&T UNIX PC (also
  139.          known as a 7300 or 3B1). This machine uses version 3.51 of its
  140.          operating system, which is based upon System V Rev. 2.
  141.          In addition to a few SYSV conditional compilations for the #include
  142.          for <sys/times.h>, a new definition has been added to the
  143.          Makefile.dist file, called NO_TIMEVAL which needs to be uncommented,
  144.          since the timeval structure isn't defined under System V. The usleep()
  145.          fix is a real hack; System V (or at least this version) doesn't have
  146.          either the select() system call or the usleep() system call, and can
  147.          only sleep multiples of one second.
  148.  
  149.        * The keyboard accelerator for "moves?" has been changed from 'A' to
  150.          'M'.
  151.  
  152.        * Suggest shows an evaluation if Notes are on.
  153.  
  154.        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  155.          When you undo a move, I suspect the entire board is redrawn. If you
  156.          keep a separate array of what's actually on-screen, then a take-back
  157.          should only redraw the squares that are different.
  158.  
  159.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  160.          It shouldn't say "Black to move" or give Notes when game is over.
  161.  
  162.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  163.          When the human takes a move back, the line to the right, near the
  164.          bottom, saying something like: White: <c-7> eval : 1488
  165.          should change back accordingly.
  166.  
  167.        * The X11 version was incorrectly processing the Shift keys.
  168.  
  169.        * From Valerie Haecky <vmh@Eng.Sun.COM>
  170.          Instead of the square used to show "last move", you could display the
  171.          move number in the stone. This is nice, if you want to comment a game.
  172.          I just find myself counting stones all the time. I've added the
  173.          -number command line option to do this.
  174.  
  175.        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  176.          The note function is not so useful when you don't know what "1488"
  177.          means, anyway. Are positive numbers good for White, or do they just
  178.          represent the incremental value of the latest move? Could they be
  179.          meaningfully converted into an equivalent number of pieces?
  180.  
  181.          [An explanation of how the evaluation value is calculated, has been
  182.           added to the README file, in the strategy section - Rich.]
  183.  
  184.        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  185.          From Soren Hein <shein@ferdowsi.berkeley.edu>
  186.          As the computer is making it's move, highlight the best square found
  187.          so far during the computer search and display its rating in the Notes
  188.          section.
  189.  
  190.        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  191.          Fixed up the MANIFEST and FILES files, to use the new names from
  192.          patch #1.
  193.  
  194. ----------------
  195.  
  196. 3/ How to install this patch.
  197.  
  198. This patch consists of three parts. Save each one first. You should then
  199. use Larry Wall's patch program to apply these changes. Assuming the three
  200. files are called patch2-1, patch2-2 and patch2-3, do the following:
  201.  
  202. cd reve_src        # directory where your reve source files are.
  203. patch <patch1-1
  204. patch <patch1-2
  205. patch <patch1-3
  206.  
  207. Copy Makefile.dist to Makefile, and adjust for your site. See the README
  208. file for things you might have to tweak in order to get Reve to work on
  209. your machine.
  210.  
  211. You will then have to do the appropriate make, to generate the graphics
  212. version you require. Do a "make help" to obtain more information on this.
  213.  
  214. Finally, you should do a "make install". You will probably have to be
  215. super-user to do this.
  216.  
  217. If you have any problems with Reve after applying this patch, and your
  218. problem is not listed in the TODO file, please let us know.
  219.  
  220. ----------------
  221.  
  222. 4/ How to get previous patches.
  223.  
  224. If you need to get patches 1, then this can be obtained from the automatic
  225. mail archive server, by sending a message to rb-archive-server@Aus.Sun.COM
  226. containing the line:
  227.  
  228. send reve patch1
  229.  
  230. where n is the patch number you require.
  231.  
  232. You can also include a path line in these requests to indicate the mail
  233. path that the archive server should use to send the files to you. Such a
  234. path line could be:
  235.  
  236. path uunet.uu.net!hostname!user
  237.  
  238. Note that this is uunet.uu.net and not just uunet. Sun.COM doesn't recognise
  239. just uunet.
  240.  
  241. [NOTE: When unpacking the shars generated by the automatic mail service,
  242.        it is possible you will get error messages for incorrect length.
  243.        Please ignore; hopefully the files should still unpack correctly].
  244.  
  245. Rich Burridge           richb@Aus.Sun.COM
  246. Yves Gallot             galloty@cernvax.cern.ch
  247.  
  248. #! /bin/sh
  249. # This is a shell archive.  Remove anything before this line, then unpack
  250. # it by saving it into a file and typing "sh file".  To overwrite existing
  251. # files, type "sh file -c".  You can also feed this as standard input via
  252. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  253. # will see the following message at the end:
  254. #        "End of archive 1 (of 3)."
  255. # Contents:  patches02a
  256. # Wrapped by billr@saab on Wed Dec 19 16:32:16 1990
  257. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  258. if test -f 'patches02a' -a "${1}" != "-c" ; then 
  259.   echo shar: Will not clobber existing file \"'patches02a'\"
  260. else
  261. echo shar: Extracting \"'patches02a'\" \(43518 characters\)
  262. sed "s/^X//" >'patches02a' <<'END_OF_FILE'
  263. X------- patchlevel.h -------
  264. XPrereq: 1
  265. X*** /tmp/da02130        Wed Nov 28 11:00:28 1990
  266. X--- patchlevel.h        Fri Nov  9 12:42:30 1990
  267. X***************
  268. X*** 22,25 ****
  269. X   *  (see README file), then an attempt will be made to fix them.
  270. X   */
  271. X
  272. X! #define  PATCHLEVEL  1
  273. X--- 22,25 ----
  274. X   *  (see README file), then an attempt will be made to fix them.
  275. X   */
  276. X
  277. X! #define  PATCHLEVEL  2
  278. X
  279. X------- CHANGES -------
  280. X*** /tmp/da02103    Wed Nov 28 11:00:21 1990
  281. X--- CHANGES    Wed Nov 28 10:58:57 1990
  282. X***************
  283. X*** 23,28 ****
  284. X--- 23,167 ----
  285. X  Reve change history.
  286. X  ====================
  287. X  
  288. X+ v1.1 - patchlevel 2. 28th November 1990.
  289. X+ 
  290. X+        * Adjusted Makefile.dist to correctly install and shar reve.man and
  291. X+          reve.man.text.
  292. X+ 
  293. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  294. X+          The message "Computer can't play both sides" or words to that
  295. X+          effect, almost extends into the "Notes" line--not pretty.
  296. X+          I've moved the notes panel message down below the display message.
  297. X+          The score and turn messages are below that. This will allow longer
  298. X+          display messages and evaluation information.
  299. X+ 
  300. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  301. X+          From Jacob E. Goodman <JEGCC@CUNYVM.CUNY.EDU>
  302. X+          The "last move" square was not being removed when a new move was
  303. X+          made, with the monochrome SunView version.
  304. X+ 
  305. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  306. X+          Stick with either "piece" or "stone" when outputting messages. The
  307. X+          manual pages have been changes to use stone[s].
  308. X+ 
  309. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  310. X+          The mechanism for moving (pulling a circle around) is neat, but
  311. X+          slightly imprecise. How about making the square which is pointed to
  312. X+          be surrounded by a black box in addition?
  313. X+ 
  314. X+        * From Rod Whitby <rwhitby@adl.austek.oz>
  315. X+          The redefinition of LIBDIR in the Reve Imakefile will override any
  316. X+          site customisation in site.def in the Imake config directory.
  317. X+ 
  318. X+        * From Daniel Edward Lovinger <dl2n+@andrew.cmu.edu>
  319. X+          Use <X11/Xos.h> in x11.c and xview.c - it makes system transparent
  320. X+          code a considerable bit easier ... at least in terms of header file
  321. X+          stuff. In particular, it handles the {strings,string}.h bit
  322. X+          automagically.
  323. X+ 
  324. X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  325. X+          The -animate command line option has been provided to show animation.
  326. X+          The computer's stone will glide in from the top left corner of the
  327. X+          board, and if you hold the left mouse button down, you can drag
  328. X+          your stone around.
  329. X+ 
  330. X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  331. X+          The -quick command line option have been provided to prevent the
  332. X+          flash of the turned over stones, and thus provide a quicker game.
  333. X+ 
  334. X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
  335. X+          Showing the last move could be optional. The -last command line
  336. X+          option has been provided to do this.
  337. X+ 
  338. X+        * The -b command line option has been changed to -black.
  339. X+          The -l command line option has been changed to -load.
  340. X+          The -n command line option has been changed to -notes.
  341. X+          The -w command line option has been changed to -white.
  342. X+ 
  343. X+        * From Jacob E. Goodman <JEGCC@CUNYVM.CUNY.EDU>
  344. X+          With the SunView version on a monochrome screen, when I close Reve
  345. X+          up, the icon is invisible.
  346. X+ 
  347. X+       *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  348. X+          The "Done" button always confuses me, I would have thought "Hide",
  349. X+          "Iconify" would have been a better label for it.
  350. X+ 
  351. X+       *  Incorporated the game Reve game strategy routines from Yves that
  352. X+          were used in the University of Waterloo Othello competition. These
  353. X+          should increase the speed, and the quality of the notation of the
  354. X+          5 stones border. A bug detected on DecStation 5000 has been solved
  355. X+          too. The note is different for:
  356. X+ 
  357. X+             . . o o o o o .        and        . . o o o o o .
  358. X+             ? ? o ? ? ? ? ?                   ? ? x ? ? ? ? ?
  359. X+ 
  360. X+             Bad, because a real               "Good" ( note = 0 ),
  361. X+             5 stones border.                  because in fact a future
  362. X+             ( insertion problem )             6 stones border.
  363. X+ 
  364. X+       *  To stop Saber-C from bitching, added continue's to all while and
  365. X+          for loops that had empty bodies.
  366. X+ 
  367. X+       *  A call to draw_rect() in draw_textfield() in items.c had an incorrect
  368. X+          number of parameters.
  369. X+ 
  370. X+       *  From John Eldredge <mtxinu!uunet.UU.NET!radar!eldredge@Sun.COM>
  371. X+          Added in changes to get Reve to compile on an AT&T UNIX PC (also
  372. X+          known as a 7300 or 3B1). This machine uses version 3.51 of its
  373. X+          operating system, which is based upon System V Rev. 2.
  374. X+          In addition to a few SYSV conditional compilations for the #include
  375. X+          for <sys/times.h>, a new definition has been added to the
  376. X+          Makefile.dist file, called NO_TIMEVAL which needs to be uncommented,
  377. X+          since the timeval structure isn't defined under System V. The usleep()
  378. X+          fix is a real hack; System V (or at least this version) doesn't have
  379. X+          either the select() system call or the usleep() system call, and can
  380. X+          only sleep multiples of one second.
  381. X+ 
  382. X+        * The keyboard accelerator for "moves?" has been changed from 'A' to
  383. X+          'M'.
  384. X+ 
  385. X+        * Suggest shows an evaluation if Notes are on.
  386. X+ 
  387. X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  388. X+          When you undo a move, I suspect the entire board is redrawn. If you
  389. X+          keep a separate array of what's actually on-screen, then a take-back
  390. X+          should only redraw the squares that are different.
  391. X+ 
  392. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  393. X+          It shouldn't say "Black to move" or give Notes when game is over.
  394. X+ 
  395. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  396. X+          When the human takes a move back, the line to the right, near the
  397. X+          bottom, saying something like: White: <c-7> eval : 1488
  398. X+          should change back accordingly.
  399. X+ 
  400. X+        * The X11 version was incorrectly processing the Shift keys.
  401. X+ 
  402. X+        * From Valerie Haecky <vmh@Eng.Sun.COM>
  403. X+          Instead of the square used to show "last move", you could display the
  404. X+          move number in the stone. This is nice, if you want to comment a game.
  405. X+          I just find myself counting stones all the time. I've added the
  406. X+          -number command line option to do this.
  407. X+ 
  408. X+        * From Soren Hein <shein@ferdowsi.berkeley.edu>
  409. X+          The note function is not so useful when you don't know what "1488"
  410. X+          means, anyway. Are positive numbers good for White, or do they just
  411. X+          represent the incremental value of the latest move? Could they be
  412. X+          meaningfully converted into an equivalent number of pieces?
  413. X+ 
  414. X+          [An explanation of how the evaluation value is calculated, has been
  415. X+           added to the README file, in the strategy section - Rich.]
  416. X+ 
  417. X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  418. X+          From Soren Hein <shein@ferdowsi.berkeley.edu>
  419. X+          As the computer is making it's move, highlight the best square found
  420. X+          so far during the computer search and display its rating in the Notes
  421. X+          section.
  422. X+ 
  423. X+        * From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  424. X+          Fixed up the MANIFEST and FILES files, to use the new names from
  425. X+          patch #1.
  426. X+ 
  427. X  v1.1 - patchlevel 1. 9th November 1990.
  428. X  
  429. X         * Time allocation function was out by 1. All the levels are shifted
  430. X
  431. X------- Makefile.dist -------
  432. X*** /tmp/da02106    Wed Nov 28 11:00:22 1990
  433. X--- Makefile.dist    Tue Nov 20 11:19:44 1990
  434. X***************
  435. X*** 51,56 ****
  436. X--- 51,62 ----
  437. X  #
  438. X  #NO_USLEEP      = -DNO_USLEEP
  439. X  #-----------------------------------------------------------------------
  440. X+ #  If your machine doesn't have a definition for the timeval struct, then
  441. X+ #  you will need to uncomment this definition. It's needed to get Reve to
  442. X+ #  work an an AT&T UNIX PC (aka 7300 or 3b1).
  443. X+ #
  444. X+ #NO_TIMEVAL     = -DNO_TIMEVAL
  445. X+ #------------------------------------------------------------------------
  446. X  #  If you not running under a BSD4.3 derived system, the parameters
  447. X  #  to the select call are different, and this definition should be
  448. X  #  uncommented. You need to uncomment this for SunOS v3.x.
  449. X***************
  450. X*** 94,101 ****
  451. X  #
  452. X  #  Compilation flags and standard macro definitions.
  453. X  #
  454. X! CDEFS        = $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(EDGENAME) $(SELTYPE) \
  455. X!           $(SIGRET) $(SYSV) $(X11INCDIR) $(XVIEWINCDIR)
  456. X  CFLAGS          = -O $(CDEFS)
  457. X  #
  458. X  #==========================================================================
  459. X--- 100,108 ----
  460. X  #
  461. X  #  Compilation flags and standard macro definitions.
  462. X  #
  463. X! CDEFS        = $(NOINDEX) $(NOSELECT) $(NO_USLEEP) $(NO_TIMEVAL) \
  464. X!           $(EDGENAME) $(SELTYPE) $(SIGRET) $(SYSV) \
  465. X!           $(X11INCDIR) $(XVIEWINCDIR)
  466. X  CFLAGS          = -O $(CDEFS)
  467. X  #
  468. X  #==========================================================================
  469. X***************
  470. X*** 129,136 ****
  471. X            $(IDIR)/hglass.cursor \
  472. X            $(IDIR)/nocur.cursor
  473. X  
  474. X! OTHERS          = CHANGES README TODO reve.6 MANIFEST FILES \
  475. X!           reve.man Makefile.dist
  476. X  
  477. X  SFILES1         = events.c items.c makemove.c main.c procs.c
  478. X  SFILES2        = boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  479. X--- 136,143 ----
  480. X            $(IDIR)/hglass.cursor \
  481. X            $(IDIR)/nocur.cursor
  482. X  
  483. X! OTHERS          = CHANGES README TODO reve.man MANIFEST FILES \
  484. X!           reve.man.text Makefile.dist
  485. X  
  486. X  SFILES1         = events.c items.c makemove.c main.c procs.c
  487. X  SFILES2        = boardstuff.c rev_eval.c rev_ip.c rev_iycp.c $(HDRS)
  488. X***************
  489. X*** 190,196 ****
  490. X          -cat reve.edge1 reve.edge2 > $(ETABLE)
  491. X          -cp $(ETABLE) $(LIBDIR)
  492. X          -chmod 644 $(LIBDIR)/$(ETABLE)
  493. X!         -cp reve.6 $(MANDIR)/reve.$(MANSECT)
  494. X          -chmod 644 $(MANDIR)/reve.$(MANSECT)
  495. X  
  496. X  clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
  497. X--- 197,203 ----
  498. X          -cat reve.edge1 reve.edge2 > $(ETABLE)
  499. X          -cp $(ETABLE) $(LIBDIR)
  500. X          -chmod 644 $(LIBDIR)/$(ETABLE)
  501. X!         -cp reve.man $(MANDIR)/reve.$(MANSECT)
  502. X          -chmod 644 $(MANDIR)/reve.$(MANSECT)
  503. X  
  504. X  clean:;         rm -f *.o *.Z *.uu Part* *~ reve $(BINARIES) core
  505. X
  506. X------- README -------
  507. X*** /tmp/da02109    Wed Nov 28 11:00:22 1990
  508. X--- README    Fri Nov 23 08:07:26 1990
  509. X***************
  510. X*** 103,108 ****
  511. X--- 103,131 ----
  512. X               "The Development of a World Class Othello Program", Kai-Fu Lee
  513. X               and Sanjoy Mahajan, Art. Int. 43(1990) 21-36.
  514. X  
  515. X+ Turning Notes on, displays an evaluation for each computer move. This value
  516. X+ is calculated as follows:
  517. X+ 
  518. X+   An edgetable is pre-computed. A value is given to each border configuration.
  519. X+   The average is 0, the mean value about 1000.
  520. X+ 
  521. X+   Then I fix c1 = 312 + 6 * movenumber
  522. X+              c2 = | 50 + 2 * movenumber   1 <= movenumber <= 25
  523. X+                   | 75 + movenumber      25 <= movenumber <= 60
  524. X+              c3 = 99
  525. X+   ( Iago implementation constants )
  526. X+ 
  527. X+   then eval = ( c1 * ( edgesnote + Xsquaresnote ) +
  528. X+                 c2 * currentmobility +
  529. X+                 c3 * Potentialmobility ) / 1000
  530. X+ 
  531. X+   mobility = 1000 * ( p - o ) / ( p + o + 2 )
  532. X+   where p is the evaluation for the player and o for the opponent
  533. X+ 
  534. X+   p and o are about in the set [ -10, 10 ]
  535. X+ 
  536. X+ In short, a positive number is good for the computer, and a negative numvber
  537. X+ is good for the opponent.
  538. X  
  539. X  Here is a listing of a high level Reve vs Reve match.
  540. X  
  541. X
  542. X------- TODO -------
  543. X*** /tmp/da02112    Wed Nov 28 11:00:23 1990
  544. X--- TODO    Wed Nov 28 10:59:04 1990
  545. X***************
  546. X*** 20,29 ****
  547. X   *  (see README file), then an attempt will be made to fix them.
  548. X   */
  549. X  
  550. X  Reve TODO list.
  551. X  ===============
  552. X  
  553. X! 1/ Finish off the X11 "two screens on two machines" version. The hooks are
  554. X     all in place, but not enough spare time...
  555. X     ~ The cursors in x11.c will need to be allocated for each screen
  556. X       separately.
  557. X--- 20,43 ----
  558. X   *  (see README file), then an attempt will be made to fix them.
  559. X   */
  560. X  
  561. X+ Problems with Reve on various hardware.
  562. X+ =======================================
  563. X+ 
  564. X+ *  From Nick Sayer <mrapple@quack.sac.ca.us>
  565. X+    System is a Sun 2/170 running SunOS 4.0, using the TTY version on a
  566. X+    TVI-925. Reve makes a mess on so called "magic-cookie" terminals.
  567. X+ 
  568. X+ *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  569. X+    When compiling rev_ip.c on an HP-UX 9000 Series 300 machine (68020 or
  570. X+    68030), the HP-UX 7.0 C compiler crashes out with the following error:
  571. X+   
  572. X+    C1 internal error in "tuplonges": invalid OREG in recognize_array()
  573. X+   
  574. X+ 
  575. X  Reve TODO list.
  576. X  ===============
  577. X  
  578. X! *  Finish off the X11 "two screens on two machines" version. The hooks are
  579. X     all in place, but not enough spare time...
  580. X     ~ The cursors in x11.c will need to be allocated for each screen
  581. X       separately.
  582. X***************
  583. X*** 36,52 ****
  584. X       screens. There are probably other routines where this should be the case.
  585. X     ~ There will be a few other places where certain routines will need to
  586. X       output to both displays if dtype is XTWO.
  587. X! 
  588. X! 2/ Allow the computer to play itself. Currently this option is disabled,
  589. X     because of the inability with some of the graphics versions to interrupt
  590. X     it, once it's started.
  591. X  
  592. X! 3/ From Valerie Haecky <vmh@Eng.Sun.COM>
  593. X     It might be nice to have an additional button for <help>.
  594. X!    It pops up an alert, giving a short summary of the rules
  595. X!    and explaining non-obvious things, like how Difficulty is measured.
  596. X  
  597. X! 4/ There are several problems outstanding with the XView version:
  598. X     ~ **IMPORTANT** Need to find some way to disable MS_LEFT whilst the
  599. X                     computer is having its move. At the moment, if you press
  600. X                     the left mouse button while the computer is doing something,
  601. X--- 50,66 ----
  602. X       screens. There are probably other routines where this should be the case.
  603. X     ~ There will be a few other places where certain routines will need to
  604. X       output to both displays if dtype is XTWO.
  605. X!  
  606. X! *  Allow the computer to play itself. Currently this option is disabled,
  607. X     because of the inability with some of the graphics versions to interrupt
  608. X     it, once it's started.
  609. X  
  610. X! *  From Valerie Haecky <vmh@Eng.Sun.COM>
  611. X     It might be nice to have an additional button for <help>.
  612. X!    It pops up an alert, giving a short summary of the rules and explaining
  613. X!    non-obvious things, like how Difficulty is measured.
  614. X  
  615. X! *  There are several problems outstanding with the XView version:
  616. X     ~ **IMPORTANT** Need to find some way to disable MS_LEFT whilst the
  617. X                     computer is having its move. At the moment, if you press
  618. X                     the left mouse button while the computer is doing something,
  619. X***************
  620. X*** 67,143 ****
  621. X       currently has; whose turn it is to move could be placed in the title
  622. X       line, and panel messages such as invalid move could be written to the
  623. X       footer.
  624. X  
  625. X! 5/ There appears to be a bug with the X11 implementation on an IBM RS6000.
  626. X!    When the computer moves a piece from the upper-left border to its place,
  627. X!    a "trace" appears along its path. The color of this trace is the color of
  628. X!    the background of the screen.
  629. X! 
  630. X! 6/ Need to allow options like -scale through on the command line. This can
  631. X     be done by have an init_graphics() routine that gets called right at
  632. X     the start, which strips off graphics specific options.
  633. X  
  634. X! 7/ Need to add in the ability to show the last move, and show all moves to
  635. X     the tty version.
  636. X  
  637. X! 8/ From Valerie Haecky <vmh@Eng.Sun.COM>
  638. X     Display the time left for the user[s] and computer.
  639. X  
  640. X! 9/ From Valerie Haecky <vmh@Eng.Sun.COM>
  641. X!    Showing the last move could be optional.
  642. X  
  643. X! 10/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  644. X!     ~ Provide an option or button to toggle the animation of the computer
  645. X!       piece from the top-left corner onto the board. On slow workstations,
  646. X!       this is embarrassingly flickery and quite distracting.
  647. X  
  648. X!     ~ Ditto for the flash of the turned over pieces - it slows down the game
  649. X!       when you just want a quick game.
  650. X! 
  651. X!     ~ Add the ability to change the default background colour of the board to
  652. X!       a (not too bright !) green colour. After all, that's the colour of the
  653. X!       othello sets you buy in the shops!
  654. X   
  655. X!     [I'll do these with settable resources. I'll allow you to set some of
  656. X!      them on the command line, and I'll add a .reverc file, which will be read
  657. X!      from the users home directory. For the X11/XView versions, I'll allow the
  658. X!      resources to be set in all the standard X places, and the .reverc file can
  659. X!      superceed them - Rich.]
  660. X  
  661. X! 11/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  662. X!     Supply a way of forcing the computer to move before its search is complete.
  663. X!     This would be very handy at the higher levels.
  664. X  
  665. X! 12/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  666. X!     Allow the player to go forwards through a game as well as backwards (Undo
  667. X!     only performs the latter and not the former). In other words, "undo the
  668. X!     Undo" !
  669. X  
  670. X! 13/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  671. X!     As the computer is making it's move, highlight the best square found so
  672. X!     far during the computer search and display its rating in the Notes section.
  673. X  
  674. X! 14/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  675. X!     What about a 'Play Next Best' option? This would undo the last computer
  676. X!     move and play the second best move found rather than the best one. If
  677. X!     selected again, there would be another undo and the third best move would
  678. X!     be made instead and so on, until the move list is exhausted. It's great
  679. X!     for trying out different moves in the same position.
  680. X  
  681. X! 15/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  682. X!     Countdown clocks for blitz games (first to hit 00:00:00 loses if the game
  683. X!     is still in progress).
  684. X  
  685. X! 16/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  686. X!     Board editing.
  687. X  
  688. X! 17/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  689. X!     A display of the full tree for the best move rather than just the best
  690. X!     move itself.
  691. X  
  692. X! 18/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  693. X!     A resign feature if the search shows a completely lost endgame.
  694. X  
  695. X! 19/ From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  696. X!     A 'I will win/lose in x moves' announcement if a forced win/loss is
  697. X!     detected.
  698. X--- 81,298 ----
  699. X       currently has; whose turn it is to move could be placed in the title
  700. X       line, and panel messages such as invalid move could be written to the
  701. X       footer.
  702. X+    ~ It should be possible to start a load/save by just typing Return in the
  703. X+      Load/Save popup.
  704. X  
  705. X! *  Need to allow options like -scale through on the command line. This can
  706. X     be done by have an init_graphics() routine that gets called right at
  707. X     the start, which strips off graphics specific options.
  708. X  
  709. X! *  Need to add in the ability to show the last move, and show all moves to
  710. X     the tty version.
  711. X  
  712. X! *  From Valerie Haecky <vmh@Eng.Sun.COM>
  713. X     Display the time left for the user[s] and computer.
  714. X  
  715. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  716. X!    Add the ability to change the default background colour of the board to
  717. X!    a (not too bright !) green colour. After all, that's the colour of the
  718. X!    othello sets you buy in the shops!
  719. X!  
  720. X!    [I'll do these with settable resources. I'll allow you to set some of
  721. X!     them on the command line, and I'll add a .reverc file, which will be read
  722. X!     from the users home directory. For the X11/XView versions, I'll allow the
  723. X!     resources to be set in all the standard X places, and the .reverc file can
  724. X!     superceed them - Rich.]
  725. X  
  726. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  727. X!    Supply a way of forcing the computer to move before its search is complete.
  728. X!    This would be very handy at the higher levels.
  729. X  
  730. X!    If we can actually see what moves have been though about so far, then you
  731. X!    may no longer be left in the dark as to what the computer is doing (you can
  732. X!    manually stop it thinking when it finds a really strong move for example).
  733. X!    As an afterthought, I realised that it would be nice to know what ply
  734. X!    level the search is currently up to.
  735. X   
  736. X!    An even neater trick would be to number each square with its position in
  737. X!    the best move list. You could either show this at the end of each ply or
  738. X!    update in real-time (in which case, the numbered squares would need to be
  739. X!    cleared when the ply search is deepened to avoid confusion - also some
  740. X!    on-screen renumbering would have to be done on-the-fly).
  741. X!  
  742. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  743. X!    Allow the player to go forwards through a game as well as backwards (Undo
  744. X!    only performs the latter and not the former). In other words, "undo the
  745. X!    Undo" !
  746. X  
  747. X!    "New Game" should just undo the game right back to the start. That way
  748. X!    a player can use the move forwards facility to replay the game easily
  749. X!    right from the start. Of course, as soon as the player makes a new move,
  750. X!    then s/he won't be able to replay the game any further.
  751. X  
  752. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  753. X!    Countdown clocks for blitz games (first to hit 00:00:00 loses if the game
  754. X!    is still in progress).
  755. X  
  756. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  757. X!    From Valerie Haecky <vmh@Eng.Sun.COM>
  758. X!    Board editing. A 'setup' mode, where you can place stones on the board
  759. X!    (NOT moves). This is good for game analysis, puzzles, starting from a
  760. X!    specific opening (like Reve always plays perpendicular, and no-one knows
  761. X!    whether this is best, and it would be nice to set up other openings).
  762. X!    It has to be stones, not moves, because puzzles don't always contain legal
  763. X!    positions, and transcripts have bugs.
  764. X  
  765. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  766. X!    A 'I will win/lose in x moves' announcement if a forced win/loss is
  767. X!    detected.
  768. X  
  769. X! *  From Valerie Haecky <vmh@Eng.Sun.COM>
  770. X!    With the XView version, when you change the Black/White setting in the
  771. X!    buttons, the default in the menu should change, too.
  772. X!    Or: if the default in the menu stays the same, if you } hit the new menu
  773. X!    button, and ask for the default, the buttons should update to reflect this.
  774. X  
  775. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  776. X!    When you click on Quit and have actually made some moves/changes, then
  777. X!    it would be nice to have a dialogue box pop up to say "Save game before
  778. X!    Quitting ?" with Yes, No and Cancel buttons in the box. Perhaps this could
  779. X!    be part of a .reverc/.Xresources setting, because some people might not
  780. X!    like the intrusion. This should probably apply to the "New Game" button
  781. X!    too come to think of it ("Save game before Restarting ?" in this case).
  782. X  
  783. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  784. X!    Display the number of board positions searched so far. The frequency of
  785. X!    update is up to taste really - perhaps when the best move found is
  786. X!    updated. Tied in with this, you could give a "positions searched per
  787. X!    second" rating when the computer finishes its search and makes its move.
  788. X!    This would be a great measure of the speed of the machine/algorithm.
  789. X  
  790. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  791. X!    Allow the level to be explicitly set in seconds per move (or perhaps
  792. X!    minutes per game as it currently is) rather than having a fixed set of
  793. X!    levels. The highest playing level could be called "Infinite" rather than
  794. X!    "Tournament" and just plays until interrupted or the game end is detected.
  795. X  
  796. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  797. X!    Implement an "Equality" play mode which matches the computer playing time
  798. X!    exactly with the human's.
  799. X! 
  800. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  801. X!    Have a 3-D board option. It'd sure look great. You just need to angle the
  802. X!    edges inward from bottom to top and draw elipses rather than circles.
  803. X!    Taking this further, you come show a wood grained board, and a light
  804. X!    source up above for ray shaded stones.
  805. X! 
  806. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  807. X!    If you intend to implement on-screen clocks (hopefully in HH:MM:SS
  808. X!    format), then have options to reset them to zero at any time and also
  809. X!    to stop them (effectively a "Pause" mode) - perhaps that could be tied
  810. X!    in with iconification. Perhaps another option (or resource to decide
  811. X!    whether the clocks should be analog or digital).
  812. X! 
  813. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  814. X!    Show the four "blobs" at the edges of the four central squares (top-left
  815. X!    of d4, top-right of d5, bottom-left of e4 and bottom-right of e5). No,
  816. X!    I don't know why they're there on commercial Othello boards in the first
  817. X!    place, except perhaps to mark the starting positions.
  818. X! 
  819. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  820. X!    Have some annoyingly intrusive comments during the game :-) Examples
  821. X!    could be: "That was a really bad move", "I'm crushing you", "This
  822. X!    position is boring", "Hurry up and make your move !" etc. etc.
  823. X! 
  824. X!    [Othello2, the predecesor of the graphics used in Reve, and posted to
  825. X!     comp.sources.games last year, used to have this ability - Rich.]
  826. X! 
  827. X! *  From Robert Cohen <robert@anucsd.anu.oz.au>
  828. X!    If you play black and as your first move you go either e6 or f5 and then
  829. X!    ask for a suggestion, the suggestion is a1 which is of course an illegal
  830. X!    move. This appears to be independent of level chosen.
  831. X! 
  832. X! *  Try to get online copies of the two paper referenced in the README file.
  833. X!    Otherwise, add more comments to the computer strategy code.
  834. X! 
  835. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  836. X!    Allow the board to be rotated 90 degrees. The movelist will also have
  837. X!    to be adjusted of course.
  838. X! 
  839. X! *  Add in the ability for the Reve window[s] to be totally resized. This
  840. X!    would involve the black and white stone offscreen images being
  841. X!    generated "on-the-fly". Two things to note:
  842. X! 
  843. X!    a) The resize must be forced to be square in dimensions. This avoids very
  844. X!       strange-looking elliptical pieces.
  845. X! 
  846. X!    b) The dimensions should be a multiple of 8, otherwise there will be some
  847. X!       funny sub-dimensions for border, square and piece sizes.
  848. X! 
  849. X! *  From Soren Hein <shein@ferdowsi.berkeley.edu>
  850. X!    Reve currently can't refresh the screen when the computer is making a
  851. X!    move.
  852. X! 
  853. X! *  From Soren Hein <shein@ferdowsi.berkeley.edu>
  854. X!    Why double switches for White, Black and Notes? Both halves of the
  855. X!    switches do the same thing.
  856. X! 
  857. X! *  From Soren Hein <shein@ferdowsi.berkeley.edu>
  858. X!    Possible to give some strength indication of the levels? Maybe by
  859. X!    analogy with chess ratings, if you're familiar enough with Elo-ratings
  860. X!    to make guesses/comparisons.
  861. X! 
  862. X! *  From Soren Hein <shein@ferdowsi.berkeley.edu>
  863. X!    There should be symmetry between the case when the human can't move
  864. X!    and when there is only one move for them. Yet in one case the program just
  865. X!    goes on, and in the other, it waits for the only move. I would like to
  866. X!    give my OK to forfeit before the program takes its next move.
  867. X! 
  868. X! *  From Dan Bernstein <brnstnd@KRAMDEN.ACF.NYU.EDU>
  869. X!    An idea which can possibly be incorporated:
  870. X! 
  871. X!    Along with each board keep two arrays size 100 (it's easier on the code
  872. X!    to use artifical borders) of bytes. Each byte has a bit set if a player
  873. X!    can take from that spot in the direction numbered by the bit. This turns
  874. X!    out to be reasonably easy to maintain with the moves, and it makes legal
  875. X!    move checks and actual flips so fast that the program runs about three
  876. X!    times faster overall.
  877. X! 
  878. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  879. X!    It would be nice to have the ability to "make tty" in the Imakefile as
  880. X!    well as being able to generate the X11 version.
  881. X! 
  882. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  883. X!    Add in a move list window, which would contain a scrollable list of all
  884. X!    the moves so far (plus evaluation for the computers moves).
  885. X! 
  886. X! 
  887. X! Items we're unlikely to implement.
  888. X! ==================================
  889. X! 
  890. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  891. X!    From Soren Hein <shein@ferdowsi.berkeley.edu>
  892. X!    What about a 'Play Next Best' option? This would undo the last computer
  893. X!    move and play the second best move found rather than the best one. If
  894. X!    selected again, there would be another undo and the third best move would
  895. X!    be made instead and so on, until the move list is exhausted. It's great
  896. X!    for trying out different moves in the same position.
  897. X!  
  898. X!    [There is currently no ordering move list, because a search can be stopped
  899. X!     by the alarm. Then the move list is only 1 or 2 moves length - Yves.]
  900. X! 
  901. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  902. X!    A display of the full tree for the best move rather than just the best
  903. X!    move itself.
  904. X! 
  905. X!    [In my algorithm, it is impossible to have it. How do want to know, when
  906. X!     you are in the tree, that it will be the best move ? And when you know it,
  907. X!     it is impossible to know where you were in the tree - Yves.]
  908. X! 
  909. X! *  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
  910. X!    A resign feature if the search shows a completely lost endgame.
  911. X! 
  912. X!    [Othello is not chess. The result is the disks differential, not win,
  913. X!     tie or loss. And I don't know if it is a "completely lost endgame". I
  914. X!     only know that if the opponent is perfect, then I will lose. A human
  915. X!     player that should win at move 46 and doesn't use undo, can very easily
  916. X!     lose - Yves.]
  917. X
  918. X------- boardstuff.c -------
  919. X*** /tmp/da02115    Wed Nov 28 11:00:24 1990
  920. X--- boardstuff.c    Wed Nov 28 10:35:13 1990
  921. X***************
  922. X*** 27,33 ****
  923. X--- 27,37 ----
  924. X  #include "color.h"
  925. X  #include "extern.h"
  926. X  #include <ctype.h>
  927. X+ #ifdef SYSV
  928. X+ #include <sys/times.h>
  929. X+ #else
  930. X  #include <sys/time.h>
  931. X+ #endif /*SYSV*/
  932. X  
  933. X  #ifdef X11
  934. X  #include <X11/Xos.h>
  935. X***************
  936. X*** 179,190 ****
  937. X    taken = formfliplist(move, player) ;
  938. X    update_board_image(player) ;
  939. X    SPRINTF(line, "%s took %d %s", (player == BLACK) ? "Black" : "White",
  940. X!                           taken, (taken  == 1)     ? "piece" : "pieces") ;
  941. X    message(PANEL_MES, line) ;
  942. X  }
  943. X  
  944. X  
  945. X  void
  946. X  draw_piece(piece, x, y, op)    /* Draw an othello piece on the board. */
  947. X  int piece, x, y ;
  948. X  enum optype op ;
  949. X--- 183,204 ----
  950. X    taken = formfliplist(move, player) ;
  951. X    update_board_image(player) ;
  952. X    SPRINTF(line, "%s took %d %s", (player == BLACK) ? "Black" : "White",
  953. X!                           taken, (taken  == 1)     ? "stone" : "stones") ;
  954. X    message(PANEL_MES, line) ;
  955. X  }
  956. X  
  957. X  
  958. X  void
  959. X+ draw_outline(move, state)
  960. X+ int move ;
  961. X+ enum bltype state ;
  962. X+ {
  963. X+   if (last_outline == -1) return ;
  964. X+   draw_square(move, state, 1) ;
  965. X+ }
  966. X+ 
  967. X+ 
  968. X+ void
  969. X  draw_piece(piece, x, y, op)    /* Draw an othello piece on the board. */
  970. X  int piece, x, y ;
  971. X  enum optype op ;
  972. X***************
  973. X*** 202,208 ****
  974. X   
  975. X  void
  976. X  draw_rect(x1, y1, x2, y2, op, color)
  977. X! int x1, y1, x2, y2, op, color ;
  978. X  {
  979. X    draw_line(x1, y1, x2, y1, op, color) ;
  980. X    draw_line(x1, y1, x1, y2, op, color) ;
  981. X--- 216,223 ----
  982. X   
  983. X  void
  984. X  draw_rect(x1, y1, x2, y2, op, color)
  985. X! int x1, y1, x2, y2, color ;
  986. X! enum optype op ;
  987. X  {
  988. X    draw_line(x1, y1, x2, y1, op, color) ;
  989. X    draw_line(x1, y1, x1, y2, op, color) ;
  990. X***************
  991. X*** 211,216 ****
  992. X--- 226,248 ----
  993. X  }
  994. X  
  995. X  
  996. X+ void
  997. X+ draw_square(move, state, offset)
  998. X+ int move, offset ;
  999. X+ enum bltype state ;
  1000. X+ {
  1001. X+   int color, x, y ;
  1002. X+ 
  1003. X+   if (iscolor[(int) cur_dpyno]) color = (state == IS_ON) ? C_BLACK : C_LBROWN ;
  1004. X+   else                          color = (state == IS_ON) ? C_BLACK : C_WHITE ;
  1005. X+ 
  1006. X+   x = (move & 7)  * CELL_SIZE + BBORDER ;
  1007. X+   y = (move >> 3) * CELL_SIZE + BBORDER ;
  1008. X+   draw_rect(x + offset,             CY + y + offset,
  1009. X+             x + CELL_SIZE - offset, CY + y + CELL_SIZE - offset, RSRC, color) ;
  1010. X+ }
  1011. X+ 
  1012. X+ 
  1013. X  formfliplist(move, player)
  1014. X  int move, player ;
  1015. X  {        
  1016. X***************
  1017. X*** 429,434 ****
  1018. X--- 461,478 ----
  1019. X  
  1020. X  
  1021. X  void
  1022. X+ set_eval(player, move, note)
  1023. X+ int player, move ;
  1024. X+ long note ;
  1025. X+ {
  1026. X+   SPRINTF(line, "%s: <%c-%c> eval : %ld",
  1027. X+           (player == BLACK) ? "Black" : "White",
  1028. X+           (move & 7) + 'a', (move >> 3) + '1', note) ;
  1029. X+   message(EVAL_MES, line) ;
  1030. X+ }
  1031. X+ 
  1032. X+ 
  1033. X+ void
  1034. X  set_score()
  1035. X  {
  1036. X    SPRINTF(line, "Stones: Black: %2d  White: %2d",
  1037. X***************
  1038. X*** 505,524 ****
  1039. X  
  1040. X  
  1041. X  void
  1042. X  show_last(move, state)
  1043. X  int move ;
  1044. X  enum bltype state ;
  1045. X  {
  1046. X!   int color, x, y ;
  1047. X  
  1048. X-   if (move == -1) return ;
  1049. X-   if (iscolor[(int) cur_dpyno]) color = (state == IS_ON) ? C_BLACK : C_LBROWN ;
  1050. X-   else                          color = (state == IS_ON) ? C_BLACK : C_WHITE ;
  1051. X  
  1052. X!   x = (move & 7)  * CELL_SIZE + BBORDER ;
  1053. X!   y = (move >> 3) * CELL_SIZE + BBORDER ;
  1054. X!   draw_rect(x + 2,             CY + y + 2,
  1055. X!             x + CELL_SIZE - 2, CY + y + CELL_SIZE - 2, RSRC, color) ;
  1056. X  }
  1057. X  
  1058. X  
  1059. X--- 549,603 ----
  1060. X  
  1061. X  
  1062. X  void
  1063. X+ show_best(move, note)
  1064. X+ int move ;
  1065. X+ long note ;
  1066. X+ {
  1067. X+   batch(IS_ON) ;
  1068. X+   if (move == -1 || do_bestmove == FALSE) return ;
  1069. X+   if (best_cmove != -1)
  1070. X+     draw_square(best_cmove, IS_OFF, 2) ;
  1071. X+   best_cmove = move ;
  1072. X+   draw_square(best_cmove, IS_ON, 2) ;
  1073. X+   if (show_notes) set_eval(next_player, move, note) ;
  1074. X+   batch(IS_OFF) ;
  1075. X+ }
  1076. X+ 
  1077. X+ 
  1078. X+ void
  1079. X  show_last(move, state)
  1080. X  int move ;
  1081. X  enum bltype state ;
  1082. X  {
  1083. X!   if (move == -1 || do_last == FALSE) return ;
  1084. X!   draw_square(move, state, 2) ;
  1085. X! }
  1086. X  
  1087. X  
  1088. X! void
  1089. X! show_number(move, state)
  1090. X! int move ;
  1091. X! enum bltype state ;
  1092. X! {
  1093. X!   char num[3] ;
  1094. X!   int color, strw, val, x, y ;
  1095. X! 
  1096. X!   if (move == -1 || do_number == FALSE) return ;
  1097. X!   if (board.square[move] == BLACK)
  1098. X!     color = (state == IS_ON) ? C_WHITE : C_BLACK ;
  1099. X!   else if (board.square[move] == WHITE)
  1100. X!     color = (state == IS_ON) ? C_BLACK : C_WHITE ;
  1101. X!   x = (move & 7)  * CELL_SIZE + BBORDER + PIECE_MARGIN ;
  1102. X!   y = (move >> 3) * CELL_SIZE + BBORDER + PIECE_MARGIN ;
  1103. X! 
  1104. X!   val = 60 - board.moves_left ;
  1105. X!   if (state == IS_OFF) val-- ;
  1106. X!   SPRINTF(num, "%2d", val) ;
  1107. X!   strw = get_strwidth(NFONT, num) ;
  1108. X! 
  1109. X!   x = x + ((2 * PIECE_RAD) - strw) / 2 ;
  1110. X!   y = y + CY + nfont_height + ((2 * PIECE_RAD) - nfont_height) / 2 ;
  1111. X!   draw_text(x, y, NFONT, color, num) ;
  1112. X  }
  1113. X  
  1114. X  
  1115. X***************
  1116. X*** 545,556 ****
  1117. X  update_board_image(player)
  1118. X  int player ;
  1119. X  {
  1120. X!   int flips, i, piece, x, y ;
  1121. X   
  1122. X    show_all(IS_OFF) ;
  1123. X    show_last(last_move, IS_OFF) ;
  1124. X    show_suggestion() ;
  1125. X!   for (flips = 0; flips < 4; flips++)
  1126. X      {
  1127. X        batch(IS_ON) ;
  1128. X        FOR_BOARD(i)
  1129. X--- 624,637 ----
  1130. X  update_board_image(player)
  1131. X  int player ;
  1132. X  {
  1133. X!   int flips, i, piece, total_flips, x, y ;
  1134. X   
  1135. X+   total_flips = (quickgame == TRUE) ? 2 : 4 ;
  1136. X    show_all(IS_OFF) ;
  1137. X    show_last(last_move, IS_OFF) ;
  1138. X+   show_number(last_move, IS_OFF) ;
  1139. X    show_suggestion() ;
  1140. X!   for (flips = 0; flips < total_flips; flips++)
  1141. X      {
  1142. X        batch(IS_ON) ;
  1143. X        FOR_BOARD(i)
  1144. X***************
  1145. X*** 568,573 ****
  1146. X--- 649,655 ----
  1147. X        PAUSE ;
  1148. X      }
  1149. X    show_last(move, IS_ON) ;
  1150. X+   show_number(move, IS_ON) ;
  1151. X    last_move = move ;
  1152. X    set_score() ;
  1153. X    set_turn(OPPONENT(player)) ;
  1154. X***************
  1155. X*** 575,586 ****
  1156. X    if (show_notes)
  1157. X      if ((player == BLACK && items[(int) BLACK_PLAYS].value == COMPUTER) ||
  1158. X          (player == WHITE && items[(int) WHITE_PLAYS].value == COMPUTER))
  1159. X!       {
  1160. X!         SPRINTF(line, "%s: <%c-%c> eval : %ld",
  1161. X!                 (player == BLACK) ? "Black" : "White",
  1162. X!                 (move & 7) + 'a', (move >> 3) + '1', note) ;
  1163. X!         message(EVAL_MES, line) ;
  1164. X!       }
  1165. X  }
  1166. X  
  1167. X  
  1168. X--- 657,663 ----
  1169. X    if (show_notes)
  1170. X      if ((player == BLACK && items[(int) BLACK_PLAYS].value == COMPUTER) ||
  1171. X          (player == WHITE && items[(int) WHITE_PLAYS].value == COMPUTER))
  1172. X!       set_eval(player, move, note) ;
  1173. X  }
  1174. X  
  1175. X  
  1176. X***************
  1177. X*** 606,609 ****
  1178. X--- 683,688 ----
  1179. X        SPRINTF(line, "Black wins %d-%d", cs, ps) ;
  1180. X        message(SCORE_MES, line) ;
  1181. X      }
  1182. X+   message(TURN_MES, "") ;
  1183. X+   message(EVAL_MES, "") ;
  1184. X  }
  1185. X
  1186. X------- events.c -------
  1187. X*** /tmp/da02118    Wed Nov 28 11:00:25 1990
  1188. X--- events.c    Thu Nov 22 11:16:40 1990
  1189. X***************
  1190. X*** 127,143 ****
  1191. X  void
  1192. X  do_action()
  1193. X  {
  1194. X    switch (nextc)
  1195. X      {
  1196. X!       case MOUSE_MOVING : draw_piece(next_player, piece_x, piece_y, RINV) ;
  1197. X                            piece_x = curx - PIECE_RAD ;
  1198. X                            piece_y = cury - PIECE_RAD ;
  1199. X!                           draw_piece(next_player, piece_x, piece_y, RINV) ;
  1200. X                            break ;
  1201. X                            
  1202. X        case ENTER_WINDOW : 
  1203. X        case EXIT_WINDOW  : set_cursor(CANVASCUR) ;
  1204. X!                           draw_piece(next_player, piece_x, piece_y, RINV) ;
  1205. X                            cmode = (enum cantype) ((int) cmode - 1) ;
  1206. X                            break ;
  1207. X                            
  1208. X--- 127,164 ----
  1209. X  void
  1210. X  do_action()
  1211. X  {
  1212. X+   int cx, cy, thismove ;
  1213. X+ 
  1214. X    switch (nextc)
  1215. X      {
  1216. X!       case MOUSE_MOVING : if (animation == TRUE)
  1217. X!                             draw_piece(next_player, piece_x, piece_y, RINV) ;
  1218. X                            piece_x = curx - PIECE_RAD ;
  1219. X                            piece_y = cury - PIECE_RAD ;
  1220. X! 
  1221. X!                           cx = (piece_x + PIECE_RAD    - BBORDER) / CELL_SIZE ;
  1222. X!                           cy = (piece_y + PIECE_RAD-CY - BBORDER) / CELL_SIZE ;
  1223. X! 
  1224. X!                           if (cx >= 0 && cy >= 0 && cx < 8 && cy < 8)
  1225. X!                             {
  1226. X!                               thismove = cy * BOARD_SIZE + cx ;
  1227. X! 
  1228. X!                               if (thismove != last_outline)
  1229. X!                                 draw_outline(last_outline, IS_OFF) ;
  1230. X!                               last_outline = thismove ;
  1231. X!                               draw_outline(last_outline, IS_ON) ;
  1232. X!                             }
  1233. X! 
  1234. X!                           if (animation == TRUE)
  1235. X!                             draw_piece(next_player, piece_x, piece_y, RINV) ;
  1236. X                            break ;
  1237. X                            
  1238. X        case ENTER_WINDOW : 
  1239. X        case EXIT_WINDOW  : set_cursor(CANVASCUR) ;
  1240. X!                           draw_outline(last_outline, IS_OFF) ;
  1241. X!                           last_outline = -1 ;
  1242. X!                           if (animation == TRUE)
  1243. X!                             draw_piece(next_player, piece_x, piece_y, RINV) ;
  1244. X                            cmode = (enum cantype) ((int) cmode - 1) ;
  1245. X                            break ;
  1246. X                            
  1247. X***************
  1248. X*** 253,259 ****
  1249. X                                set_cursor(NOCURSOR) ;
  1250. X                                piece_x = curx - PIECE_RAD ;
  1251. X                                piece_y = cury - PIECE_RAD ;
  1252. X!                               draw_piece(next_player, piece_x, piece_y, RINV) ;
  1253. X                                cmode = (enum cantype) ((int) cmode + 1) ;
  1254. X                              }
  1255. X                            break ;
  1256. X--- 274,282 ----
  1257. X                                set_cursor(NOCURSOR) ;
  1258. X                                piece_x = curx - PIECE_RAD ;
  1259. X                                piece_y = cury - PIECE_RAD ;
  1260. X!                               if (animation == TRUE)
  1261. X!                                 draw_piece(next_player,
  1262. X!                                            piece_x, piece_y, RINV) ;
  1263. X                                cmode = (enum cantype) ((int) cmode + 1) ;
  1264. X                              }
  1265. X                            break ;
  1266. X***************
  1267. X*** 323,329 ****
  1268. X        case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ;
  1269. X                   break ;
  1270. X  
  1271. X!       case 'A' : show_all_moves() ;                    /* Button items. */
  1272. X                   break ;
  1273. X        case 'L' : curx = 0 ;
  1274. X                   draw_textfield() ;
  1275. X--- 346,352 ----
  1276. X        case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ;
  1277. X                   break ;
  1278. X  
  1279. X!       case 'M' : show_all_moves() ;                    /* Button items. */
  1280. X                   break ;
  1281. X        case 'L' : curx = 0 ;
  1282. X                   draw_textfield() ;
  1283. X
  1284. X------- extern.h -------
  1285. X*** /tmp/da02121    Wed Nov 28 11:00:26 1990
  1286. X--- extern.h    Fri Nov 23 08:27:39 1990
  1287. X***************
  1288. X*** 22,27 ****
  1289. X--- 22,29 ----
  1290. X   *  (see README file), then an attempt will be made to fix them.
  1291. X   */
  1292. X  
  1293. X+ extern int animation ;     /* If set, show computer glide and piece drag. */
  1294. X+ extern int best_cmove ;    /* Best computer move so far. */
  1295. X  extern int bfont_height ;  /* Height in pixels for bold font. */
  1296. X  extern int but_inverted ;  /* Value of panel item inverted. */
  1297. X  extern int color ;         /* Current color value. */
  1298. X***************
  1299. X*** 28,33 ****
  1300. X--- 30,38 ----
  1301. X  extern int cur_ch ;        /* Current character pressed. */
  1302. X  extern int curx ;          /* Current mouse X position. */
  1303. X  extern int cury ;          /* Current mouse Y position. */
  1304. X+ extern int do_bestmove ;   /* If set, continuously update best move. */
  1305. X+ extern int do_last ;       /* If set, don't show last move. */
  1306. X+ extern int do_number ;     /* If set, the last stone placed is numbered. */
  1307. X  extern int down ;          /* Indicates is a mouse button is down. */
  1308. X  extern int first_move ;    /* Set if computer plays first move. */
  1309. X  extern int iconic ;        /* Start as an icon if set. */
  1310. X***************
  1311. X*** 38,43 ****
  1312. X--- 43,49 ----
  1313. X  extern int ix ;            /* Initial X position of the icon. */
  1314. X  extern int iy ;            /* Initial Y position of the icon. */
  1315. X  extern int last_move ;     /* Last valid computer move. */
  1316. X+ extern int last_outline ;  /* Position of last piece whilst dragging. */
  1317. X  extern int level ;         /* Current difficulty level for computer moves. */
  1318. X  extern int loadgame ;      /* Set if there is a game file to load. */
  1319. X  extern int lsval ;         /* Set to 'l' or 's', if loading or saving. */
  1320. X***************
  1321. X*** 51,56 ****
  1322. X--- 57,63 ----
  1323. X  extern int piece_y ;       /* Current Y position of moving piece */
  1324. X  extern int play_computer ; /* Set if playing against the computer. */
  1325. X  extern int posspec ;       /* Set if -Wp or -g option is present (for X11) */
  1326. X+ extern int quickgame ;     /* If set, don't flash turning stones. */
  1327. X  extern int s_flip ;
  1328. X  extern int s_move ;
  1329. X  extern int s_opponent ;
  1330. X
  1331. X------- items.c -------
  1332. X*** /tmp/da02124    Wed Nov 28 11:00:26 1990
  1333. X--- items.c    Thu Nov 22 11:13:56 1990
  1334. X***************
  1335. X*** 133,139 ****
  1336. X    ty = BBORDER + BHEIGHT + BGAP ;
  1337. X    tw = (BWIDTH / 2) - 10 + (2 * (BWIDTH + BGAP)) ;
  1338. X    th = BHEIGHT ;
  1339. X!   draw_rect(tx, ty, tx + tw, ty + th) ;
  1340. X    draw_filename(gamefile) ;
  1341. X  
  1342. X    tinput = 1 ;
  1343. X--- 133,139 ----
  1344. X    ty = BBORDER + BHEIGHT + BGAP ;
  1345. X    tw = (BWIDTH / 2) - 10 + (2 * (BWIDTH + BGAP)) ;
  1346. X    th = BHEIGHT ;
  1347. X!   draw_rect(tx, ty, tx + tw, ty + th, RSRC, C_BLACK) ;
  1348. X    draw_filename(gamefile) ;
  1349. X  
  1350. X    tinput = 1 ;
  1351. X
  1352. END_OF_FILE
  1353. if test 43518 -ne `wc -c <'patches02a'`; then
  1354.     echo shar: \"'patches02a'\" unpacked with wrong size!
  1355. fi
  1356. # end of 'patches02a'
  1357. fi
  1358. echo shar: End of archive 1 \(of 3\).
  1359. cp /dev/null ark1isdone
  1360. MISSING=""
  1361. for I in 1 2 3 ; do
  1362.     if test ! -f ark${I}isdone ; then
  1363.     MISSING="${MISSING} ${I}"
  1364.     fi
  1365. done
  1366. if test "${MISSING}" = "" ; then
  1367.     echo You have unpacked all 3 archives.
  1368.     rm -f ark[1-9]isdone
  1369. else
  1370.     echo You still need to unpack the following archives:
  1371.     echo "        " ${MISSING}
  1372. fi
  1373. ##  End of shell archive.
  1374. exit 0
  1375.