home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume11 / reve / patch1b / patches01b
Text File  |  1990-12-11  |  52KB  |  1,527 lines

  1.  
  2. ------- color.h -------
  3. *** /tmp/da28728    Fri Nov  9 10:28:40 1990
  4. --- color.h    Mon Nov  5 09:10:15 1990
  5. ***************
  6. *** 6,16 ****
  7.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  8.    *  All rights reserved.
  9.    *
  10. !  *  Permission is given to distribute these sources, as long as the
  11. !  *  introductory messages are not removed, and no monies are exchanged.
  12.    *
  13. !  *  You are forbidden from using Reve as is, or in a modified state, in
  14. !  *  any tournaments, without the permission of the authors.
  15.    *
  16.    *  No responsibility is taken for any errors or inaccuracies inherent
  17.    *  either to the comments or the code of this program, but if reported
  18. --- 6,21 ----
  19.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  20.    *  All rights reserved.
  21.    *
  22. !  *  Permission is granted to copy this source, for redistribution
  23. !  *  in source form only, provided the news headers in "substantially
  24. !  *  unaltered format" are retained, the introductory messages are not
  25. !  *  removed, and no monies are exchanged.
  26.    *
  27. !  *  Permission is also granted to copy this source, without the
  28. !  *  news headers, for the purposes of making an executable copy by
  29. !  *  means of compilation, provided that such copy will not be used
  30. !  *  for the purposes of competition in any othello tournaments, without
  31. !  *  prior permission from the authors.
  32.    *
  33.    *  No responsibility is taken for any errors or inaccuracies inherent
  34.    *  either to the comments or the code of this program, but if reported
  35.  
  36. ------- events.c -------
  37. *** /tmp/da28731    Fri Nov  9 10:28:41 1990
  38. --- events.c    Wed Nov  7 21:09:27 1990
  39. ***************
  40. *** 7,17 ****
  41.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  42.    *  All rights reserved.
  43.    *
  44. !  *  Permission is given to distribute these sources, as long as the
  45. !  *  introductory messages are not removed, and no monies are exchanged.
  46.    *
  47. !  *  You are forbidden from using Reve as is, or in a modified state, in
  48. !  *  any tournaments, without the permission of the authors.
  49.    *
  50.    *  No responsibility is taken for any errors on inaccuracies inherent
  51.    *  either to the comments or the code of this program, but if reported
  52. --- 7,22 ----
  53.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  54.    *  All rights reserved.
  55.    *
  56. !  *  Permission is granted to copy this source, for redistribution
  57. !  *  in source form only, provided the news headers in "substantially
  58. !  *  unaltered format" are retained, the introductory messages are not
  59. !  *  removed, and no monies are exchanged.
  60.    *
  61. !  *  Permission is also granted to copy this source, without the
  62. !  *  news headers, for the purposes of making an executable copy by
  63. !  *  means of compilation, provided that such copy will not be used
  64. !  *  for the purposes of competition in any othello tournaments, without
  65. !  *  prior permission from the authors.
  66.    *
  67.    *  No responsibility is taken for any errors on inaccuracies inherent
  68.    *  either to the comments or the code of this program, but if reported
  69. ***************
  70. *** 18,24 ****
  71.    *  (see README file), then an attempt will be made to fix them.
  72.    */
  73.   
  74. - #include <stdio.h>
  75.   #include "reve.h"
  76.   #include "color.h"
  77.   #include "extern.h"
  78. --- 23,28 ----
  79. ***************
  80. *** 166,172 ****
  81.         switch (item)
  82.           {
  83.             case BLACK_PLAYS :
  84. !                WHITE_PLAYS : if (item == BLACK_PLAYS) curx = 0 ;
  85.                                else curx = BBORDER + (3*(BWIDTH+BGAP)) ;
  86.                                switch (ch)
  87.                                  {
  88. --- 170,176 ----
  89.         switch (item)
  90.           {
  91.             case BLACK_PLAYS :
  92. !           case WHITE_PLAYS : if (item == BLACK_PLAYS) curx = 0 ;
  93.                                else curx = BBORDER + (3*(BWIDTH+BGAP)) ;
  94.                                switch (ch)
  95.                                  {
  96. ***************
  97. *** 247,254 ****
  98.                                 nextc == RIGHT_DOWN)
  99.                               {
  100.                                 set_cursor(NOCURSOR) ;
  101. !                               piece_x = curx - BBORDER - (PIECE_RAD) ;
  102. !                               piece_y = cury - BBORDER - (PIECE_RAD) ;
  103.                                 draw_piece(next_player, piece_x, piece_y, RINV) ;
  104.                                 cmode = (enum cantype) ((int) cmode + 1) ;
  105.                               }
  106. --- 251,258 ----
  107.                                 nextc == RIGHT_DOWN)
  108.                               {
  109.                                 set_cursor(NOCURSOR) ;
  110. !                               piece_x = curx - PIECE_RAD ;
  111. !                               piece_y = cury - PIECE_RAD ;
  112.                                 draw_piece(next_player, piece_x, piece_y, RINV) ;
  113.                                 cmode = (enum cantype) ((int) cmode + 1) ;
  114.                               }
  115. ***************
  116. *** 319,325 ****
  117.         case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ;
  118.                    break ;
  119.   
  120. !       case 'l' : last() ;                              /* Button items. */
  121.                    break ;
  122.         case 'L' : curx = 0 ;
  123.                    draw_textfield() ;
  124. --- 323,329 ----
  125.         case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ;
  126.                    break ;
  127.   
  128. !       case 'A' : show_all_moves() ;                    /* Button items. */
  129.                    break ;
  130.         case 'L' : curx = 0 ;
  131.                    draw_textfield() ;
  132.  
  133. ------- extern.h -------
  134. *** /tmp/da28734    Fri Nov  9 10:28:42 1990
  135. --- extern.h    Wed Nov  7 14:57:04 1990
  136. ***************
  137. *** 6,16 ****
  138.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  139.    *  All rights reserved.
  140.    *
  141. !  *  Permission is given to distribute these sources, as long as the
  142. !  *  introductory messages are not removed, and no monies are exchanged.
  143.    *
  144. !  *  You are forbidden from using Reve as is, or in a modified state, in
  145. !  *  any tournaments, without the permission of the authors.
  146.    *
  147.    *  No responsibility is taken for any errors on inaccuracies inherent
  148.    *  either to the comments or the code of this program, but if reported
  149. --- 6,21 ----
  150.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  151.    *  All rights reserved.
  152.    *
  153. !  *  Permission is granted to copy this source, for redistribution
  154. !  *  in source form only, provided the news headers in "substantially
  155. !  *  unaltered format" are retained, the introductory messages are not
  156. !  *  removed, and no monies are exchanged.
  157.    *
  158. !  *  Permission is also granted to copy this source, without the
  159. !  *  news headers, for the purposes of making an executable copy by
  160. !  *  means of compilation, provided that such copy will not be used
  161. !  *  for the purposes of competition in any othello tournaments, without
  162. !  *  prior permission from the authors.
  163.    *
  164.    *  No responsibility is taken for any errors on inaccuracies inherent
  165.    *  either to the comments or the code of this program, but if reported
  166. ***************
  167. *** 23,29 ****
  168.   extern int cur_ch ;        /* Current character pressed. */
  169.   extern int curx ;          /* Current mouse X position. */
  170.   extern int cury ;          /* Current mouse Y position. */
  171. - extern int depth ;         /* Depth of search for computers move. */
  172.   extern int down ;          /* Indicates is a mouse button is down. */
  173.   extern int first_move ;    /* Set if computer plays first move. */
  174.   extern int iconic ;        /* Start as an icon if set. */
  175. --- 28,33 ----
  176. ***************
  177. *** 34,41 ****
  178. --- 38,47 ----
  179.   extern int ix ;            /* Initial X position of the icon. */
  180.   extern int iy ;            /* Initial Y position of the icon. */
  181.   extern int last_move ;     /* Last valid computer move. */
  182. + extern int level ;         /* Current difficulty level for computer moves. */
  183.   extern int loadgame ;      /* Set if there is a game file to load. */
  184.   extern int lsval ;         /* Set to 'l' or 's', if loading or saving. */
  185. + extern int monochrome ;    /* If set, display will be in monochrome. */
  186.   extern int move ;          /* Current move being evaluated. */
  187.   extern int move_delta ;    /* Delta for piece animation. */
  188.   extern int nextc ;         /* Current event identifier. */
  189. ***************
  190. *** 51,56 ****
  191. --- 57,63 ----
  192.   extern int s_player ;
  193.   extern int s_row ;
  194.   extern int s_col ;
  195. + extern int show_moves ;    /* If set, all possible moves are being shown. */
  196.   extern int show_notes ;    /* If set, display notes value from play_reve. */
  197.   extern int suggestion ;    /* Positive if a suggested move. */
  198.   extern int suggest_x ;     /* X position of suggested move. */
  199. ***************
  200. *** 62,67 ****
  201. --- 69,75 ----
  202.   extern int wx ;            /* Initial X position of the window. */
  203.   extern int wy ;            /* Initial Y position of the window. */ 
  204.   
  205. + extern time_t timeleft ;   /* Amount of time left for computer moves. */
  206.   extern long note ;         /* Note value for current computer move. */
  207.   
  208.   extern char *diff_values[] ;     /* Values for cyclic difficulty button. */
  209. ***************
  210. *** 74,81 ****
  211.   extern char progname[] ;         /* The name of this program. */
  212.   extern char revtable[] ;         /* Table for reversing bits in a byte. */
  213.   
  214. ! extern char black_dpy[] ;        /* Black piece display information. */
  215. ! extern char white_dpy[] ;        /* White piece display information. */
  216.   
  217.   extern FILE *rem_fp ;
  218.   extern struct timeval tp ;        /* Used by the nap_upto routine. */
  219. --- 82,89 ----
  220.   extern char progname[] ;         /* The name of this program. */
  221.   extern char revtable[] ;         /* Table for reversing bits in a byte. */
  222.   
  223. ! extern char *black_dpy ;         /* Black piece display information. */
  224. ! extern char *white_dpy ;         /* White piece display information. */
  225.   
  226.   extern FILE *rem_fp ;
  227.   extern struct timeval tp ;        /* Used by the nap_upto routine. */
  228. ***************
  229. *** 85,90 ****
  230. --- 93,99 ----
  231.   extern BOARD board ;              /* The current reve board. */
  232.   extern BOARD old_board ;          /* The previous reve board. */
  233.   extern BOARD *s_pos ;
  234. + extern BOARD s_all ;              /* List of valid positions for this move. */ 
  235.   extern BOARD moves[64] ;          /* Complete array of board moves. */
  236.   
  237.   extern enum cantype cmode, last_cmode ;
  238.  
  239. ------- images.h -------
  240. *** /tmp/da28737    Fri Nov  9 10:28:42 1990
  241. --- images.h    Tue Nov  6 18:21:08 1990
  242. ***************
  243. *** 6,16 ****
  244.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  245.    *  All rights reserved.
  246.    *
  247. !  *  Permission is given to distribute these sources, as long as the
  248. !  *  introductory messages are not removed, and no monies are exchanged.
  249.    *
  250. !  *  You are forbidden from using Reve as is, or in a modified state, in
  251. !  *  any tournaments, without the permission of the authors.
  252.    *
  253.    *  No responsibility is taken for any errors or inaccuracies inherent
  254.    *  either to the comments or the code of this program, but if reported
  255. --- 6,21 ----
  256.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  257.    *  All rights reserved.
  258.    *
  259. !  *  Permission is granted to copy this source, for redistribution
  260. !  *  in source form only, provided the news headers in "substantially
  261. !  *  unaltered format" are retained, the introductory messages are not
  262. !  *  removed, and no monies are exchanged.
  263.    *
  264. !  *  Permission is also granted to copy this source, without the
  265. !  *  news headers, for the purposes of making an executable copy by
  266. !  *  means of compilation, provided that such copy will not be used
  267. !  *  for the purposes of competition in any othello tournaments, without
  268. !  *  prior permission from the authors.
  269.    *
  270.    *  No responsibility is taken for any errors or inaccuracies inherent
  271.    *  either to the comments or the code of this program, but if reported
  272. ***************
  273. *** 18,48 ****
  274.    */
  275.   
  276.   unsigned short button_stencil_image[] = {
  277. ! #include "images/button.stencil.icon"
  278.   } ;
  279.   
  280.   unsigned short button_invert_image[] = {
  281. ! #include "images/button.invert.icon"
  282.   } ;
  283.   
  284.   unsigned short button_normal_image[] = {
  285. ! #include "images/button.normal.icon"
  286.   } ;
  287.   
  288.   unsigned short cycle_glyph_image[] = {
  289. ! #include "images/cycle.glyph.icon"
  290.   } ;
  291.   
  292.   unsigned short cycle_stencil_image[] = {
  293. ! #include "images/cycle.stencil.icon"
  294.   } ;
  295.   
  296.   unsigned short cycle_linvert_image[] = {
  297. ! #include "images/cycle.linvert.icon"
  298.   } ;
  299.   
  300.   unsigned short cycle_rinvert_image[] = {
  301. ! #include "images/cycle.rinvert.icon"
  302.   } ;
  303.   
  304.   unsigned short icon_image[] = {
  305. --- 23,53 ----
  306.    */
  307.   
  308.   unsigned short button_stencil_image[] = {
  309. ! #include "images/Sbutton.icon"
  310.   } ;
  311.   
  312.   unsigned short button_invert_image[] = {
  313. ! #include "images/Ibutton.icon"
  314.   } ;
  315.   
  316.   unsigned short button_normal_image[] = {
  317. ! #include "images/Nbutton.icon"
  318.   } ;
  319.   
  320.   unsigned short cycle_glyph_image[] = {
  321. ! #include "images/Ncycle.icon"
  322.   } ;
  323.   
  324.   unsigned short cycle_stencil_image[] = {
  325. ! #include "images/Scycle.icon"
  326.   } ;
  327.   
  328.   unsigned short cycle_linvert_image[] = {
  329. ! #include "images/Lcycle.icon"
  330.   } ;
  331.   
  332.   unsigned short cycle_rinvert_image[] = {
  333. ! #include "images/Rcycle.icon"
  334.   } ;
  335.   
  336.   unsigned short icon_image[] = {
  337. ***************
  338. *** 50,56 ****
  339.   } ;
  340.   
  341.   unsigned short cicon_image[] = {
  342. ! #include "images/reve.color.icon"
  343.   } ;
  344.   
  345.   unsigned short hglass_image[] = {
  346. --- 55,61 ----
  347.   } ;
  348.   
  349.   unsigned short cicon_image[] = {
  350. ! #include "images/Creve.icon"
  351.   } ;
  352.   
  353.   unsigned short hglass_image[] = {
  354.  
  355. ------- items.c -------
  356. *** /tmp/da28740    Fri Nov  9 10:28:43 1990
  357. --- items.c    Mon Nov  5 09:05:39 1990
  358. ***************
  359. *** 7,17 ****
  360.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  361.    *  All rights reserved.
  362.    *
  363. !  *  Permission is given to distribute these sources, as long as the
  364. !  *  introductory messages are not removed, and no monies are exchanged.
  365.    *
  366. !  *  You are forbidden from using Reve as is, or in a modified state, in
  367. !  *  any tournaments, without the permission of the authors.
  368.    *
  369.    *  No responsibility is taken for any errors on inaccuracies inherent
  370.    *  either to the comments or the code of this program, but if reported
  371. --- 7,22 ----
  372.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  373.    *  All rights reserved.
  374.    *
  375. !  *  Permission is granted to copy this source, for redistribution
  376. !  *  in source form only, provided the news headers in "substantially
  377. !  *  unaltered format" are retained, the introductory messages are not
  378. !  *  removed, and no monies are exchanged.
  379.    *
  380. !  *  Permission is also granted to copy this source, without the
  381. !  *  news headers, for the purposes of making an executable copy by
  382. !  *  means of compilation, provided that such copy will not be used
  383. !  *  for the purposes of competition in any othello tournaments, without
  384. !  *  prior permission from the authors.
  385.    *
  386.    *  No responsibility is taken for any errors on inaccuracies inherent
  387.    *  either to the comments or the code of this program, but if reported
  388. ***************
  389. *** 18,30 ****
  390.    *  (see README file), then an attempt will be made to fix them.
  391.    */
  392.   
  393. - #include <stdio.h>
  394. - #include <strings.h>
  395. - #include "color.h"
  396.   #include "reve.h"
  397.   #include "extern.h"
  398.   
  399.   
  400.   void
  401.   draw_button(item, color, image)      /* Draw a panel button. */
  402.   enum panel_type item ;
  403. --- 23,39 ----
  404.    *  (see README file), then an attempt will be made to fix them.
  405.    */
  406.   
  407.   #include "reve.h"
  408. + #include "color.h"
  409.   #include "extern.h"
  410.   
  411. + #ifdef SYSV
  412. + #include "string.h"
  413. + #else
  414. + #include <strings.h>
  415. + #endif /*SYSV*/ 
  416.   
  417.   void
  418.   draw_button(item, color, image)      /* Draw a panel button. */
  419.   enum panel_type item ;
  420. ***************
  421. *** 107,139 ****
  422.   
  423.   
  424.   void
  425. - draw_piece(piece, x, y, op)    /* Draw an othello piece on the board. */
  426. - int piece, x, y ;
  427. - enum optype op ;
  428. - {
  429. -   switch (piece)
  430. -     {
  431. -       case BLACK : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK,
  432. -                                 P_BLACK, P_BLACK) ;
  433. -                    break ;
  434. -       case WHITE : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK,
  435. -                                 P_BLACK, P_WHITE) ;
  436. -     }
  437. - }
  438. - void
  439. - draw_rect(x1, y1, x2, y2)
  440. - int x1, y1, x2, y2 ;
  441. - {
  442. -   draw_line(x1, y1, x2, y1, RSRC, C_BLACK) ;
  443. -   draw_line(x1, y1, x1, y2, RSRC, C_BLACK) ;
  444. -   draw_line(x2, y1, x2, y2, RSRC, C_BLACK) ;
  445. -   draw_line(x1, y2, x2, y2, RSRC, C_BLACK) ;
  446. - }
  447. - void
  448.   draw_textfield()
  449.   {
  450.     int x1, y1 ;
  451. --- 116,121 ----
  452. ***************
  453. *** 142,148 ****
  454.     x1 = BBORDER + BWIDTH + (BGAP / 2) ;
  455.     y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
  456.     color_area(x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP, C_WHITE) ;
  457. !   draw_rect(x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1, y1 + BHEIGHT + BGAP - 1) ;
  458.     draw_text(BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP +
  459.               (nfont_height + (BHEIGHT - nfont_height) / 2) - 5,
  460.               BFONT, C_BLACK, "File:") ;
  461. --- 124,131 ----
  462.     x1 = BBORDER + BWIDTH + (BGAP / 2) ;
  463.     y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
  464.     color_area(x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP, C_WHITE) ;
  465. !   draw_rect(x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1,
  466. !                 y1 + BHEIGHT + BGAP - 1, RSRC, C_BLACK) ;
  467.     draw_text(BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP +
  468.               (nfont_height + (BHEIGHT - nfont_height) / 2) - 5,
  469.               BFONT, C_BLACK, "File:") ;
  470. ***************
  471. *** 210,219 ****
  472.   void
  473.   make_panel()
  474.   {
  475. -   draw_button(LAST_BUT,     C_LGREY, BUT_NORMAL) ;
  476.     draw_button(LOAD_BUT,     C_LGREY, BUT_NORMAL) ;
  477.     draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
  478.     draw_button(SAVE_BUT,     C_LGREY, BUT_NORMAL) ;
  479.     draw_button(SUGGEST_BUT,  C_LGREY, BUT_NORMAL) ;
  480.     draw_button(UNDO_BUT,     C_LGREY, BUT_NORMAL) ;
  481.   
  482. --- 193,202 ----
  483.   void
  484.   make_panel()
  485.   {
  486.     draw_button(LOAD_BUT,     C_LGREY, BUT_NORMAL) ;
  487.     draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
  488.     draw_button(SAVE_BUT,     C_LGREY, BUT_NORMAL) ;
  489. +   draw_button(SHOW_ALL_BUT, C_LGREY, BUT_NORMAL) ;
  490.     draw_button(SUGGEST_BUT,  C_LGREY, BUT_NORMAL) ;
  491.     draw_button(UNDO_BUT,     C_LGREY, BUT_NORMAL) ;
  492.   
  493. ***************
  494. *** 226,232 ****
  495.     draw_cycle_item(NOTES,       notes_values,  C_LGREY, CY_NORMAL) ;
  496.   
  497.     make_message(PANEL_MES) ;
  498. !   make_message(NOTES_MES) ;
  499.     make_message(SCORE_MES) ;
  500.     make_message(TURN_MES) ;
  501.   }
  502. --- 209,215 ----
  503.     draw_cycle_item(NOTES,       notes_values,  C_LGREY, CY_NORMAL) ;
  504.   
  505.     make_message(PANEL_MES) ;
  506. !   make_message(EVAL_MES) ;
  507.     make_message(SCORE_MES) ;
  508.     make_message(TURN_MES) ;
  509.   }
  510.  
  511. ------- reve.man -------
  512. *** /tmp/da28765    Fri Nov  9 10:32:20 1990
  513. --- reve.man    Fri Nov  9 10:31:20 1990
  514. ***************
  515. *** 10,17 ****
  516.   
  517.   SYNOPSIS
  518.        reve [ -b [ display ] ] [ -c ] [ -d difficulty ] [ -e  edge-
  519. !      file  ] [ -g geometry ] [ -i ] [ -l gamefile ] [ -n ] [ -v ]
  520. !      [ -w [ display ] ] [ -? ] [ -Wi ] [ -Wp x y ] [ -WP x y ]
  521.   
  522.   DESCRIPTION
  523.        Reve is a version of the popular Othello game.  It  contains
  524. --- 10,18 ----
  525.   
  526.   SYNOPSIS
  527.        reve [ -b [ display ] ] [ -c ] [ -d difficulty ] [ -e  edge-
  528. !      file  ] [ -g geometry ] [ -i ] [ -l gamefile ] [ -m ] [ -n ]
  529. !      [ -r ] [ -v ] [ -w [ display ] ] [ -? ] [ -Wi ] [ -Wp x y  ]
  530. !      [ -WP x y ]
  531.   
  532.   DESCRIPTION
  533.        Reve is a version of the popular Othello game.  It  contains
  534. ***************
  535. *** 38,44 ****
  536.        go. Note that it is also possible to supply a number  and  a
  537.        letter pair, to indicate where you would like your new piece
  538.        to go. This is the only method to place pieces with the dumb
  539. !      tty interface.
  540.   
  541.        There are various buttons and cyclic  selections  available.
  542.        Their  meanings are given below, plus an indication of their
  543. --- 39,47 ----
  544.        go. Note that it is also possible to supply a number  and  a
  545.        letter pair, to indicate where you would like your new piece
  546.        to go. This is the only method to place pieces with the dumb
  547. !      tty  interface.  The square containing the last move will be
  548. !      shown with a black outline. This is updated  with  each  new
  549. !      move.
  550.   
  551.        There are various buttons and cyclic  selections  available.
  552.        Their  meanings are given below, plus an indication of their
  553. ***************
  554. *** 54,62 ****
  555.        other combination, then you should use the appropriate  com-
  556.        mand line options (see below).
  557.   
  558. - REVE BUTTONS
  559. -      With the graphics versions, there are eight buttons that are
  560. -      normally  displayed  at  the top of the Reve window. Each of
  561.   
  562.   
  563.   
  564. --- 57,62 ----
  565. ***************
  566. *** 71,81 ****
  567.   
  568.   
  569.   
  570.        these buttons, except  the  "done"  button  has  a  keyboard
  571.        equivalent which is given in brackets below.
  572.   
  573. -      last [ l ]        Show the last move played.
  574.        load [ L ]        Load a game file. The format of this  game
  575.                          file  is  given  below. With the graphical
  576.                          versions,  a  text  field   is   displayed
  577. --- 71,82 ----
  578.   
  579.   
  580.   
  581. + REVE BUTTONS
  582. +      With the graphics versions, there are eight buttons that are
  583. +      normally  displayed  at  the top of the Reve window. Each of
  584.        these buttons, except  the  "done"  button  has  a  keyboard
  585.        equivalent which is given in brackets below.
  586.   
  587.        load [ L ]        Load a game file. The format of this  game
  588.                          file  is  given  below. With the graphical
  589.                          versions,  a  text  field   is   displayed
  590. ***************
  591. *** 92,97 ****
  592. --- 93,102 ----
  593.                          game  file,  the piece is displayed on the
  594.                          board, and the appropriate pieces flipped.
  595.   
  596. +      moves? [ A ]      Show all the valid moves for  the  current
  597. +                        board.  This  is useful for beginners, and
  598. +                        for teaching purposes.
  599.        new game [ n ]    Start a new game of reve
  600.   
  601.        save [ S ]        Save the current game  to  file.  See  the
  602. ***************
  603. *** 118,128 ****
  604.        left mouse button, to increment  or  decrement  the  current
  605.        selection  (depending  upon which half on the item you click
  606.        over), or a selection can be made from a popup menu when you
  607. -      click  with  the  right mouse button (SunView and XView ver-
  608. -      sions only).  Each cycle value  has  a  keyboard  equivalent
  609. -      which  is given in brackets below.  This must be followed by
  610. -      the value of the new selection you wish to make.   The  dumb
  611. -      tty  version  has the equivalent of these items displayed to
  612.   
  613.   
  614.   
  615. --- 123,128 ----
  616. ***************
  617. *** 137,142 ****
  618. --- 137,147 ----
  619.   
  620.   
  621.   
  622. +      click  with  the  right mouse button (SunView and XView ver-
  623. +      sions only).  Each cycle value  has  a  keyboard  equivalent
  624. +      which  is given in brackets below.  This must be followed by
  625. +      the value of the new selection you wish to make.   The  dumb
  626. +      tty  version  has the equivalent of these items displayed to
  627.        the right of the reve board display.
  628.   
  629.        Black: [ B ]      Select whether the black player should  be
  630. ***************
  631. *** 184,197 ****
  632.             of  reve  it  is  possible  to give an optional display
  633.             value.
  634.   
  635. -      -c   The computer will play. Presence or absence of  -b  and
  636. -           -w options determine which piece the computer plays.
  637.   
  638. -      -d difficulty
  639. -           The level of difficulty for  computer  moves.  See  the
  640.   
  641.   
  642.   Sun Release 4.1   Last change: 18 October 1990                  3
  643.   
  644.   
  645. --- 189,197 ----
  646. ***************
  647. *** 203,212 ****
  648.   
  649.   
  650.   
  651.             Difficulty:  cyclic  item  description  above  for more
  652.             information.
  653.   
  654. !      -eedgefile
  655.             Specify an alternate location for the reve edge stabil-
  656.             ity  table  file. Normally the location of this file is
  657.             compiled in when the program is created, but reve  will
  658. --- 203,217 ----
  659.   
  660.   
  661.   
  662. +      -c   The computer will play. Presence or absence of  -b  and
  663. +           -w options determine which piece the computer plays.
  664. +      -d difficulty
  665. +           The level of difficulty for  computer  moves.  See  the
  666.             Difficulty:  cyclic  item  description  above  for more
  667.             information.
  668.   
  669. !      -e edgefile
  670.             Specify an alternate location for the reve edge stabil-
  671.             ity  table  file. Normally the location of this file is
  672.             compiled in when the program is created, but reve  will
  673. ***************
  674. *** 226,233 ****
  675. --- 231,245 ----
  676.             Load a game file. The format of this game file is given
  677.             below. The board will be setup with these pieces.
  678.   
  679. +      -m   Always display in monochrome, even on a color screen.
  680.        -n   Display computer notes.
  681.   
  682. +      -r   Save a log of computer move  information  to  the  file
  683. +           reve.res  as  the  game progresses. This information is
  684. +           probably only useful to people trying  to  improve  the
  685. +           computer algorithm.
  686.        -?   Print the version number and  usage  message  for  this
  687.             release of the reve program.
  688.   
  689. ***************
  690. *** 243,274 ****
  691.             and  XView version of reve will automatically uses this
  692.             flag, but the X11 version will also.
  693.   
  694. -      -Wp x y
  695. -           Start the open window position at x y
  696.   
  697. -      -WP x y
  698. -           Start the icon position at x y
  699.   
  700. - REVE GAMES FILE FORMAT
  701. -      Reve has the ability to load or save games.  The  format  of
  702. -      the games files are:
  703.   
  704. !           1,   <C-4>     -    [ remarks field ]
  705. !           2,   -    <E-3>     [ remarks field ]
  706.   
  707.   
  708.   
  709. - Sun Release 4.1   Last change: 18 October 1990                  4
  710.   
  711.   
  712.   
  713.   
  714.   
  715.   
  716. ! REVE(6)                  GAMES AND DEMOS                  REVE(6)
  717.   
  718.   
  719.   
  720.        There is one move per line. Lines starting with  a  '#'  and
  721.        blank lines are ignored. The first field of each line is the
  722.        move number. This will be present before the  comma.  It  is
  723. --- 255,287 ----
  724.             and  XView version of reve will automatically uses this
  725.             flag, but the X11 version will also.
  726.   
  727.   
  728.   
  729.   
  730. ! Sun Release 4.1   Last change: 18 October 1990                  4
  731.   
  732.   
  733.   
  734.   
  735.   
  736.   
  737. + REVE(6)                  GAMES AND DEMOS                  REVE(6)
  738.   
  739.   
  740.   
  741. !      -Wp x y
  742. !           Start the open window position at x y
  743.   
  744. +      -WP x y
  745. +           Start the icon position at x y
  746.   
  747. + REVE GAMES FILE FORMAT
  748. +      Reve has the ability to load or save games.  The  format  of
  749. +      the games files are:
  750.   
  751. +           1,   <C-4>     -    [ remarks field ]
  752. +           2,   -    <E-3>     [ remarks field ]
  753.        There is one move per line. Lines starting with  a  '#'  and
  754.        blank lines are ignored. The first field of each line is the
  755.        move number. This will be present before the  comma.  It  is
  756. ***************
  757. *** 297,315 ****
  758.   AUTHORS
  759.        Computer strategy:  Yves Gallot    galloty@cernvax.cern.ch
  760.        Graphics interface: Rich Burridge  richb@Aus.Sun.COM
  761.   
  762.   
  763.   
  764. --- 310,315 ----
  765.  
  766. ------- reve.6 -------
  767. *** /tmp/da28768    Fri Nov  9 10:32:21 1990
  768. --- reve.6    Fri Nov  9 10:31:13 1990
  769. ***************
  770. *** 24,31 ****
  771. --- 24,35 ----
  772.   .B \-l
  773.   .I gamefile
  774.   ] [
  775. + .B \-m
  776. + ] [
  777.   .B \-n
  778.   ] [
  779. + .B \-r
  780. + ] [
  781.   .B \-v
  782.   ] [
  783.   .B \-w
  784. ***************
  785. *** 65,71 ****
  786.   square in which you want your piece to go. Note that it is also possible
  787.   to supply a number and a letter pair, to indicate where you would like your
  788.   new piece to go. This is the only method to place pieces with the dumb tty
  789. ! interface.
  790.   .LP
  791.   There are various buttons and cyclic selections available. Their meanings
  792.   are given below, plus an indication of their keyboard equivalents. With the
  793. --- 69,76 ----
  794.   square in which you want your piece to go. Note that it is also possible
  795.   to supply a number and a letter pair, to indicate where you would like your
  796.   new piece to go. This is the only method to place pieces with the dumb tty
  797. ! interface. The square containing the last move will be shown with a black
  798. ! outline. This is updated with each new move.
  799.   .LP
  800.   There are various buttons and cyclic selections available. Their meanings
  801.   are given below, plus an indication of their keyboard equivalents. With the
  802. ***************
  803. *** 83,90 ****
  804.   displayed at the top of the Reve window. Each of these buttons, except
  805.   the "done" button has a keyboard equivalent which is given in brackets below.
  806.   .LP
  807. - .IP "\fBlast [ l ]\fP" 18
  808. - Show the last move played.
  809.   .IP "\fBload [ L ]\fP" 18
  810.   Load a game file. The format of this game file is given below. With the
  811.   graphical versions, a text field is displayed between the \fBdone\fP and
  812. --- 88,93 ----
  813. ***************
  814. *** 95,100 ****
  815. --- 98,106 ----
  816.   stop on the invalid line, and display an error message. As each line is
  817.   successfully read from the game file, the piece is displayed on the board,
  818.   and the appropriate pieces flipped.
  819. + .IP "\fBmoves? [ A ]\fP" 18
  820. + Show all the valid moves for the current board. This is useful for beginners,
  821. + and for teaching purposes.
  822.   .IP "\fBnew game [ n ]\fP" 18
  823.   Start a new game of
  824.   .I reve
  825. ***************
  826. *** 178,184 ****
  827.   The level of difficulty for computer moves. See the \fBDifficulty:\fP
  828.   cyclic item description above for more information.
  829.   .TP
  830. ! .BI \-e "edgefile"
  831.   Specify an alternate location for the
  832.   .I reve
  833.   edge stability table file. Normally the location of this file is compiled
  834. --- 184,190 ----
  835.   The level of difficulty for computer moves. See the \fBDifficulty:\fP
  836.   cyclic item description above for more information.
  837.   .TP
  838. ! .BI \-e " edgefile"
  839.   Specify an alternate location for the
  840.   .I reve
  841.   edge stability table file. Normally the location of this file is compiled
  842. ***************
  843. *** 201,208 ****
  844. --- 207,223 ----
  845.   Load a game file. The format of this game file is given below. The board
  846.   will be setup with these pieces.
  847.   .TP
  848. + .B \-m
  849. + Always display in monochrome, even on a color screen.
  850. + .TP
  851.   .B \-n
  852.   Display computer notes.
  853. + .TP
  854. + .B \-r
  855. + Save a log of computer move information to the file
  856. + .I reve.res
  857. + as the game progresses. This information is probably only useful to
  858. + people trying to improve the computer algorithm.
  859.   .TP
  860.   .B \-?
  861.   Print the version number and usage message for this release of the
  862.  
  863. ------- main.c -------
  864. *** /tmp/da28803    Fri Nov  9 10:34:47 1990
  865. --- main.c    Wed Nov  7 15:04:18 1990
  866. ***************
  867. *** 6,16 ****
  868.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  869.    *  All rights reserved.
  870.    *
  871. !  *  Permission is given to distribute these sources, as long as the
  872. !  *  introductory messages are not removed, and no monies are exchanged.
  873.    *
  874. !  *  You are forbidden from using Reve as is, or in a modified state, in
  875. !  *  any tournaments, without the permission of the authors.
  876.    *
  877.    *  No responsibility is taken for any errors on inaccuracies inherent
  878.    *  either to the comments or the code of this program, but if reported
  879. --- 6,21 ----
  880.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  881.    *  All rights reserved.
  882.    *
  883. !  *  Permission is granted to copy this source, for redistribution
  884. !  *  in source form only, provided the news headers in "substantially
  885. !  *  unaltered format" are retained, the introductory messages are not
  886. !  *  removed, and no monies are exchanged.
  887.    *
  888. !  *  Permission is also granted to copy this source, without the
  889. !  *  news headers, for the purposes of making an executable copy by
  890. !  *  means of compilation, provided that such copy will not be used
  891. !  *  for the purposes of competition in any othello tournaments, without
  892. !  *  prior permission from the authors.
  893.    *
  894.    *  No responsibility is taken for any errors on inaccuracies inherent
  895.    *  either to the comments or the code of this program, but if reported
  896. ***************
  897. *** 17,28 ****
  898.    *  (see README file), then an attempt will be made to fix them.
  899.    */
  900.   
  901. - #include <stdio.h>
  902. - #include <strings.h>
  903. - #include <sys/time.h>
  904. - #include "color.h"
  905.   #include "reve.h"
  906.   #include "patchlevel.h"
  907.   
  908.   /* Text values for the cyclic buttons. */
  909.   char *diff_values[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL } ;
  910. --- 22,39 ----
  911.    *  (see README file), then an attempt will be made to fix them.
  912.    */
  913.   
  914.   #include "reve.h"
  915. + #include "color.h"
  916.   #include "patchlevel.h"
  917. + #ifdef SYSV
  918. + #include <string.h>
  919. + #else
  920. + #include <strings.h>
  921. + #endif /*SYSV*/
  922. + #include <sys/time.h>
  923. + #ifdef X11
  924. + #include <X11/Xos.h>
  925. + #endif /*X11*/
  926.   
  927.   /* Text values for the cyclic buttons. */
  928.   char *diff_values[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL } ;
  929. ***************
  930. *** 45,51 ****
  931.   int cur_ch ;            /* Current character pressed. */
  932.   int curx ;              /* Current mouse X position. */
  933.   int cury ;              /* Current mouse Y position. */
  934. - int depth ;             /* Depth of search for computers move. */
  935.   int down ;              /* Indicates is a mouse button is down. */
  936.   int first_move = 0 ;    /* Set if computer plays first move. */
  937.   int iconic ;            /* Set if window is currently iconic. */
  938. --- 56,61 ----
  939. ***************
  940. *** 58,65 ****
  941. --- 68,77 ----
  942.   int ix ;                /* Initial X position of the icon. */
  943.   int iy ;                /* Initial Y position of the icon. */
  944.   int last_move ;         /* Last valid computer move. */
  945. + int level ;             /* Current level of difficulty for computer moves. */
  946.   int loadgame = 0 ;      /* Set if there is a game file to load. */
  947.   int lsval = 0 ;         /* Set to 'l' or 's', if loading or saving. */
  948. + int monochrome = 0 ;    /* If set, display will be in monochrome. */
  949.   int move ;              /* Current move being evaluated. */
  950.   int move_delta ;        /* Delta for piece animation. */
  951.   int nextc ;             /* Current event identifier. */
  952. ***************
  953. *** 67,72 ****
  954. --- 79,86 ----
  955.   int nfont_height ;      /* Height in pixels for normal font. */
  956.   int play_computer ;     /* Set if playing against the computer. */
  957.   int posspec ;           /* Set if -Wp or -g option is present (for X11) */
  958. + int saveres = 0 ;       /* If set, save computer results to log file. */
  959. + int show_moves = 0 ;    /* If set, all possible moves are being shown. */
  960.   int show_notes ;        /* If set, display notes value from play_reve. */
  961.   int suggestion = -1 ;   /* Positive if a suggested move. */
  962.   int suggest_x ;         /* X position of suggested move. */
  963. ***************
  964. *** 93,98 ****
  965. --- 107,113 ----
  966.   BOARD old_board ;          /* The previous reve board. */
  967.   BOARD board ;              /* The current reve board. */
  968.   BOARD *s_pos ;
  969. + BOARD s_all ;              /* List of valid positions for this move. */
  970.   
  971.   BOARD moves[64] ;          /* Complete array of board moves. */
  972.   
  973. ***************
  974. *** 101,110 ****
  975.   /*   type   x   y   width   height   text   value   function */
  976.   
  977.   { P_BUTTON,  BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  978. !              BWIDTH, BHEIGHT, "last",     0, last },
  979.   
  980.   { P_BUTTON,  BBORDER + (1*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  981. !              BWIDTH, BHEIGHT, "load",     0, draw_textfield },
  982.   
  983.   { P_BUTTON,  BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  984.                BWIDTH, BHEIGHT, "new game", 0, new_game },
  985. --- 116,125 ----
  986.   /*   type   x   y   width   height   text   value   function */
  987.   
  988.   { P_BUTTON,  BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  989. !              BWIDTH, BHEIGHT, "load",     0, draw_textfield },
  990.   
  991.   { P_BUTTON,  BBORDER + (1*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  992. !              BWIDTH, BHEIGHT, "moves?",   0, show_all_moves },
  993.   
  994.   { P_BUTTON,  BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
  995.                BWIDTH, BHEIGHT, "new game", 0, new_game },
  996. ***************
  997. *** 170,175 ****
  998. --- 185,191 ----
  999.   long c1, c2, c3 ;            /* Constants used in evaluation function */
  1000.   long edges[6561] ;           /* Edges Stability Table */
  1001.   long note ;                  /* Note value for current computer move. */
  1002. + time_t timeleft ;            /* Amount of time left for computer moves. */
  1003.   
  1004.   extern enum gr_type gtype ;                     /* Graphics type. */ 
  1005.   
  1006. ***************
  1007. *** 190,195 ****
  1008. --- 206,226 ----
  1009.         FPRINTF(stderr,"Error initialising window system.\n") ;
  1010.         exit(1) ;
  1011.       }
  1012. +   generate_graphics(argc, argv, DPY1) ;
  1013. +   if (dtype == XTWO) generate_graphics(argc, argv, DPY2) ;
  1014. +   start_tool(dtype) ;           /* Event handling loop. */
  1015. +   exit(0) ;
  1016. + /*NOTREACHED*/
  1017. + }
  1018. + void
  1019. + generate_graphics(argc, argv, dpyno)
  1020. + enum dpy_type dpyno ;
  1021. + int argc ;
  1022. + char *argv[] ;
  1023. + {
  1024. +   cur_dpyno = dpyno ;
  1025.     make_icon() ;
  1026.     make_frame(argc, argv) ;      /* Create reve window/icon. */
  1027.     make_canvas() ;               /* Create drawing canvas. */
  1028. ***************
  1029. *** 200,208 ****
  1030.     create_menu(NOTES,       notes_values) ;
  1031.     initboard() ;
  1032.     set_cursor(CANVASCUR) ;
  1033. -   start_tool(dtype) ;           /* Event handling loop. */
  1034. -   exit(0) ;
  1035. - /*NOTREACHED*/
  1036.   }
  1037.   
  1038.   
  1039. --- 231,236 ----
  1040. ***************
  1041. *** 212,217 ****
  1042. --- 240,246 ----
  1043.   char *argv[] ;
  1044.   {
  1045.     char next[MAXLINE] ;    /* The next command line parameter. */
  1046. +   int i ;
  1047.   
  1048.     INC ;
  1049.     while (argc > 0)
  1050. ***************
  1051. *** 220,226 ****
  1052.           switch (argv[0][1])
  1053.             {
  1054.               case 'b' : isblack = 1 ;
  1055. !                        if (*argv != NULL && argv[0][0] != '-')
  1056.                            {
  1057.                              INC ;
  1058.                              black_dpy = *argv ;
  1059. --- 249,255 ----
  1060.           switch (argv[0][1])
  1061.             {
  1062.               case 'b' : isblack = 1 ;
  1063. !                        if (*(argv+1) != NULL && argv[1][0] != '-')
  1064.                            {
  1065.                              INC ;
  1066.                              black_dpy = *argv ;
  1067. ***************
  1068. *** 230,238 ****
  1069.                          break ;
  1070.               case 'd' : INC ;
  1071.                          getparam(next, argv, "-d needs difficulty") ;
  1072. !                        depth = atoi(next) ;
  1073. !                        if (depth < 1 || depth > MAXDIFF) depth = INIT_DEPTH ;
  1074. !                        items[(int) DIFFICULTY].value = depth - 1 ;
  1075.                          break ;
  1076.               case 'e' : INC ;
  1077.                          getparam(edgefile, argv, "-e needs an edgetable file") ;
  1078. --- 259,267 ----
  1079.                          break ;
  1080.               case 'd' : INC ;
  1081.                          getparam(next, argv, "-d needs difficulty") ;
  1082. !                        level = atoi(next) ;
  1083. !                        if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ;
  1084. !                        items[(int) DIFFICULTY].value = level - 1 ;
  1085.                          break ;
  1086.               case 'e' : INC ;
  1087.                          getparam(edgefile, argv, "-e needs an edgetable file") ;
  1088. ***************
  1089. *** 247,260 ****
  1090.                          getparam(gamefile, argv, "-l needs a game file") ;
  1091.                          loadgame = 1 ;        /* Game file to load. */
  1092.                          break ;
  1093.               case 'n' : show_notes = 1 ;      /* Display computer notes. */
  1094.                          items[(int) NOTES].value = 1 ;
  1095.                          break ;
  1096.               case '?' :
  1097.               case 'v' : usage() ;
  1098.   
  1099.               case 'w' : iswhite = 1 ;
  1100. !                        if (*argv != NULL && argv[0][0] != '-')
  1101.                            {
  1102.                              INC ;
  1103.                              white_dpy = *argv ;
  1104. --- 276,294 ----
  1105.                          getparam(gamefile, argv, "-l needs a game file") ;
  1106.                          loadgame = 1 ;        /* Game file to load. */
  1107.                          break ;
  1108. +             case 'm' : monochrome = 1 ;      /* Force display to mono. */
  1109. +                        for (i = 0; i < MAXDPY; i++) iscolor[i] = 0 ;
  1110. +                        break ;
  1111.               case 'n' : show_notes = 1 ;      /* Display computer notes. */
  1112.                          items[(int) NOTES].value = 1 ;
  1113.                          break ;
  1114. +             case 'r' : saveres = 1 ;       /* Save computer results to file. */
  1115. +                        break ;
  1116.               case '?' :
  1117.               case 'v' : usage() ;
  1118.   
  1119.               case 'w' : iswhite = 1 ;
  1120. !                        if (*(argv+1) != NULL && argv[1][0] != '-')
  1121.                            {
  1122.                              INC ;
  1123.                              white_dpy = *argv ;
  1124. ***************
  1125. *** 382,387 ****
  1126. --- 416,422 ----
  1127.                   BFONT, color, sa) ;
  1128.       }
  1129.     batch(IS_OFF) ;
  1130. +   show_last(last_move, IS_ON) ;
  1131.     show_suggestion() ;
  1132.     batch(IS_ON) ;
  1133.     FOR_BOARD(i)
  1134. ***************
  1135. *** 423,430 ****
  1136.     show_notes    = FALSE ;
  1137.     isblack       = 0 ;
  1138.     iswhite       = 0 ;
  1139. !   depth         = INIT_DEPTH ;
  1140. !   items[(int) DIFFICULTY].value = depth - 1 ;
  1141.   
  1142.     black_dpy = NULL ;              /* X11 black piece display information. */
  1143.     white_dpy = NULL ;              /* X11 white piece display information. */
  1144. --- 458,465 ----
  1145.     show_notes    = FALSE ;
  1146.     isblack       = 0 ;
  1147.     iswhite       = 0 ;
  1148. !   level         = INIT_DEPTH ;
  1149. !   items[(int) DIFFICULTY].value = level - 1 ;
  1150.   
  1151.     black_dpy = NULL ;              /* X11 black piece display information. */
  1152.     white_dpy = NULL ;              /* X11 white piece display information. */
  1153. ***************
  1154. *** 512,517 ****
  1155. --- 547,553 ----
  1156.   void
  1157.   set_display_types()
  1158.   {
  1159. +        if (isblack && iswhite) play_computer = 0 ;
  1160.          if (isblack && iswhite) dtype = XBOTH ;
  1161.     else if (isblack)            dtype = XBLACK ;
  1162.     else if (iswhite)            dtype = XWHITE ;
  1163. ***************
  1164. *** 553,559 ****
  1165.   int player ;
  1166.   {
  1167.     set_cursor(HOURGLASS) ;
  1168. !   play_reve(board.square, player, depth, &move, ¬e) ;
  1169.     set_cursor(CANVASCUR) ;
  1170.     animate_move(move) ;
  1171.     do_move(player) ;
  1172. --- 589,596 ----
  1173.   int player ;
  1174.   {
  1175.     set_cursor(HOURGLASS) ;
  1176. !   move = TRUE ;            /* Make sure the computer clock is decremented. */
  1177. !   play_reve(board.square, player, level, &move, ¬e) ;
  1178.     set_cursor(CANVASCUR) ;
  1179.     animate_move(move) ;
  1180.     do_move(player) ;
  1181.  
  1182. ------- makemove.c -------
  1183. *** /tmp/da28806    Fri Nov  9 10:34:48 1990
  1184. --- makemove.c    Mon Nov  5 09:06:03 1990
  1185. ***************
  1186. *** 7,17 ****
  1187.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  1188.    *  All rights reserved.
  1189.    *
  1190. !  *  Permission is given to distribute these sources, as long as the
  1191. !  *  introductory messages are not removed, and no monies are exchanged.
  1192.    *
  1193. !  *  You are forbidden from using Reve as is, or in a modified state, in
  1194. !  *  any tournaments, without the permission of the authors.
  1195.    *
  1196.    *  No responsibility is taken for any errors on inaccuracies inherent
  1197.    *  either to the comments or the code of this program, but if reported
  1198. --- 7,22 ----
  1199.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  1200.    *  All rights reserved.
  1201.    *
  1202. !  *  Permission is granted to copy this source, for redistribution
  1203. !  *  in source form only, provided the news headers in "substantially
  1204. !  *  unaltered format" are retained, the introductory messages are not
  1205. !  *  removed, and no monies are exchanged.
  1206.    *
  1207. !  *  Permission is also granted to copy this source, without the
  1208. !  *  news headers, for the purposes of making an executable copy by
  1209. !  *  means of compilation, provided that such copy will not be used
  1210. !  *  for the purposes of competition in any othello tournaments, without
  1211. !  *  prior permission from the authors.
  1212.    *
  1213.    *  No responsibility is taken for any errors on inaccuracies inherent
  1214.    *  either to the comments or the code of this program, but if reported
  1215. ***************
  1216. *** 18,24 ****
  1217.    *  (see README file), then an attempt will be made to fix them.
  1218.    */
  1219.   
  1220. - #include <stdio.h>
  1221.   #include "reve.h"
  1222.   #include "extern.h"
  1223.   
  1224. --- 23,28 ----
  1225. ***************
  1226. *** 101,106 ****
  1227. --- 105,111 ----
  1228.     register int square,offset ;
  1229.     int row_offset,col_offset,piece,piece_count ;
  1230.   
  1231. +   if ((s_move+increment) < 0 || (s_move+increment) > 63) return(FALSE) ;
  1232.     if (s_pos->square[s_move+increment] != s_opponent) return(FALSE) ;
  1233.    
  1234.   /*  Quick test to catch most failures -
  1235.  
  1236. ------- procs.c -------
  1237. *** /tmp/da28809    Fri Nov  9 10:34:49 1990
  1238. --- procs.c    Thu Nov  8 10:46:31 1990
  1239. ***************
  1240. *** 7,17 ****
  1241.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  1242.    *  All rights reserved.
  1243.    *
  1244. !  *  Permission is given to distribute these sources, as long as the
  1245. !  *  introductory messages are not removed, and no monies are exchanged.
  1246.    *
  1247. !  *  You are forbidden from using Reve as is, or in a modified state, in
  1248. !  *  any tournaments, without the permission of the authors.
  1249.    *
  1250.    *  No responsibility is taken for any errors on inaccuracies inherent
  1251.    *  either to the comments or the code of this program, but if reported
  1252. --- 7,22 ----
  1253.    *  Copyright (C) 1990 - Rich Burridge & Yves Gallot.
  1254.    *  All rights reserved.
  1255.    *
  1256. !  *  Permission is granted to copy this source, for redistribution
  1257. !  *  in source form only, provided the news headers in "substantially
  1258. !  *  unaltered format" are retained, the introductory messages are not
  1259. !  *  removed, and no monies are exchanged.
  1260.    *
  1261. !  *  Permission is also granted to copy this source, without the
  1262. !  *  news headers, for the purposes of making an executable copy by
  1263. !  *  means of compilation, provided that such copy will not be used
  1264. !  *  for the purposes of competition in any othello tournaments, without
  1265. !  *  prior permission from the authors.
  1266.    *
  1267.    *  No responsibility is taken for any errors on inaccuracies inherent
  1268.    *  either to the comments or the code of this program, but if reported
  1269. ***************
  1270. *** 18,24 ****
  1271.    *  (see README file), then an attempt will be made to fix them.
  1272.    */
  1273.   
  1274. - #include <stdio.h>
  1275.   #include "color.h"
  1276.   #include "reve.h"
  1277.   #include "extern.h"
  1278. --- 23,28 ----
  1279. ***************
  1280. *** 27,33 ****
  1281.   void
  1282.   difficulty()
  1283.   {
  1284. !   depth = next_setting(DIFFICULTY, diff_values) + 1 ;
  1285.   }
  1286.   
  1287.   
  1288. --- 31,37 ----
  1289.   void
  1290.   difficulty()
  1291.   {
  1292. !   level = next_setting(DIFFICULTY, diff_values) + 1 ;
  1293.   }
  1294.   
  1295.   
  1296. ***************
  1297. *** 46,53 ****
  1298.     else
  1299.       {
  1300.         draw_piece(next_player, piece_x, piece_y, RINV) ;
  1301. !       cx = (piece_x + PIECE_RAD) / CELL_SIZE ;
  1302. !       cy = ((piece_y - CY) + PIECE_RAD) / CELL_SIZE ;
  1303.         move = cy * BOARD_SIZE + cx ;
  1304.         make_move() ;
  1305.       }
  1306. --- 50,57 ----
  1307.     else
  1308.       {
  1309.         draw_piece(next_player, piece_x, piece_y, RINV) ;
  1310. !       cx = (piece_x + PIECE_RAD - BBORDER) / CELL_SIZE ;
  1311. !       cy = (piece_y + PIECE_RAD - CY - BBORDER) / CELL_SIZE ;
  1312.         move = cy * BOARD_SIZE + cx ;
  1313.         make_move() ;
  1314.       }
  1315. ***************
  1316. *** 66,72 ****
  1317.   init_notes()
  1318.   {
  1319.     show_notes = next_setting(NOTES, notes_values) ;
  1320. !   if (show_notes == FALSE) message(NOTES_MES, "") ;
  1321.   }
  1322.   
  1323.   
  1324. --- 70,76 ----
  1325.   init_notes()
  1326.   {
  1327.     show_notes = next_setting(NOTES, notes_values) ;
  1328. !   if (show_notes == FALSE) message(EVAL_MES, "") ;
  1329.   }
  1330.   
  1331.   
  1332. ***************
  1333. *** 102,110 ****
  1334.         message(PANEL_MES, "Computer can't play both players.") ;
  1335.       }
  1336.     if (curi == HUMAN    && curo == COMPUTER)
  1337. !     dtype = (next_player == BLACK) ? XBLACK : XWHITE ;
  1338.     else if (curi == COMPUTER && curo == HUMAN)
  1339. !     dtype = (next_player == BLACK) ? XWHITE : XBLACK ;
  1340.     else if (curi == HUMAN    && curo == HUMAN)
  1341.       dtype = (dtype == XTWO) ? XTWO : XBOTH ; 
  1342.   
  1343. --- 106,114 ----
  1344.         message(PANEL_MES, "Computer can't play both players.") ;
  1345.       }
  1346.     if (curi == HUMAN    && curo == COMPUTER)
  1347. !     dtype = (item == BLACK_PLAYS) ? XBLACK : XWHITE ;
  1348.     else if (curi == COMPUTER && curo == HUMAN)
  1349. !     dtype = (item == BLACK_PLAYS) ? XWHITE : XBLACK ;
  1350.     else if (curi == HUMAN    && curo == HUMAN)
  1351.       dtype = (dtype == XTWO) ? XTWO : XBOTH ; 
  1352.   
  1353. ***************
  1354. *** 116,139 ****
  1355.   
  1356.   
  1357.   void
  1358. - last()
  1359. - {
  1360. -   enum optype rop ;
  1361. -   int flips, player, x, y ;
  1362. -   if (last_move == -1) return ;        /* No last move. */
  1363. -   player = board.square[last_move] ;
  1364. -   for (flips = 0; flips < 4; flips++)
  1365. -     {
  1366. -       get_xy(last_move, &x, &y) ;
  1367. -       rop = flips % 2 ? RSRC : RCLR ;
  1368. -       draw_piece(player, x, CY+y, rop) ;
  1369. -       PAUSE ;
  1370. -     }
  1371. - }
  1372. - void
  1373.   make_move()
  1374.   {
  1375.     if (legal(move, next_player, &board) == FALSE)
  1376. --- 120,125 ----
  1377. ***************
  1378. *** 149,160 ****
  1379.         case XBLACK :
  1380.         case XWHITE : computer_move(OPPONENT(next_player)) ;
  1381.                       return ;
  1382. !       case XBOTH  : if (check(next_player) == TRUE) break ;
  1383.                       (void) check(OPPONENT(next_player)) ;
  1384.                       return ;
  1385. -       case XTWO   : FPRINTF(stderr, "Multi display not supported yet.\n") ;
  1386.       }
  1387.     cmode = (enum cantype) (OPPONENT(next_player) + 1) ;
  1388.     next_player = OPPONENT(next_player) ;
  1389.   }
  1390. --- 135,145 ----
  1391.         case XBLACK :
  1392.         case XWHITE : computer_move(OPPONENT(next_player)) ;
  1393.                       return ;
  1394. !       case XBOTH  :
  1395. !       case XTWO   : if (check(next_player) == TRUE) break ;
  1396.                       (void) check(OPPONENT(next_player)) ;
  1397.                       return ;
  1398.       }
  1399.     cmode = (enum cantype) (OPPONENT(next_player) + 1) ;
  1400.     next_player = OPPONENT(next_player) ;
  1401.   }
  1402. ***************
  1403. *** 168,174 ****
  1404.     last_move = -1 ;
  1405.     if (items[(int) BLACK_PLAYS].value == COMPUTER) first_move = 1 ;
  1406.     init_canvas() ;
  1407. !   message(NOTES_MES, "") ;
  1408.     message(PANEL_MES, "Use left mouse button to move") ;
  1409.     draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
  1410.   }
  1411. --- 153,159 ----
  1412.     last_move = -1 ;
  1413.     if (items[(int) BLACK_PLAYS].value == COMPUTER) first_move = 1 ;
  1414.     init_canvas() ;
  1415. !   message(EVAL_MES, "") ;
  1416.     message(PANEL_MES, "Use left mouse button to move") ;
  1417.     draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
  1418.   }
  1419. ***************
  1420. *** 208,213 ****
  1421. --- 193,206 ----
  1422.   
  1423.   
  1424.   void
  1425. + show_all_moves()
  1426. + {
  1427. +   if (show_moves) show_all(IS_OFF) ;
  1428. +   else            show_all(IS_ON) ;
  1429. + }
  1430. + void
  1431.   suggest()
  1432.   {
  1433.     int player ;
  1434. ***************
  1435. *** 216,222 ****
  1436.     if (cmode == GAME_OVER) return ;
  1437.     if (cmode == WHITE_START) player = WHITE ;
  1438.     else                      player = BLACK ;
  1439. !   play_reve(&board.square[0], player, depth, &suggestion, ¬e) ;
  1440.   
  1441.     suggest_x = BBORDER + ((suggestion & 7)  + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1442.     suggest_y = BBORDER + ((suggestion >> 3) + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1443. --- 209,216 ----
  1444.     if (cmode == GAME_OVER) return ;
  1445.     if (cmode == WHITE_START) player = WHITE ;
  1446.     else                      player = BLACK ;
  1447. !   suggestion = FALSE ;   /* Make sure the computer clock isn't decremented. */
  1448. !   play_reve(&board.square[0], player, level, &suggestion, ¬e) ;
  1449.   
  1450.     suggest_x = BBORDER + ((suggestion & 7)  + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1451.     suggest_y = BBORDER + ((suggestion >> 3) + 1) * CELL_SIZE - CELL_SIZE / 2 ;
  1452. ***************
  1453. *** 259,269 ****
  1454. --- 253,266 ----
  1455.   
  1456.     if (n >= 3)
  1457.       {
  1458. +       show_last(last_move, IS_OFF) ;
  1459.         FOR_BOARD(i) board.square[i] = moves[n].square[i] ;
  1460.         board.moves_left = moves[n].moves_left ;
  1461.         board.player     = moves[n].player ;
  1462.         board.move       = moves[n].move ;
  1463.         board.note       = moves[n].note ;
  1464. +       board.timeleft   = moves[n].timeleft ;
  1465. +       last_move        = board.move ;
  1466.         moves[n+1].move  = -1 ;
  1467.   
  1468.         FOR_BOARD(i) old_board.square[i] = moves[n-1].square[i] ;
  1469. ***************
  1470. *** 271,277 ****
  1471. --- 268,277 ----
  1472.         old_board.player     = moves[n-1].player ;
  1473.         old_board.move       = moves[n-1].move ;
  1474.         old_board.note       = moves[n-1].note ;
  1475. +       old_board.timeleft   = moves[n-1].timeleft ;
  1476.   
  1477. +       timeleft = board.timeleft ;
  1478.         if (OPPONENT(player) == BLACK) cmode = BLACK_START ;
  1479.         else                           cmode = WHITE_START ;
  1480.         message(PANEL_MES, "") ;
  1481. ***************
  1482. *** 284,289 ****
  1483. --- 284,290 ----
  1484.                          (iscolor[(int) cur_dpyno]) ? C_LBROWN : C_WHITE) ;
  1485.             else draw_piece(board.square[i], x, CY+y, RSRC) ;
  1486.           }
  1487. +       if (n > 3) show_last(last_move, IS_ON) ;
  1488.         next_player = OPPONENT(board.player) ;
  1489.       }
  1490.     else message(PANEL_MES, "No moves to undo.") ;
  1491.  
  1492.  
  1493.