[comp.sources.games] v12i013: reve - an othello game, Patch4d

billr@saab.CNA.TEK.COM (Bill Randle) (12/22/90)

Submitted-by: Rich Burridge <rburridge@sun.COM>
Posting-number: Volume 12, Issue 13
Archive-name: reve/Patch4d
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 4 (of 4)."
# Contents:  patches04d
# Wrapped by billr@saab on Fri Dec 21 11:36:12 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches04d' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches04d'\"
else
echo shar: Extracting \"'patches04d'\" \(46589 characters\)
sed "s/^X//" >'patches04d' <<'END_OF_FILE'
X
X------- items.c -------
X*** /tmp/da06882	Tue Dec 18 10:10:23 1990
X--- items.c	Mon Dec 17 10:24:06 1990
X***************
X*** 40,45 ****
X--- 40,46 ----
X  
X    x = items[(int) item].x ;
X    y = items[(int) item].y ;
X+   if (x == -1 && y == -1) return ;
X    if (iscolor[(int) cur_dpyno])
X      {
X        draw_stencil(wtype, x, y, BWIDTH, BHEIGHT, RSRC, color,
X***************
X*** 50,56 ****
X                      BUT_STENCIL, image) ;
X    label = items[(int) item].text ;
X    if (image == BUT_INVERT) color = C_WHITE ;
X!   else                     color = C_BLACK ;
X    x += ((BWIDTH - get_strwidth(NFONT, label)) / 2) ;
X    y += (nfont_height + (BHEIGHT - nfont_height) / 2) - 5 ;
X    draw_text(wtype, x, y, NFONT, color, label) ;
X--- 51,57 ----
X                      BUT_STENCIL, image) ;
X    label = items[(int) item].text ;
X    if (image == BUT_INVERT) color = C_WHITE ;
X!   else                     color = C_TEXT ;
X    x += ((BWIDTH - get_strwidth(NFONT, label)) / 2) ;
X    y += (nfont_height + (BHEIGHT - nfont_height) / 2) - 5 ;
X    draw_text(wtype, x, y, NFONT, color, label) ;
X***************
X*** 64,75 ****
X  int color ;
X  {
X    char *str ;
X!   int height, i, maxw, val, width, x, xoff, y ;
X  
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, C_BLACK, items[(int) item].label) ;
X  
X    maxw = 0 ;
X    for (i = 0; i < items[(int) item].nopts; i++)
X--- 65,77 ----
X  int color ;
X  {
X    char *str ;
X!   int height, i, maxw, tcol, val, width, x, xoff, y ;
X  
X+   tcol = B_COLOR(C_TEXT) ;
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, tcol, items[(int) item].label) ;
X  
X    maxw = 0 ;
X    for (i = 0; i < items[(int) item].nopts; i++)
X***************
X*** 100,109 ****
X        xoff = (maxw - val) / 2 ;
X        draw_text(items[(int) item].wtype,
X                  x + (i * maxw) + xoff,
X!                 y + nfont_height + (nfont_height / 2), NFONT, C_BLACK, str) ;
X      }
X  
X    val = items[(int) item].value ;
X    draw_rect(wtype,
X              x + (val * maxw) + 1, y + 1,
X              x + ((val + 1) * maxw) - 1, y + height - 1, RSRC, C_BLACK) ;
X--- 102,112 ----
X        xoff = (maxw - val) / 2 ;
X        draw_text(items[(int) item].wtype,
X                  x + (i * maxw) + xoff,
X!                 y + nfont_height + (nfont_height / 2), NFONT, tcol, str) ;
X      }
X  
X    val = items[(int) item].value ;
X+   if (val < 0 || val >= items[(int) item].nopts) return ;
X    draw_rect(wtype,
X              x + (val * maxw) + 1, y + 1,
X              x + ((val + 1) * maxw) - 1, y + height - 1, RSRC, C_BLACK) ;
X***************
X*** 140,152 ****
X  enum image_type image ;
X  {
X    char val[4] ;
X  
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, C_BLACK, items[(int) item].label) ;
X  
X!   SPRINTF(val, "%d", items[(int) item].value) ;
X    set_cycle(wtype, item, val) ;
X    draw_cycle(wtype, item, color, image) ;
X  }
X--- 143,158 ----
X  enum image_type image ;
X  {
X    char val[4] ;
X+   int tcol ;
X  
X+   tcol = B_COLOR(C_TEXT) ;
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, tcol, items[(int) item].label) ;
X  
X!   if (item == MAX_DEPTH && !items[(int) item].value) STRCPY(val, "off") ;
X!   else SPRINTF(val, "%d", items[(int) item].value) ;
X    set_cycle(wtype, item, val) ;
X    draw_cycle(wtype, item, color, image) ;
X  }
X***************
X*** 158,166 ****
X  {
X    int y ;
X  
X!   color_area(W_MAIN, tx + 1, ty + 1, tw - 2, th - 2, C_WHITE) ;
X    y = ty + (nfont_height + (th - nfont_height) / 2) - 5 ;
X!   draw_text(W_MAIN, tx + 5, y, NFONT, C_BLACK, str) ;
X    draw_line(W_MAIN, tx + 5 + get_strwidth(NFONT, str), y + 5,
X                      tx + 5 + get_strwidth(NFONT, str), y + 5 - nfont_height,
X                      RSRC, C_BLACK) ;
X--- 164,172 ----
X  {
X    int y ;
X  
X!   color_area(W_MAIN, tx + 1, ty + 1, tw - 2, th - 2, W_COLOR(C_PANEL)) ;
X    y = ty + (nfont_height + (th - nfont_height) / 2) - 5 ;
X!   draw_text(W_MAIN, tx + 5, y, NFONT, B_COLOR(C_TEXT), str) ;
X    draw_line(W_MAIN, tx + 5 + get_strwidth(NFONT, str), y + 5,
X                      tx + 5 + get_strwidth(NFONT, str), y + 5 - nfont_height,
X                      RSRC, C_BLACK) ;
X***************
X*** 174,185 ****
X  int color ;
X  {
X    enum image_type image ;
X!   int x, y ;
X  
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, C_BLACK, items[(int) item].label) ;
X  
X    if (items[(int) item].value) image = TOGGLE_ON ;
X    else                         image = TOGGLE_OFF ;
X--- 180,192 ----
X  int color ;
X  {
X    enum image_type image ;
X!   int tcol, x, y ;
X  
X+   tcol = B_COLOR(C_TEXT) ;
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, tcol, items[(int) item].label) ;
X  
X    if (items[(int) item].value) image = TOGGLE_ON ;
X    else                         image = TOGGLE_OFF ;
X***************
X*** 199,205 ****
X      draw_text(items[(int) item].wtype,
X                items[(int) item].x + TICKWIDTH + 10,
X                items[(int) item].y + nfont_height,
X!               NFONT, C_BLACK, items[(int) item].text) ;
X  }
X  
X  
X--- 206,212 ----
X      draw_text(items[(int) item].wtype,
X                items[(int) item].x + TICKWIDTH + 10,
X                items[(int) item].y + nfont_height,
X!               NFONT, tcol, items[(int) item].text) ;
X  }
X  
X  
X***************
X*** 211,222 ****
X    lsval = (curx < (BBORDER + (2*(BWIDTH+BGAP)))) ? 'l' : 's' ;
X    x1 = BBORDER + BWIDTH + (BGAP / 2) ;
X    y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
X!   color_area(W_MAIN, x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP, C_WHITE) ;
X    draw_rect(W_MAIN, x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1,
X                      y1 + BHEIGHT + BGAP - 1, RSRC, C_BLACK) ;
X    draw_text(W_MAIN, BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP +
X              (nfont_height + (BHEIGHT - nfont_height) / 2) - 5,
X!             BFONT, C_BLACK, "File:") ;
X    tx = BBORDER + BWIDTH + BGAP + (BWIDTH / 2) + 10 ;
X    ty = BBORDER + BHEIGHT + BGAP ;
X    tw = (BWIDTH / 2) - 10 + (2 * (BWIDTH + BGAP)) ;
X--- 218,230 ----
X    lsval = (curx < (BBORDER + (2*(BWIDTH+BGAP)))) ? 'l' : 's' ;
X    x1 = BBORDER + BWIDTH + (BGAP / 2) ;
X    y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
X!   color_area(W_MAIN, x1, y1,
X!              4 * (BWIDTH + BGAP), BHEIGHT + BGAP, W_COLOR(C_PANEL)) ;
X    draw_rect(W_MAIN, x1, y1, x1 + (4 * (BWIDTH + BGAP)) - 1,
X                      y1 + BHEIGHT + BGAP - 1, RSRC, C_BLACK) ;
X    draw_text(W_MAIN, BBORDER + BWIDTH + BGAP, BBORDER + BHEIGHT + BGAP +
X              (nfont_height + (BHEIGHT - nfont_height) / 2) - 5,
X!             BFONT, B_COLOR(C_TEXT), "File:") ;
X    tx = BBORDER + BWIDTH + BGAP + (BWIDTH / 2) + 10 ;
X    ty = BBORDER + BHEIGHT + BGAP ;
X    tw = (BWIDTH / 2) - 10 + (2 * (BWIDTH + BGAP)) ;
X***************
X*** 227,233 ****
X    tinput = 1 ;
X    items[(int) CANCEL_BUT].x = BBORDER + (4*(BWIDTH+BGAP)) ;
X    items[(int) CANCEL_BUT].y = BBORDER + (1*(BHEIGHT+BGAP)) ;
X!   draw_button(W_MAIN, CANCEL_BUT, C_LGREY, BUT_NORMAL) ;
X  }
X  
X  
X--- 235,241 ----
X    tinput = 1 ;
X    items[(int) CANCEL_BUT].x = BBORDER + (4*(BWIDTH+BGAP)) ;
X    items[(int) CANCEL_BUT].y = BBORDER + (1*(BHEIGHT+BGAP)) ;
X!   draw_button(W_MAIN, CANCEL_BUT, C_ITEMS, BUT_NORMAL) ;
X  }
X  
X  
X***************
X*** 273,286 ****
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, C_BLACK, items[(int) item].label) ;
X  
X    message = items[(int) item].text ;
X    x = items[(int) item].x ;
X    y = items[(int) item].y ;
X!   color = (iscolor[(int) cur_dpyno]) ? C_BEIGE : C_WHITE ;
X!   color_area(wtype, x, y, TOTAL_WIDTH, 15, color) ;
X!   draw_text(wtype, x, y + nfont_height, NFONT, C_BLACK, message) ;
X  }
X  
X  
X--- 281,293 ----
X    if (strlen(items[(int) item].label))
X      draw_text(items[(int) item].wtype,
X                items[(int) item].lx, items[(int) item].ly + bfont_height,
X!               BFONT, B_COLOR(C_TEXT), items[(int) item].label) ;
X  
X    message = items[(int) item].text ;
X    x = items[(int) item].x ;
X    y = items[(int) item].y ;
X!   color_area(wtype, x, y, TOTAL_WIDTH, 15, W_COLOR(C_PANEL)) ;
X!   draw_text(wtype, x, y + nfont_height, NFONT, B_COLOR(C_TEXT), message) ;
X  }
X  
X  
X***************
X*** 287,301 ****
X  void
X  make_panel()
X  {
X!   draw_button(W_MAIN, LOAD_BUT,     C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, MOVES_BUT,    C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, SAVE_BUT,     C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, SUGGEST_BUT,  C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, UNDO_BUT,     C_LGREY, BUT_NORMAL) ;
X  
X!   draw_button(W_MAIN, PROPS_BUT,    C_LGREY, BUT_NORMAL) ;
X!   draw_button(W_MAIN, QUIT_BUT,     C_LGREY, BUT_NORMAL) ;
X  
X    make_message(W_MAIN, BLACK_PLAYS) ;
X    make_message(W_MAIN, WHITE_PLAYS) ;
X--- 294,312 ----
X  void
X  make_panel()
X  {
X!   draw_button(W_MAIN, LOAD_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, MOVES_BUT,    C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, NEW_GAME_BUT, C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, HELP_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, REDO_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, PROPS_BUT,    C_ITEMS, BUT_NORMAL) ;
X  
X!   draw_button(W_MAIN, SAVE_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, SUGGEST_BUT,  C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, EDIT_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, STOP_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, UNDO_BUT,     C_ITEMS, BUT_NORMAL) ;
X!   draw_button(W_MAIN, QUIT_BUT,     C_ITEMS, BUT_NORMAL) ;
X  
X    make_message(W_MAIN, BLACK_PLAYS) ;
X    make_message(W_MAIN, WHITE_PLAYS) ;
X***************
X*** 314,342 ****
X    int n ;
X  
X    n = (int) mtype ;
X-   color = (iscolor[(int) cur_dpyno]) ? C_BEIGE : C_WHITE ;
X    color_area(W_MAIN, items[n].x, items[n].y,
X!              get_strwidth(NFONT, items[n].text), nfont_height + 5, color) ;
X    draw_text(W_MAIN, items[n].x, items[n].y + nfont_height,
X!             NFONT, C_BLACK, str) ;
X    STRCPY(items[n].text, str) ;
X  }
X  
X  
X  void
X  paint_prop_sheet()
X  {
X!   int color, d ;
X  
X!   d = (int) cur_dpyno ;
X!   color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X    color_area(W_PROPS, 0, 0, PROPS_WIDTH, PROPS_HEIGHT, color) ;
X  
X-   color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X    draw_choice(W_PROPS, COMP_CHOICE, color) ;
X    draw_choice(W_PROPS, DIFF_CHOICE, color) ;
X  
X!   draw_cycle_item(W_PROPS, MAX_DEPTH, C_LGREY, CY_NORMAL) ;
X  
X    draw_toggle(W_PROPS, OPT_ANIM, color) ;
X    draw_toggle(W_PROPS, OPT_BEST, color) ;
X--- 325,383 ----
X    int n ;
X  
X    n = (int) mtype ;
X    color_area(W_MAIN, items[n].x, items[n].y,
X!              get_strwidth(NFONT, items[n].text),
X!              nfont_height + 5, W_COLOR(C_PANEL)) ;
X    draw_text(W_MAIN, items[n].x, items[n].y + nfont_height,
X!             NFONT, B_COLOR(C_TEXT), str) ;
X    STRCPY(items[n].text, str) ;
X  }
X  
X  
X  void
X+ paint_help()
X+ {
X+   if (hfp == NULL) return ;
X+   color_area(W_HELP, 0, 0,
X+              help_width, (2 * CGAP) + CHEIGHT, W_COLOR(C_PANEL)) ;
X+   draw_cycle_item(W_HELP, HELP_PAGE, C_ITEMS, CY_NORMAL) ;
X+   draw_line(W_HELP, 0,          (2 * CGAP) + CHEIGHT,
X+                     help_width, (2 * CGAP) + CHEIGHT, RSRC, C_BLACK) ;
X+   paint_help_text() ;
X+ }
X+ 
X+ 
X+ void
X+ paint_help_text()
X+ {
X+   char buf[MAXLINE] ;
X+   int i, y ;
X+ 
X+   color_area(W_HELP, 0, (2 * CGAP) + CHEIGHT + 1,
X+              help_width, ((hfont_height + 1) * HELP_ROWS) + (2 * CGAP) - 1,
X+              W_COLOR(C_PANEL)) ;
X+   FSEEK(hfp, help_offsets[items[(int) HELP_PAGE].value], 0) ;
X+   for (i = 0; i < HELP_ROWS; i++)
X+     {
X+       if (fgets(buf, MAXLINE, hfp) == NULL) return ;
X+       y = (3 * CGAP) + CHEIGHT + ((i + 1) * (hfont_height + 1)) ;
X+       draw_text(W_HELP, CGAP, y, NFONT, B_COLOR(C_TEXT), buf) ;
X+     }
X+ }
X+ 
X+ 
X+ void
X  paint_prop_sheet()
X  {
X!   int color ;
X  
X!   color = W_COLOR(C_PANEL) ;
X    color_area(W_PROPS, 0, 0, PROPS_WIDTH, PROPS_HEIGHT, color) ;
X  
X    draw_choice(W_PROPS, COMP_CHOICE, color) ;
X    draw_choice(W_PROPS, DIFF_CHOICE, color) ;
X  
X!   draw_cycle_item(W_PROPS, MAX_DEPTH, C_ITEMS, CY_NORMAL) ;
X  
X    draw_toggle(W_PROPS, OPT_ANIM, color) ;
X    draw_toggle(W_PROPS, OPT_BEST, color) ;
X***************
X*** 355,364 ****
X    x1 = BBORDER + BWIDTH + (BGAP / 2) ;
X    y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
X    color_area(W_MAIN, x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP,
X!              (iscolor[(int) cur_dpyno]) ? C_BEIGE : C_WHITE) ;
X    tinput = 0 ;
X    items[(int) CANCEL_BUT].x = -1 ;
X    items[(int) CANCEL_BUT].y = -1 ;
X  }
X  
X  
X--- 396,410 ----
X    x1 = BBORDER + BWIDTH + (BGAP / 2) ;
X    y1 = BBORDER + BHEIGHT + (BGAP / 2) ;
X    color_area(W_MAIN, x1, y1, 4 * (BWIDTH + BGAP), BHEIGHT + BGAP,
X!              W_COLOR(C_PANEL)) ;
X    tinput = 0 ;
X    items[(int) CANCEL_BUT].x = -1 ;
X    items[(int) CANCEL_BUT].y = -1 ;
X+ 
X+   draw_button(W_MAIN, SUGGEST_BUT,  C_ITEMS, BUT_NORMAL) ;
X+   draw_button(W_MAIN, EDIT_BUT,     C_ITEMS, BUT_NORMAL) ;
X+   draw_button(W_MAIN, STOP_BUT,     C_ITEMS, BUT_NORMAL) ;
X+   draw_button(W_MAIN, UNDO_BUT,     C_ITEMS, BUT_NORMAL) ;
X  }
X  
X  
X***************
X*** 368,379 ****
X  enum panel_type item ;
X  char *str ;
X  {
X-   color = (iscolor[(int) cur_dpyno]) ? C_BEIGE : C_WHITE ;
X- 
X    color_area(wtype, items[(int) item].x, items[(int) item].y,
X!              items[(int) item].width, CHEIGHT, color) ;
X    draw_text(wtype, items[(int) item].x, items[(int) item].y + nfont_height,
X!             NFONT, C_BLACK, str) ;
X    STRCPY(items[(int) item].text, str) ;
X    items[(int) item].width = get_strwidth(NFONT, str) ;
X  }
X--- 414,423 ----
X  enum panel_type item ;
X  char *str ;
X  {
X    color_area(wtype, items[(int) item].x, items[(int) item].y,
X!              items[(int) item].width, CHEIGHT, W_COLOR(C_PANEL)) ;
X    draw_text(wtype, items[(int) item].x, items[(int) item].y + nfont_height,
X!             NFONT, B_COLOR(C_TEXT), str) ;
X    STRCPY(items[(int) item].text, str) ;
X    items[(int) item].width = get_strwidth(NFONT, str) ;
X  }
X
X------- main.c -------
X*** /tmp/da06885	Tue Dec 18 10:10:24 1990
X--- main.c	Sun Dec 16 02:44:07 1990
X***************
X*** 38,46 ****
X  } ;
X  #endif /*NO_TIMEVAL*/
X  
X! /* Text values for the cyclic buttons. */
X  char *comp_plays[]    = { "white", "black", "neither", "both" } ;
X- char *diff_values[]   = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL } ;
X  char *notes_values[]  = { "off", "on", NULL } ;
X  char *player_values[] = { "human", "computer", NULL } ;
X  
X--- 38,48 ----
X  } ;
X  #endif /*NO_TIMEVAL*/
X  
X! char *diff_values[]   = {
X!   " 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 ", NULL
X! } ;
X! 
X  char *comp_plays[]    = { "white", "black", "neither", "both" } ;
X  char *notes_values[]  = { "off", "on", NULL } ;
X  char *player_values[] = { "human", "computer", NULL } ;
X  
X***************
X*** 52,58 ****
X    "log",                   /* Boolean: write computer info to log file. */
X    "notes",                 /* Boolean: show computer notes. */
X    "number",                /* Boolean: show last move (number on stone). */
X!   "quick"                  /* Boolean: play quick game (don't flip stones). */
X  } ;
X  
X  enum cantype cmode, last_cmode ;
X--- 54,68 ----
X    "log",                   /* Boolean: write computer info to log file. */
X    "notes",                 /* Boolean: show computer notes. */
X    "number",                /* Boolean: show last move (number on stone). */
X!   "quick",                 /* Boolean: play quick game (don't flip stones). */
X!   "panelColor",            /* String:  main and property panels color. */
X!   "boardColor",            /* String:  playing board color. */
X!   "boardBorderColor",      /* String:  playing board border color. */
X!   "gridColor",             /* String:  grid lines color. */
X!   "textColor",             /* String:  text color. */
X!   "itemColor",             /* String:  color of the panel items. */
X!   "properties",            /* Boolean: initially show property window? */
X!   "showHelp"               /* Boolean: initially show help window? */
X  } ;
X  
X  enum cantype cmode, last_cmode ;
X***************
X*** 61,66 ****
X--- 71,86 ----
X  enum set_type direction ;   /* Incremental direction for cycle item. */
X  enum win_type curwin ;      /* Window the current event for in. */
X  
X+ FILE *hfp ;                 /* File descriptor for online help file. */
X+ 
X+ char *colstr[REVE_COLORSIZE] = {
X+   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
X+ } ;
X+ 
X+ int rcols[REVE_COLORSIZE] ;   /* Red colormap values. */
X+ int gcols[REVE_COLORSIZE] ;   /* Green colormap values. */
X+ int bcols[REVE_COLORSIZE] ;   /* Blue colormap values. */
X+ 
X  int tx, ty, tw, th ;    /* Position and size of text field. */
X  
X  int piece_x ;           /* Current X position of moving piece. */
X***************
X*** 77,82 ****
X--- 97,106 ----
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+ int help_height ;       /* Height of the help window. */
X+ int help_showing ;      /* If set, the help window is visible. */
X+ int help_width ;        /* Width of the help window. */
X+ int hfont_height ;      /* Height in pixels for help font. */
X  int inv_video = 0 ;     /* Set if displaying in inverse video. */
X  int isblack ;           /* Set if human to play the black pieces. */
X  int iscolor[MAXDPY] ;   /* Set if this is a color screen. */
X***************
X*** 96,101 ****
X--- 120,126 ----
X  int nextc ;             /* Current event identifier. */
X  int next_player ;       /* Next player (BLACK or WHITE) to move. */
X  int nfont_height ;      /* Height in pixels for normal font. */
X+ int old_diffval ;       /* Old difficulty value (possibly restored). */
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 processing ;        /* If set, computer is procesing a move. */
X***************
X*** 110,115 ****
X--- 135,142 ----
X  int wx ;                /* Initial X position of the window. */
X  int wy ;                /* Initial Y position of the window. */
X  
X+ long help_offsets[MAXPAGES] ;    /* Offsets into the reve help file. */
X+ 
X  /*  Globals for passing arguments to "sandwich";
X   *  this is to save time putting arguments on and off the
X   *  stack in a very heavily used piece of code
X***************
X*** 168,177 ****
X      new_game
X    },
X  
X!   {                                   /* save button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X      BBORDER + (3*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "save", 0,
X      (char **) NULL, 0,
X      draw_textfield
X--- 195,231 ----
X      new_game
X    },
X  
X!   {                                   /* help button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X      BBORDER + (3*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X+     BWIDTH, BHEIGHT, "help", 0,
X+     (char **) NULL, 0,
X+     do_help
X+   },
X+ 
X+   {                                   /* redo button. */
X+     W_MAIN, P_BUTTON, 0, 0,
X+     "",
X+     BBORDER + (4*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X+     BWIDTH, BHEIGHT, "redo", 0,
X+     (char **) NULL, 0,
X+     redo
X+   },
X+ 
X+   {                                   /* props button. */
X+     W_MAIN, P_BUTTON, 0, 0,
X+     "",
X+     BBORDER + (5*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X+     BWIDTH, BHEIGHT, "props", 0,
X+     (char **) NULL, 0,
X+     do_props
X+   },
X+ 
X+   {                                   /* save button. */
X+     W_MAIN, P_BUTTON, 0, 0,
X+     "",
X+     BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "save", 0,
X      (char **) NULL, 0,
X      draw_textfield
X***************
X*** 180,209 ****
X    {                                   /* suggest button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X!     BBORDER + (4*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "suggest", 0,
X      (char **) NULL, 0,
X      suggest
X    },
X    
X    {                                   /* undo button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X!     BBORDER + (5*(BWIDTH+BGAP)), BBORDER + (0*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "undo", 0,
X      (char **) NULL, 0,
X      undo
X    },
X    
X-   {                                   /* props button. */
X-     W_MAIN, P_BUTTON, 0, 0,
X-     "",
X-     BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)),
X-     BWIDTH, BHEIGHT, "props", 0,
X-     (char **) NULL, 0,
X-     do_props
X-   },
X- 
X    {                                   /* cancel button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X--- 234,274 ----
X    {                                   /* suggest button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X!     BBORDER + (1*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "suggest", 0,
X      (char **) NULL, 0,
X      suggest
X    },
X    
X+   {                                   /* edit button. */
X+     W_MAIN, P_BUTTON, 0, 0,
X+     "",    
X+ /*    BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)), */
X+     -1, -1,
X+     BWIDTH, BHEIGHT, "edit", 0,
X+     (char **) NULL, 0,
X+     do_edit
X+   },
X+ 
X+   {                                   /* stop button. */
X+     W_MAIN, P_BUTTON, 0, 0,
X+     "",    
X+ /*    BBORDER + (3*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)), */
X+     -1, -1,
X+     BWIDTH, BHEIGHT, "stop", 0,
X+     (char **) NULL, 0,
X+     do_stop
X+   },
X+ 
X    {                                   /* undo button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X!     BBORDER + (4*(BWIDTH+BGAP)), BBORDER + (1*(BHEIGHT+BGAP)),
X      BWIDTH, BHEIGHT, "undo", 0,
X      (char **) NULL, 0,
X      undo
X    },
X    
X    {                                   /* cancel button. */
X      W_MAIN, P_BUTTON, 0, 0,
X      "",
X***************
X*** 312,318 ****
X      BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (2*(BHEIGHT+BGAP)),
X      "Set search depth:",
X      BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (2*(BHEIGHT+BGAP)),
X!     0, 0, "", INIT_DEPTH,
X      (char **) NULL, 0,
X      set_option
X    },
X--- 377,383 ----
X      BBORDER + (0*(BWIDTH+BGAP)), BBORDER + (2*(BHEIGHT+BGAP)),
X      "Set search depth:",
X      BBORDER + (2*(BWIDTH+BGAP)), BBORDER + (2*(BHEIGHT+BGAP)),
X!     0, 0, "", 0,
X      (char **) NULL, 0,
X      set_option
X    },
X***************
X*** 371,376 ****
X--- 436,451 ----
X      (char **) NULL, 0,
X      set_option
X    },
X+ 
X+   {                                   /* Help window page cycle. */
X+     W_HELP, P_CYCLE,
X+     BBORDER + (0*(BWIDTH+BGAP)), CGAP,
X+     "Page",
X+     BBORDER + (1*(BWIDTH+BGAP)), CGAP,
X+     0, 0, "", 1,
X+     (char **) NULL, 0,
X+     display_help
X+   },
X  } ;
X  
X  char geometry[MAXDPY][MAXLINE] ;       /* X11 geometry information. */
X***************
X*** 378,383 ****
X--- 453,459 ----
X  char *black_dpy ;              /* Black piece display information. */
X  char edgefile[MAXLINE] ;       /* Location of the reve edge table file. */
X  char gamefile[MAXLINE] ;       /* Name of file for load/save. */
X+ char helpfile[MAXLINE] ;       /* Location of the reve online help file. */
X  char line[40] ;
X  char progname[MAXLINE] ;       /* The name of this program. */
X  char *white_dpy ;              /* White piece display information. */
X***************
X*** 405,410 ****
X--- 481,487 ----
X    STRCPY(gamefile, "reve.game") ;
X    SPRINTF(line, " Reve.  V1.1.%1d", PATCHLEVEL) ;
X    init_graphics(&argc, argv) ;
X+   reve_colorsetup(rcols, gcols, bcols) ;  /* Setup default colors. */
X    initialise() ;                /* Initialise variables used by reve. */
X    load_resources() ;            /* Get resources from various places. */
X    read_resources() ;            /* Read resources from merged database. */
X***************
X*** 414,420 ****
X    init_edge_table(edgefile) ;   /* Load reve edge table values. */
X  #endif /*XVIEW*/
X  
X!   set_display_types() ;         /* Work out what displays to initialise. */
X    if (init_ws_type())           /* Determine window system type. */
X      {
X        FPRINTF(stderr,"Error initialising window system.\n") ;
X--- 491,499 ----
X    init_edge_table(edgefile) ;   /* Load reve edge table values. */
X  #endif /*XVIEW*/
X  
X!   init_help_file(helpfile) ;    /* Load reve help file page offsets. */
X! 
X! set_display_types() ;         /* Work out what displays to initialise. */
X    if (init_ws_type())           /* Determine window system type. */
X      {
X        FPRINTF(stderr,"Error initialising window system.\n") ;
X***************
X*** 450,458 ****
X  {
X    cur_dpyno = dpyno ;
X    make_icon() ;
X!   make_frame(argc, argv) ;      /* Create reve window/icon. */
X!   make_canvas() ;               /* Create drawing canvas. */
X!   init_fonts() ;                /* Load normal and bold fonts. */
X    initboard() ;
X    set_cursor(CANVASCUR) ;
X  }
X--- 529,538 ----
X  {
X    cur_dpyno = dpyno ;
X    make_icon() ;
X!   make_frame(argc, argv) ;        /* Create reve window/icon. */
X!   make_canvas() ;                 /* Create drawing canvas. */
X!   init_fonts() ;                  /* Load normal and bold fonts. */
X!   make_help_window(argc, argv) ;  /* Make help window based on normal font. */
X    initboard() ;
X    set_cursor(CANVASCUR) ;
X  }
X***************
X*** 521,527 ****
X                         getparam(next, argv, "-d needs difficulty") ;
X                         level = atoi(next) ;
X                         if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ;
X!                        items[(int) DIFF_CHOICE].value = level - 1 ;
X                         break ;
X              case 'e' : INC ;
X                         getparam(edgefile, argv, "-e needs an edgetable file") ;
X--- 601,607 ----
X                         getparam(next, argv, "-d needs difficulty") ;
X                         level = atoi(next) ;
X                         if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ;
X!                        items[(int) DIFF_CHOICE].value = old_diffval = level-1 ;
X                         break ;
X              case 'e' : INC ;
X                         getparam(edgefile, argv, "-e needs an edgetable file") ;
X***************
X*** 530,535 ****
X--- 610,622 ----
X                         getparam(geometry[0], argv,
X                                  "-g needs geometry information") ;
X                         break ;
X+             case 'h' : if (EQUAL(argv[0], "-help")) help_showing = TRUE ;
X+                        else
X+                          {
X+                            INC ;
X+                            getparam(helpfile, argv, "-h needs a help file") ;
X+                          }
X+                        break ;
X              case 'i' : inv_video = 1 ;       /* Display in inverse video. */
X                         break ;
X              case 'l' :      if (EQUAL(argv[0], "-last")) DO_LAST = TRUE ;
X***************
X*** 547,552 ****
X--- 634,641 ----
X              case 'n' :      if (EQUAL(argv[0], "-notes")) SHOW_NOTES = TRUE ;
X                         else if (EQUAL(argv[0], "-number")) DO_NUMBER = TRUE ;
X                         break ;
X+             case 'p' : if (EQUAL(argv[0], "-props")) props_showing = TRUE ;
X+                        break ;
X              case 'q' : if (EQUAL(argv[0], "-quick")) QUICKGAME = TRUE ;
X                         break ;
X              case '?' :
X***************
X*** 654,663 ****
X    color_area(W_MAIN, 0, 0, TOTAL_WIDTH, TOTAL_HEIGHT, C_WHITE) ;
X    if (iscolor[d])
X      {
X!       color_area(W_MAIN, 0, 0, TOTAL_WIDTH, CY, C_BEIGE) ;
X!       color_area(W_MAIN, 0, CY, TOTAL_WIDTH, TOTAL_WIDTH, C_DBROWN) ;
X        color_area(W_MAIN, 0 + BBORDER, CY + BBORDER, BOARD_SIZE * CELL_SIZE,
X!                  BOARD_SIZE * CELL_SIZE, C_LBROWN) ;
X      }
X    make_panel() ;                /* Create panel and panel items. */
X  
X--- 743,752 ----
X    color_area(W_MAIN, 0, 0, TOTAL_WIDTH, TOTAL_HEIGHT, C_WHITE) ;
X    if (iscolor[d])
X      {
X!       color_area(W_MAIN, 0, 0, TOTAL_WIDTH, CY, C_PANEL) ;
X!       color_area(W_MAIN, 0, CY, TOTAL_WIDTH, TOTAL_WIDTH, C_BORDER) ;
X        color_area(W_MAIN, 0 + BBORDER, CY + BBORDER, BOARD_SIZE * CELL_SIZE,
X!                  BOARD_SIZE * CELL_SIZE, C_SQUARE) ;
X      }
X    make_panel() ;                /* Create panel and panel items. */
X  
X***************
X*** 666,674 ****
X    batch(IS_ON) ;
X    for (n = 0; n <= BOARD_SIZE; n++)
X      {
X!       color = (iscolor[d]) ? C_LGREY : C_BLACK ;
X        if (n == 0 || n == BOARD_SIZE) color = C_BLACK ;
X!       if (color == C_LGREY) adjust = 1 ;
X        else adjust = 0 ;
X        draw_line(W_MAIN, (n*CELL_SIZE)+BBORDER,              /* Vertical. */
X                  CY+BBORDER+adjust, (n*CELL_SIZE)+BBORDER,
X--- 755,763 ----
X    batch(IS_ON) ;
X    for (n = 0; n <= BOARD_SIZE; n++)
X      {
X!       color = B_COLOR(C_GRID) ;
X        if (n == 0 || n == BOARD_SIZE) color = C_BLACK ;
X!       if (color == C_GRID) adjust = 1 ;
X        else adjust = 0 ;
X        draw_line(W_MAIN, (n*CELL_SIZE)+BBORDER,              /* Vertical. */
X                  CY+BBORDER+adjust, (n*CELL_SIZE)+BBORDER,
X***************
X*** 711,716 ****
X--- 800,808 ----
X    message(TURN_MES, "Black to move.") ;
X    batch(IS_OFF) ;
X  
X+   if (help_showing)  set_frame(W_HELP,  help_showing) ;
X+   if (props_showing) set_frame(W_PROPS, props_showing) ;
X+ 
X    if (loadgame)
X      {
X        loadgame = 0 ;
X***************
X*** 741,748 ****
X    DO_BESTMOVE   = FALSE ;
X    DO_LAST       = FALSE ;
X    DO_NUMBER     = FALSE ;
X    processing    = FALSE ;             /* No computer move initially. */
X!   props_showing = FALSE ;
X    QUICKGAME     = FALSE ;
X    validkey      = 0 ;
X    cmode         = BLACK_START ;
X--- 833,841 ----
X    DO_BESTMOVE   = FALSE ;
X    DO_LAST       = FALSE ;
X    DO_NUMBER     = FALSE ;
X+   help_showing  = FALSE ;             /* Help window not visible. */
X    processing    = FALSE ;             /* No computer move initially. */
X!   props_showing = FALSE ;             /* Properties window not visible. */
X    QUICKGAME     = FALSE ;
X    validkey      = 0 ;
X    cmode         = BLACK_START ;
X***************
X*** 751,757 ****
X    isblack       = 0 ;
X    iswhite       = 0 ;
X    level         = INIT_DEPTH ;
X!   items[(int) DIFF_CHOICE].value = level - 1 ;
X  
X    black_dpy = NULL ;              /* X11 black piece display information. */
X    white_dpy = NULL ;              /* X11 white piece display information. */
X--- 844,850 ----
X    isblack       = 0 ;
X    iswhite       = 0 ;
X    level         = INIT_DEPTH ;
X!   items[(int) DIFF_CHOICE].value = old_diffval = level - 1 ;
X  
X    black_dpy = NULL ;              /* X11 black piece display information. */
X    white_dpy = NULL ;              /* X11 white piece display information. */
X***************
X*** 758,763 ****
X--- 851,857 ----
X    STRCPY(geometry[(int) DPY1], "") ;    /* X11 geometry information. */
X    STRCPY(geometry[(int) DPY2], "") ;
X    STRCPY(edgefile, EDGENAME) ;
X+   STRCPY(helpfile, HELPNAME) ;
X  }
X  
X  
X***************
X*** 765,770 ****
X--- 859,865 ----
X  read_resources()            /* Read all possible resources from database. */
X  {
X    int boolval, intval ;
X+   char str[MAXLINE] ;
X  
X    if (get_bool_resource(R_ANIMATE,  &boolval)) ANIMATION   = boolval ;
X    if (get_bool_resource(R_BESTMOVE, &boolval)) DO_BESTMOVE = boolval ;
X***************
X*** 773,779 ****
X      {
X        level = intval ;
X        if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ;
X!       items[(int) DIFF_CHOICE].value = level - 1 ;
X      }
X  
X    if (get_bool_resource(R_LAST,   &boolval)) DO_LAST = boolval ;
X--- 868,874 ----
X      {
X        level = intval ;
X        if (level < 1 || level > MAXDIFF) level = INIT_DEPTH ;
X!       items[(int) DIFF_CHOICE].value = old_diffval = level - 1 ;
X      }
X  
X    if (get_bool_resource(R_LAST,   &boolval)) DO_LAST = boolval ;
X***************
X*** 781,789 ****
X--- 876,907 ----
X    if (get_bool_resource(R_NOTES,  &boolval)) SHOW_NOTES = boolval ;
X    if (get_bool_resource(R_NUMBER, &boolval)) DO_NUMBER = boolval ;
X    if (get_bool_resource(R_QUICK,  &boolval)) QUICKGAME = boolval ;
X+   if (get_bool_resource(R_PROPS,  &boolval)) props_showing = boolval ;
X+   if (get_bool_resource(R_HELP,   &boolval)) help_showing  = boolval ;
X+ 
X+   if (get_str_resource(R_PANELC,  str)) read_str(&colstr[C_PANEL],  str) ;
X+   if (get_str_resource(R_BOARDC,  str)) read_str(&colstr[C_SQUARE], str) ;
X+   if (get_str_resource(R_BOARDBC, str)) read_str(&colstr[C_BORDER], str) ;
X+   if (get_str_resource(R_GRIDC,   str)) read_str(&colstr[C_GRID],   str) ;
X+   if (get_str_resource(R_TEXTC,   str)) read_str(&colstr[C_TEXT],   str) ;
X+   if (get_str_resource(R_ITEMC,   str)) read_str(&colstr[C_ITEMS],  str) ;
X  }
X  
X  
X+ void
X+ read_str(str, value)
X+ char **str, *value ;
X+ {
X+   if (*str != NULL) (void) free(*str) ;
X+   if (value != NULL && strlen(value))
X+     {
X+       *str = (char *) malloc((unsigned) (strlen(value) + 1)) ;
X+       STRCPY(*str, value) ;
X+     }
X+   else *str = NULL ;
X+ }
X+ 
X+ 
X  /*  Setup the display information for the black and white displays.
X   *  There are a fair number of combinations allowed. This table hopefully
X   *  gives the setup information for each combination.
X***************
X*** 875,883 ****
X    FPRINTF(stderr, "%s version 1.1.%1d\n\n", progname, PATCHLEVEL) ;
X    FPRINTF(stderr, "Usage: %s: [-animate] [-bestmove]\n", progname) ;
X    FPRINTF(stderr, "\t[-black [display] ] [-c] [-d difficulty]\n") ;
X!   FPRINTF(stderr, "\t[-e edgefile] [-g geometry] [-last]\n") ;
X!   FPRINTF(stderr, "\t[-load gamefile] [-number] [-notes] [-v]\n") ;
X!   FPRINTF(stderr, "\t[-w [display] ] [-?] [-Wi] [-Wp x y] [-WP x y]\n") ;
X  }
X  
X  
X--- 993,1002 ----
X    FPRINTF(stderr, "%s version 1.1.%1d\n\n", progname, PATCHLEVEL) ;
X    FPRINTF(stderr, "Usage: %s: [-animate] [-bestmove]\n", progname) ;
X    FPRINTF(stderr, "\t[-black [display] ] [-c] [-d difficulty]\n") ;
X!   FPRINTF(stderr, "\t[-e edgefile] [-g geometry] [-h helpfile] [-help]\n") ;
X!   FPRINTF(stderr, "\t[-i] [-last] [-load gamefile] [-log] [-m] [-number]\n") ;
X!   FPRINTF(stderr, "\t[-notes] [-props] [-quick] [-v] [-w [display] ]\n") ;
X!   FPRINTF(stderr, "\t[-?] [-Wi] [-Wp x y] [-WP x y]\n") ;
X  }
X  
X  
X
X------- procs.c -------
X*** /tmp/da06888	Tue Dec 18 10:10:25 1990
X--- procs.c	Mon Dec 17 10:32:34 1990
X***************
X*** 29,39 ****
X  
X  
X  void
X  do_props()
X  {
X    props_showing = !props_showing ;
X!   if (props_showing == TRUE) open_frame(W_PROPS) ;
X!   else                       close_frame(W_PROPS) ;
X  }
X  
X  
X--- 29,78 ----
X  
X  
X  void
X+ display_help()
X+ {
X+   char str[4] ;
X+   int val ;
X+ 
X+   val = items[itemno].value ;
X+   if (direction == INCREMENT && help_offsets[++val] != -1)
X+     items[itemno].value++ ;
X+   else if (direction == DECREMENT && help_offsets[--val] != -1)
X+     items[itemno].value-- ;
X+   else return ;
X+   SPRINTF(str, "%d", items[itemno].value) ;
X+   set_cycle(W_HELP, HELP_PAGE, str) ;
X+   paint_help_text() ;
X+ }
X+ 
X+ 
X+ void
X+ do_edit()
X+ {
X+   message(PANEL_MES, "Not currently implemented.") ;
X+ }
X+ 
X+ 
X+ void
X+ do_help()
X+ {
X+   help_showing = !help_showing ;
X+   set_frame(W_HELP, help_showing) ;
X+ }
X+ 
X+ 
X+ void
X+ do_stop()
X+ {
X+   message(PANEL_MES, "Not currently implemented.") ;
X+ }
X+ 
X+ 
X+ void
X  do_props()
X  {
X    props_showing = !props_showing ;
X!   set_frame(W_PROPS, props_showing) ;
X  }
X  
X  
X***************
X*** 81,89 ****
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!   if (state == IS_OFF)
X!     color = (iscolor[(int) cur_dpyno]) ? C_LBROWN : C_WHITE ;
X!   else color = C_BLACK ;
X  
X    draw_line(W_MAIN, suggest_x-5, CY+suggest_y-5,
X                      suggest_x+5, CY+suggest_y+5, RSRC, color) ;
X--- 120,127 ----
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!   if (state == IS_OFF) color = W_COLOR(C_SQUARE) ;
X!   else                 color = C_BLACK ;
X  
X    draw_line(W_MAIN, suggest_x-5, CY+suggest_y-5,
X                      suggest_x+5, CY+suggest_y+5, RSRC, color) ;
X***************
X*** 94,99 ****
X--- 132,161 ----
X  
X  
X  void
X+ init_help_file(helpfile)     /* Load reve help page offsets. */
X+ char *helpfile ;
X+ {
X+   char buf[MAXLINE] ;
X+   int i, page ;
X+   long offset ;
X+ 
X+   for (i = 0; i < MAXPAGES; i++) help_offsets[i] = -1 ;
X+   if ((hfp = find_file(helpfile)) == NULL)
X+     {
X+       FPRINTF(stderr, "Cannot open online help file\n") ;
X+       return ;
X+     }
X+   page = 1 ;
X+   for (;;)
X+     {
X+       offset = ftell(hfp) ;
X+       if (fgets(buf, MAXLINE, hfp) == NULL) return ;
X+       if (EQUAL(buf, "REVE(6)")) help_offsets[page++] = offset ;
X+     }
X+ }
X+ 
X+ 
X+ void
X  make_move()
X  {
X    if (legal(move, next_player, &board) == FALSE)
X***************
X*** 129,135 ****
X    init_canvas() ;
X    message(EVAL_MES, "") ;
X    message(PANEL_MES, "Use left mouse button to move") ;
X!   draw_button(W_MAIN, NEW_GAME_BUT, C_LGREY, BUT_NORMAL) ;
X  }
X  
X  
X--- 191,197 ----
X    init_canvas() ;
X    message(EVAL_MES, "") ;
X    message(PANEL_MES, "Use left mouse button to move") ;
X!   draw_button(W_MAIN, NEW_GAME_BUT, C_ITEMS, BUT_NORMAL) ;
X  }
X  
X  
X***************
X*** 142,151 ****
X  
X  
X  void
X  set_computer(val)
X  int val ;
X  {
X!   int color, curi ;
X  
X    if (val == CP_WHITE)
X      {
X--- 204,294 ----
X  
X  
X  void
X+ redo()
X+ {
X+   enum panel_type p ;
X+ 
X+  /*  The amount we redo is dependant upon two things:
X+   *
X+   *  1/ Whether the opponent is the computer, in which case we redo
X+   *     two "moves". Otherwise we just redo one "move".
X+   *
X+   *  2/ A "move" is considered to be all consecutive moves by the opponent.
X+   */
X+ 
X+   redo_move(next_player) ;
X+   p = (next_player == BLACK) ? BLACK_PLAYS : WHITE_PLAYS ;
X+   if (items[(int) p].value == COMPUTER) redo_move(next_player) ;
X+ 
X+   set_score() ;
X+   set_turn(next_player) ;
X+ }
X+ 
X+ 
X+ void
X+ redo_move(player)
X+ int player ;
X+ {
X+   int i, limit, n, x, y ;
X+  
X+   n = 63 - board.moves_left ;
X+   while (moves[n].move != -1 && moves[n].player != player) n++ ;
X+  
X+   if (moves[n].move == -1 || n > 63) message(PANEL_MES, "No moves to redo.") ;
X+   else
X+     {
X+       if (DO_LAST) show_last(last_move, IS_OFF) ;
X+       if (DO_NUMBER) show_number(last_move, 60 - board.moves_left, IS_OFF) ;
X+       do_suggest(player, suggestion, note, IS_OFF) ;
X+       FOR_BOARD(i)
X+         {
X+           if (moves[n].square[i] != board.square[i])
X+             {
X+               get_xy(i, &x, &y) ;
X+               if (moves[n].square[i] == FREE)
X+                 color_area(W_MAIN, x, CY+y, PSIZE, PSIZE, W_COLOR(C_SQUARE)) ;
X+               else draw_piece(moves[n].square[i], x, CY+y, RSRC) ;
X+             }
X+           board.square[i] = moves[n].square[i] ;
X+         }
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+ 
X+       FOR_BOARD(i) old_board.square[i] = moves[n-1].square[i] ;
X+       old_board.moves_left = moves[n-1].moves_left ;
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+ #ifdef XVIEW
X+       reset_time(timeleft) ;
X+ #endif /*XVIEW*/
X+ 
X+       if (OPPONENT(player) == BLACK) cmode = BLACK_START ;
X+       else                           cmode = WHITE_START ;
X+       message(PANEL_MES, "") ;
X+ 
X+       if (DO_LAST) show_last(last_move, IS_ON) ;
X+       if (DO_NUMBER) show_number(last_move, 60 - board.moves_left, IS_ON) ;
X+       if (SHOW_NOTES) set_eval(board.player, board.move, board.note) ;
X+       else message(EVAL_MES, "") ;
X+       next_player = OPPONENT(board.player) ;
X+     }
X+ }
X+ 
X+ 
X+ void
X  set_computer(val)
X  int val ;
X  {
X!   int curi ;
X  
X    if (val == CP_WHITE)
X      {
X***************
X*** 175,182 ****
X        STRCPY(items[(int) WHITE_PLAYS].text, player_values[HUMAN]) ; 
X      }
X  
X!   color = (iscolor[(int) cur_dpyno]) ? C_BEIGE : C_WHITE ;
X!   draw_choice(W_PROPS, COMP_CHOICE, color) ;
X  
X    val = items[(int) BLACK_PLAYS].value ;
X    val = items[(int) WHITE_PLAYS].value ;
X--- 318,326 ----
X        STRCPY(items[(int) WHITE_PLAYS].text, player_values[HUMAN]) ; 
X      }
X  
X!   draw_choice(W_PROPS, COMP_CHOICE, W_COLOR(C_PANEL)) ;
X!   make_message(W_MAIN, BLACK_PLAYS) ;
X!   make_message(W_MAIN, WHITE_PLAYS) ;
X  
X    val = items[(int) BLACK_PLAYS].value ;
X    val = items[(int) WHITE_PLAYS].value ;
X***************
X*** 194,202 ****
X  set_option()
X  {
X    char str[4] ;
X!   int color, d, maxw, n, val ;
X  
X-   d = (int) cur_dpyno ;
X    switch (itemno)
X      {
X        case COMP_CHOICE : maxw = items[itemno].width / items[itemno].nopts ;
X--- 338,345 ----
X  set_option()
X  {
X    char str[4] ;
X!   int maxw, n, val ;
X  
X    switch (itemno)
X      {
X        case COMP_CHOICE : maxw = items[itemno].width / items[itemno].nopts ;
X***************
X*** 214,233 ****
X                           val = (curx - items[itemno].x) / maxw ;
X                           level = val + 1 ;
X                           items[itemno].value = val ;
X!                          color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X!                          draw_choice(W_PROPS, DIFF_CHOICE, color) ;
X                           break ;
X  
X        case MAX_DEPTH   : val = items[itemno].value ;
X                           if (direction == INCREMENT && val < MAX_PROFMAX)
X                             items[itemno].value++ ;
X!                          else if (direction == DECREMENT && val > INIT_DEPTH)
X                             items[itemno].value-- ;
X!                          SPRINTF(str, "%d", items[itemno].value) ;
X!                          color = (iscolor[d]) ? C_LGREY : C_WHITE ;
X                           set_cycle(W_PROPS, MAX_DEPTH, str) ;
X!                          profmax = items[itemno].value ;
X!                          level = 1 ;
X                           break ;
X  
X        case OPT_ANIM    : ANIMATION   = !ANIMATION ;
X--- 357,390 ----
X                           val = (curx - items[itemno].x) / maxw ;
X                           level = val + 1 ;
X                           items[itemno].value = val ;
X!                          draw_choice(W_PROPS, DIFF_CHOICE, W_COLOR(C_PANEL)) ;
X! 
X!                          items[(int) MAX_DEPTH].value = 0 ;
X!                          set_cycle(W_PROPS, MAX_DEPTH, "off") ;
X                           break ;
X  
X        case MAX_DEPTH   : val = items[itemno].value ;
X                           if (direction == INCREMENT && val < MAX_PROFMAX)
X                             items[itemno].value++ ;
X!                          else if (direction == DECREMENT && val > 0)
X                             items[itemno].value-- ;
X!                          if (!items[(int) itemno].value) STRCPY(str, "off") ;
X!                          else SPRINTF(str, "%d", items[itemno].value) ;
X                           set_cycle(W_PROPS, MAX_DEPTH, str) ;
X! 
X!                          if (items[itemno].value)
X!                            {
X!                              items[(int) DIFF_CHOICE].value = -1 ;
X!                              level = 1 ;
X!                              max_depth = items[itemno].value ;
X!                            }
X!                          else
X!                            {
X!                              items[(int) DIFF_CHOICE].value = old_diffval ;
X!                              level = old_diffval + 1 ;
X!                              max_depth = 2 ;
X!                            }
X!                          draw_choice(W_PROPS, DIFF_CHOICE, W_COLOR(C_PANEL)) ;
X                           break ;
X  
X        case OPT_ANIM    : ANIMATION   = !ANIMATION ;
X***************
X*** 247,254 ****
X  
X        case OPT_NUM     : DO_NUMBER   = !DO_NUMBER ;
X                           n = 63 - board.moves_left ;
X!                          show_number(moves[n].move, 60 - board.moves_left,
X!                                      DO_NUMBER, DO_NUMBER) ;
X                           break ;
X  
X        case OPT_FLIP    : QUICKGAME   = !QUICKGAME ;
X--- 404,412 ----
X  
X        case OPT_NUM     : DO_NUMBER   = !DO_NUMBER ;
X                           n = 63 - board.moves_left ;
X!                          if (board.moves_left < 60)
X!                            show_number(moves[n].move, 60 - board.moves_left,
X!                                        DO_NUMBER) ;
X                           break ;
X  
X        case OPT_FLIP    : QUICKGAME   = !QUICKGAME ;
X***************
X*** 306,311 ****
X--- 464,470 ----
X  }
X  
X  
X+ void
X  undo_move(player)
X  int player ;
X  {
X***************
X*** 326,333 ****
X              {
X                get_xy(i, &x, &y) ;
X                if (moves[n].square[i] == FREE)
X!                 color_area(W_MAIN, x, CY+y, PSIZE, PSIZE,
X!                            (iscolor[(int) cur_dpyno]) ? C_LBROWN : C_WHITE) ;
X                else draw_piece(moves[n].square[i], x, CY+y, RSRC) ;
X              }
X            board.square[i] = moves[n].square[i] ;
X--- 485,491 ----
X              {
X                get_xy(i, &x, &y) ;
X                if (moves[n].square[i] == FREE)
X!                 color_area(W_MAIN, x, CY+y, PSIZE, PSIZE, W_COLOR(C_SQUARE)) ;
X                else draw_piece(moves[n].square[i], x, CY+y, RSRC) ;
X              }
X            board.square[i] = moves[n].square[i] ;
X***************
X*** 338,344 ****
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        old_board.moves_left = moves[n-1].moves_left ;
X--- 496,501 ----
X
X
END_OF_FILE
if test 46589 -ne `wc -c <'patches04d'`; then
    echo shar: \"'patches04d'\" unpacked with wrong size!
fi
# end of 'patches04d'
fi
echo shar: End of archive 4 \(of 4\).
cp /dev/null ark4isdone
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