[comp.sources.games] v11i064: reve - an othello game, Patch1d

billr@saab.CNA.TEK.COM (Bill Randle) (11/17/90)

Submitted-by: Rich Burridge <rburridge@sun.COM>
Posting-number: Volume 11, Issue 64
Archive-name: reve/Patch1d
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:  patches01d
# Wrapped by billr@saab on Fri Nov 16 10:46:45 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches01d' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches01d'\"
else
echo shar: Extracting \"'patches01d'\" \(30587 characters\)
sed "s/^X//" >'patches01d' <<'END_OF_FILE'
X
X------- xview.c -------
X*** /tmp/da28887	Fri Nov  9 10:38:30 1990
X--- xview.c	Thu Nov  8 10:31:17 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 or 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 or 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*** 25,30 ****
X--- 29,35 ----
X  #include "images.h"
X  #include <xview/xview.h>
X  #include <xview/canvas.h>
X+ #include <xview/panel.h>
X  #include <xview/cms.h>
X  #include <xview/cursor.h>
X  #include <xview/svrimage.h>
X***************
X*** 33,57 ****
X  
X  enum gr_type gtype = GXVIEW ;      /* Graphics type. */
X  
X! #define  XV_SET       (void) xv_set
X! #define  WINDOW_DONE  (void) window_done
X  
X! #define  BOLDFONT     "lucidasanstypewriter-bold-12"
X! #define  DEFFONT      "fixed"
X! #define  NORMALFONT   "lucidasanstypewriter-12"
X  
X! static void menu_proc() ;
X  
X! mpr_static(icon_pr,  64, 64, 1, icon_image) ;
X! mpr_static(cicon_pr, 64, 64, 8, cicon_image) ;
X  
X  Canvas canvas ;
X  Canvas_paint_window cpw ;
X  Event *cur_event ;
X! Frame frame ;
X! Icon reve_icon ;
X  Menu menus[MAXMENUS] ;
X! Notify_value destroy() ;
X  Server_image hglass_pr, nocur_pr ;
X  Xv_Cursor cursor[MAXCURSORS] ;
X  
X--- 38,76 ----
X  
X  enum gr_type gtype = GXVIEW ;      /* Graphics type. */
X  
X! enum popup_pos {P_BELOW, P_RIGHT } ;   /* Positions relative to main frame. */
X  
X! #define  FRAME_BORDER_SIZE  7
X! #define  FRAME_LABEL_SIZE   30
X  
X! #define  XV_CREATE          (void) xv_create
X! #define  XV_SET             (void) xv_set
X  
X! #define  BOLDFONT           "lucidasanstypewriter-bold-12"
X! #define  DEFFONT            "fixed"
X! #define  NORMALFONT         "lucidasanstypewriter-12"
X  
X  Canvas canvas ;
X  Canvas_paint_window cpw ;
X  Event *cur_event ;
X! Frame cframe ;                  /* Frame for Reve game board. */
X! Frame frame ;                   /* Frame for control panel. */
X! Frame ls_frame ;                /* Frame for load/save pop-up window. */
X! Icon  creve_icon ;              /* Icon for game board. */
X! Icon  reve_icon ;               /* Icon for control panel. */
X! Panel panel ;                   /* Xview interface panel. */
X! 
X! Frame ls_frame ;                /* Frame for load/save pop-up window. */
X! Panel ls_panel ;                /* Panel for load/save operations. */
X! Panel_item ls_button ;          /* Button to start load/save operation. */
X! Panel_item ls_text ;            /* Load/Save text filename item. */
X! Panel_item mes_items[4] ;       /* Four generic message items. */
X! Panel_setting start_load_save() ;
X! Menu game_menu ;                /* Menu for 'New Game' button. */
X  Menu menus[MAXMENUS] ;
X! Notify_value quit_proc() ;
X! Panel_item black_item ;
X! Panel_item white_item ;
X  Server_image hglass_pr, nocur_pr ;
X  Xv_Cursor cursor[MAXCURSORS] ;
X  
X***************
X*** 75,81 ****
X--- 94,106 ----
X  int opvals[3] ;         /* Pixrect rasterop values. */
X  int started ;           /* Set just before window is displayed. */
X  
X+ void destroy_frame() ;
X+ static void menu_proc(),  new_game_proc(), pop_props(),    set_depth() ;
X+ static void set_player(), unimplemented(), xv_load_game(), xv_save_game() ;
X  
X+ extern int mnb ;        /* Number of current move */
X+ 
X+ 
X  void
X  batch(state)            /* Turn graphics batching on or off. */
X  enum bltype state ;
X***************
X*** 155,161 ****
X  void
X  destroy_frame()        /* Destroy reve window. */
X  {
X!   WINDOW_DONE(frame) ;
X  }
X  
X  
X--- 180,188 ----
X  void
X  destroy_frame()        /* Destroy reve window. */
X  {
X!   xv_destroy_safe(frame) ;
X!   xv_destroy_safe(cframe) ;
X!   exit(0) ;
X  }
X  
X  
X***************
X*** 170,176 ****
X--- 197,223 ----
X  }
X  
X  
X+ /*ARGSUSED*/
X  void
X+ draw_button(item, color, image)      /* **DUMMY ROUTINE** */
X+ enum panel_type item ;
X+ int color ;
X+ enum image_type image ;
X+ {
X+ }
X+ 
X+ 
X+ /*ARGSUSED*/
X+ void
X+ draw_cycle(item, color, image)       /* **DUMMY ROUTINE** */
X+ enum panel_type item ;
X+ int color ;
X+ enum image_type image ;
X+ {
X+ }
X+ 
X+ 
X+ void
X  draw_image(x, y, width, height, image)
X  int x, y, width, height ;
X  enum image_type image ;
X***************
X*** 193,199 ****
X  
X    d = (int) cur_dpyno ;
X    if (iscolor[d]) gc_val.foreground = palette[color] ;
X!   else            gc_val.foreground = foregnd ;
X    gc_val.function = opvals[(int) op] ;
X    XChangeGC(dpy, gc, GCForeground | GCFunction, &gc_val) ;
X    XDrawLine(dpy, xid, gc, x1, y1, x2, y2) ;
X--- 240,250 ----
X  
X    d = (int) cur_dpyno ;
X    if (iscolor[d]) gc_val.foreground = palette[color] ;
X!   else
X!     { 
X!       if (color == C_WHITE) gc_val.foreground = backgnd ;
X!       else                  gc_val.foreground = foregnd ;
X!     }
X    gc_val.function = opvals[(int) op] ;
X    XChangeGC(dpy, gc, GCForeground | GCFunction, &gc_val) ;
X    XDrawLine(dpy, xid, gc, x1, y1, x2, y2) ;
X***************
X*** 248,253 ****
X--- 299,336 ----
X  }
X  
X  
X+ void
X+ draw_textfield()                      /* **DUMMY ROUTINE** */
X+ {
X+ }
X+ 
X+ 
X+ static Notify_value
X+ frame_event(frame, event, arg, type)
X+ Frame frame ;
X+ Event *event ;
X+ Notify_arg arg ;
X+ Notify_event_type type ;
X+ {
X+   int action ;
X+ 
X+   action = event_action(event) ;
X+   if (action == ACTION_CLOSE) XV_SET(cframe, XV_SHOW, FALSE, 0) ;
X+   if (action == WIN_RESIZE)
X+     {
X+       position_popup(frame, cframe, P_BELOW) ;
X+       XV_SET(cframe, XV_SHOW, TRUE, 0) ;
X+     }
X+   return(notify_next_event_func(frame, event, arg, type)) ;
X+ }
X+ 
X+ 
X+ void
X+ get_filename()            /* **DUMMY ROUTINE** */
X+ {
X+ }
X+ 
X+ 
X  XFontStruct *
X  get_font(name)
X  char *name ;
X***************
X*** 286,291 ****
X--- 369,375 ----
X  
X  init_ws_type()
X  {
X+   show_notes = TRUE ;   /* Override generic value for XView version. */
X    move_delta = 10 ;
X    cur_dpyno = DPY1 ;
X    started = 0 ;       /* Kludge to correctly handle repaints. */
X***************
X*** 331,339 ****
X  void
X  make_canvas()               /* Create canvas for game board. */
X  {
X!   canvas = xv_create(frame,               CANVAS,
X                       CANVAS_RETAINED,     FALSE,
X!                      OPENWIN_AUTO_CLEAR,  FALSE,
X                       XV_HEIGHT,           TOTAL_HEIGHT,
X                       XV_WIDTH,            TOTAL_WIDTH,
X                       CANVAS_PAINTWINDOW_ATTRS,
X--- 415,431 ----
X  void
X  make_canvas()               /* Create canvas for game board. */
X  {
X!   cframe = xv_create(XV_NULL,                  FRAME,
X!                      XV_SHOW,                  FALSE,
X!                      FRAME_ICON,               creve_icon,
X!                      FRAME_NO_CONFIRM,         TRUE,
X!                      WIN_ERROR_MSG,            "Reve: Can't create window.",
X!                      FRAME_SHOW_RESIZE_CORNER, FALSE,
X!                      FRAME_SHOW_HEADER,        FALSE,
X!                      0) ;
X!   canvas = xv_create(cframe,              CANVAS,
X                       CANVAS_RETAINED,     FALSE,
X!                      OPENWIN_AUTO_CLEAR,  FALSE, 
X                       XV_HEIGHT,           TOTAL_HEIGHT,
X                       XV_WIDTH,            TOTAL_WIDTH,
X                       CANVAS_PAINTWINDOW_ATTRS,
X***************
X*** 348,358 ****
X                         WIN_EVENT_PROC,    canvas_proc,
X                         0,
X                       0) ;
X    cpw = canvas_paint_window(canvas) ;
X!   cursor[(int) CANVASCUR] = xv_get(cpw, WIN_CURSOR) ;
X  
X!   dpy = (Display *) xv_get(frame, XV_DISPLAY) ;
X!   xid = (Drawable) xv_get(cpw, XV_XID) ;
X  
X    screen = DefaultScreen(dpy) ;
X    root = RootWindow(dpy, screen) ;
X--- 440,453 ----
X                         WIN_EVENT_PROC,    canvas_proc,
X                         0,
X                       0) ;
X+   window_fit(cframe) ;
X+   notify_interpose_destroy_func(cframe, quit_proc) ;
X+ 
X    cpw = canvas_paint_window(canvas) ;
X!   cursor[(int) CANVASCUR] = xv_get(cpw, WIN_CURSOR, NULL) ;
X  
X!   dpy = (Display *) xv_get(frame, XV_DISPLAY, NULL) ;
X!   xid = (Drawable) xv_get(cpw, XV_XID, NULL) ;
X  
X    screen = DefaultScreen(dpy) ;
X    root = RootWindow(dpy, screen) ;
X***************
X*** 387,415 ****
X    cursor[(int) NOCURSOR] = xv_create(XV_NULL,      CURSOR,
X                                       CURSOR_IMAGE, nocur_pr,
X                                       0) ;
X!   load_colors() ;
X  
X-   images[(int) BUT_STENCIL] = make_server_image(button_stencil_image) ;
X-   images[(int) BUT_INVERT]  = make_server_image(button_invert_image) ;
X-   images[(int) BUT_NORMAL]  = make_server_image(button_normal_image) ;
X-   images[(int) CY_NORMAL]   = make_server_image(cycle_glyph_image) ;
X-   images[(int) CY_STENCIL]  = make_server_image(cycle_stencil_image) ;
X-   images[(int) CY_LINVERT]  = make_server_image(cycle_linvert_image) ;
X-   images[(int) CY_RINVERT]  = make_server_image(cycle_rinvert_image) ;
X    images[(int) P_WHITE]     = make_server_image(white_image) ;
X    images[(int) P_BLACK]     = make_server_image(black_image) ;
X  }
X  
X  
X! void
X! make_frame(argc, argv)      /* Create reve window. */
X  int argc ;
X  char *argv[] ;
X  {
X    opvals[(int) RCLR] = GXclear ;
X    opvals[(int) RSRC] = GXcopy ;
X    opvals[(int) RINV] = GXxor ;
X  
X    xv_init(XV_INIT_ARGS, argc, argv, 0) ;
X    frame = xv_create(XV_NULL,                  FRAME,
X                      FRAME_ICON,               reve_icon,
X--- 482,507 ----
X    cursor[(int) NOCURSOR] = xv_create(XV_NULL,      CURSOR,
X                                       CURSOR_IMAGE, nocur_pr,
X                                       0) ;
X!   if (!monochrome) load_colors() ;
X  
X    images[(int) P_WHITE]     = make_server_image(white_image) ;
X    images[(int) P_BLACK]     = make_server_image(black_image) ;
X  }
X  
X  
X! void 
X! make_frame(argc, argv)     /* Create frame and the panel, buttons, menus. */
X  int argc ;
X  char *argv[] ;
X  {
X+   Menu_item item ;
X+ 
X    opvals[(int) RCLR] = GXclear ;
X    opvals[(int) RSRC] = GXcopy ;
X    opvals[(int) RINV] = GXxor ;
X  
X+ /* Create the frame and the control panel */
X+ 
X    xv_init(XV_INIT_ARGS, argc, argv, 0) ;
X    frame = xv_create(XV_NULL,                  FRAME,
X                      FRAME_ICON,               reve_icon,
X***************
X*** 416,423 ****
X                      FRAME_LABEL,              line,
X                      FRAME_NO_CONFIRM,         TRUE,
X                      FRAME_SHOW_RESIZE_CORNER, FALSE,
X!                     WIN_ERROR_MSG,            "Can't create window.",
X!                     0) ;
X    iscolor[(int) cur_dpyno] = ((int) xv_get(frame, WIN_DEPTH) > 1) ? 1 : 0 ;
X  }
X  
X--- 508,693 ----
X                      FRAME_LABEL,              line,
X                      FRAME_NO_CONFIRM,         TRUE,
X                      FRAME_SHOW_RESIZE_CORNER, FALSE,
X!                     WIN_ERROR_MSG,            "Reve: Can't create window.",
X!                     NULL) ;
X! 
X!   panel = (Panel) xv_create(frame, PANEL, 0) ;
X! 
X! /* Menu for the 'new game' button */
X! 
X!   game_menu = (Menu) xv_create(XV_NULL, MENU,
X!                                MENU_NOTIFY_PROC, new_game_proc,
X!                                MENU_STRINGS,
X!                                  "Human (black)    vs. Computer (white)",
X!                                  "Computer (black) vs. Human (white)",
X!                                  "Human (black)    vs. Human (white)",
X!                                  0,
X!                                0) ;
X! 
X! /* Create the buttons and other controls. */
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 0),
X!             PANEL_ITEM_Y,       xv_row(panel, 0),
X!             PANEL_LABEL_STRING, "New Game",
X!             PANEL_ITEM_MENU,    game_menu,
X!             0) ;
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 15),
X!             PANEL_ITEM_Y,       xv_row(panel, 0),
X!             PANEL_LABEL_STRING, "Load Game...",
X!             PANEL_NOTIFY_PROC,  xv_load_game,
X!             0) ;
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 30),
X!             PANEL_ITEM_Y,       xv_row(panel, 0),
X!             PANEL_LABEL_STRING, "Save Game...",
X!             PANEL_NOTIFY_PROC,  xv_save_game,
X!             0) ;
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 45),
X!             PANEL_ITEM_Y,       xv_row(panel, 0),
X!             PANEL_LABEL_STRING, "     Help      ",
X!             PANEL_NOTIFY_PROC,  unimplemented,
X!             0) ;
X!  
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 0),
X!             PANEL_ITEM_Y,       xv_row(panel, 1),
X!             PANEL_LABEL_STRING, "   Moves?   ",
X!             PANEL_NOTIFY_PROC,  show_all_moves,
X!             0) ;
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 15),
X!             PANEL_ITEM_Y,       xv_row(panel, 1),
X!             PANEL_LABEL_STRING, "   Suggest  ",
X!             PANEL_NOTIFY_PROC,  suggest,
X!             0) ;        
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 30),
X!             PANEL_ITEM_Y,       xv_row(panel, 1),
X!             PANEL_LABEL_STRING, "     Undo     ",
X!             PANEL_NOTIFY_PROC,  undo,
X!             0) ;        
X! 
X!   XV_CREATE(panel,              PANEL_BUTTON,
X!             PANEL_ITEM_X,       xv_col(panel, 45),
X!             PANEL_ITEM_Y,       xv_row(panel, 1),
X!             PANEL_LABEL_STRING, "     Quit     ",
X!             PANEL_NOTIFY_PROC,  destroy_frame,
X!             0) ;
X! 
X!   XV_CREATE(panel,              PANEL_CHECK_BOX,
X!             PANEL_ITEM_X,       xv_col(panel, 0),
X!             PANEL_ITEM_Y,       xv_row(panel, 4),
X!             PANEL_LABEL_STRING, "Show Info  ",
X!             PANEL_NOTIFY_PROC,  pop_props,
X!             PANEL_VALUE,        1,
X!             0) ;
X! 
X!   black_item = xv_create(panel,                PANEL_CHOICE_STACK,
X!                          PANEL_ITEM_X,         xv_col(panel, 0),
X!                          PANEL_ITEM_Y,         xv_row(panel, 2),
X!                          PANEL_LABEL_STRING,   "Black:",
X!                          PANEL_CHOICE_STRINGS,
X!                            "human",
X!                            "computer",
X!                            0,
X!                          PANEL_NOTIFY_PROC,    set_player,
X!                          PANEL_VALUE,          items[(int) BLACK_PLAYS].value,
X!                          0) ;
X! 
X!   white_item = xv_create(panel,                PANEL_CHOICE_STACK,
X!                          PANEL_ITEM_X,         xv_col(panel, 0),
X!                          PANEL_ITEM_Y,         xv_row(panel, 3),
X!                          PANEL_LABEL_STRING,   "White:",
X!                          PANEL_CHOICE_STRINGS,
X!                            "human",
X!                            "computer",
X!                            0,
X!                          PANEL_NOTIFY_PROC,    set_player,
X!                          PANEL_VALUE,          items[(int) WHITE_PLAYS].value,
X!                          0) ;
X! 
X!   mes_items[(int) (TURN_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
X!                        PANEL_ITEM_X,       xv_col(panel, 30),
X!                        PANEL_ITEM_Y,       xv_row(panel, 2),
X!                        PANEL_LABEL_STRING, "Black to move",
X!                        0) ;
X!  
X!   mes_items[(int) (SCORE_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
X!                        PANEL_ITEM_X,       xv_col(panel, 30),
X!                        PANEL_ITEM_Y,       xv_row(panel, 3),
X!                        PANEL_LABEL_STRING, "",
X!                        0) ;
X!  
X!   mes_items[(int) (EVAL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
X!                        PANEL_ITEM_X,       xv_col(panel, 30),
X!                        PANEL_ITEM_Y,       xv_row(panel, 4),
X!                        PANEL_LABEL_STRING, "",
X!                        0) ;
X!  
X!  
X!   mes_items[(int) (PANEL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE,
X!                        PANEL_ITEM_X,       xv_col(panel, 30),
X!                        PANEL_ITEM_Y,       xv_row(panel, 5),
X!                        PANEL_LABEL_STRING, "",
X!                        0) ;
X!  
X!   XV_CREATE(panel,                PANEL_CHOICE_STACK,
X!             PANEL_ITEM_X,         xv_col(panel, 0),
X!             PANEL_ITEM_Y,         xv_row(panel, 5),
X!             PANEL_LABEL_STRING,   "Difficulty: ",
X!             PANEL_CHOICE_STRINGS,
X!               " Instant",
X!               " 1 Minute",
X!               " 3 Minutes",
X!               " 5 Minutes",
X!               "10 Minutes",
X!               "15 Minutes",
X!               "20 Minutes",
X!               "Tournament (30)",
X!               "60 MInutes",
X!               0,
X!             PANEL_NOTIFY_PROC,     set_depth,
X!             PANEL_VALUE,           0,
X!             0) ;
X! 
X!   window_fit(panel) ;
X!   window_fit(frame) ;
X!   notify_interpose_event_func(frame, frame_event, NOTIFY_SAFE) ;
X!   notify_interpose_destroy_func(frame, quit_proc) ;
X! 
X!   ls_frame = xv_create(frame,                FRAME_CMD,
X!                        FRAME_LABEL,          "Name your Game ...",
X!                        FRAME_CMD_PUSHPIN_IN, TRUE,
X!                        0) ;
X!    
X!   ls_panel = (Panel) xv_get(ls_frame, FRAME_CMD_PANEL) ;
X! 
X!   ls_text = XV_CREATE(ls_panel,                   PANEL_TEXT,
X!                       PANEL_ITEM_X,               xv_col(ls_panel, 0),
X!                       PANEL_ITEM_Y,               xv_row(ls_panel, 0),
X!                       PANEL_LABEL_STRING,         "Load File: ",
X!                       PANEL_VALUE,                gamefile,
X!                       PANEL_VALUE_DISPLAY_LENGTH, 30,
X!                       PANEL_VALUE_STORED_LENGTH,  255,
X!                       0) ; 
X! 
X!   ls_button = xv_create(ls_panel,         PANEL_BUTTON,
X!                         PANEL_LABEL_STRING, "Load",
X!                         PANEL_NOTIFY_PROC,  start_load_save,
X!                         XV_X,               xv_col(ls_panel, 18),
X!                         XV_Y,               xv_row(ls_panel, 1),
X!                         0) ;
X!   window_fit(ls_panel) ;
X!   window_fit(ls_frame) ;
X! 
X    iscolor[(int) cur_dpyno] = ((int) xv_get(frame, WIN_DEPTH) > 1) ? 1 : 0 ;
X  }
X  
X***************
X*** 425,436 ****
X  void
X  make_icon()
X  {
X    reve_icon = xv_create(XV_NULL,    ICON,
X!                         ICON_IMAGE, &icon_pr,
X                          0) ;
X  }
X  
X  
X  Drawable
X  make_server_image(image)
X  unsigned short image[] ;
X--- 695,727 ----
X  void
X  make_icon()
X  {
X+ 
X+ /* XXX: Need to correctly handle color icons on a color screen. */
X+ 
X+   Server_image icon_sv ;
X+ 
X+   icon_sv = xv_create(XV_NULL, SERVER_IMAGE,
X+                       SERVER_IMAGE_BITS,  icon_image,
X+                       SERVER_IMAGE_DEPTH, 1,
X+                       XV_WIDTH,           64,
X+                       XV_HEIGHT,          64,
X+                       0) ;
X+ 
X    reve_icon = xv_create(XV_NULL,    ICON,
X!                         ICON_IMAGE, icon_sv,
X                          0) ;
X+   creve_icon = xv_create(XV_NULL,    ICON,
X+                          ICON_IMAGE, icon_sv,
X+                          0) ;
X  }
X  
X  
X+ void
X+ make_panel()                   /* **DUMMY ROUTINE** */
X+ {
X+ }
X+ 
X+ 
X  Drawable
X  make_server_image(image)
X  unsigned short image[] ;
X***************
X*** 442,448 ****
X                     XV_HEIGHT,         64,
X                     SERVER_IMAGE_BITS, image,
X                     0) ;
X!   return((int) xv_get(temp, XV_XID)) ;
X  }
X  
X  
X--- 733,739 ----
X                     XV_HEIGHT,         64,
X                     SERVER_IMAGE_BITS, image,
X                     0) ;
X!   return((int) xv_get(temp, XV_XID, NULL)) ;
X  }
X  
X  
X***************
X*** 459,464 ****
X--- 750,840 ----
X  
X  
X  void
X+ message(mtype, str)
X+ enum panel_type mtype ;
X+ char *str ;
X+ {
X+   XV_SET(mes_items[(int) (mtype - PANEL_MES)], PANEL_LABEL_STRING, str, 0) ;
X+ }
X+ 
X+ 
X+ static void
X+ new_game_proc(menu, menu_item)
X+ Menu menu ;
X+ Menu_item menu_item ;
X+ {
X+   switch((int) xv_get(menu_item, MENU_VALUE))
X+     {
X+       case 1 : items[(int) BLACK_PLAYS].value = HUMAN ;
X+                items[(int) WHITE_PLAYS].value = COMPUTER ;
X+                cmode = WHITE_START ;
X+                dtype = XBLACK ;
X+                break ;
X+ 
X+       case 2 : items[(int) BLACK_PLAYS].value = COMPUTER ;
X+                items[(int) WHITE_PLAYS].value = HUMAN ;
X+                cmode = BLACK_START ;
X+                dtype = XWHITE ;
X+                break ;
X+ 
X+       case 3 : items[(int) BLACK_PLAYS].value = HUMAN ;
X+                items[(int) WHITE_PLAYS].value = HUMAN ;
X+                cmode = BLACK_START ;
X+                dtype = XBOTH ;
X+     }
X+   XV_SET(black_item, PANEL_VALUE, items[(int) BLACK_PLAYS].value) ;
X+   XV_SET(white_item, PANEL_VALUE, items[(int) WHITE_PLAYS].value) ;
X+   new_game() ;
X+ }
X+ 
X+ 
X+ /* Callback for the check box to show/hide evaluation and score. */
X+ 
X+ static void
X+ pop_props(item, value, event)
X+ {
X+   show_notes = !show_notes ;
X+   if (!show_notes)
X+     {
X+       XV_SET(mes_items[(int) (EVAL_MES - PANEL_MES)],
X+              PANEL_LABEL_STRING, "",
X+              0) ;
X+       XV_SET(mes_items[(int) (SCORE_MES - PANEL_MES)],
X+              PANEL_LABEL_STRING, "",
X+              0) ;
X+     }
X+ }
X+ 
X+ 
X+ void
X+ position_popup(parent, child, position)
X+ Frame parent, child ;
X+ int position ;
X+ {
X+   Rect crect, prect ;
X+   int height, width ;
X+ 
X+   if (((int) xv_get(child, XV_SHOW)) && position == P_RIGHT) return ;
X+   frame_get_rect(parent, &prect) ;
X+   frame_get_rect(child,  &crect) ;
X+   height = (int) xv_get(parent, XV_HEIGHT) ;
X+   width  = (int) xv_get(parent, XV_WIDTH) ;
X+ 
X+   switch (position)
X+     {
X+       case P_BELOW : crect.r_left = prect.r_left + FRAME_BORDER_SIZE ;
X+                      crect.r_top  = prect.r_top + height + FRAME_LABEL_SIZE +
X+                                     FRAME_BORDER_SIZE ;
X+                      break ;
X+       case P_RIGHT : crect.r_left = prect.r_left + width +
X+                                                    (2 * FRAME_BORDER_SIZE) ;
X+                      crect.r_top  = prect.r_top ;
X+     }
X+   frame_set_rect(child, &crect) ;
X+ }
X+ 
X+ 
X+ void
X  process_event()       /* Process the next canvas event. */
X  {
X    int id ;
X***************
X*** 493,499 ****
X--- 869,896 ----
X  }
X  
X  
X+ static Notify_value
X+ quit_proc(frame, status)
X+ Frame frame ;
X+ Destroy_status status ;
X+ {
X+   if (status == DESTROY_PROCESS_DEATH || status == DESTROY_CLEANUP)
X+     {
X+       xv_destroy_safe(frame) ;
X+       xv_destroy_safe(cframe) ;
X+       exit(0) ;
X+     }
X+   return(notify_next_destroy_func(frame, status)) ;
X+ }
X+ 
X+ 
X  void
X+ remove_textfield()         /* **DUMMY ROUTINE** */
X+ {
X+ }
X+ 
X+ 
X+ void
X  set_cursor(ctype)
X  enum curtype ctype ;
X  {
X***************
X*** 505,522 ****
X  
X  /*ARGSUSED*/
X  void
X! start_tool(dtype)      /* Display window and start the notifier. */
X! enum disp_type dtype ;
X  {
X!   if (iscolor[(int) cur_dpyno])
X      {
X!       reve_icon = (Icon) xv_get(frame, FRAME_ICON) ;
X!       XV_SET(reve_icon,
X!              ICON_IMAGE, &cicon_pr,
X!              0) ;
X!       XV_SET(frame, FRAME_ICON, reve_icon, 0) ;
X      }
X!   window_fit(frame) ;
X    started = 1 ;
X    xv_main_loop(frame) ;
X  }
X--- 902,1025 ----
X  
X  /*ARGSUSED*/
X  void
X! set_cycle(mtype, str)                    /* **DUMMY ROUTINE** */
X! enum panel_type mtype ;
X! char *str ;
X  {
X! }
X! 
X! 
X! static void 
X! set_depth(item, value, event)   /* Callback to set the level of difficulty */
X! Panel_item item ;
X! int value ;
X! Event *event ;
X! {
X!   level = value + 1 ;
X!   items[(int) DIFFICULTY].value = level - 1 ;
X! }
X! 
X! 
X! static void
X! set_player(item, value, event)   /* Callback to set black/white player. */
X! Panel_item item ;
X! int value ;
X! Event *event ;
X! {
X!   char *label ;
X!   enum panel_type this, other ;
X!   int curi, curo ;
X! 
X!   label = (char *) xv_get(item, PANEL_LABEL_STRING) ;
X!   if (EQUAL(label, "Black"))
X      {
X!       this = BLACK_PLAYS ;
X!       other = WHITE_PLAYS ;
X      }
X!   else
X!     {
X!       this = WHITE_PLAYS ;
X!       other = BLACK_PLAYS ;
X!     }
X! 
X!   curi = items[(int) this].value = value ;
X!   curo = items[(int) other].value ;
X! 
X!   if (curi == COMPUTER && curo == COMPUTER)
X!     {
X!       curi = HUMAN ;
X!       XV_SET(item, PANEL_VALUE, curi, 0) ;
X!       items[(int) this].value = curi ;
X!       message(PANEL_MES, "Computer can't play both players.") ;
X!     }
X!   if (curi == HUMAN    && curo == COMPUTER)
X!     dtype = (this == BLACK_PLAYS) ? XBLACK : XWHITE ;
X!   else if (curi == COMPUTER && curo == HUMAN)
X!     dtype = (this == BLACK_PLAYS) ? XWHITE : XBLACK ;
X!   else if (curi == HUMAN    && curo == HUMAN)
X!     dtype = (dtype == XTWO) ? XTWO : XBOTH ;
X!  
X!   if (curi == COMPUTER)
X!     if ((this == BLACK_PLAYS && cmode == BLACK_START) ||
X!         (this == WHITE_PLAYS && cmode == WHITE_START))
X!       computer_move(next_player) ;
X! }
X! 
X! 
X! Panel_setting
X! start_load_save(item, event)
X! Panel_item item ;
X! Event *event ;
X! {
X!   char *label ;
X! 
X!   XV_SET(ls_frame, XV_SHOW, FALSE, NULL) ;
X!   STRCPY(gamefile, (char *) xv_get(ls_text, PANEL_VALUE)) ;
X!   label = (char *) xv_get(ls_button, PANEL_LABEL_STRING) ;
X!   if (EQUAL(label, "Load")) load_game() ;
X!   else                      save_game() ;
X!   return(PANEL_NONE) ;
X! }
X! 
X! 
X! /*ARGSUSED*/
X! void
X! start_tool(dtype)      /* Display window and start the notifier. */
X! enum disp_type dtype ;
X! {
X    started = 1 ;
X    xv_main_loop(frame) ;
X+ }
X+ 
X+ 
X+ static void         /* Dummy function for unimplemented callbacks */
X+ unimplemented()
X+ {
X+   message(PANEL_MES, "Not implemented yet.\n") ;
X+ }
X+ 
X+ 
X+ static void 
X+ xv_load_game(item, value, event)    /* Callback for loading a game button. */
X+ Panel_item item ;
X+ int value ;
X+ Event *event ;
X+ {
X+   position_popup(frame, ls_frame, P_RIGHT) ;
X+   XV_SET(ls_text, PANEL_LABEL_STRING, "Load File: ", 0) ;
X+   XV_SET(ls_button, PANEL_LABEL_STRING, "Load", 0) ;
X+   XV_SET(ls_frame, XV_SHOW, TRUE, NULL) ;
X+ }
X+ 
X+ 
X+ static void 
X+ xv_save_game(item, value, event)    /* Callback load saving a game button. */
X+ Panel_item item ;
X+ int value ;
X+ Event *event ;
X+ {
X+   position_popup(frame, ls_frame, P_RIGHT) ;
X+   XV_SET(ls_text, PANEL_LABEL_STRING, "Save File: ", 0) ;
X+   XV_SET(ls_button, PANEL_LABEL_STRING, "Save", 0) ; 
X+   XV_SET(ls_frame, XV_SHOW, TRUE, NULL) ;
X  }
X
X------- sunview.c -------
X*** /tmp/da28890	Fri Nov  9 10:38:31 1990
X--- sunview.c	Mon Nov  5 09:08:30 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 or 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 or inaccuracies inherent
X   *  either to the comments or the code of this program, but if reported
X***************
X*** 18,26 ****
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  #include "images.h"
X  #include <suntool/sunview.h>
X--- 23,30 ----
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  #include "images.h"
X  #include <suntool/sunview.h>
X***************
X*** 316,322 ****
X    CURSOR_SET(cursor[(int) HOURGLASS], CURSOR_OP, PIX_SRC ^ PIX_DST, 0) ;
X    cursor[(int) NOCURSOR]  = cursor_create(CURSOR_IMAGE, &nocur_pr, 0) ;
X    CURSOR_SET(cursor[(int) NOCURSOR], CURSOR_OP, PIX_SRC ^ PIX_DST, 0) ;
X!   load_colors() ;
X  
X    images[(int) BUT_STENCIL] = &button_stencil_pr ;
X    images[(int) BUT_INVERT]  = &button_invert_pr ;
X--- 320,326 ----
X    CURSOR_SET(cursor[(int) HOURGLASS], CURSOR_OP, PIX_SRC ^ PIX_DST, 0) ;
X    cursor[(int) NOCURSOR]  = cursor_create(CURSOR_IMAGE, &nocur_pr, 0) ;
X    CURSOR_SET(cursor[(int) NOCURSOR], CURSOR_OP, PIX_SRC ^ PIX_DST, 0) ;
X!   if (!monochrome) load_colors() ;
X  
X    images[(int) BUT_STENCIL] = &button_stencil_pr ;
X    images[(int) BUT_INVERT]  = &button_invert_pr ;
X
X
END_OF_FILE
if test 30587 -ne `wc -c <'patches01d'`; then
    echo shar: \"'patches01d'\" unpacked with wrong size!
fi
# end of 'patches01d'
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