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