[comp.sources.games] v12i012: reve - an othello game, Patch4c

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

Submitted-by: Rich Burridge <rburridge@sun.COM>
Posting-number: Volume 12, Issue 12
Archive-name: reve/Patch4c
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 3 (of 4)."
# Contents:  patches04c
# Wrapped by billr@saab on Fri Dec 21 11:35:54 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patches04c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches04c'\"
else
echo shar: Extracting \"'patches04c'\" \(37317 characters\)
sed "s/^X//" >'patches04c' <<'END_OF_FILE'
X
X------- color.h -------
X*** /tmp/da06825	Tue Dec 18 10:08:17 1990
X--- color.h	Tue Dec 11 18:19:51 1990
X***************
X*** 22,45 ****
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X! #define  OTH_COLOR      "othcolor"
X! #define  OTH_COLORSIZE  8
X  
X  #define  C_WHITE    0
X! #define  C_LGREY    1
X! #define  C_LBROWN   2
X! #define  C_BEIGE    3
X! #define  C_DBROWN   4
X! #define  C_BLACK    5
X! #define  C_SPARE6   6
X! #define  C_SPARE7   7
X! 
X! #define oth_colorsetup(r, g, b) \
X!         (r)[C_WHITE] = 255 ;  (g)[C_WHITE] = 255 ;  (b)[C_WHITE] = 255 ; \
X!         (r)[C_LGREY] = 200 ;  (g)[C_LGREY] = 200 ;  (b)[C_LGREY] = 200 ; \
X!         (r)[C_LBROWN] = 200 ; (g)[C_LBROWN] = 150 ; (b)[C_LBROWN] = 100 ; \
X!         (r)[C_BEIGE] = 255 ;  (g)[C_BEIGE] = 240 ;  (b)[C_BEIGE] = 220 ; \
X!         (r)[C_DBROWN] = 185 ; (g)[C_DBROWN] = 145 ; (b)[C_DBROWN] = 100 ; \
X!         (r)[C_BLACK] = 0 ;    (g)[C_BLACK] = 0 ;    (b)[C_BLACK] = 0 ; \
X!         (r)[C_SPARE6] = 0 ;   (g)[C_SPARE6] = 0 ;   (b)[C_SPARE6] = 0 ; \
X!         (r)[C_SPARE7] = 0 ;   (g)[C_SPARE7] = 0 ;   (b)[C_SPARE7] = 0 ;
X--- 22,45 ----
X   *  (see README file), then an attempt will be made to fix them.
X   */
X  
X! #define  REVE_COLOR      "revecolor"
X! #define  REVE_COLORSIZE  8
X  
X  #define  C_WHITE    0
X! #define  C_BLACK    1
X! #define  C_PANEL    2
X! #define  C_SQUARE   3
X! #define  C_BORDER   4
X! #define  C_GRID     5
X! #define  C_TEXT     6
X! #define  C_ITEMS    7
X!  
X! #define reve_colorsetup(r, g, b) \
X!         (r)[C_WHITE]  = 255 ;  (g)[C_WHITE]  = 255 ;  (b)[C_WHITE]  = 255 ; \
X!         (r)[C_BLACK]  = 0   ;  (g)[C_BLACK]  = 0   ;  (b)[C_BLACK]  = 0   ; \
X!         (r)[C_PANEL]  = 255 ;  (g)[C_PANEL]  = 240 ;  (b)[C_PANEL]  = 220 ; \
X!         (r)[C_SQUARE] = 200 ;  (g)[C_SQUARE] = 150 ;  (b)[C_SQUARE] = 100 ; \
X!         (r)[C_BORDER] = 185 ;  (g)[C_BORDER] = 145 ;  (b)[C_BORDER] = 100 ; \
X!         (r)[C_GRID]   = 200 ;  (g)[C_GRID]   = 200 ;  (b)[C_GRID]   = 200 ; \
X!         (r)[C_TEXT]   = 0 ;    (g)[C_TEXT]   = 0 ;    (b)[C_TEXT]   = 0 ;   \
X!         (r)[C_ITEMS]  = 200 ;  (g)[C_ITEMS]  = 200 ;  (b)[C_ITEMS]  = 200 ;
X
X------- extern.h -------
X*** /tmp/da06828	Tue Dec 18 10:08:18 1990
X--- extern.h	Sun Dec 16 10:53:55 1990
X***************
X*** 32,37 ****
X--- 32,41 ----
X  extern int cury ;          /* Current mouse Y position. */
X  extern int down ;          /* Indicates is a mouse button is down. */
X  extern int first_move ;    /* Set if computer plays first move. */
X+ extern int help_height ;   /* Height of the help window. */
X+ extern int help_showing ;  /* If set, the help window is visible. */
X+ extern int help_width ;    /* Width of the help window. */
X+ extern int hfont_height ;  /* Height in pixels for help font. */
X  extern int iconic ;        /* Start as an icon if set. */
X  extern int inv_video ;     /* Set if displaying in inverse video. */
X  extern int iscolor[] ;     /* Set if this is a color screen. */
X***************
X*** 51,56 ****
X--- 55,61 ----
X  extern int nextc ;         /* Current event identifier. */
X  extern int next_player ;   /* Next player (BLACK or WHITE) to move. */
X  extern int nfont_height ;  /* Height in pixels for normal font. */
X+ extern int old_diffval ;   /* Old difficulty value (possibly restored). */
X  extern int piece_x ;       /* Current X position of moving piece. */
X  extern int piece_y ;       /* Current Y position of moving piece */
X  extern int play_computer ; /* Set if playing against the computer. */
X***************
X*** 75,80 ****
X--- 80,94 ----
X  extern int wx ;            /* Initial X position of the window. */
X  extern int wy ;            /* Initial Y position of the window. */ 
X  
X+ extern FILE *hfp ;              /* File descriptor for online help file. */
X+ 
X+ extern long help_offsets[] ;    /* Offsets into the reve help file. */
X+ 
X+ extern char *colstr[] ;    /* X resource color values. */
X+ extern int rcols[] ;       /* Red colormap values. */
X+ extern int gcols[] ;       /* Green colormap values. */
X+ extern int bcols[] ;       /* Blue colormap values. */
X+ 
X  extern time_t timeleft ;   /* Amount of time left for computer moves. */
X  extern long edges[] ;      /* Edges Stability Table */
X  extern long note ;         /* Note value for current computer move. */
X***************
X*** 84,89 ****
X--- 98,104 ----
X  extern char edgefile[] ;         /* Location of the reve edge table file. */
X  extern char gamefile[] ;         /* Name of file for load/save. */
X  extern char geometry[MAXDPY][MAXLINE] ;   /* X11 geometry information. */
X+ extern char helpfile[] ;         /* Location of the reve online help file. */
X  extern char line[] ;
X  extern char *notes_values[] ;    /* Values for cyclic notes button. */
X  extern char *player_values[] ;   /* Values for cyclic black/white item. */
X
X------- reve.h -------
X*** /tmp/da06831	Tue Dec 18 10:08:19 1990
X--- reve.h	Sun Dec 16 02:37:24 1990
X***************
X*** 63,68 ****
X--- 63,69 ----
X  #define  BGAP          10       /* Width of the gap between buttons. */
X  #define  BHEIGHT       32       /* Height of a reve button item. */
X  #define  BWIDTH        64       /* Width of a reve button item. */
X+ #define  CGAP          4        /* Size of the gap for a cycle item. */
X  #define  CHEIGHT       20       /* Height of a reve cycle item. */
X  #define  CHOICEGAP     5        /* Gap between choices in a choice item. */
X  #define  CWIDTH        32       /* Width of a reve cycle item. */
X***************
X*** 103,111 ****
X--- 104,115 ----
X  #define  LINEFEED       13
X  #define  RETURN         10
X  
X+ #define  CTL(n)        n - 96  /* Control characters. */
X  #define  ESCAPE        27      /* ASCII escape character. */
X  #define  EQUAL(a, b)   !strncmp(a, b, strlen(b))
X  #define  FOR_BOARD(i)  for (i = 0; i < 64; i++)
X+ #define  HELP_COLS     80      /* Number of columns in help window. */
X+ #define  HELP_ROWS     60      /* Number of rows in help window. */
X  #define  ICONHEIGHT    64      /* Height in pixels for reve icon. */
X  #define  ICONWIDTH     64      /* Width in pixels of reve icon. */
X  #define  INC           argc-- ; argv++ ;
X***************
X*** 117,130 ****
X  #define  MAXCURSORS    3       /* Maximum number of cursor types. */
X  #define  MAXDIFF       9       /* Number of levels of difficulty. */
X  #define  MAXDPY        2       /* Maximum possible number of displays. */
X! #define  MAXFONTS      2       /* Maximum number of font types. */
X  #define  MAXIMAGES     11      /* Maximum number of image types. */
X! #define  MAXITEMS      24      /* Number of different panel items. */
X  
X  #ifndef  MAXLINE
X! #define  MAXLINE       80      /* Length of character strings. */
X  #endif /*!MAXLINE*/
X  
X  #define  MAX_PROFMAX   60      /* Maximum search depth. */
X  #define  NIVEAUMAX     25      /* Maximum possible depth. */
X  
X--- 121,135 ----
X  #define  MAXCURSORS    3       /* Maximum number of cursor types. */
X  #define  MAXDIFF       9       /* Number of levels of difficulty. */
X  #define  MAXDPY        2       /* Maximum possible number of displays. */
X! #define  MAXFONTS      3       /* Maximum number of font types. */
X  #define  MAXIMAGES     11      /* Maximum number of image types. */
X! #define  MAXITEMS      29      /* Number of different panel items. */
X  
X  #ifndef  MAXLINE
X! #define  MAXLINE       120     /* Length of character strings. */
X  #endif /*!MAXLINE*/
X  
X+ #define  MAXPAGES      10      /* Maximum number of pages in reve help file. */
X  #define  MAX_PROFMAX   60      /* Maximum search depth. */
X  #define  NIVEAUMAX     25      /* Maximum possible depth. */
X  
X***************
X*** 150,155 ****
X--- 155,163 ----
X  #define  PROPS_WIDTH   ((NOBUTS*BWIDTH)   + ((NOBUTS-1)*BGAP)  + (2*BBORDER))
X  #define  PSIZE         40      /* Diameter of playing piece. */
X  
X+ #define  B_COLOR(c)   (iscolor[(int) cur_dpyno] ? c : C_BLACK)
X+ #define  W_COLOR(c)   (iscolor[(int) cur_dpyno] ? c : C_WHITE)
X+ 
X  #define  TICKHEIGHT    16      /* Height of the tick toggle box. */
X  #define  TICKWIDTH     16      /* Width of the tick toggle box. */
X  
X***************
X*** 157,162 ****
X--- 165,174 ----
X  #define  EDGENAME      "reve.edgetable"
X  #endif /*!EDGENAME*/
X  
X+ #ifndef  HELPNAME
X+ #define  HELPNAME      "reve.help"
X+ #endif /*!HELPNAME*/
X+ 
X  #ifndef  INT_SIGNAL
X  #define  SIGRET        void
X  #else
X***************
X*** 191,197 ****
X  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
X  #define  MOUSE_MOVING     110    /* Mouse is moving. */
X  #define  PROPS_REPAINT    111    /* Property window needs repainting. */
X! #define  IGNORE_EVENT     112    /* No interest in this event. */
X  
X  /* Batch, last move, locking or show all direction (ON or OFF). */
X  enum bltype   { IS_OFF, IS_ON } ;
X--- 203,210 ----
X  #define  KEYBOARD         109    /* Keyboard character has been pressed. */
X  #define  MOUSE_MOVING     110    /* Mouse is moving. */
X  #define  PROPS_REPAINT    111    /* Property window needs repainting. */
X! #define  HELP_REPAINT     112    /* Help window needs repainting. */
X! #define  IGNORE_EVENT     113    /* No interest in this event. */
X  
X  /* Batch, last move, locking or show all direction (ON or OFF). */
X  enum bltype   { IS_OFF, IS_ON } ;
X***************
X*** 207,213 ****
X  
X  enum dpy_type { DPY1, DPY2 } ;                    /* Possible dpy types. */
X  
X! enum font_type { NFONT, BFONT } ;                 /* Text font definitions. */
X  
X  enum gr_type { GSUNVIEW, GTTY, GX11, GXVIEW } ;   /* Graphical systems. */
X  
X--- 220,226 ----
X  
X  enum dpy_type { DPY1, DPY2 } ;                    /* Possible dpy types. */
X  
X! enum font_type { BFONT, HFONT, NFONT} ;           /* Text font definitions. */
X  
X  enum gr_type { GSUNVIEW, GTTY, GX11, GXVIEW } ;   /* Graphical systems. */
X  
X***************
X*** 223,237 ****
X  enum move_type { M_BEST, M_MOVE, M_PROFMAX, M_SUGGESTION, M_TIME } ;
X  
X  /* Different panel items. */
X! enum panel_type { LOAD_BUT,    MOVES_BUT,    NEW_GAME_BUT, SAVE_BUT,
X!                   SUGGEST_BUT, UNDO_BUT,     PROPS_BUT,    CANCEL_BUT,
X                    QUIT_BUT,    BLACK_PLAYS,  WHITE_PLAYS,  PANEL_MES,
X                    EVAL_MES,    SCORE_MES,    TURN_MES,     COMP_CHOICE,
X                    DIFF_CHOICE, MAX_DEPTH,    OPT_ANIM,     OPT_BEST,
X!                   OPT_LAST,    OPT_EVAL,     OPT_NUM,      OPT_FLIP } ;
X  
X  enum res_type { R_ANIMATE, R_BESTMOVE, R_DIFFICULTY, R_LAST,  /* Resources. */
X!                 R_LOG,     R_NOTES,    R_NUMBER,     R_QUICK } ;
X  
X  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
X  
X--- 236,254 ----
X  enum move_type { M_BEST, M_MOVE, M_PROFMAX, M_SUGGESTION, M_TIME } ;
X  
X  /* Different panel items. */
X! enum panel_type { LOAD_BUT,    MOVES_BUT,    NEW_GAME_BUT, HELP_BUT,
X!                   REDO_BUT,    PROPS_BUT,    SAVE_BUT,     SUGGEST_BUT,
X!                   EDIT_BUT,    STOP_BUT,     UNDO_BUT,     CANCEL_BUT,
X                    QUIT_BUT,    BLACK_PLAYS,  WHITE_PLAYS,  PANEL_MES,
X                    EVAL_MES,    SCORE_MES,    TURN_MES,     COMP_CHOICE,
X                    DIFF_CHOICE, MAX_DEPTH,    OPT_ANIM,     OPT_BEST,
X!                   OPT_LAST,    OPT_EVAL,     OPT_NUM,      OPT_FLIP,
X!                   HELP_PAGE } ;
X  
X  enum res_type { R_ANIMATE, R_BESTMOVE, R_DIFFICULTY, R_LAST,  /* Resources. */
X!                 R_LOG,     R_NOTES,    R_NUMBER,     R_QUICK,
X!                 R_PANELC,  R_BOARDC,   R_BOARDBC,    R_GRIDC,
X!                 R_TEXTC,   R_ITEMC,    R_PROPS,      R_HELP } ;
X  
X  enum set_type { INCREMENT, DECREMENT, NONE } ;   /* Cycle directions. */
X  
X***************
X*** 239,247 ****
X  
X  enum playtype { PLAY_BLACK, PLAY_WHITE } ; /* What the computer is playing. */
X  
X! enum win_type { W_MAIN, W_PROPS } ;        /* Window types. */
X  
X! extern char *getenv() ;
X  extern void exit() ;
X  
X  typedef struct {
X--- 256,264 ----
X  
X  enum playtype { PLAY_BLACK, PLAY_WHITE } ; /* What the computer is playing. */
X  
X! enum win_type { W_MAIN, W_HELP, W_PROPS } ;      /* Window types. */
X  
X! extern char *getenv(), *malloc() ;
X  extern void exit() ;
X  
X  typedef struct {
X***************
X*** 288,305 ****
X      int depth ;
X    } ;
X  
X  char *getenv(), *index() ;
X  char *get_resource() ;
X  
X  void animate_move(),       batch(),              check_button_down() ;
X  void check_choice_down(),  check_cycle_down(),   check_item_down() ;
X! void check_item_up(),      check_toggle_down(),  close_frame() ;
X! void color_area() ;
X  void computer_move(),      computer_plays(),     connect_to_reve() ;
X! void create_menu(),        destroy_frame() ;
X! void do_action(),          do_computer_move(),   do_cycle_key() ;
X! void do_key_move(),        do_move(),            do_props() ;
X! void do_selection(),       do_suggest(),         domove() ;
X  void done(),               draw_button(),        draw_choice() ;
X  void draw_cycle(),         draw_cycle_item(),    draw_image() ;
X  void draw_line(),          draw_outline(),       draw_piece() ;
X--- 305,325 ----
X      int depth ;
X    } ;
X  
X+ FILE *find_file() ;
X+ 
X  char *getenv(), *index() ;
X  char *get_resource() ;
X  
X  void animate_move(),       batch(),              check_button_down() ;
X  void check_choice_down(),  check_cycle_down(),   check_item_down() ;
X! void check_item_up(),      check_toggle_down(),  color_area() ;
X  void computer_move(),      computer_plays(),     connect_to_reve() ;
X! void create_menu(),        destroy_frame(),      display_help() ;
X! void do_action() ;
X! void do_computer_move(),   do_edit(),            do_help() ;
X! void do_key(),             do_key_move(),        do_move() ;
X! void do_props(),           do_selection() ;
X! void do_stop(),            do_suggest(),         domove() ;
X  void done(),               draw_button(),        draw_choice() ;
X  void draw_cycle(),         draw_cycle_item(),    draw_image() ;
X  void draw_line(),          draw_outline(),       draw_piece() ;
X***************
X*** 309,329 ****
X  void get_options(),        get_xy(),             getparam() ;
X  void handle_board_event(), handle_event(),       handle_item() ;
X  void handle_key(),         init_canvas(),        init_edge_table() ;
X! void init_fonts(),         initboard(),          initialise() ;
X! void load_colors(),        load_game() ;
X! void load_resources(),     lock_screen() ;
X! void make_canvas(),        make_frame(),         make_icon() ;
X  void make_message(),       make_move(),          make_panel() ;
X  void message(),            nap_upto(),           new_game() ;
X! void open_frame(),         paint_prop_sheet(),   position_popup() ;
X! void process_event(),      quit() ;
X! void read_resources(),     remove_textfield(),   reset_time() ;
X  void save_game(),          set_computer(),       set_cursor() ;
X  void set_cycle(),          set_display_types(),  set_eval() ;
X! void set_option(),         set_score(),          set_timer() ;
X  void set_turn(),           show_all(),           show_all_moves() ;
X  void show_best(),          show_last(),          show_number() ;
X! void show_suggestion(),    start_tool() ;
X! void suggest(),            think(),              undo() ;
X  void update_board_image(), usage(),              who_wins() ;
X  void write_to_reve() ;
X--- 329,352 ----
X  void get_options(),        get_xy(),             getparam() ;
X  void handle_board_event(), handle_event(),       handle_item() ;
X  void handle_key(),         init_canvas(),        init_edge_table() ;
X! void init_help_file(),     init_fonts(),         initboard() ;
X! void initialise(),         load_colors(),        load_game() ;
X! void load_resources(),     lock_screen(),        make_canvas() ;
X! void make_frame(),         make_help_window(),   make_icon() ;
X  void make_message(),       make_move(),          make_panel() ;
X  void message(),            nap_upto(),           new_game() ;
X! void paint_help(),         paint_help_text(),    paint_prop_sheet() ;
X! void position_popup() ;
X! void process_event(),      quit(),               read_resources() ;
X! void read_str(),           redo(),               redo_move() ;
X! void remove_textfield(),   reset_time() ;
X  void save_game(),          set_computer(),       set_cursor() ;
X  void set_cycle(),          set_display_types(),  set_eval() ;
X! void set_frame(),          set_option() ;
X! void set_score(),          set_timer() ;
X  void set_turn(),           show_all(),           show_all_moves() ;
X  void show_best(),          show_last(),          show_number() ;
X! void show_suggestion(),    start_tool(),         suggest() ;
X! void think(),              undo(),               undo_move() ;
X  void update_board_image(), usage(),              who_wins() ;
X  void write_to_reve() ;
X
X------- Imakefile -------
X*** /tmp/da06834	Tue Dec 18 10:08:19 1990
X--- Imakefile	Wed Dec 12 16:22:49 1990
X***************
X*** 58,64 ****
X       
X  /*  Compilation flags and standard macro definitions.  */
X  
X! SYS_LIBRARIES	= $(XLIB)     
X  CDEFS		= $(NOSELECT) $(NO_USLEEP) $(EDGENAME) $(SELTYPE) \
X  		  $(SIGRET)
X  DEFINES         = $(CDEFS) -DX11
X--- 58,65 ----
X       
X  /*  Compilation flags and standard macro definitions.  */
X  
X! X11LIBS		= $(XLIB)     
X! TTYLIBS		= -ltermcap
X  CDEFS		= $(NOSELECT) $(NO_USLEEP) $(EDGENAME) $(SELTYPE) \
X  		  $(SIGRET)
X  DEFINES         = $(CDEFS) -DX11
X***************
X*** 72,85 ****
X  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
X  
X       
X! SRCS		= boardstuff.c events.c items.c makemove.c main.c \
X! 		  procs.c rev_eval.c rev_ip.c rev_iycp.c x11.c
X! OBJS		= boardstuff.o events.o items.o makemove.o main.o \
X! 		  procs.o rev_eval.o rev_ip.o rev_iycp.o x11.o
X  
X! ComplexProgramTarget(reve)
X  MakeDirectories(install,$(USRLIBDIR)$(PATHSEP)reve)
X  InstallNonExec($(ETABLE),$(USRLIBDIR)$(PATHSEP)reve)
X  
X  install:: install.man
X  
X--- 73,99 ----
X  EDGENAME        = -DEDGENAME=\"$(EDGENAMEFILE)\"
X  
X       
X! REVESRCS        = rev_eval.c rev_ip.c rev_iycp.c
X! STDSRCS         = boardstuff.c events.c makemove.c main.c procs.c
X! REVEOBJS        = rev_eval.o rev_ip.o rev_iycp.o
X! STDOBJS         = boardstuff.o events.o makemove.o main.o procs.o
X  
X! SRCS1		= $(STDSRCS) $(REVESRCS) common.c items.c x11.c
X! OBJS1		= $(STDOBJS) $(REVEOBJS) common.o items.o x11.o
X! SRCS2		= $(STDSRCS) $(REVESRCS) common.c items.c tty.c
X! OBJS2		= $(STDOBJS) $(REVEOBJS) common.o items.o tty.o
X! 
X! 
X! PROGRAMS	= reve
X! 
X! ComplexProgramTarget_1(reve, $(X11LIBS), /**/)
X  MakeDirectories(install,$(USRLIBDIR)$(PATHSEP)reve)
X  InstallNonExec($(ETABLE),$(USRLIBDIR)$(PATHSEP)reve)
X+ 
X+ tty: tty_reve
X+ 	-cp tty_reve reve
X+ 
X+ NormalProgramTarget(tty_reve, $(OBJS2), /**/, /**/, $(TTYLIBS))
X  
X  install:: install.man
X  
X
X------- reve_proc.c -------
X*** /tmp/da06837	Tue Dec 18 10:08:20 1990
X--- reve_proc.c	Sun Dec 16 11:09:45 1990
X***************
X*** 31,36 ****
X--- 31,38 ----
X  
X  int saveres = 0 ;            /* If set, save computer results to log file. */
X  
X+ char edgefile[MAXLINE] ;     /* Location of the reve edge table file. */
X+ 
X  /* REVE global variables */
X  
X  int damier[NIVEAUMAX][64] ;  /* Boards at different depth level */
X
X------- common.c -------
X*** /tmp/da06840	Tue Dec 18 10:08:21 1990
X--- common.c	Sun Dec 16 11:01:07 1990
X***************
X*** 25,43 ****
X  #include "reve.h"
X  #include "extern.h"
X  
X! void
X! init_edge_table(edgefile)     /* Load reve edge table values. */
X! char *edgefile ;
X  {
X!   char buf[MAXLINE], *getenv(), name[MAXLINE], *paths, *ptr ;
X!   int i, line ;
X    FILE *fp = NULL ;
X  
X!   i = 0 ;
X!   if ((fp = fopen(edgefile, "r")) == NULL)
X      {
X        paths = getenv("PATH") ;
X!       if ((ptr = paths) && edgefile[0] != '/')
X          for (;;)
X            if (*ptr == ':' || *ptr == 0)
X              {
X--- 25,42 ----
X  #include "reve.h"
X  #include "extern.h"
X  
X! FILE *
X! find_file(filename)
X! char *filename ;
X  {
X!   char name[MAXLINE], *paths, *ptr ;
X!   int i = 0 ;
X    FILE *fp = NULL ;
X  
X!   if ((fp = fopen(filename, "r")) == NULL)
X      {
X        paths = getenv("PATH") ;
X!       if ((ptr = paths) && filename[0] != '/')
X          for (;;)
X            if (*ptr == ':' || *ptr == 0)
X              {
X***************
X*** 52,59 ****
X              }
X            else name[i++] = *ptr++ ;
X      }
X   
X!   if (fp == NULL)
X      {
X        FPRINTF(stderr, "Cannot open Edge Stability Table file\n") ;
X        exit(1) ;
X--- 51,69 ----
X              }
X            else name[i++] = *ptr++ ;
X      }
X+   return(fp) ;
X+ }
X+ 
X+ 
X+ void
X+ init_edge_table(edgefile)     /* Load reve edge table values. */
X+ char *edgefile ;
X+ {
X+   char buf[MAXLINE], *ptr ;
X+   int i, line ;
X+   FILE *fp = NULL ;
X   
X!   if ((fp = find_file(edgefile)) == NULL)
X      {
X        FPRINTF(stderr, "Cannot open Edge Stability Table file\n") ;
X        exit(1) ;
X
X------- boardstuff.c -------
X*** /tmp/da06843	Tue Dec 18 10:08:21 1990
X--- boardstuff.c	Tue Dec 11 19:53:46 1990
X***************
X*** 235,242 ****
X  {
X    int color, x, y ;
X  
X!   if (iscolor[(int) cur_dpyno]) color = (state == IS_ON) ? C_BLACK : C_LBROWN ;
X!   else                          color = (state == IS_ON) ? C_BLACK : C_WHITE ;
X  
X    x = (move & 7)  * CELL_SIZE + BBORDER ;
X    y = (move >> 3) * CELL_SIZE + BBORDER ;
X--- 235,242 ----
X  {
X    int color, x, y ;
X  
X!   if (state == IS_ON) color = C_BLACK ;
X!   else                color = W_COLOR(C_SQUARE) ;
X  
X    x = (move & 7)  * CELL_SIZE + BBORDER ;
X    y = (move >> 3) * CELL_SIZE + BBORDER ;
X***************
X*** 513,519 ****
X  show_all(state)
X  enum bltype state ;
X  {
X!   int color, d, i, x, y ;
X  
X    d = (int) cur_dpyno ;
X    batch(IS_ON) ;
X--- 513,519 ----
X  show_all(state)
X  enum bltype state ;
X  {
X!   int d, i, x, y ;
X  
X    d = (int) cur_dpyno ;
X    batch(IS_ON) ;
X***************
X*** 547,554 ****
X              s_all.square[i] = FREE ;
X              x = (i & 7)  * CELL_SIZE + BBORDER + 1 ;
X              y = (i >> 3) * CELL_SIZE + BBORDER + 1 ;  
X!             color = (iscolor[d]) ? C_LBROWN : C_WHITE ;
X!             color_area(W_MAIN, x, CY + y, CELL_SIZE - 2, CELL_SIZE - 2, color) ;
X            }
X      }    
X    batch(IS_OFF) ;
X--- 547,554 ----
X              s_all.square[i] = FREE ;
X              x = (i & 7)  * CELL_SIZE + BBORDER + 1 ;
X              y = (i >> 3) * CELL_SIZE + BBORDER + 1 ;  
X!             color_area(W_MAIN, x, CY + y,
X!                        CELL_SIZE - 2, CELL_SIZE - 2, W_COLOR(C_SQUARE)) ;
X            }
X      }    
X    batch(IS_OFF) ;
X***************
X*** 602,608 ****
X    else if (board.square[move] == WHITE)
X      color = (state == IS_ON) ? C_BLACK : C_WHITE ;
X    else if (iscolor[(int) cur_dpyno])
X!     color = (state == IS_ON) ? C_BLACK : C_LBROWN ;
X    else
X      color = (state == IS_ON) ? C_BLACK : C_WHITE ;
X  
X--- 602,608 ----
X    else if (board.square[move] == WHITE)
X      color = (state == IS_ON) ? C_BLACK : C_WHITE ;
X    else if (iscolor[(int) cur_dpyno])
X!     color = (state == IS_ON) ? C_BLACK : C_SQUARE ;
X    else
X      color = (state == IS_ON) ? C_BLACK : C_WHITE ;
X  
X***************
X*** 627,638 ****
X    if (suggestion != -1)
X      {
X        rop = RCLR ;
X-       color = (iscolor[(int) cur_dpyno]) ? C_LBROWN : C_WHITE ;
X        if (iscolor[(int) cur_dpyno]) rop = RSRC ;
X        draw_line(W_MAIN, suggest_x-5, CY+suggest_y-5,
X!                         suggest_x+5, CY+suggest_y+5, rop, color) ;
X        draw_line(W_MAIN, suggest_x-5, CY+suggest_y+5,
X!                         suggest_x+5, CY+suggest_y-5, rop, color) ;
X        suggestion = -1 ;
X      }
X  }
X--- 627,637 ----
X    if (suggestion != -1)
X      {
X        rop = RCLR ;
X        if (iscolor[(int) cur_dpyno]) rop = RSRC ;
X        draw_line(W_MAIN, suggest_x-5, CY+suggest_y-5,
X!                         suggest_x+5, CY+suggest_y+5, rop, W_COLOR(C_SQUARE)) ;
X        draw_line(W_MAIN, suggest_x-5, CY+suggest_y+5,
X!                         suggest_x+5, CY+suggest_y-5, rop, W_COLOR(C_SQUARE)) ;
X        suggestion = -1 ;
X      }
X  }
X
X------- events.c -------
X*** /tmp/da06846	Tue Dec 18 10:08:22 1990
X--- events.c	Sun Dec 16 02:47:52 1990
X***************
X*** 37,42 ****
X--- 37,45 ----
X    n = (int) item ;
X    if (items[n].x == -1) return ;
X    if (items[n].wtype != curwin) return ;
X+   if (tinput && (n == (int) SUGGEST_BUT || n == (int) EDIT_BUT ||
X+                  n == (int) STOP_BUT    || n == (int) UNDO_BUT))
X+     return ;
X    if ((curx >  items[n].x) && (curx < (items[n].x + items[n].width)) &&
X        (cury >  items[n].y) && (cury < (items[n].y + items[n].height)))
X      {
X***************
X*** 43,49 ****
X        down = nextc ;
X        itemno = n ;
X        but_inverted = itemno ;
X!       draw_button(W_MAIN, (enum panel_type) itemno, C_LGREY, BUT_INVERT) ;
X      }
X  }
X  
X--- 46,52 ----
X        down = nextc ;
X        itemno = n ;
X        but_inverted = itemno ;
X!       draw_button(W_MAIN, (enum panel_type) itemno, C_ITEMS, BUT_INVERT) ;
X      }
X  }
X  
X***************
X*** 81,87 ****
X        direction = INCREMENT ;
X        down = nextc ;
X        itemno = n ;
X!       draw_cycle(curwin, (enum panel_type) n, C_LGREY, CY_LINVERT) ;
X      }
X    else if ((curx > ix) && (curx < (ix + CWIDTH)) &&
X             (cury > items[n].y) && (cury < (items[n].y + CHEIGHT)) &&
X--- 84,90 ----
X        direction = INCREMENT ;
X        down = nextc ;
X        itemno = n ;
X!       draw_cycle(curwin, (enum panel_type) n, C_ITEMS, CY_LINVERT) ;
X      }
X    else if ((curx > ix) && (curx < (ix + CWIDTH)) &&
X             (cury > items[n].y) && (cury < (items[n].y + CHEIGHT)) &&
X***************
X*** 90,96 ****
X        direction = DECREMENT ;
X        down = nextc ;
X        itemno = n ;
X!       draw_cycle(curwin, (enum panel_type) n, C_LGREY, CY_RINVERT) ;
X      }
X  }
X  
X--- 93,99 ----
X        direction = DECREMENT ;
X        down = nextc ;
X        itemno = n ;
X!       draw_cycle(curwin, (enum panel_type) n, C_ITEMS, CY_RINVERT) ;
X      }
X  }
X  
X***************
X*** 118,126 ****
X  void
X  check_item_up()
X  {
X-   int color, d ;
X- 
X-   d = (int) cur_dpyno ;
X    if ((nextc == LEFT_UP   && down == LEFT_DOWN)   ||
X        (nextc == MIDDLE_UP && down == MIDDLE_DOWN) ||
X        (nextc == RIGHT_UP  && down == RIGHT_DOWN))
X--- 121,126 ----
X***************
X*** 133,151 ****
X            case P_BUTTON : if (items[itemno].x != -1)
X                              draw_button(items[itemno].wtype,
X                                          (enum panel_type) itemno,
X!                                         C_LGREY, BUT_NORMAL) ;
X                            break ;
X!           case P_CHOICE : color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X!                           draw_choice(items[itemno].wtype,
X!                                       (enum panel_type) itemno, color) ;
X                            break ;
X            case P_CYCLE  : draw_cycle(items[itemno].wtype,
X                                       (enum panel_type) itemno,
X!                                      C_LGREY, CY_NORMAL) ;
X                            break ;
X!           case P_TOGGLE : color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X!                           draw_toggle(items[itemno].wtype,
X!                                       (enum panel_type) itemno, color) ;
X          }
X      } 
X  }
X--- 133,151 ----
X            case P_BUTTON : if (items[itemno].x != -1)
X                              draw_button(items[itemno].wtype,
X                                          (enum panel_type) itemno,
X!                                         W_COLOR(C_ITEMS), BUT_NORMAL) ;
X                            break ;
X!           case P_CHOICE : draw_choice(items[itemno].wtype,
X!                                       (enum panel_type) itemno,
X!                                       W_COLOR(C_PANEL)) ;
X                            break ;
X            case P_CYCLE  : draw_cycle(items[itemno].wtype,
X                                       (enum panel_type) itemno,
X!                                      W_COLOR(C_ITEMS), CY_NORMAL) ;
X                            break ;
X!           case P_TOGGLE : draw_toggle(items[itemno].wtype,
X!                                       (enum panel_type) itemno,
X!                                       W_COLOR(C_PANEL)) ;
X          }
X      } 
X  }
X***************
X*** 218,236 ****
X  
X  
X  void
X! do_cycle_key(item, ch)
X! enum panel_type item ;
X! int ch ;
X  {
X!   int color, d, maxw, val ;
X  
X!   d = (int) cur_dpyno ;
X!   color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X    if (!validkey)
X      {
X        validkey = cur_ch ;
X!       if (item == OPT_EVAL) message(PANEL_MES, "Notes?") ;
X!       else message(PANEL_MES, items[(int) item].label) ;
X      }
X    else
X      {
X--- 218,240 ----
X  
X  
X  void
X! do_key(item, ch)
X! int item, ch ;
X  {
X!   int color, maxw, val ;
X  
X!   color = W_COLOR(C_PANEL) ;
X    if (!validkey)
X      {
X        validkey = cur_ch ;
X!       switch (item)
X!         {
X!           case 'C' : message(PANEL_MES, items[(int) COMP_CHOICE].label) ;
X!                      break ;
X!           case 'D' : message(PANEL_MES, items[(int) DIFF_CHOICE].label) ;
X!                      break ;
X!           case 'O' : message(PANEL_MES, "Option?") ;
X!         }
X      }
X    else
X      {
X***************
X*** 237,290 ****
X        val = -1 ;
X        switch (item)
X          {
X!           case COMP_CHOICE : switch (ch)
X!                                {
X!                                  case 'a' :                  /* All (both). */
X!                                  case 'A' : val = CP_BOTH ;
X!                                             break ;
X!                                  case 'b' :                  /* Black. */
X!                                  case 'B' : val = CP_BLACK ;
X!                                             break ;
X!                                  case 'n' :                  /* Neither. */
X!                                  case 'N' : val = CP_NEITHER ;
X!                                             break ;
X!                                  case 'w' :                  /* White. */
X!                                  case 'W' : val = CP_WHITE ;
X!                                             break ;
X!                                  default  : return ;
X!                                }
X!                              maxw = items[(int) item].width /
X!                                     items[(int) item].nopts ;
X!                              curx = items[(int) item].x + (maxw * val) ;
X!                              itemno = (int) item ;
X!                              items[(int) item].value = val ;
X!                              draw_choice(W_PROPS, item, color) ;
X!                              break ;
X!           case DIFF_CHOICE : if (ch >= '1' && ch <= '9') val = ch - '1' ;
X!                              items[(int) item].value = val ;
X!                              draw_choice(W_PROPS, item, color) ;
X!                              break ;
X!           case OPT_EVAL    : color = (iscolor[d]) ? C_BEIGE : C_WHITE ;
X!                              switch (ch)
X!                                {
X!                                  case 'n' :
X!                                  case 'N' : val = 0 ;
X!                                             break ;
X!                                  case 'y' :
X!                                  case 'Y' : val = 1 ;
X!                                             break ;
X!                                  default  : return ;
X!                                }
X!                              items[(int) item].value = val ;
X!                              draw_toggle(W_PROPS, OPT_EVAL, color) ;
X          }
X        if (val != -1)
X          {
X            validkey = 0 ;
X            message(PANEL_MES, "") ;
X!           items[(int) item].value = item_value = val ;
X            direction = NONE ;
X!           (*items[(int) item].func)() ;
X          }
X      }
X  }
X--- 241,315 ----
X        val = -1 ;
X        switch (item)
X          {
X!           case 'C' : itemno = (int) COMP_CHOICE ;
X!                      switch (ch)
X!                        {
X!                          case 'a' :                  /* All (both). */
X!                          case 'A' : val = CP_BOTH ;
X!                                     break ;
X!                          case 'b' :                  /* Black. */
X!                          case 'B' : val = CP_BLACK ;
X!                                     break ;
X!                          case 'n' :                  /* Neither. */
X!                          case 'N' : val = CP_NEITHER ;
X!                                     break ;
X!                          case 'w' :                  /* White. */
X!                          case 'W' : val = CP_WHITE ;
X!                                     break ;
X!                          default  : return ;
X!                        }
X!                      maxw = items[itemno].width / items[itemno].nopts ;
X!                      curx = items[itemno].x + (maxw * val) ;
X!                      items[itemno].value = val ;
X!                      break ;
X! 
X!           case 'D' : itemno = (int) DIFF_CHOICE ;
X!                      if (ch >= '1' && ch <= '9') val = ch - '1' ;
X!                      maxw = items[itemno].width / items[itemno].nopts ;
X!                      curx = items[itemno].x + (maxw * val) ;
X!                      items[itemno].value = val ;
X!                      break ;
X! 
X!           case 'O' : switch (ch)
X!                        {
X!                          case 'a' :
X!                          case 'A' : itemno = (int) OPT_ANIM ;
X!                                     break ;
X!                          case 'b' :
X!                          case 'B' : itemno = (int) OPT_BEST ;
X!                                     break ;
X!                          case 'l' :
X!                          case 'L' : itemno = (int) OPT_LAST ;
X!                                     break ;
X!                          case 'e' :
X!                          case 'E' : itemno = (int) OPT_EVAL ;
X!                                     break ;
X!                          case 'n' :
X!                          case 'N' : itemno = (int) OPT_NUM ;
X!                                     break ;
X!                          case 'f' :
X!                          case 'F' : itemno = (int) OPT_FLIP ;
X!                                     break ;
X!                          default  : return ;
X!                        }
X!                      val = items[itemno].value ;
X          }
X        if (val != -1)
X          {
X            validkey = 0 ;
X            message(PANEL_MES, "") ;
X!           items[itemno].value = item_value = val ;
X            direction = NONE ;
X!           (*items[itemno].func)() ;
X! 
X!           switch (item)
X!             {
X!               case 'C' : draw_choice(W_PROPS, (enum panel_type) itemno, color) ;
X!                          break ;
X!               case 'D' : draw_choice(W_PROPS, (enum panel_type) itemno, color) ;
X!                          break ;
X!               case 'O' : draw_toggle(W_PROPS, (enum panel_type) itemno, color) ;
X!             }
X          }
X      }
X  }
X***************
X*** 342,352 ****
X    process_event() ;
X  
X         if (nextc == FRAME_REPAINT) init_canvas() ;
X    else if (nextc == PROPS_REPAINT) paint_prop_sheet() ;
X    else if (nextc == KEYBOARD)      handle_key() ;
X    else if (nextc == EXIT_WINDOW && but_inverted != -1)
X      {
X!       draw_button(W_MAIN, (enum panel_type) but_inverted, C_LGREY, BUT_NORMAL) ;
X        but_inverted = -1 ;
X        down = 0 ;
X      }
X--- 367,378 ----
X    process_event() ;
X  
X         if (nextc == FRAME_REPAINT) init_canvas() ;
X+   else if (nextc == HELP_REPAINT)  paint_help() ;
X    else if (nextc == PROPS_REPAINT) paint_prop_sheet() ;
X    else if (nextc == KEYBOARD)      handle_key() ;
X    else if (nextc == EXIT_WINDOW && but_inverted != -1)
X      {
X!       draw_button(W_MAIN, (enum panel_type) but_inverted, C_ITEMS, BUT_NORMAL) ;
X        but_inverted = -1 ;
X        down = 0 ;
X      }
X***************
X*** 388,400 ****
X      }
X    switch (cur_ch)
X      {
X!       case 'C' : do_cycle_key(COMP_CHOICE, nextc) ;    /* Cycle items. */
X                   break ;
X-       case 'D' : do_cycle_key(DIFF_CHOICE, nextc) ;
X-                  break ;
X-       case 'N' : do_cycle_key(OPT_EVAL,    nextc) ;
X-                  break ;
X  
X        case 'M' : show_all_moves() ;                    /* Button items. */
X                   break ;
X        case 'L' : curx = 0 ;
X--- 414,426 ----
X      }
X    switch (cur_ch)
X      {
X!       case 'C' :                                       /* Computer choice. */
X!       case 'D' :                                       /* Difficulty. */
X!       case 'O' : do_key(cur_ch, nextc) ;               /* Options. */
X                   break ;
X  
X+       case 'H' : do_help() ;
X+                  break ;
X        case 'M' : show_all_moves() ;                    /* Button items. */
X                   break ;
X        case 'L' : curx = 0 ;
X***************
X*** 402,407 ****
X--- 428,435 ----
X                   break ;
X        case 'n' : new_game() ;
X                   break ;
X+       case 'r' : redo() ;
X+                  break ;
X        case 'S' : curx = BBORDER + (2*(BWIDTH+BGAP)) ;
X                   draw_textfield() ;
X                   break ;
X***************
X*** 411,416 ****
X--- 439,448 ----
X                   break ;
X        case 'p' : do_props() ;
X                   break ;
X+ 
X+       case CTL('l') : init_canvas() ;
X+                       paint_prop_sheet() ;
X+                       break ;
X  
X        case 'q' : destroy_frame() ;
X                   exit(0) ;
X
END_OF_FILE
if test 37317 -ne `wc -c <'patches04c'`; then
    echo shar: \"'patches04c'\" unpacked with wrong size!
fi
# end of 'patches04c'
fi
echo shar: End of archive 3 \(of 4\).
cp /dev/null ark3isdone
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