diff -c -r cgoban-1.9.14/src/cgoban.c cgoban-1.9.14.z/src/cgoban.c
*** cgoban-1.9.14/src/cgoban.c	Tue Dec 17 15:46:56 2002
--- cgoban-1.9.14.z/src/cgoban.c	Fri Apr 16 06:53:10 2004
***************
*** 136,144 ****
      {"config.y", "", NULL, 0, NULL},
      {"config.h", "0.70710678", NULL, 0, NULL},
      {"gmp.WOption", "0", NULL, 0, checkGmpOption},
!     {"gmp.BOption", "0", NULL, 0, checkGmpOption},
!     {"gmp.WProgram", "/usr/bin/gnugo --mode gmp --quiet", NULL, 0, NULL},
!     {"gmp.BProgram", "/usr/bin/gnugo --mode gmp --quiet", NULL, 0, NULL},
      {"gmp.WDevice", "/dev/cua0", NULL, 0, NULL},
      {"gmp.BDevice", "/dev/cua1", NULL, 0, NULL},
      {"gmp.machine", "localhost", NULL, 0, NULL},
--- 136,144 ----
      {"config.y", "", NULL, 0, NULL},
      {"config.h", "0.70710678", NULL, 0, NULL},
      {"gmp.WOption", "0", NULL, 0, checkGmpOption},
!     {"gmp.BOption", "2", NULL, 0, checkGmpOption},
!     {"gmp.WProgram", "/usr/local/bin/gnugo --mode gmp --quiet", NULL, 0, NULL},
!     {"gmp.BProgram", "/usr/local/bin/gnugo --mode gmp --quiet", NULL, 0, NULL},
      {"gmp.WDevice", "/dev/cua0", NULL, 0, NULL},
      {"gmp.BDevice", "/dev/cua1", NULL, 0, NULL},
      {"gmp.machine", "localhost", NULL, 0, NULL},
diff -c -r cgoban-1.9.14/src/goban.c cgoban-1.9.14.z/src/goban.c
*** cgoban-1.9.14/src/goban.c	Wed Feb 27 20:34:35 2002
--- cgoban-1.9.14.z/src/goban.c	Fri Apr 16 06:50:51 2004
***************
*** 65,75 ****
  /*
   * This is an ugly kludge.
   */
! #define  WIN_W(fontH, bw)  \
    (fontH*3+bw*2 + fontH*12+bw*5 +  \
     (fontH*2+bw)*12+fontH*2+bw*6)
  
- 
  Goban  *goban_create(Cgoban *cg, const GobanActions *actions,void *packet,
  		     GoGame *game, const char *clpName, const char *title)  {
    static ButKey  rewKeys[] = {{XK_Home, 0,0}, {0,0,0}};
--- 65,74 ----
  /*
   * This is an ugly kludge.
   */
! #define  WIN_W(fontH, bw) \
    (fontH*3+bw*2 + fontH*12+bw*5 +  \
     (fontH*2+bw)*12+fontH*2+bw*6)
  
  Goban  *goban_create(Cgoban *cg, const GobanActions *actions,void *packet,
  		     GoGame *game, const char *clpName, const char *title)  {
    static ButKey  rewKeys[] = {{XK_Home, 0,0}, {0,0,0}};
***************
*** 78,83 ****
--- 77,83 ----
    static ButKey  ffKeys[] = {{XK_End, 0,0}, {0,0,0}};
    Goban  *g;
    int  winSize, i;
+   int  winSizey;
    GoStone  s;
    GobanPlayerInfo  *pi;
    Str  clpStrs;
***************
*** 109,121 ****
    str_print(&clpStrs, "%s.y", clpName);
    g->clpY = clp_lookup(cg->clp, str_chars(&clpStrs));
    str_deinit(&clpStrs);
!   winSize = WIN_W(cg->fontH, butEnv_stdBw(cg->env));
!   
    g->win = butWin_iCreate(g, cg->env, title,
! 			  (int)(winSize * clpEntry_getDouble(g->bPropW) + 0.5),
! 			  (int)(winSize * clpEntry_getDouble(g->bProp) + 0.5),
  			  &g->iWin, FALSE, 64,64, NULL, NULL, resize,
  			  iResize, destroy);
    i = clpEntry_iGetInt(g->clpX, &err);
    if (!err)  {
      butWin_setX(g->win, i);
--- 109,133 ----
    str_print(&clpStrs, "%s.y", clpName);
    g->clpY = clp_lookup(cg->clp, str_chars(&clpStrs));
    str_deinit(&clpStrs);
! //eff
! //winSize = WIN_W(cg->fontH, butEnv_stdBw(cg->env));
!   winSize = 635;
!   winSizey = 470;
! 
! //eff
! //  g->win = butWin_iCreate(g, cg->env, title,
! //			  (int)(winSize * clpEntry_getDouble(g->bPropW) + 0.5),
! //			  (int)(winSize * clpEntry_getDouble(g->bProp) + 0.5),
! //			  &g->iWin, FALSE, 64,64, NULL, NULL, resize,
! //			  iResize, destroy);
    g->win = butWin_iCreate(g, cg->env, title,
! 			  (int)(winSize),
! 			  (int)(winSizey),
  			  &g->iWin, FALSE, 64,64, NULL, NULL, resize,
  			  iResize, destroy);
+ 
+ 
+ 
    i = clpEntry_iGetInt(g->clpX, &err);
    if (!err)  {
      butWin_setX(g->win, i);
***************
*** 124,134 ****
    if (!err)  {
      butWin_setY(g->win, i);
    }
!   butWin_setMinH(g->win, winSize);
!   butWin_setMaxH(g->win, 0);
!   butWin_setMinW(g->win, winSize / 2);
!   butWin_setMaxW(g->win, 0);
!   butWin_setWHRatios(g->win, 1, 1000, 1, 1);
    butWin_activate(g->win);
  
    g->bg = butBoxFilled_create(g->win, 0, BUT_DRAWABLE);
--- 136,146 ----
    if (!err)  {
      butWin_setY(g->win, i);
    }
!   butWin_setMinH(g->win, winSizey);
!   butWin_setMaxH(g->win, winSizey);
!   butWin_setMinW(g->win, winSize);
!   butWin_setMaxW(g->win, winSize);
! //  butWin_setWHRatios(g->win, 1, 1000, 1, 1);
    butWin_activate(g->win);
  
    g->bg = butBoxFilled_create(g->win, 0, BUT_DRAWABLE);
***************
*** 268,273 ****
--- 280,287 ----
    GoStone  s;
    GobanPlayerInfo  *pi;
    int  fontH;
+ //eff
+   int obutX;
  
    assert(MAGIC(g));
    cg = g->cg;
***************
*** 277,283 ****
    winH = butWin_h(win);
    fontH = cg->fontH;
    butW = fontH * 10 + bw*4;
!   boardW = winW - butW - fontH*3 - bw*2;
    clpEntry_setDouble(g->bProp, (double)winH / (double)butWin_getMinH(win));
    clpEntry_setDouble(g->bPropW, (double)winW / (double)butWin_getMinW(win)/2.0);
  
--- 291,298 ----
    winH = butWin_h(win);
    fontH = cg->fontH;
    butW = fontH * 10 + bw*4;
!   //eff boardW = winW - butW - fontH*3 - bw*2;
!   boardW = winW - butW - fontH*3 - bw*2 - 90;
    clpEntry_setDouble(g->bProp, (double)winH / (double)butWin_getMinH(win));
    clpEntry_setDouble(g->bPropW, (double)winW / (double)butWin_getMinW(win)/2.0);
  
***************
*** 297,333 ****
  	     boardW-bw*2,(butH+butSpc-bw*2)/2);
    but_resize(g->infoText, bw*2 + fontH, bw*2 + fontH+(butH+butSpc-bw*2)/2,
  	     boardW-bw*2,(butH+butSpc-bw*2)/2);
!   but_resize(g->gameInfo, butX, fontH + bw, butW,butH);
!   but_resize(g->help, butX, fontH + bw + butSpc, butW,butH);
! 
!   but_resize(g->pass, butX,butY, butW,butH);
!   but_resize(g->resume, butX,butY+butSpc, butW,butH);
!   but_resize(g->done, butX,butY+2*butSpc, butW,butH);
  
    x = butX;
!   w = butW/4;
!   but_resize(g->rew, x,butY+3*butSpc, w,butH);
    x += w;
!   w = butW/2 - w;
!   but_resize(g->back, x,butY+3*butSpc, w,butH);
    x += w;
!   w = butW - (w + butW/2);
!   but_resize(g->fwd, x,butY+3*butSpc, w,butH);
    x += w;
!   but_resize(g->ff, x,butY+3*butSpc, butW/4,butH);
  
!   butY += 4*butSpc + fontH;
    x = butEnv_textWidth(win->env, msg_time, 0);
    w = butEnv_textWidth(win->env, msg_score, 0);
    if (x < w)
      x = w;
!   w = butW - x - 5*bw;
    x += butX + bw*3;
    for (s = goStone_white;  s <= goStone_black;  ++s)  {
      pi = &g->playerInfos[s];
!     but_resize(pi->box, butX,butY, butW,boxH);
!     for (i = 0;  i < 5;  ++i)
!       but_resize(pi->stones[i], butX+bw*2+bigStoneW*2*i + fontH/2,
  		 butY+bw*2 + fontH/2, fontH, fontH);
      butText_resize(pi->capsLabel, butX+bw*2,butY+butSpc+bw*2, butH);
      but_resize(pi->capsOut, x+bw*2,butY+bw*3+butSpc, w-bw*4,butH-bw*2);
--- 312,368 ----
  	     boardW-bw*2,(butH+butSpc-bw*2)/2);
    but_resize(g->infoText, bw*2 + fontH, bw*2 + fontH+(butH+butSpc-bw*2)/2,
  	     boardW-bw*2,(butH+butSpc-bw*2)/2);
! //eff
! //  but_resize(g->gameInfo, butX, fontH + bw, butW,butH);
! //  but_resize(g->help, butX, fontH + bw + butSpc, butW,butH);
! //  but_resize(g->pass, butX,butY, butW,butH);
! //  but_resize(g->resume, butX,butY+butSpc, butW,butH);
! //  but_resize(g->done, butX,butY+2*butSpc, butW,butH);
! 
! #define HACK .86
! 
!   but_resize(g->gameInfo, butX, fontH + bw, butW*HACK,butH);
!   but_resize(g->help, butX + butW*HACK + 2, fontH + bw, butW*HACK,butH);
!   but_resize(g->pass, butX,fontH + bw + butSpc, butW*HACK,butH);
!   but_resize(g->resume, butX + butW*HACK + 2,fontH + bw + butSpc, butW*HACK,butH);
!   but_resize(g->done, butX,fontH + bw + 2*butSpc, butW*HACK,butH);
! //eff
  
    x = butX;
!   w = butW*HACK*2/4;
! //eff  but_resize(g->rew, x,butY+3*butSpc, w,butH);
!   but_resize(g->rew, x,butY+2*butSpc, w,butH);
    x += w;
!   w = butW*HACK*2/2 - w;
! //eff  but_resize(g->back, x,butY+3*butSpc, w,butH);
!   but_resize(g->back, x,butY+2*butSpc, w,butH);
    x += w;
!   w = butW*HACK*2 - (w + butW*HACK*2/2);
! //eff  but_resize(g->fwd, x,butY+3*butSpc, w,butH);
!   but_resize(g->fwd, x,butY+2*butSpc, w,butH);
    x += w;
! //eff  but_resize(g->ff, x,butY+3*butSpc, butW*HACK*2/4,butH);
!   but_resize(g->ff, x,butY+2*butSpc, butW*HACK*2/4,butH);
! 
! #define HACK2 .86
  
! //eff
!   obutX = butX;
! //eff  butY += 4*butSpc + fontH;
!   butY += 3*butSpc + fontH;
    x = butEnv_textWidth(win->env, msg_time, 0);
    w = butEnv_textWidth(win->env, msg_score, 0);
    if (x < w)
      x = w;
!   w = butW*HACK2 - x - 5*bw;
    x += butX + bw*3;
    for (s = goStone_white;  s <= goStone_black;  ++s)  {
      pi = &g->playerInfos[s];
!     but_resize(pi->box, butX,butY, butW*HACK2,boxH);
! //eff for (i = 0;  i < 5;  ++i)
!     for (i = 0;  i < 4;  ++i)
! //eff      but_resize(pi->stones[i], butX+bw*2+bigStoneW*2*i + fontH/2 ,
!       but_resize(pi->stones[i], butX+bw*2+bigStoneW*2*i + fontH/2 + 3,
  		 butY+bw*2 + fontH/2, fontH, fontH);
      butText_resize(pi->capsLabel, butX+bw*2,butY+butSpc+bw*2, butH);
      but_resize(pi->capsOut, x+bw*2,butY+bw*3+butSpc, w-bw*4,butH-bw*2);
***************
*** 335,359 ****
      butText_resize(pi->timeLabel, butX+bw*2,butY+butSpc*2+bw*2, butH);
      but_resize(pi->timeOut, x+bw*2,butY+butSpc*2+bw*3, w-bw*4,butH-bw*2);
      but_resize(pi->timeBox, x,butY+butSpc*2+bw*2, w,butH);
!     butY += boxH+bw;
    }
  
!   butY += fontH - bw;
!   but_resize(g->save, butX,butY         , butW,butH);
!   but_resize(g->edit, butX,butY+butSpc  , butW,butH);
!   but_resize(g->quit, butX,butY+butSpc*2, butW,butH);
! 
!   butY += butSpc*3 + fontH - bw;
!   if (butY < boardYPic + boardW + fontH)
!     butY = boardYPic + boardW + fontH;
    if (g->kibIn == NULL)  {
!     abutTerm_resize(g->comments, fontH+bw,butY,
! 		    winW - bw*2 - fontH*2,
! 		    winH - butY - fontH - bw);
    } else  {
!     abutTerm_resize(g->comments, fontH+bw,butY,
! 		    winW - bw*2 - fontH*2,
! 		    winH - butY - fontH*3 - bw);
      but_resize(g->kibIn, fontH+bw, winH - fontH * 3 - bw,
  	       winW - bw*2 - fontH*2 - butW, fontH * 2);
      but_resize(g->kibType, butX, winH - fontH * 3 - bw,
--- 370,419 ----
      butText_resize(pi->timeLabel, butX+bw*2,butY+butSpc*2+bw*2, butH);
      but_resize(pi->timeOut, x+bw*2,butY+butSpc*2+bw*3, w-bw*4,butH-bw*2);
      but_resize(pi->timeBox, x,butY+butSpc*2+bw*2, w,butH);
! //eff  butY += boxH+bw;
! //eff
!     butX += butW*HACK2;
!     x += butW*HACK2;
    }
  
! //eff
! butX=obutX;
! 
! //eff
! //  butY += fontH - bw;
! //  but_resize(g->save, butX,butY         , butW,butH);
! //  but_resize(g->edit, butX,butY+butSpc  , butW,butH);
! //  but_resize(g->quit, butX,butY+butSpc*2, butW,butH);
! 
!   but_resize(g->save, butX,fontH + bw + 3*butSpc, butW*HACK,butH);
!   but_resize(g->edit, butX + butW*HACK + 2,fontH + bw + 2*butSpc, butW*HACK,butH);
!   but_resize(g->quit, butX + butW*HACK + 2,fontH + bw + 3*butSpc, butW*HACK,butH);
! //eff
! 
! //eff  butY += fontH - bw;
! //eff  butY += butSpc*3 + fontH - bw;
! 
! //eff  if (butY < boardYPic + boardW + fontH)
! //    butY = boardYPic + boardW + fontH;
! 
! butY = fontH + bw + 9.5*butSpc;
! 
    if (g->kibIn == NULL)  {
! //eff
! //    abutTerm_resize(g->comments, fontH+bw,butY,
! //		    winW - bw*2 - fontH*2,
! //		    winH - butY - fontH - bw);
!     abutTerm_resize(g->comments, butX ,butY,
! 		    butW*2*HACK,
! 		    (boardYPic + boardW) - butY);
    } else  {
! //eff
! //    abutTerm_resize(g->comments, fontH+bw,butY,
! //		    winW - bw*2 - fontH*2,
! //		    winH - butY - fontH*3 - bw);
!     abutTerm_resize(g->comments, butX ,butY,
! 		    butW*2*HACK,
! 		    (boardYPic + boardW) - butY);
      but_resize(g->kibIn, fontH+bw, winH - fontH * 3 - bw,
  	       winW - bw*2 - fontH*2 - butW, fontH * 2);
      but_resize(g->kibType, butX, winH - fontH * 3 - bw,
diff -c -r cgoban-1.9.14/src/msg.c cgoban-1.9.14.z/src/msg.c
*** cgoban-1.9.14/src/msg.c	Tue Dec 17 15:30:12 2002
--- cgoban-1.9.14.z/src/msg.c	Fri Apr 16 06:50:51 2004
***************
*** 119,126 ****
  const char  msg_done[] = "Done";
  const char  msg_resume[] = "Resume";
  const char  msg_dispute[] = "Dispute";
! const char  msg_saveGame[] = "Save Game";
! const char  msg_editGame[] = "Edit Game";
  const char  msg_score[] = "Score:";
  const char  msg_time[] = "Time: ";
  const char  msg_localChiRemDead[] = "Now you must remove all dead stones.  "
--- 119,130 ----
  const char  msg_done[] = "Done";
  const char  msg_resume[] = "Resume";
  const char  msg_dispute[] = "Dispute";
! //eff
! //const char  msg_saveGame[] = "Save Game";
! //const char  msg_editGame[] = "Edit Game";
! const char  msg_saveGame[] = "Save";
! const char  msg_editGame[] = "Edit";
! //eff
  const char  msg_score[] = "Score:";
  const char  msg_time[] = "Time: ";
  const char  msg_localChiRemDead[] = "Now you must remove all dead stones.  "
diff -c -r cgoban-1.9.14/wmslib/src/but/ctext.c cgoban-1.9.14.z/wmslib/src/but/ctext.c
*** cgoban-1.9.14/wmslib/src/but/ctext.c	Mon Jan 24 21:40:25 2000
--- cgoban-1.9.14.z/wmslib/src/but/ctext.c	Fri Apr 16 06:50:51 2004
***************
*** 168,175 ****
      th = but->h;
    }
    if (!(but->flags & BUT_PRESSABLE))  {
!     XSetFillStyle(env->dpy, env->gc, FillStippled);
!     XSetForeground(env->dpy, env->gc, env->colors[BUT_FG]);
    } else
      butEnv_setXFg(env, BUT_FG);
    if ((but->flags & BUT_PRESSED) && (but->flags & BUT_TWITCHED))  {
--- 168,175 ----
      th = but->h;
    }
    if (!(but->flags & BUT_PRESSABLE))  {
! //    XSetFillStyle(env->dpy, env->gc, FillStippled);
!     XSetForeground(env->dpy, env->gc, env->colors[BUT_SHAD]);
    } else
      butEnv_setXFg(env, BUT_FG);
    if ((but->flags & BUT_PRESSED) && (but->flags & BUT_TWITCHED))  {
diff -c -r cgoban-1.9.14/wmslib/src/but/menu.c cgoban-1.9.14.z/wmslib/src/but/menu.c
*** cgoban-1.9.14/wmslib/src/but/menu.c	Mon Jan 24 21:40:25 2000
--- cgoban-1.9.14.z/wmslib/src/but/menu.c	Fri Apr 16 06:50:51 2004
***************
*** 607,614 ****
        if ((m->options[i].y <= y+h) &&
  	  (m->options[i].y+m->options[i].h > y))  {
  	if (m->options[i].flags & BUTMENU_DISABLED)  {
! 	  XSetFillStyle(env->dpy, env->gc, FillStippled);
! 	  XSetForeground(env->dpy, env->gc, env->colors[BUT_FG]);
  	} else
  	  butEnv_setXFg(env, BUT_FG);
  	butWin_write(win, but->x + m->xoff, m->options[i].y + butbw/2,
--- 607,614 ----
        if ((m->options[i].y <= y+h) &&
  	  (m->options[i].y+m->options[i].h > y))  {
  	if (m->options[i].flags & BUTMENU_DISABLED)  {
! //	  XSetFillStyle(env->dpy, env->gc, FillStippled);
! 	  XSetForeground(env->dpy, env->gc, env->colors[BUT_SHAD]);
  	} else
  	  butEnv_setXFg(env, BUT_FG);
  	butWin_write(win, but->x + m->xoff, m->options[i].y + butbw/2,
diff -c -r cgoban-1.9.14/wmslib/src/but/text.c cgoban-1.9.14.z/wmslib/src/but/text.c
*** cgoban-1.9.14/wmslib/src/but/text.c	Mon Jan 24 21:40:26 2000
--- cgoban-1.9.14.z/wmslib/src/but/text.c	Fri Apr 16 06:50:51 2004
***************
*** 129,136 ****
    const char  *text = str_chars(&t->text);
    
    if (t->stipple)  {
!     XSetFillStyle(env->dpy, env->gc, FillStippled);
!     XSetForeground(env->dpy, env->gc, env->colors[t->color]);
    } else  {
      butEnv_setXFg(env, t->color);
    }
--- 129,137 ----
    const char  *text = str_chars(&t->text);
    
    if (t->stipple)  {
! //    XSetFillStyle(env->dpy, env->gc, FillStippled);
! //    XSetForeground(env->dpy, env->gc, env->colors[t->color]);
!     XSetForeground(env->dpy, env->gc, env->colors[BUT_SHAD]);
    } else  {
      butEnv_setXFg(env, t->color);
    }
diff -c -r cgoban-1.9.14/wmslib/src/but/textin.c cgoban-1.9.14.z/wmslib/src/but/textin.c
*** cgoban-1.9.14/wmslib/src/but/textin.c	Mon Jan 24 21:40:26 2000
--- cgoban-1.9.14.z/wmslib/src/but/textin.c	Fri Apr 16 06:50:51 2004
***************
*** 230,237 ****
    if (but->flags & BUT_PRESSABLE)
      butEnv_setXFg2(env, BUT_FG);
    else  {
!     XSetFillStyle(env->dpy, env->gc2, FillStippled);
!     XSetForeground(env->dpy, env->gc2, env->colors[BUT_FG]);
    }
    if (ti->loc == ti->cutend)  {
      XDrawString(env->dpy, ti->pm, env->gc2,
--- 230,237 ----
    if (but->flags & BUT_PRESSABLE)
      butEnv_setXFg2(env, BUT_FG);
    else  {
! //    XSetFillStyle(env->dpy, env->gc2, FillStippled);
!     XSetForeground(env->dpy, env->gc2, env->colors[BUT_SHAD]);
    }
    if (ti->loc == ti->cutend)  {
      XDrawString(env->dpy, ti->pm, env->gc2,
