billr@saab.CNA.TEK.COM (Bill Randle) (11/17/90)
Submitted-by: Rich Burridge <rburridge@sun.COM> Posting-number: Volume 11, Issue 62 Archive-name: reve/Patch1b Patch-To: reve: Volume 11, Issue 52-58 Environment: SunView, XView, X11R4, termcap #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 4)." # Contents: patches01b # Wrapped by billr@saab on Fri Nov 16 10:46:43 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patches01b' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patches01b'\" else echo shar: Extracting \"'patches01b'\" \(51889 characters\) sed "s/^X//" >'patches01b' <<'END_OF_FILE' X X------- color.h ------- X*** /tmp/da28728 Fri Nov 9 10:28:40 1990 X--- color.h Mon Nov 5 09:10:15 1990 X*************** X*** 6,16 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors or inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 6,21 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors or inaccuracies inherent X * either to the comments or the code of this program, but if reported X X------- events.c ------- X*** /tmp/da28731 Fri Nov 9 10:28:41 1990 X--- events.c Wed Nov 7 21:09:27 1990 X*************** X*** 7,17 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 7,22 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 18,24 **** X * (see README file), then an attempt will be made to fix them. X */ X X- #include <stdio.h> X #include "reve.h" X #include "color.h" X #include "extern.h" X--- 23,28 ---- X*************** X*** 166,172 **** X switch (item) X { X case BLACK_PLAYS : X! WHITE_PLAYS : if (item == BLACK_PLAYS) curx = 0 ; X else curx = BBORDER + (3*(BWIDTH+BGAP)) ; X switch (ch) X { X--- 170,176 ---- X switch (item) X { X case BLACK_PLAYS : X! case WHITE_PLAYS : if (item == BLACK_PLAYS) curx = 0 ; X else curx = BBORDER + (3*(BWIDTH+BGAP)) ; X switch (ch) X { X*************** X*** 247,254 **** X nextc == RIGHT_DOWN) X { X set_cursor(NOCURSOR) ; X! piece_x = curx - BBORDER - (PIECE_RAD) ; X! piece_y = cury - BBORDER - (PIECE_RAD) ; X draw_piece(next_player, piece_x, piece_y, RINV) ; X cmode = (enum cantype) ((int) cmode + 1) ; X } X--- 251,258 ---- X nextc == RIGHT_DOWN) X { X set_cursor(NOCURSOR) ; X! piece_x = curx - PIECE_RAD ; X! piece_y = cury - PIECE_RAD ; X draw_piece(next_player, piece_x, piece_y, RINV) ; X cmode = (enum cantype) ((int) cmode + 1) ; X } X*************** X*** 319,325 **** X case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ; X break ; X X! case 'l' : last() ; /* Button items. */ X break ; X case 'L' : curx = 0 ; X draw_textfield() ; X--- 323,329 ---- X case 'W' : do_cycle_key(WHITE_PLAYS, nextc) ; X break ; X X! case 'A' : show_all_moves() ; /* Button items. */ X break ; X case 'L' : curx = 0 ; X draw_textfield() ; X X------- extern.h ------- X*** /tmp/da28734 Fri Nov 9 10:28:42 1990 X--- extern.h Wed Nov 7 14:57:04 1990 X*************** X*** 6,16 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 6,21 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 23,29 **** X extern int cur_ch ; /* Current character pressed. */ X extern int curx ; /* Current mouse X position. */ X extern int cury ; /* Current mouse Y position. */ X- extern int depth ; /* Depth of search for computers move. */ X extern int down ; /* Indicates is a mouse button is down. */ X extern int first_move ; /* Set if computer plays first move. */ X extern int iconic ; /* Start as an icon if set. */ X--- 28,33 ---- X*************** X*** 34,41 **** X--- 38,47 ---- X extern int ix ; /* Initial X position of the icon. */ X extern int iy ; /* Initial Y position of the icon. */ X extern int last_move ; /* Last valid computer move. */ X+ extern int level ; /* Current difficulty level for computer moves. */ X extern int loadgame ; /* Set if there is a game file to load. */ X extern int lsval ; /* Set to 'l' or 's', if loading or saving. */ X+ extern int monochrome ; /* If set, display will be in monochrome. */ X extern int move ; /* Current move being evaluated. */ X extern int move_delta ; /* Delta for piece animation. */ X extern int nextc ; /* Current event identifier. */ X*************** X*** 51,56 **** X--- 57,63 ---- X extern int s_player ; X extern int s_row ; X extern int s_col ; X+ extern int show_moves ; /* If set, all possible moves are being shown. */ X extern int show_notes ; /* If set, display notes value from play_reve. */ X extern int suggestion ; /* Positive if a suggested move. */ X extern int suggest_x ; /* X position of suggested move. */ X*************** X*** 62,67 **** X--- 69,75 ---- X extern int wx ; /* Initial X position of the window. */ X extern int wy ; /* Initial Y position of the window. */ X X+ extern time_t timeleft ; /* Amount of time left for computer moves. */ X extern long note ; /* Note value for current computer move. */ X X extern char *diff_values[] ; /* Values for cyclic difficulty button. */ X*************** X*** 74,81 **** X extern char progname[] ; /* The name of this program. */ X extern char revtable[] ; /* Table for reversing bits in a byte. */ X X! extern char black_dpy[] ; /* Black piece display information. */ X! extern char white_dpy[] ; /* White piece display information. */ X X extern FILE *rem_fp ; X extern struct timeval tp ; /* Used by the nap_upto routine. */ X--- 82,89 ---- X extern char progname[] ; /* The name of this program. */ X extern char revtable[] ; /* Table for reversing bits in a byte. */ X X! extern char *black_dpy ; /* Black piece display information. */ X! extern char *white_dpy ; /* White piece display information. */ X X extern FILE *rem_fp ; X extern struct timeval tp ; /* Used by the nap_upto routine. */ X*************** X*** 85,90 **** X--- 93,99 ---- X extern BOARD board ; /* The current reve board. */ X extern BOARD old_board ; /* The previous reve board. */ X extern BOARD *s_pos ; X+ extern BOARD s_all ; /* List of valid positions for this move. */ X extern BOARD moves[64] ; /* Complete array of board moves. */ X X extern enum cantype cmode, last_cmode ; X X------- images.h ------- X*** /tmp/da28737 Fri Nov 9 10:28:42 1990 X--- images.h Tue Nov 6 18:21:08 1990 X*************** X*** 6,16 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors or inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 6,21 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors or inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 18,48 **** X */ X X unsigned short button_stencil_image[] = { X! #include "images/button.stencil.icon" X } ; X X unsigned short button_invert_image[] = { X! #include "images/button.invert.icon" X } ; X X unsigned short button_normal_image[] = { X! #include "images/button.normal.icon" X } ; X X unsigned short cycle_glyph_image[] = { X! #include "images/cycle.glyph.icon" X } ; X X unsigned short cycle_stencil_image[] = { X! #include "images/cycle.stencil.icon" X } ; X X unsigned short cycle_linvert_image[] = { X! #include "images/cycle.linvert.icon" X } ; X X unsigned short cycle_rinvert_image[] = { X! #include "images/cycle.rinvert.icon" X } ; X X unsigned short icon_image[] = { X--- 23,53 ---- X */ X X unsigned short button_stencil_image[] = { X! #include "images/Sbutton.icon" X } ; X X unsigned short button_invert_image[] = { X! #include "images/Ibutton.icon" X } ; X X unsigned short button_normal_image[] = { X! #include "images/Nbutton.icon" X } ; X X unsigned short cycle_glyph_image[] = { X! #include "images/Ncycle.icon" X } ; X X unsigned short cycle_stencil_image[] = { X! #include "images/Scycle.icon" X } ; X X unsigned short cycle_linvert_image[] = { X! #include "images/Lcycle.icon" X } ; X X unsigned short cycle_rinvert_image[] = { X! #include "images/Rcycle.icon" X } ; X X unsigned short icon_image[] = { X*************** X*** 50,56 **** X } ; X X unsigned short cicon_image[] = { X! #include "images/reve.color.icon" X } ; X X unsigned short hglass_image[] = { X--- 55,61 ---- X } ; X X unsigned short cicon_image[] = { X! #include "images/Creve.icon" X } ; X X unsigned short hglass_image[] = { X X------- items.c ------- X*** /tmp/da28740 Fri Nov 9 10:28:43 1990 X--- items.c Mon Nov 5 09:05:39 1990 X*************** X*** 7,17 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 7,22 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 18,30 **** X * (see README file), then an attempt will be made to fix them. X */ X X- #include <stdio.h> X- #include <strings.h> X- #include "color.h" X #include "reve.h" X #include "extern.h" X X X void X draw_button(item, color, image) /* Draw a panel button. */ X enum panel_type item ; X--- 23,39 ---- X * (see README file), then an attempt will be made to fix them. X */ X X #include "reve.h" X+ #include "color.h" X #include "extern.h" X X+ #ifdef SYSV X+ #include "string.h" X+ #else X+ #include <strings.h> X+ #endif /*SYSV*/ X X+ X void X draw_button(item, color, image) /* Draw a panel button. */ X enum panel_type item ; X*************** X*** 107,139 **** X X X void X- draw_piece(piece, x, y, op) /* Draw an othello piece on the board. */ X- int piece, x, y ; X- enum optype op ; X- { X- switch (piece) X- { X- case BLACK : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK, X- P_BLACK, P_BLACK) ; X- break ; X- case WHITE : draw_stencil(x, y, PSIZE, PSIZE, op, C_BLACK, X- P_BLACK, P_WHITE) ; X- } X- } X- X- X- void X- draw_rect(x1, y1, x2, y2) X- int x1, y1, x2, y2 ; X- { X- draw_line(x1, y1, x2, y1, RSRC, C_BLACK) ; X- draw_line(x1, y1, x1, y2, RSRC, C_BLACK) ; X- draw_line(x2, y1, x2, y2, RSRC, C_BLACK) ; X- draw_line(x1, y2, x2, y2, RSRC, C_BLACK) ; X- } X- X- X- void X draw_textfield() X { X int x1, y1 ; X--- 116,121 ---- X*************** X*** 142,148 **** X x1 = BBORDER + BWIDTH + (BGAP / 2) ; X y1 = BBORDER + BHEIGHT + (BGAP / 2) ; X color_area(x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP, C_WHITE) ; X! draw_rect(x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1, y1 + BHEIGHT + BGAP - 1) ; X draw_text(BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP + X (nfont_height + (BHEIGHT - nfont_height) / 2) - 5, X BFONT, C_BLACK, "File:") ; X--- 124,131 ---- X x1 = BBORDER + BWIDTH + (BGAP / 2) ; X y1 = BBORDER + BHEIGHT + (BGAP / 2) ; X color_area(x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP, C_WHITE) ; X! draw_rect(x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1, X! y1 + BHEIGHT + BGAP - 1, RSRC, C_BLACK) ; X draw_text(BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP + X (nfont_height + (BHEIGHT - nfont_height) / 2) - 5, X BFONT, C_BLACK, "File:") ; X*************** X*** 210,219 **** X void X make_panel() X { X- draw_button(LAST_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(LOAD_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(SAVE_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(SUGGEST_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(UNDO_BUT, C_LGREY, BUT_NORMAL) ; X X--- 193,202 ---- X void X make_panel() X { X draw_button(LOAD_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(SAVE_BUT, C_LGREY, BUT_NORMAL) ; X+ draw_button(SHOW_ALL_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(SUGGEST_BUT, C_LGREY, BUT_NORMAL) ; X draw_button(UNDO_BUT, C_LGREY, BUT_NORMAL) ; X X*************** X*** 226,232 **** X draw_cycle_item(NOTES, notes_values, C_LGREY, CY_NORMAL) ; X X make_message(PANEL_MES) ; X! make_message(NOTES_MES) ; X make_message(SCORE_MES) ; X make_message(TURN_MES) ; X } X--- 209,215 ---- X draw_cycle_item(NOTES, notes_values, C_LGREY, CY_NORMAL) ; X X make_message(PANEL_MES) ; X! make_message(EVAL_MES) ; X make_message(SCORE_MES) ; X make_message(TURN_MES) ; X } X X------- reve.man ------- X*** /tmp/da28765 Fri Nov 9 10:32:20 1990 X--- reve.man Fri Nov 9 10:31:20 1990 X*************** X*** 10,17 **** X X SYNOPSIS X reve [ -b [ display ] ] [ -c ] [ -d difficulty ] [ -e edge- X! file ] [ -g geometry ] [ -i ] [ -l gamefile ] [ -n ] [ -v ] X! [ -w [ display ] ] [ -? ] [ -Wi ] [ -Wp x y ] [ -WP x y ] X X DESCRIPTION X Reve is a version of the popular Othello game. It contains X--- 10,18 ---- X X SYNOPSIS X reve [ -b [ display ] ] [ -c ] [ -d difficulty ] [ -e edge- X! file ] [ -g geometry ] [ -i ] [ -l gamefile ] [ -m ] [ -n ] X! [ -r ] [ -v ] [ -w [ display ] ] [ -? ] [ -Wi ] [ -Wp x y ] X! [ -WP x y ] X X DESCRIPTION X Reve is a version of the popular Othello game. It contains X*************** X*** 38,44 **** X go. Note that it is also possible to supply a number and a X letter pair, to indicate where you would like your new piece X to go. This is the only method to place pieces with the dumb X! tty interface. X X There are various buttons and cyclic selections available. X Their meanings are given below, plus an indication of their X--- 39,47 ---- X go. Note that it is also possible to supply a number and a X letter pair, to indicate where you would like your new piece X to go. This is the only method to place pieces with the dumb X! tty interface. The square containing the last move will be X! shown with a black outline. This is updated with each new X! move. X X There are various buttons and cyclic selections available. X Their meanings are given below, plus an indication of their X*************** X*** 54,62 **** X other combination, then you should use the appropriate com- X mand line options (see below). X X- REVE BUTTONS X- With the graphics versions, there are eight buttons that are X- normally displayed at the top of the Reve window. Each of X X X X--- 57,62 ---- X*************** X*** 71,81 **** X X X X these buttons, except the "done" button has a keyboard X equivalent which is given in brackets below. X X- last [ l ] Show the last move played. X- X load [ L ] Load a game file. The format of this game X file is given below. With the graphical X versions, a text field is displayed X--- 71,82 ---- X X X X+ REVE BUTTONS X+ With the graphics versions, there are eight buttons that are X+ normally displayed at the top of the Reve window. Each of X these buttons, except the "done" button has a keyboard X equivalent which is given in brackets below. X X load [ L ] Load a game file. The format of this game X file is given below. With the graphical X versions, a text field is displayed X*************** X*** 92,97 **** X--- 93,102 ---- X game file, the piece is displayed on the X board, and the appropriate pieces flipped. X X+ moves? [ A ] Show all the valid moves for the current X+ board. This is useful for beginners, and X+ for teaching purposes. X+ X new game [ n ] Start a new game of reve X X save [ S ] Save the current game to file. See the X*************** X*** 118,128 **** X left mouse button, to increment or decrement the current X selection (depending upon which half on the item you click X over), or a selection can be made from a popup menu when you X- click with the right mouse button (SunView and XView ver- X- sions only). Each cycle value has a keyboard equivalent X- which is given in brackets below. This must be followed by X- the value of the new selection you wish to make. The dumb X- tty version has the equivalent of these items displayed to X X X X--- 123,128 ---- X*************** X*** 137,142 **** X--- 137,147 ---- X X X X+ click with the right mouse button (SunView and XView ver- X+ sions only). Each cycle value has a keyboard equivalent X+ which is given in brackets below. This must be followed by X+ the value of the new selection you wish to make. The dumb X+ tty version has the equivalent of these items displayed to X the right of the reve board display. X X Black: [ B ] Select whether the black player should be X*************** X*** 184,197 **** X of reve it is possible to give an optional display X value. X X- -c The computer will play. Presence or absence of -b and X- -w options determine which piece the computer plays. X X- -d difficulty X- The level of difficulty for computer moves. See the X X X- X Sun Release 4.1 Last change: 18 October 1990 3 X X X--- 189,197 ---- X*************** X*** 203,212 **** X X X X Difficulty: cyclic item description above for more X information. X X! -eedgefile X Specify an alternate location for the reve edge stabil- X ity table file. Normally the location of this file is X compiled in when the program is created, but reve will X--- 203,217 ---- X X X X+ -c The computer will play. Presence or absence of -b and X+ -w options determine which piece the computer plays. X+ X+ -d difficulty X+ The level of difficulty for computer moves. See the X Difficulty: cyclic item description above for more X information. X X! -e edgefile X Specify an alternate location for the reve edge stabil- X ity table file. Normally the location of this file is X compiled in when the program is created, but reve will X*************** X*** 226,233 **** X--- 231,245 ---- X Load a game file. The format of this game file is given X below. The board will be setup with these pieces. X X+ -m Always display in monochrome, even on a color screen. X+ X -n Display computer notes. X X+ -r Save a log of computer move information to the file X+ reve.res as the game progresses. This information is X+ probably only useful to people trying to improve the X+ computer algorithm. X+ X -? Print the version number and usage message for this X release of the reve program. X X*************** X*** 243,274 **** X and XView version of reve will automatically uses this X flag, but the X11 version will also. X X- -Wp x y X- Start the open window position at x y X X- -WP x y X- Start the icon position at x y X X- REVE GAMES FILE FORMAT X- Reve has the ability to load or save games. The format of X- the games files are: X X! 1, <C-4> - [ remarks field ] X! 2, - <E-3> [ remarks field ] X X X X- Sun Release 4.1 Last change: 18 October 1990 4 X X X X X X X! REVE(6) GAMES AND DEMOS REVE(6) X X X X There is one move per line. Lines starting with a '#' and X blank lines are ignored. The first field of each line is the X move number. This will be present before the comma. It is X--- 255,287 ---- X and XView version of reve will automatically uses this X flag, but the X11 version will also. X X X X X! Sun Release 4.1 Last change: 18 October 1990 4 X X X X X X X+ REVE(6) GAMES AND DEMOS REVE(6) X X X X! -Wp x y X! Start the open window position at x y X X+ -WP x y X+ Start the icon position at x y X X+ REVE GAMES FILE FORMAT X+ Reve has the ability to load or save games. The format of X+ the games files are: X X+ 1, <C-4> - [ remarks field ] X+ 2, - <E-3> [ remarks field ] X+ X There is one move per line. Lines starting with a '#' and X blank lines are ignored. The first field of each line is the X move number. This will be present before the comma. It is X*************** X*** 297,315 **** X AUTHORS X Computer strategy: Yves Gallot galloty@cernvax.cern.ch X Graphics interface: Rich Burridge richb@Aus.Sun.COM X- X- X- X- X- X- X- X- X- X- X- X- X- X X X X--- 310,315 ---- X X------- reve.6 ------- X*** /tmp/da28768 Fri Nov 9 10:32:21 1990 X--- reve.6 Fri Nov 9 10:31:13 1990 X*************** X*** 24,31 **** X--- 24,35 ---- X .B \-l X .I gamefile X ] [ X+ .B \-m X+ ] [ X .B \-n X ] [ X+ .B \-r X+ ] [ X .B \-v X ] [ X .B \-w X*************** X*** 65,71 **** X square in which you want your piece to go. Note that it is also possible X to supply a number and a letter pair, to indicate where you would like your X new piece to go. This is the only method to place pieces with the dumb tty X! interface. X .LP X There are various buttons and cyclic selections available. Their meanings X are given below, plus an indication of their keyboard equivalents. With the X--- 69,76 ---- X square in which you want your piece to go. Note that it is also possible X to supply a number and a letter pair, to indicate where you would like your X new piece to go. This is the only method to place pieces with the dumb tty X! interface. The square containing the last move will be shown with a black X! outline. This is updated with each new move. X .LP X There are various buttons and cyclic selections available. Their meanings X are given below, plus an indication of their keyboard equivalents. With the X*************** X*** 83,90 **** X displayed at the top of the Reve window. Each of these buttons, except X the "done" button has a keyboard equivalent which is given in brackets below. X .LP X- .IP "\fBlast [ l ]\fP" 18 X- Show the last move played. X .IP "\fBload [ L ]\fP" 18 X Load a game file. The format of this game file is given below. With the X graphical versions, a text field is displayed between the \fBdone\fP and X--- 88,93 ---- X*************** X*** 95,100 **** X--- 98,106 ---- X stop on the invalid line, and display an error message. As each line is X successfully read from the game file, the piece is displayed on the board, X and the appropriate pieces flipped. X+ .IP "\fBmoves? [ A ]\fP" 18 X+ Show all the valid moves for the current board. This is useful for beginners, X+ and for teaching purposes. X .IP "\fBnew game [ n ]\fP" 18 X Start a new game of X .I reve X*************** X*** 178,184 **** X The level of difficulty for computer moves. See the \fBDifficulty:\fP X cyclic item description above for more information. X .TP X! .BI \-e "edgefile" X Specify an alternate location for the X .I reve X edge stability table file. Normally the location of this file is compiled X--- 184,190 ---- X The level of difficulty for computer moves. See the \fBDifficulty:\fP X cyclic item description above for more information. X .TP X! .BI \-e " edgefile" X Specify an alternate location for the X .I reve X edge stability table file. Normally the location of this file is compiled X*************** X*** 201,208 **** X--- 207,223 ---- X Load a game file. The format of this game file is given below. The board X will be setup with these pieces. X .TP X+ .B \-m X+ Always display in monochrome, even on a color screen. X+ .TP X .B \-n X Display computer notes. X+ .TP X+ .B \-r X+ Save a log of computer move information to the file X+ .I reve.res X+ as the game progresses. This information is probably only useful to X+ people trying to improve the computer algorithm. X .TP X .B \-? X Print the version number and usage message for this release of the X X------- main.c ------- X*** /tmp/da28803 Fri Nov 9 10:34:47 1990 X--- main.c Wed Nov 7 15:04:18 1990 X*************** X*** 6,16 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 6,21 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 17,28 **** X * (see README file), then an attempt will be made to fix them. X */ X X- #include <stdio.h> X- #include <strings.h> X- #include <sys/time.h> X- #include "color.h" X #include "reve.h" X #include "patchlevel.h" X X /* Text values for the cyclic buttons. */ X char *diff_values[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL } ; X--- 22,39 ---- X * (see README file), then an attempt will be made to fix them. X */ X X #include "reve.h" X+ #include "color.h" X #include "patchlevel.h" X+ #ifdef SYSV X+ #include <string.h> X+ #else X+ #include <strings.h> X+ #endif /*SYSV*/ X+ #include <sys/time.h> X+ #ifdef X11 X+ #include <X11/Xos.h> X+ #endif /*X11*/ X X /* Text values for the cyclic buttons. */ X char *diff_values[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL } ; X*************** X*** 45,51 **** X int cur_ch ; /* Current character pressed. */ X int curx ; /* Current mouse X position. */ X int cury ; /* Current mouse Y position. */ X- int depth ; /* Depth of search for computers move. */ X int down ; /* Indicates is a mouse button is down. */ X int first_move = 0 ; /* Set if computer plays first move. */ X int iconic ; /* Set if window is currently iconic. */ X--- 56,61 ---- X*************** X*** 58,65 **** X--- 68,77 ---- X int ix ; /* Initial X position of the icon. */ X int iy ; /* Initial Y position of the icon. */ X int last_move ; /* Last valid computer move. */ X+ int level ; /* Current level of difficulty for computer moves. */ X int loadgame = 0 ; /* Set if there is a game file to load. */ X int lsval = 0 ; /* Set to 'l' or 's', if loading or saving. */ X+ int monochrome = 0 ; /* If set, display will be in monochrome. */ X int move ; /* Current move being evaluated. */ X int move_delta ; /* Delta for piece animation. */ X int nextc ; /* Current event identifier. */ X*************** X*** 67,72 **** X--- 79,86 ---- X int nfont_height ; /* Height in pixels for normal font. */ X int play_computer ; /* Set if playing against the computer. */ X int posspec ; /* Set if -Wp or -g option is present (for X11) */ X+ int saveres = 0 ; /* If set, save computer results to log file. */ X+ int show_moves = 0 ; /* If set, all possible moves are being shown. */ X int show_notes ; /* If set, display notes value from play_reve. */ X int suggestion = -1 ; /* Positive if a suggested move. */ X int suggest_x ; /* X position of suggested move. */ X*************** X*** 93,98 **** X--- 107,113 ---- X BOARD old_board ; /* The previous reve board. */ X BOARD board ; /* The current reve board. */ X BOARD *s_pos ; X+ BOARD s_all ; /* List of valid positions for this move. */ X X BOARD moves[64] ; /* Complete array of board moves. */ X X*************** X*** 101,110 **** X /* type x y width height text value function */ X X { P_BUTTON, BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X! BWIDTH, BHEIGHT, "last", 0, last }, X X { P_BUTTON, BBORDER + (1*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X! BWIDTH, BHEIGHT, "load", 0, draw_textfield }, X X { P_BUTTON, BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X BWIDTH, BHEIGHT, "new game", 0, new_game }, X--- 116,125 ---- X /* type x y width height text value function */ X X { P_BUTTON, BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X! BWIDTH, BHEIGHT, "load", 0, draw_textfield }, X X { P_BUTTON, BBORDER + (1*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X! BWIDTH, BHEIGHT, "moves?", 0, show_all_moves }, X X { P_BUTTON, BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)), X BWIDTH, BHEIGHT, "new game", 0, new_game }, X*************** X*** 170,175 **** X--- 185,191 ---- X long c1, c2, c3 ; /* Constants used in evaluation function */ X long edges[6561] ; /* Edges Stability Table */ X long note ; /* Note value for current computer move. */ X+ time_t timeleft ; /* Amount of time left for computer moves. */ X X extern enum gr_type gtype ; /* Graphics type. */ X X*************** X*** 190,195 **** X--- 206,226 ---- X FPRINTF(stderr,"Error initialising window system.\n") ; X exit(1) ; X } X+ generate_graphics(argc, argv, DPY1) ; X+ if (dtype == XTWO) generate_graphics(argc, argv, DPY2) ; X+ start_tool(dtype) ; /* Event handling loop. */ X+ exit(0) ; X+ /*NOTREACHED*/ X+ } X+ X+ X+ void X+ generate_graphics(argc, argv, dpyno) X+ enum dpy_type dpyno ; X+ int argc ; X+ char *argv[] ; X+ { X+ cur_dpyno = dpyno ; X make_icon() ; X make_frame(argc, argv) ; /* Create reve window/icon. */ X make_canvas() ; /* Create drawing canvas. */ X*************** X*** 200,208 **** X create_menu(NOTES, notes_values) ; X initboard() ; X set_cursor(CANVASCUR) ; X- start_tool(dtype) ; /* Event handling loop. */ X- exit(0) ; X- /*NOTREACHED*/ X } X X X--- 231,236 ---- X*************** X*** 212,217 **** X--- 240,246 ---- X char *argv[] ; X { X char next[MAXLINE] ; /* The next command line parameter. */ X+ int i ; X X INC ; X while (argc > 0) X*************** X*** 220,226 **** X switch (argv[0][1]) X { X case 'b' : isblack = 1 ; X! if (*argv != NULL && argv[0][0] != '-') X { X INC ; X black_dpy = *argv ; X--- 249,255 ---- X switch (argv[0][1]) X { X case 'b' : isblack = 1 ; X! if (*(argv+1) != NULL && argv[1][0] != '-') X { X INC ; X black_dpy = *argv ; X*************** X*** 230,238 **** X break ; X case 'd' : INC ; X getparam(next, argv, "-d needs difficulty") ; X! depth = atoi(next) ; X! if (depth < 1 || depth > MAXDIFF) depth = INIT_DEPTH ; X! items[(int) DIFFICULTY].value = depth - 1 ; X break ; X case 'e' : INC ; X getparam(edgefile, argv, "-e needs an edgetable file") ; X--- 259,267 ---- X break ; X case 'd' : INC ; X getparam(next, argv, "-d needs difficulty") ; X! level = atoi(next) ; X! if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ; X! items[(int) DIFFICULTY].value = level - 1 ; X break ; X case 'e' : INC ; X getparam(edgefile, argv, "-e needs an edgetable file") ; X*************** X*** 247,260 **** X getparam(gamefile, argv, "-l needs a game file") ; X loadgame = 1 ; /* Game file to load. */ X break ; X case 'n' : show_notes = 1 ; /* Display computer notes. */ X items[(int) NOTES].value = 1 ; X break ; X case '?' : X case 'v' : usage() ; X X case 'w' : iswhite = 1 ; X! if (*argv != NULL && argv[0][0] != '-') X { X INC ; X white_dpy = *argv ; X--- 276,294 ---- X getparam(gamefile, argv, "-l needs a game file") ; X loadgame = 1 ; /* Game file to load. */ X break ; X+ case 'm' : monochrome = 1 ; /* Force display to mono. */ X+ for (i = 0; i < MAXDPY; i++) iscolor[i] = 0 ; X+ break ; X case 'n' : show_notes = 1 ; /* Display computer notes. */ X items[(int) NOTES].value = 1 ; X break ; X+ case 'r' : saveres = 1 ; /* Save computer results to file. */ X+ break ; X case '?' : X case 'v' : usage() ; X X case 'w' : iswhite = 1 ; X! if (*(argv+1) != NULL && argv[1][0] != '-') X { X INC ; X white_dpy = *argv ; X*************** X*** 382,387 **** X--- 416,422 ---- X BFONT, color, sa) ; X } X batch(IS_OFF) ; X+ show_last(last_move, IS_ON) ; X show_suggestion() ; X batch(IS_ON) ; X FOR_BOARD(i) X*************** X*** 423,430 **** X show_notes = FALSE ; X isblack = 0 ; X iswhite = 0 ; X! depth = INIT_DEPTH ; X! items[(int) DIFFICULTY].value = depth - 1 ; X X black_dpy = NULL ; /* X11 black piece display information. */ X white_dpy = NULL ; /* X11 white piece display information. */ X--- 458,465 ---- X show_notes = FALSE ; X isblack = 0 ; X iswhite = 0 ; X! level = INIT_DEPTH ; X! items[(int) DIFFICULTY].value = level - 1 ; X X black_dpy = NULL ; /* X11 black piece display information. */ X white_dpy = NULL ; /* X11 white piece display information. */ X*************** X*** 512,517 **** X--- 547,553 ---- X void X set_display_types() X { X+ if (isblack && iswhite) play_computer = 0 ; X if (isblack && iswhite) dtype = XBOTH ; X else if (isblack) dtype = XBLACK ; X else if (iswhite) dtype = XWHITE ; X*************** X*** 553,559 **** X int player ; X { X set_cursor(HOURGLASS) ; X! play_reve(board.square, player, depth, &move, ¬e) ; X set_cursor(CANVASCUR) ; X animate_move(move) ; X do_move(player) ; X--- 589,596 ---- X int player ; X { X set_cursor(HOURGLASS) ; X! move = TRUE ; /* Make sure the computer clock is decremented. */ X! play_reve(board.square, player, level, &move, ¬e) ; X set_cursor(CANVASCUR) ; X animate_move(move) ; X do_move(player) ; X X------- makemove.c ------- X*** /tmp/da28806 Fri Nov 9 10:34:48 1990 X--- makemove.c Mon Nov 5 09:06:03 1990 X*************** X*** 7,17 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 7,22 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 18,24 **** X * (see README file), then an attempt will be made to fix them. X */ X X- #include <stdio.h> X #include "reve.h" X #include "extern.h" X X--- 23,28 ---- X*************** X*** 101,106 **** X--- 105,111 ---- X register int square,offset ; X int row_offset,col_offset,piece,piece_count ; X X+ if ((s_move+increment) < 0 || (s_move+increment) > 63) return(FALSE) ; X if (s_pos->square[s_move+increment] != s_opponent) return(FALSE) ; X X /* Quick test to catch most failures - X X------- procs.c ------- X*** /tmp/da28809 Fri Nov 9 10:34:49 1990 X--- procs.c Thu Nov 8 10:46:31 1990 X*************** X*** 7,17 **** X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is given to distribute these sources, as long as the X! * introductory messages are not removed, and no monies are exchanged. X * X! * You are forbidden from using Reve as is, or in a modified state, in X! * any tournaments, without the permission of the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X--- 7,22 ---- X * Copyright (C) 1990 - Rich Burridge & Yves Gallot. X * All rights reserved. X * X! * Permission is granted to copy this source, for redistribution X! * in source form only, provided the news headers in "substantially X! * unaltered format" are retained, the introductory messages are not X! * removed, and no monies are exchanged. X * X! * Permission is also granted to copy this source, without the X! * news headers, for the purposes of making an executable copy by X! * means of compilation, provided that such copy will not be used X! * for the purposes of competition in any othello tournaments, without X! * prior permission from the authors. X * X * No responsibility is taken for any errors on inaccuracies inherent X * either to the comments or the code of this program, but if reported X*************** X*** 18,24 **** X * (see README file), then an attempt will be made to fix them. X */ X X- #include <stdio.h> X #include "color.h" X #include "reve.h" X #include "extern.h" X--- 23,28 ---- X*************** X*** 27,33 **** X void X difficulty() X { X! depth = next_setting(DIFFICULTY, diff_values) + 1 ; X } X X X--- 31,37 ---- X void X difficulty() X { X! level = next_setting(DIFFICULTY, diff_values) + 1 ; X } X X X*************** X*** 46,53 **** X else X { X draw_piece(next_player, piece_x, piece_y, RINV) ; X! cx = (piece_x + PIECE_RAD) / CELL_SIZE ; X! cy = ((piece_y - CY) + PIECE_RAD) / CELL_SIZE ; X move = cy * BOARD_SIZE + cx ; X make_move() ; X } X--- 50,57 ---- X else X { X draw_piece(next_player, piece_x, piece_y, RINV) ; X! cx = (piece_x + PIECE_RAD - BBORDER) / CELL_SIZE ; X! cy = (piece_y + PIECE_RAD - CY - BBORDER) / CELL_SIZE ; X move = cy * BOARD_SIZE + cx ; X make_move() ; X } X*************** X*** 66,72 **** X init_notes() X { X show_notes = next_setting(NOTES, notes_values) ; X! if (show_notes == FALSE) message(NOTES_MES, "") ; X } X X X--- 70,76 ---- X init_notes() X { X show_notes = next_setting(NOTES, notes_values) ; X! if (show_notes == FALSE) message(EVAL_MES, "") ; X } X X X*************** X*** 102,110 **** X message(PANEL_MES, "Computer can't play both players.") ; X } X if (curi == HUMAN && curo == COMPUTER) X! dtype = (next_player == BLACK) ? XBLACK : XWHITE ; X else if (curi == COMPUTER && curo == HUMAN) X! dtype = (next_player == BLACK) ? XWHITE : XBLACK ; X else if (curi == HUMAN && curo == HUMAN) X dtype = (dtype == XTWO) ? XTWO : XBOTH ; X X--- 106,114 ---- X message(PANEL_MES, "Computer can't play both players.") ; X } X if (curi == HUMAN && curo == COMPUTER) X! dtype = (item == BLACK_PLAYS) ? XBLACK : XWHITE ; X else if (curi == COMPUTER && curo == HUMAN) X! dtype = (item == BLACK_PLAYS) ? XWHITE : XBLACK ; X else if (curi == HUMAN && curo == HUMAN) X dtype = (dtype == XTWO) ? XTWO : XBOTH ; X X*************** X*** 116,139 **** X X X void X- last() X- { X- enum optype rop ; X- int flips, player, x, y ; X- X- if (last_move == -1) return ; /* No last move. */ X- player = board.square[last_move] ; X- for (flips = 0; flips < 4; flips++) X- { X- get_xy(last_move, &x, &y) ; X- rop = flips % 2 ? RSRC : RCLR ; X- draw_piece(player, x, CY+y, rop) ; X- PAUSE ; X- } X- } X- X- X- void X make_move() X { X if (legal(move, next_player, &board) == FALSE) X--- 120,125 ---- X*************** X*** 149,160 **** X case XBLACK : X case XWHITE : computer_move(OPPONENT(next_player)) ; X return ; X! case XBOTH : if (check(next_player) == TRUE) break ; X (void) check(OPPONENT(next_player)) ; X return ; X- case XTWO : FPRINTF(stderr, "Multi display not supported yet.\n") ; X } X- X cmode = (enum cantype) (OPPONENT(next_player) + 1) ; X next_player = OPPONENT(next_player) ; X } X--- 135,145 ---- X case XBLACK : X case XWHITE : computer_move(OPPONENT(next_player)) ; X return ; X! case XBOTH : X! case XTWO : if (check(next_player) == TRUE) break ; X (void) check(OPPONENT(next_player)) ; X return ; X } X cmode = (enum cantype) (OPPONENT(next_player) + 1) ; X next_player = OPPONENT(next_player) ; X } X*************** X*** 168,174 **** X last_move = -1 ; X if (items[(int) BLACK_PLAYS].value == COMPUTER) first_move = 1 ; X init_canvas() ; X! message(NOTES_MES, "") ; X message(PANEL_MES, "Use left mouse button to move") ; X draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ; X } X--- 153,159 ---- X last_move = -1 ; X if (items[(int) BLACK_PLAYS].value == COMPUTER) first_move = 1 ; X init_canvas() ; X! message(EVAL_MES, "") ; X message(PANEL_MES, "Use left mouse button to move") ; X draw_button(NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ; X } X*************** X*** 208,213 **** X--- 193,206 ---- X X X void X+ show_all_moves() X+ { X+ if (show_moves) show_all(IS_OFF) ; X+ else show_all(IS_ON) ; X+ } X+ X+ X+ void X suggest() X { X int player ; X*************** X*** 216,222 **** X if (cmode == GAME_OVER) return ; X if (cmode == WHITE_START) player = WHITE ; X else player = BLACK ; X! play_reve(&board.square[0], player, depth, &suggestion, ¬e) ; X X suggest_x = BBORDER + ((suggestion & 7) + 1) * CELL_SIZE - CELL_SIZE / 2 ; X suggest_y = BBORDER + ((suggestion >> 3) + 1) * CELL_SIZE - CELL_SIZE / 2 ; X--- 209,216 ---- X if (cmode == GAME_OVER) return ; X if (cmode == WHITE_START) player = WHITE ; X else player = BLACK ; X! suggestion = FALSE ; /* Make sure the computer clock isn't decremented. */ X! play_reve(&board.square[0], player, level, &suggestion, ¬e) ; X X suggest_x = BBORDER + ((suggestion & 7) + 1) * CELL_SIZE - CELL_SIZE / 2 ; X suggest_y = BBORDER + ((suggestion >> 3) + 1) * CELL_SIZE - CELL_SIZE / 2 ; X*************** X*** 259,269 **** X--- 253,266 ---- X X if (n >= 3) X { X+ show_last(last_move, IS_OFF) ; X FOR_BOARD(i) board.square[i] = moves[n].square[i] ; X board.moves_left = moves[n].moves_left ; X board.player = moves[n].player ; X board.move = moves[n].move ; X board.note = moves[n].note ; X+ board.timeleft = moves[n].timeleft ; X+ last_move = board.move ; X moves[n+1].move = -1 ; X X FOR_BOARD(i) old_board.square[i] = moves[n-1].square[i] ; X*************** X*** 271,277 **** X--- 268,277 ---- X old_board.player = moves[n-1].player ; X old_board.move = moves[n-1].move ; X old_board.note = moves[n-1].note ; X+ old_board.timeleft = moves[n-1].timeleft ; X X+ timeleft = board.timeleft ; X+ X if (OPPONENT(player) == BLACK) cmode = BLACK_START ; X else cmode = WHITE_START ; X message(PANEL_MES, "") ; X*************** X*** 284,289 **** X--- 284,290 ---- X (iscolor[(int) cur_dpyno]) ? C_LBROWN : C_WHITE) ; X else draw_piece(board.square[i], x, CY+y, RSRC) ; X } X+ if (n > 3) show_last(last_move, IS_ON) ; X next_player = OPPONENT(board.player) ; X } X else message(PANEL_MES, "No moves to undo.") ; X X END_OF_FILE if test 51889 -ne `wc -c <'patches01b'`; then echo shar: \"'patches01b'\" unpacked with wrong size! fi # end of 'patches01b' fi echo shar: End of archive 2 \(of 4\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 4 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0