billr@saab.CNA.TEK.COM (Bill Randle) (12/22/90)
Submitted-by: Rich Burridge <rburridge@sun.COM> Posting-number: Volume 12, Issue 9 Archive-name: reve/Patch3i 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 9 (of 9)." # Contents: patches03f # Wrapped by billr@saab on Fri Dec 21 11:28:21 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patches03f' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patches03f'\" else echo shar: Extracting \"'patches03f'\" \(52444 characters\) sed "s/^X//" >'patches03f' <<'END_OF_FILE' X X------- xview.c ------- X*** /tmp/da07695 Sun Dec 9 15:22:04 1990 X--- xview.c Fri Dec 7 16:49:50 1990 X*************** X*** 27,32 **** X--- 27,37 ---- X #include "color.h" X #include "extern.h" X #include "images.h" X+ #include <errno.h> X+ #include <sys/ioctl.h> X+ #include <sys/param.h> X+ #include <sys/wait.h> X+ X #include <xview/xview.h> X #include <xview/canvas.h> X #include <xview/panel.h> X*************** X*** 35,47 **** X #include <xview/svrimage.h> X #include <xview/xv_xrect.h> X #include <X11/Xlib.h> 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--- 40,58 ---- X #include <xview/svrimage.h> X #include <xview/xv_xrect.h> X #include <X11/Xlib.h> X+ #include <X11/Xresource.h> X X! extern int errno ; 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 CLIENT_NO 10 X+ #define DEPTH_MENU_ENTRY 9 X #define FRAME_BORDER_SIZE 7 X #define FRAME_LABEL_SIZE 30 X+ #define K_PROPS 3 /* Props key (L3). */ X X #define XV_CREATE (void) xv_create X #define XV_SET (void) xv_set X*************** X*** 53,74 **** 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--- 64,95 ---- X Canvas canvas ; X Canvas_paint_window cpw ; X Event *cur_event ; X Frame frame ; /* Frame for control panel. */ X Icon creve_icon ; /* Icon for game board. */ X Icon reve_icon ; /* Icon for control panel. */ X Panel panel ; /* Xview interface panel. */ X X+ Notify_client client = (Notify_client) CLIENT_NO ; 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! X! Frame d_frame ; /* Frame for depth pop-up window. */ X! Panel d_panel ; /* Panel for depth operations. */ X! Panel_item d_button ; /* Button to start depth operation. */ X! Panel_item d_text ; /* Depth numeric text item. */ X! X! Frame props_frame ; /* Frame for property window */ X! Panel props_panel ; /* Panel for property operations. */ X! Panel_item props_computer ; /* Computer plays: choice. */ X! Panel_item props_button ; /* Button to start property operation */ X! Panel_item props_reset_button ; /* Button to reset properties */ X! Panel_item props_choices ; /* non-exclusive choices for properties */ X! X! Panel_item mes_items[4] ; /* Four generic message items. */ X! Panel_setting start_load_save(), set_profmax(), set_props(), reset_props() ; X Panel_item black_item ; X Panel_item white_item ; X Server_image hglass_pr, nocur_pr ; X*************** X*** 84,89 **** X--- 105,111 ---- X Window root ; X XFontStruct *font[MAXFONTS] ; /* Xlib handles to the fonts. */ X XGCValues gc_val ; /* Used to setup graphics context values. */ X+ XrmDatabase reve_DB[MAXDPY] ; /* Combined resources database. */ X int gc_flags ; /* Used to set up graphics context flags. */ X int screen ; /* Default graphics display screen. */ X unsigned long backgnd ; /* Default background color. */ X*************** X*** 92,106 **** X unsigned long palette[OTH_COLORSIZE] ; /* Xlib color palette. */ X 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--- 114,130 ---- X unsigned long palette[OTH_COLORSIZE] ; /* Xlib color palette. */ X X int opvals[3] ; /* Pixrect rasterop values. */ X+ int pid ; /* Process id of the reve_proc process. */ X+ int pipe_io[2][2] ; X+ int reve_player ; /* Player making the computer move (black/white). */ X int started ; /* Set just before window is displayed. */ X X+ Notify_value read_from_reve(), sigchldcatcher() ; X void destroy_frame() ; X! static void menu_proc(), set_depth(), set_player() ; X! static void xv_load_game(), xv_new_game(), xv_save_game(), xv_set_props() ; X X X void X batch(state) /* Turn graphics batching on or off. */ X enum bltype state ; X*************** X*** 116,127 **** X Event *event ; X { X if (!started) return ; X! cur_event = event ; X! process_event() ; /* Determine what kind of event it is. */ X handle_event() ; /* And do the appropriate action. */ X X! if (nextc == LEFT_UP || nextc == MIDDLE_UP || nextc == RIGHT_UP) X! XV_SET(frame, FRAME_BUSY, FALSE, 0) ; X } X X X--- 140,160 ---- X Event *event ; X { X if (!started) return ; X! cur_event = event ; /* Determine what kind of event it is. */ X! XAllowEvents(dpy, AsyncBoth, CurrentTime) ; X handle_event() ; /* And do the appropriate action. */ X+ } X X! X! void X! change_depth(depth) X! int depth ; X! { X! struct reve_in in ; X! X! in.type = M_PROFMAX ; X! in.level = depth ; X! WRITE(pipe_io[0][1], (char *) &in, sizeof(struct reve_in)) ; X } X X X*************** X*** 132,139 **** X } X X X void X! color_area(x, y, width, height, color) X int x, y, width, height, color ; X { X int d ; X--- 165,174 ---- X } X X X+ /*ARGSUSED*/ X void X! color_area(wtype, x, y, width, height, color) X! enum win_type wtype ; X int x, y, width, height, color ; X { X int d ; X*************** X*** 154,179 **** X X X void X! create_menu(mtype, values) /* Create popup menus for cycle items. */ X! enum panel_type mtype ; X! char *values[] ; X { X! int i = 0 ; X! int menuno ; /* Current menu number. */ X! int more = 1 ; /* Cleared when current menu is complete.*/ X! X! menuno = (int) mtype - (int) BLACK_PLAYS ; X! menus[menuno] = xv_create(XV_NULL, MENU_COMMAND_MENU, X! MENU_NOTIFY_PROC, menu_proc, X! 0) ; X! do X! { X! if (values[i] != NULL) X! XV_SET(menus[menuno], MENU_STRING_ITEM, values[i], i+1, 0) ; X! else more = 0 ; X! i++ ; X! } X! while (more) ; X } X X X--- 189,199 ---- X X X void X! connect_to_reve(pid) X! int pid ; X { X! notify_set_input_func(client, read_from_reve, pipe_io[1][0]) ; X! notify_set_wait3_func(client, sigchldcatcher, pid) ; X } X X X*************** X*** 181,208 **** X destroy_frame() /* Destroy reve window. */ X { X xv_destroy_safe(frame) ; X! xv_destroy_safe(cframe) ; X exit(0) ; X } X X X! do_menu(mtype) /* Popup appropriate cycle menu and get value. */ X! enum item_type mtype ; X { X- int menuno ; X- X- menuno = (int) mtype - (int) BLACK_PLAYS ; X- menu_show(menus[menuno], canvas, cur_event, 0) ; X- return(0) ; 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--- 201,228 ---- X destroy_frame() /* Destroy reve window. */ X { X xv_destroy_safe(frame) ; X! KILL(pid, SIGKILL) ; X exit(0) ; X } X X X! /*ARGSUSED*/ X! void X! draw_button(wtype, item, color, image) /* **DUMMY ROUTINE** */ X! enum win_type wtype ; X! enum panel_type item ; X! int color ; X! enum image_type image ; X { X } X X X /*ARGSUSED*/ X void X! draw_choice(wtype, item, color) /* **DUMMY ROUTINE** */ X! enum win_type wtype ; X enum panel_type item ; X int color ; X { X } X X*************** X*** 209,215 **** 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--- 229,236 ---- X X /*ARGSUSED*/ X void X! draw_cycle(wtype, item, color, image) /* **DUMMY ROUTINE** */ X! enum win_type wtype ; X enum panel_type item ; X int color ; X enum image_type image ; X*************** X*** 217,224 **** 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--- 238,247 ---- X } X X X+ /*ARGSUSED*/ X void X! draw_image(wtype, x, y, width, height, image) X! enum win_type wtype ; X int x, y, width, height ; X enum image_type image ; X { X*************** X*** 231,238 **** X } X X X void X! draw_line(x1, y1, x2, y2, op, color) X int x1, y1, x2, y2, color ; X enum optype op ; X { X--- 254,263 ---- X } X X X+ /*ARGSUSED*/ X void X! draw_line(wtype, x1, y1, x2, y2, op, color) X! enum win_type wtype ; X int x1, y1, x2, y2, color ; X enum optype op ; X { X*************** X*** 251,258 **** X } X X X void X! draw_stencil(x, y, width, height, op, color, stencil, image) X int x, y, width, height, color ; X enum optype op ; X enum image_type stencil, image ; X--- 276,285 ---- X } X X X+ /*ARGSUSED*/ X void X! draw_stencil(wtype, x, y, width, height, op, color, stencil, image) X! enum win_type wtype ; X int x, y, width, height, color ; X enum optype op ; X enum image_type stencil, image ; X*************** X*** 277,284 **** X } X X X void X! draw_text(x, y, ftype, color, str) X enum font_type ftype ; X int x, y, color ; X char *str ; X--- 304,313 ---- X } X X X+ /*ARGSUSED*/ X void X! draw_text(wtype, x, y, ftype, color, str) X! enum win_type wtype ; X enum font_type ftype ; X int x, y, color ; X char *str ; X*************** X*** 305,327 **** 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--- 334,375 ---- X } X X X! /*ARGSUSED*/ X! void X! draw_toggle(wtype, item, color) X! enum win_type wtype ; X! enum panel_type item ; X! int color ; X { X! } X X! X! fork_child() X! { X! int i ; X! X! PIPE(pipe_io[0]) ; /* Setup input pipe. */ X! PIPE(pipe_io[1]) ; /* Setup output pipe. */ X! switch (pid = fork()) X { X! case -1 : CLOSE(pipe_io[0][0]) ; X! CLOSE(pipe_io[0][1]) ; X! CLOSE(pipe_io[1][0]) ; X! CLOSE(pipe_io[1][1]) ; X! perror("reve fork failed") ; X! exit(1) ; X! case 0 : DUP2(pipe_io[0][0], 0) ; /* Child. */ X! DUP2(pipe_io[1][1], 1) ; X! DUP2(pipe_io[1][1], 2) ; X! for (i = getdtablesize(); i > 2; i--) CLOSE(i) ; X! for (i = 0; i < NSIG; i++) SIGNAL(i, SIG_DFL) ; X! execlp("reve_proc", "reve_proc", edgefile, (char *) NULL) ; X! perror("reve child exec") ; X! _exit(-1) ; X! default : CLOSE(pipe_io[0][0]) ; /* Parent. */ X! CLOSE(pipe_io[1][1]) ; X } X! return(pid) ; X } X X X*************** X*** 347,352 **** X--- 395,420 ---- X } X X X+ char * X+ get_resource(rtype) /* Get Reve resource from merged databases. */ X+ enum res_type rtype ; X+ { X+ char cstr[MAXLINE], nstr[MAXLINE], str[MAXLINE] ; X+ char *str_type[20] ; X+ int d ; X+ XrmValue value ; X+ X+ d = (int) cur_dpyno ; X+ STRCPY(str, resources[(int) rtype]) ; X+ SPRINTF(nstr, "reve.%s", str) ; X+ if (islower(str[0])) str[0] = toupper(str[0]) ; X+ SPRINTF(cstr, "Reve.%s", str) ; X+ if (XrmGetResource(reve_DB[d], nstr, cstr, str_type, &value) == NULL) X+ return((char *) NULL) ; X+ else return(value.addr) ; X+ } X+ X+ X get_strwidth(ftype, str) /* Get width in pixels of string value. */ X enum font_type ftype ; X char *str ; X*************** X*** 367,378 **** X } X 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 return 0 ; X } X X--- 435,457 ---- X } X X X+ init_graphics(argc, argv) X+ int *argc ; X+ char *argv[] ; X+ { X+ xv_init(XV_INIT_ARGC_PTR_ARGV, argc, argv, 0) ; X+ frame = (Frame) xv_create(XV_NULL, FRAME, 0) ; X+ dpy = (Display *) xv_get(frame, XV_DISPLAY) ; X+ reve_DB[(int) DPY1] = NULL ; X+ } X+ 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 return 0 ; X } X X*************** X*** 406,412 **** X--- 485,550 ---- X } X X X+ /* Get the resource databases. These are looked for in the following ways: X+ * X+ * Classname file in the app-defaults directory. In this case, Classname X+ * is Reve. X+ * X+ * Classname file in the directory specified by the XUSERFILESEARCHPATH X+ * or XAPPLRESDIR environment variable. X+ * X+ * Property set using xrdb, accessible through the XResourceManagerString X+ * macro or, if that is empty, the ~/.Xdefaults file. X+ * X+ * XENVIRONMENT environment variable or, if not set, .Xdefaults-hostname X+ * file. X+ */ X+ X void X+ load_resources() X+ { X+ XrmDatabase db ; X+ char *home, name[MAXPATHLEN], *ptr ; X+ int d, len ; X+ X+ d = (int) cur_dpyno ; X+ home = getenv("HOME") ; X+ XrmInitialize() ; X+ STRCPY(name, "/usr/lib/X11/app-defaults/Reve") ; X+ X+ /* Get applications defaults file, if any. */ X+ X+ db = XrmGetFileDatabase(name) ; X+ XrmMergeDatabases(db, &reve_DB[d]) ; X+ X+ /* Merge server defaults, created by xrdb. If nor defined, use ~/.Xdefaults. */ X+ X+ if (XResourceManagerString(dpy) != NULL) X+ db = XrmGetStringDatabase(XResourceManagerString(dpy)) ; X+ else X+ { X+ SPRINTF(name, "%s/.Xdefaults", home) ; X+ db = XrmGetFileDatabase(name) ; X+ } X+ XrmMergeDatabases(db, &reve_DB[d]) ; X+ X+ /* Open XENVIRONMENT file or, if not defined, the .Xdefaults, and merge X+ * into existing database. X+ */ X+ X+ if ((ptr = getenv("XENVIRONMENT")) == NULL) X+ { X+ SPRINTF(name, "%s/.Xdefaults-", home) ; X+ len = strlen(name) ; X+ GETHOSTNAME(name+len, 1024-len) ; X+ db = XrmGetFileDatabase(name) ; X+ } X+ else db = XrmGetFileDatabase(ptr) ; X+ XrmMergeDatabases(db, &reve_DB[d]) ; X+ } X+ X+ X+ void X lock_screen(state) /* Turn graphics locking on or off - null routine. */ X enum bltype state ; X {} X*************** X*** 415,429 **** 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--- 553,563 ---- X void X make_canvas() /* Create canvas for game board. */ X { X! int pid ; X! X! canvas = xv_create(frame, CANVAS, X! WIN_BELOW, panel, X! XV_X, 0, X CANVAS_RETAINED, FALSE, X OPENWIN_AUTO_CLEAR, FALSE, X XV_HEIGHT, TOTAL_HEIGHT, X*************** X*** 432,439 **** X WIN_CONSUME_EVENTS, X MS_LEFT, MS_MIDDLE, MS_RIGHT, X WIN_ASCII_EVENTS, KBD_USE, KBD_DONE, X! LOC_MOVE, LOC_DRAG, X! LOC_WINENTER, LOC_WINEXIT, X WIN_LEFT_KEYS, WIN_TOP_KEYS, X WIN_RIGHT_KEYS, WIN_REPAINT, X 0, X--- 566,572 ---- X WIN_CONSUME_EVENTS, X MS_LEFT, MS_MIDDLE, MS_RIGHT, X WIN_ASCII_EVENTS, KBD_USE, KBD_DONE, X! LOC_DRAG, LOC_WINENTER, LOC_WINEXIT, X WIN_LEFT_KEYS, WIN_TOP_KEYS, X WIN_RIGHT_KEYS, WIN_REPAINT, X 0, X*************** X*** 440,447 **** 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--- 573,579 ---- X WIN_EVENT_PROC, canvas_proc, X 0, X 0) ; X! window_fit(frame) ; X X cpw = canvas_paint_window(canvas) ; X cursor[(int) CANVASCUR] = xv_get(cpw, WIN_CURSOR, NULL) ; X*************** X*** 486,499 **** X--- 618,635 ---- X X images[(int) P_WHITE] = make_server_image(white_image) ; X images[(int) P_BLACK] = make_server_image(black_image) ; X+ pid = fork_child() ; X+ connect_to_reve(pid) ; X } X X X+ /*ARGSUSED*/ X void X make_frame(argc, argv) /* Create frame and the panel, buttons, menus. */ X int argc ; X char *argv[] ; X { X+ int val ; X Menu_item item ; X X opvals[(int) RCLR] = GXclear ; X*************** X*** 502,570 **** 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! 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--- 638,693 ---- X X /* Create the frame and the control panel */ X X! XV_SET(frame, X! FRAME_ICON, reve_icon, X! FRAME_LABEL, line, X! FRAME_NO_CONFIRM, TRUE, X! FRAME_SHOW_RESIZE_CORNER, FALSE, X! 0) ; X X panel = (Panel) xv_create(frame, PANEL, 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, "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, 15), X PANEL_ITEM_Y, xv_row(panel, 0), 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, 30), X PANEL_ITEM_Y, xv_row(panel, 0), X! PANEL_NOTIFY_PROC, xv_new_game, X! PANEL_LABEL_STRING, " New 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, " Props... ", X! PANEL_NOTIFY_PROC, xv_set_props, 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, "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, 15), X PANEL_ITEM_Y, xv_row(panel, 1), X! PANEL_LABEL_STRING, " Suggest ", X PANEL_NOTIFY_PROC, suggest, X 0) ; X X*************** X*** 582,670 **** 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--- 705,764 ---- X PANEL_NOTIFY_PROC, destroy_frame, X 0) ; X X! XV_CREATE(panel, PANEL_MESSAGE, X PANEL_ITEM_X, xv_col(panel, 0), X! PANEL_ITEM_Y, xv_row(panel, 2), X! PANEL_LABEL_BOLD, TRUE, X! PANEL_LABEL_STRING, "Black:", X 0) ; X! val = items[(int) BLACK_PLAYS].value ; X! black_item = xv_create(panel, PANEL_MESSAGE, X! PANEL_ITEM_X, xv_col(panel, 7), X! PANEL_ITEM_Y, xv_row(panel, 2), X! PANEL_LABEL_BOLD, FALSE, X! PANEL_LABEL_STRING, player_values[val], X 0) ; X X! XV_CREATE(panel, PANEL_MESSAGE, X! PANEL_ITEM_X, xv_col(panel, 30), X! PANEL_ITEM_Y, xv_row(panel, 2), X! PANEL_LABEL_BOLD, TRUE, X! PANEL_LABEL_STRING, "White:", X! 0) ; X! val = items[(int) WHITE_PLAYS].value ; X! white_item = xv_create(panel, PANEL_MESSAGE, X! PANEL_ITEM_X, xv_col(panel, 37), X! PANEL_ITEM_Y, xv_row(panel, 2), X! PANEL_LABEL_BOLD, FALSE, X! PANEL_LABEL_STRING, player_values[val], X 0) ; X X! mes_items[(int) (PANEL_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE, X! PANEL_ITEM_X, xv_col(panel, 0), 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, 0), X PANEL_ITEM_Y, xv_row(panel, 4), X PANEL_LABEL_STRING, "", X 0) ; X! X! mes_items[(int) (SCORE_MES - PANEL_MES)] = xv_create(panel, PANEL_MESSAGE, X! PANEL_ITEM_X, xv_col(panel, 0), X PANEL_ITEM_Y, xv_row(panel, 5), X PANEL_LABEL_STRING, "", 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, 5), X+ PANEL_LABEL_STRING, "Black to move", X+ 0) ; X window_fit(panel) ; X X ls_frame = xv_create(frame, FRAME_CMD, X FRAME_CMD_PUSHPIN_IN, TRUE, X 0) ; X X*************** X*** 673,679 **** 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--- 767,773 ---- 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*************** X*** 680,686 **** 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--- 774,780 ---- X 0) ; X X ls_button = xv_create(ls_panel, PANEL_BUTTON, X! PANEL_LABEL_STRING, "Apply", X PANEL_NOTIFY_PROC, start_load_save, X XV_X, xv_col(ls_panel, 18), X XV_Y, xv_row(ls_panel, 1), X*************** X*** 688,693 **** X--- 782,906 ---- X window_fit(ls_panel) ; X window_fit(ls_frame) ; X X+ d_frame = xv_create(frame, FRAME_CMD, X+ FRAME_LABEL, "Set Search Depth", X+ FRAME_CMD_PUSHPIN_IN, TRUE, X+ 0) ; X+ X+ d_panel = (Panel) xv_get(d_frame, FRAME_CMD_PANEL) ; X+ X+ d_text = XV_CREATE(d_panel, PANEL_NUMERIC_TEXT, X+ PANEL_VALUE_X, xv_col(d_panel, 10), X+ XV_Y, xv_row(d_panel, 0), X+ PANEL_LABEL_STRING, "Depth: ", X+ PANEL_VALUE, INIT_DEPTH, X+ PANEL_VALUE_DISPLAY_LENGTH, 2, X+ PANEL_VALUE_STORED_LENGTH, 2, X+ PANEL_MIN_VALUE, 1, X+ PANEL_MAX_VALUE, MAX_PROFMAX, X+ 0) ; X+ X+ d_button = xv_create(d_panel, PANEL_BUTTON, X+ PANEL_LABEL_STRING, "Apply", X+ PANEL_NOTIFY_PROC, set_profmax, X+ XV_X, xv_col(d_panel, 7), X+ XV_Y, xv_row(d_panel, 1), X+ 0) ; X+ window_fit(d_panel) ; X+ window_fit(d_frame) ; X+ X+ X+ props_frame = xv_create(frame, FRAME_CMD, X+ FRAME_LABEL, "Reve Properties", X+ FRAME_CMD_PUSHPIN_IN, TRUE, X+ 0) ; X+ X+ props_panel = (Panel) xv_get(props_frame, FRAME_CMD_PANEL) ; X+ X+ if (dtype == XBLACK) val = CP_WHITE ; X+ else if (dtype == XWHITE) val = CP_BLACK ; X+ else if (dtype == XBOTH || dtype == XTWO) val = CP_NEITHER ; X+ X+ props_computer = xv_create(props_panel, PANEL_CHOICE, X+ PANEL_LABEL_STRING, "Computer plays:", X+ PANEL_LABEL_BOLD, TRUE, X+ PANEL_VALUE_X, xv_col(props_panel, 15), X+ XV_Y, xv_row(props_panel, 0), X+ PANEL_CHOICE_STRINGS, X+ "White", X+ "Black", X+ "Neither", X+ "Both", X+ 0, X+ PANEL_VALUE, val, X+ 0) ; X+ X+ XV_CREATE(props_panel, PANEL_CHOICE_STACK, X+ PANEL_VALUE_X, xv_col(props_panel, 15), X+ XV_Y, xv_row(props_panel, 1), 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+ "Depth...", X+ 0, X+ PANEL_NOTIFY_PROC, set_depth, X+ PANEL_VALUE, items[(int) DIFF_CHOICE].value, X+ 0) ; X+ X+ XV_CREATE(props_panel, PANEL_MESSAGE, X+ XV_X, xv_col(props_panel, 7), X+ XV_Y, xv_row(props_panel, 2), X+ PANEL_LABEL_BOLD, TRUE, X+ PANEL_LABEL_STRING, "Options:", X+ 0) ; X+ X+ val = ((ANIMATION & 0x1) << 0) + X+ ((DO_BESTMOVE & 0x1) << 1) + X+ ((DO_LAST & 0x1) << 2) + X+ ((SHOW_NOTES & 0x1) << 3) + X+ ((DO_NUMBER & 0x1) << 4) + X+ ((QUICKGAME & 0x1) << 5) ; X+ X+ props_choices = xv_create(props_panel, PANEL_CHECK_BOX, X+ PANEL_LAYOUT, PANEL_VERTICAL, X+ PANEL_CHOOSE_ONE, FALSE, X+ PANEL_CHOICE_STRINGS, X+ "Animate Move", X+ "Show Current Best Move", X+ "Show Last Move", X+ "Show Evaluation Info.", X+ "Number Last Move", X+ "Don't Show Flip", X+ 0, X+ PANEL_VALUE_X, xv_col(props_panel, 15), X+ PANEL_VALUE_Y, xv_row(props_panel, 2), X+ PANEL_VALUE, val, X+ 0) ; X+ X+ props_button = xv_create(props_panel, PANEL_BUTTON, X+ PANEL_LABEL_STRING, "Apply", X+ PANEL_NOTIFY_PROC, set_props, X+ XV_X, xv_col(props_panel, 13), X+ XV_Y, xv_row(props_panel, 8), X+ 0) ; X+ X+ props_reset_button = xv_create(props_panel, PANEL_BUTTON, X+ PANEL_LABEL_STRING, "Reset", X+ PANEL_NOTIFY_PROC, reset_props, X+ XV_X, xv_col(props_panel, 23), X+ XV_Y, xv_row(props_panel, 8), X+ 0) ; X+ window_fit(props_panel) ; X+ window_fit(props_frame) ; X+ X iscolor[(int) cur_dpyno] = ((int) xv_get(frame, WIN_DEPTH) > 1) ? 1 : 0 ; X } X X*************** X*** 717,724 **** X X X void X! make_panel() /* **DUMMY ROUTINE** */ X { X } X X X--- 930,938 ---- X X X void X! make_panel() X { X+ panel_paint(panel, PANEL_CLEAR) ; X } X X X*************** X*** 758,808 **** 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--- 972,987 ---- X } X X X! void X! open_frame(wtype) /* **DUMMY ROUTINE** */ X! enum win_type wtype ; X { X } X X X! void X! paint_prop_sheet() /* **DUMMY ROUTINE** */ X { X } X X X*************** X*** 839,844 **** X--- 1018,1024 ---- X { X int id ; X X+ nextc = IGNORE_EVENT ; X id = (event_id(cur_event)) ; X curx = event_x(cur_event) ; X cury = event_y(cur_event) ; X*************** X*** 845,851 **** X X if (id == KBD_DONE || id == LOC_WINEXIT) nextc = EXIT_WINDOW ; X else if (id == LOC_WINENTER) nextc = ENTER_WINDOW ; X! else if (id == LOC_MOVE || id == LOC_DRAG) nextc = MOUSE_MOVING ; X else if (id == WIN_REPAINT || id == WIN_RESIZE) nextc = FRAME_REPAINT ; X else if (id == WIN_REPAINT || id == WIN_RESIZE) nextc = FRAME_REPAINT ; X else if (event_is_button(cur_event) && event_is_down(cur_event)) X--- 1025,1031 ---- X X if (id == KBD_DONE || id == LOC_WINEXIT) nextc = EXIT_WINDOW ; X else if (id == LOC_WINENTER) nextc = ENTER_WINDOW ; X! else if (id == LOC_DRAG) nextc = MOUSE_MOVING ; X else if (id == WIN_REPAINT || id == WIN_RESIZE) nextc = FRAME_REPAINT ; X else if (id == WIN_REPAINT || id == WIN_RESIZE) nextc = FRAME_REPAINT ; X else if (event_is_button(cur_event) && event_is_down(cur_event)) X*************** X*** 859,865 **** X if (id == MS_LEFT) nextc = LEFT_UP ; X else if (id == MS_MIDDLE) nextc = MIDDLE_UP ; X else if (id == MS_RIGHT) nextc = RIGHT_UP ; X- XV_SET(frame, FRAME_BUSY, TRUE, 0) ; X } X else if (event_is_ascii(cur_event)) X { X--- 1039,1044 ---- X*************** X*** 866,886 **** X cur_ch = id ; X nextc = KEYBOARD ; X } 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--- 1045,1109 ---- X cur_ch = id ; X nextc = KEYBOARD ; X } X+ if (processing) X+ { X+ if (nextc == FRAME_REPAINT) return ; X+ else X+ { X+ if (event_action(cur_event) == ACTION_SELECT) X+ XUngrabPointer(dpy, 0) ; X+ nextc = IGNORE_EVENT ; X+ window_bell(frame) ; X+ message(PANEL_MES, "It's not your turn.") ; X+ } X+ } X } X X X! Notify_value X! quit_proc(client, status) X! Notify_client client ; X Destroy_status status ; X { X! if (status == DESTROY_CHECKING) KILL(pid, SIGKILL) ; X! return(notify_next_destroy_func(client, status)) ; X! } X! X! X! Notify_value X! read_from_reve(client, fd) X! Notify_client client ; X! register int fd ; X! { X! struct reve_out out ; X! int bytes, sout ; X! X! if (!started) return(NOTIFY_DONE) ; X! sout = sizeof(struct reve_out) ; X! if (ioctl(fd, FIONREAD, &bytes) == 0) X { X! if (read(fd, (char *) &out, sout) > 0) X! { X! profmax = out.depth ; X! if (out.type == M_BEST) show_best(out.move, out.note) ; X! else if (out.type == M_MOVE) X! { X! set_cursor(CANVASCUR) ; X! XV_SET(frame, FRAME_BUSY, TRUE, 0) ; X! move = out.move ; X! note = out.note ; X! do_computer_move(reve_player) ; X! XV_SET(frame, FRAME_BUSY, FALSE, 0) ; X! processing = FALSE ; X! } X! else if (out.type == M_SUGGESTION) X! { X! do_suggest(reve_player, out.move, out.note, IS_ON) ; X! processing = FALSE ; X! } X! } X } X! return(NOTIFY_DONE) ; X } X X X*************** X*** 890,896 **** X--- 1113,1154 ---- X } X X X+ Panel_setting X+ reset_props(item, event) X+ Panel_item item ; X+ Event *event ; X+ { X+ int val ; X+ X+ if (dtype == XBLACK) val = CP_WHITE ; X+ else if (dtype == XWHITE) val = CP_BLACK ; X+ else if (dtype == XBOTH || dtype == XTWO) val = CP_NEITHER ; X+ XV_SET(props_computer, PANEL_VALUE, val, 0) ; X+ X+ val = ((ANIMATION & 0x1) << 0) + X+ ((DO_BESTMOVE & 0x1) << 1) + X+ ((DO_LAST & 0x1) << 2) + X+ ((SHOW_NOTES & 0x1) << 3) + X+ ((DO_NUMBER & 0x1) << 4) + X+ ((QUICKGAME & 0x1) << 5) ; X+ XV_SET(props_choices, PANEL_VALUE, val, 0) ; X+ return(PANEL_NONE) ; X+ } X+ X+ X void X+ reset_time(timeleft) X+ time_t timeleft ; X+ { X+ struct reve_in in ; X+ X+ in.type = M_TIME ; X+ in.timeleft = timeleft ; X+ WRITE(pipe_io[0][1], (char *) &in, sizeof(struct reve_in)) ; X+ } X+ X+ X+ void X set_cursor(ctype) X enum curtype ctype ; X { X*************** X*** 902,908 **** X X /*ARGSUSED*/ X void X! set_cycle(mtype, str) /* **DUMMY ROUTINE** */ X enum panel_type mtype ; X char *str ; X { X--- 1160,1167 ---- X X /*ARGSUSED*/ X void X! set_cycle(wtype, mtype, str) /* **DUMMY ROUTINE** */ X! enum win_type wtype ; X enum panel_type mtype ; X char *str ; X { X*************** X*** 915,971 **** 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--- 1174,1287 ---- X int value ; X Event *event ; X { X! if (value == DEPTH_MENU_ENTRY) X! { X! position_popup(frame, d_frame, P_RIGHT) ; X! XV_SET(d_frame, XV_SHOW, TRUE, 0) ; X! } X! else X! { X! level = value + 1 ; X! change_depth(1) ; X! XV_SET(d_text, PANEL_VALUE, 1, 0) ; X! items[(int) DIFF_CHOICE].value = level - 1 ; X! } X } X X X! Panel_setting X! set_profmax(item, event) X Panel_item item ; X Event *event ; X { X! XV_SET(d_frame, XV_SHOW, FALSE, 0) ; X! change_depth((int) xv_get(d_text, PANEL_VALUE)) ; X! level = 1 ; X! return(PANEL_NONE) ; X! } X X! X! Panel_setting X! set_props(item, event) X! Panel_item item ; X! Event *event ; X! { X! int curi, oldval, val ; X! X! if (dtype == XBLACK) oldval = CP_WHITE ; X! else if (dtype == XWHITE) oldval = CP_BLACK ; X! else if (dtype == XBOTH || dtype == XTWO) oldval = CP_NEITHER ; X! X! val = (int) xv_get(props_computer, PANEL_VALUE, 0) ; X! if (val == CP_WHITE) X { X! dtype = XBLACK ; X! play_computer = TRUE ; X! items[(int) BLACK_PLAYS].value = HUMAN ; X! items[(int) WHITE_PLAYS].value = COMPUTER ; X } X! else if (val == CP_BLACK) X { X! dtype = XWHITE ; X! play_computer = TRUE ; X! items[(int) BLACK_PLAYS].value = COMPUTER ; X! items[(int) WHITE_PLAYS].value = HUMAN ; X X! } X! else if (val == CP_NEITHER) X { X! dtype = XTWO ; X! play_computer = FALSE ; X! items[(int) BLACK_PLAYS].value = HUMAN ; X! items[(int) WHITE_PLAYS].value = HUMAN ; X } X! else if (val == CP_BOTH) X! { X! XV_SET(props_computer, PANEL_VALUE, oldval, 0) ; X! message(PANEL_MES, "Computer plays both is not implemented yet.") ; X! } X! X! val = items[(int) BLACK_PLAYS].value ; X! XV_SET(black_item, PANEL_VALUE, player_values[val], 0) ; X! val = items[(int) WHITE_PLAYS].value ; X! XV_SET(white_item, PANEL_VALUE, player_values[val], 0) ; X! X! if (next_player == BLACK) curi = items[(int) BLACK_PLAYS].value ; X! else curi = items[(int) WHITE_PLAYS].value ; X if (curi == COMPUTER) X! if ((next_player == BLACK && cmode == BLACK_START) || X! (next_player == WHITE && cmode == WHITE_START)) X computer_move(next_player) ; X+ X+ val = (int) xv_get(props_choices, PANEL_VALUE, 0) ; X+ ANIMATION = (val >> 0) & 0x1 ; X+ DO_BESTMOVE = (val >> 1) & 0x1 ; X+ DO_LAST = (val >> 2) & 0x1 ; X+ SHOW_NOTES = (val >> 3) & 0x1 ; X+ DO_NUMBER = (val >> 4) & 0x1 ; X+ QUICKGAME = (val >> 5) & 0x1 ; X+ X+ XV_SET(props_frame, XV_SHOW, FALSE, 0) ; X+ return(PANEL_NONE) ; X } X X X+ Notify_value X+ sigchldcatcher(client, pid, status, rusage) X+ Notify_client client ; X+ int pid ; X+ union wait *status ; X+ struct rusage *rusage ; X+ { X+ if (WIFEXITED(*status)) X+ { X+ notify_set_input_func(client, NOTIFY_FUNC_NULL, pipe_io[1][0]) ; X+ return(NOTIFY_DONE) ; X+ } X+ return(NOTIFY_IGNORED) ; X+ } X+ X+ X Panel_setting X start_load_save(item, event) X Panel_item item ; X*************** X*** 973,979 **** 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--- 1289,1295 ---- X { X char *label ; X X! XV_SET(ls_frame, XV_SHOW, FALSE, 0) ; 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*************** X*** 988,1004 **** 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--- 1304,1335 ---- X enum disp_type dtype ; X { X started = 1 ; X+ notify_interpose_destroy_func(frame, quit_proc) ; X xv_main_loop(frame) ; X } X X X! /*ARGSUSED*/ X! void X! write_to_reve(mtype, reve_board, player, level, reve_move, note) X! enum move_type mtype ; X! int *reve_board, player, level, *reve_move ; X! long *note ; X { X! int i ; X! struct reve_in in ; X! X! for (i = 0; i < 64; i++) in.board[i] = reve_board[i] ; X! in.player = player ; X! in.level = level ; X! in.type = mtype ; X! reve_player = player ; X! processing = TRUE ; X! WRITE(pipe_io[0][1], (char *) &in, sizeof(struct reve_in)) ; X } X X X+ /*ARGSUSED*/ X static void X xv_load_game(item, value, event) /* Callback for loading a game button. */ X Panel_item item ; X*************** X*** 1006,1017 **** 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--- 1337,1360 ---- X Event *event ; X { X position_popup(frame, ls_frame, P_RIGHT) ; X! XV_SET(ls_frame, FRAME_LABEL, "Load Game", 0) ; X! XV_SET(ls_text, PANEL_LABEL_STRING, "Load File: ", 0) ; X! XV_SET(ls_frame, XV_SHOW, TRUE, 0) ; X } X X X+ /*ARGSUSED*/ X+ static void X+ xv_new_game(item, value, event) /* Callback for starting a new game. */ X+ Panel_item item ; X+ int value ; X+ Event *event ; X+ { X+ new_game() ; X+ } X+ X+ X+ /*ARGSUSED*/ X static void X xv_save_game(item, value, event) /* Callback load saving a game button. */ X Panel_item item ; X*************** X*** 1019,1025 **** 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--- 1362,1380 ---- X Event *event ; X { X position_popup(frame, ls_frame, P_RIGHT) ; X! XV_SET(ls_frame, FRAME_LABEL, "Save Game", 0) ; X! XV_SET(ls_text, PANEL_LABEL_STRING, "Save File: ", 0) ; X! XV_SET(ls_frame, XV_SHOW, TRUE, 0) ; X! } X! X! X! /*ARGSUSED*/ X! static void X! xv_set_props(item, value, event) /* Callback props button. */ X! Panel_item item ; X! int value ; X! Event *event ; X! { X! position_popup(frame, props_frame, P_RIGHT) ; X! XV_SET(props_frame, XV_SHOW, TRUE, 0) ; X } X END_OF_FILE if test 52444 -ne `wc -c <'patches03f'`; then echo shar: \"'patches03f'\" unpacked with wrong size! fi # end of 'patches03f' fi echo shar: End of archive 9 \(of 9\). cp /dev/null ark9isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 9 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0